Geben Sie bei einer eingegebenen Ganzzahl n >= 10
den Durchschnitt aller deduplizierten Umdrehungen der Ganzzahl aus.
Für die Eingabe 123
sind die Umdrehungen beispielsweise 123
(keine Umdrehung), 231
(eine Umdrehung) und 312
(zwei Umdrehungen). Der Durchschnitt von diesen ist (123 + 231 + 312) / 3
oder 222
.
Als weiteres Beispiel nehmen Sie 4928
. Die Drehungen sind 4928
, 9284
, 2849
, und 8492
. Der Durchschnitt dieser vier Zahlen ist gleich 6388.25
.
Für ein anderes Beispiel für die Eingabe 445445
sind die deduplizierter Drehungen 445445
, 454454
und 544544
so ist der Ausgang 481481
.
Für die Eingabe 777
gibt es nur eine deduplizierte Drehung, die Ausgabe ist also 777
.
Regeln
- Gegebenenfalls können Sie davon ausgehen, dass die Eingabe / Ausgabe in den systemeigenen Integer-Typ Ihrer Sprache passt.
- Die Eingabe und Ausgabe kann durch jede bequeme Methode erfolgen .
- Es ist entweder ein vollständiges Programm oder eine Funktion zulässig. Bei einer Funktion können Sie die Ausgabe zurückgeben, anstatt sie zu drucken.
- Standardlücken sind verboten.
- Dies ist Codegolf, daher gelten alle üblichen Golfregeln, und der kürzeste Code (in Byte) gewinnt.
code-golf
math
number-theory
AdmBorkBork
quelle
quelle
Antworten:
Python 3 ,
3836 BytesNimmt die Ziffern als separate Argumente. Vielen Dank an @Rod, der Python 3 vorgeschlagen und 2 Bytes gespart hat.
Probieren Sie es online!
quelle
APL (Dyalog) , 9 Bytes
Eine monadische Funktion, die einen Vektor von Ziffern als Argument verwendet.
Probieren Sie es online!
Ich nehme den Durchschnitt der Ziffern
+/÷≢
, wiederhole ihn dann um die Länge der Eingabe≢⍴
und konvertiere schließlich von der Basis 10.Konzeptionell nehme ich die Summe der Umdrehungen (ohne zu tragen):
Dies wird nur
4+2+9+8
viermal wiederholt. Dann konvertieren von der Basis10
(die das Tragen für mich erledigt) und durch die Länge teilen. Obwohl ich früher durch die Länge dividiere, weil es gleichwertig ist und Bytes spart.quelle
Java 10,
163137767271 Bytes-36 Bytes dank @Nevay .
-61 Bytes dank @ OlivierGrégoire durch Erstellen eines Ports für @Dennis 'Python 3-Antwort .
-1 Bytes, indem die Eingabe als Ziffernliste anstelle von String verwendet wird.
Erläuterung:
Probieren Sie es online aus.
quelle
n->{var s=new java.util.HashSet();var r=0d;for(int l=n.length(),x;l-->0;)if(s.add(x=new Integer(n=n.substring(1)+n.charAt(0))))r+=x;return r/s.size();}
, Stream-Ansatz mit 137 Bytes:n->java.util.stream.IntStream.range(0,n.length()).map(i->new Integer(n.substring(i)+n.substring(0,i))).distinct().average().getAsDouble()
orElse(0)
anstelle vongetAsDouble()
.(int)
Bei Bedarf mit 5 Mote-Bytes runden .Math.pow
bereits gesorgt. Das erspart Ihnen 3 Bytes.(int)
und*.1
es zum Beispiel ausgegeben wird6388.888...
anstatt6388.25
für die Eingabe4928
. Und wenn ich stattdessen das ganze Ding oder nur das.pow
zu einemint
gieß, wird es ausgegeben6388
.Schale , 5 Bytes
Probieren Sie es online!
Erläuterung
Schale , 7 Bytes
Probieren Sie es online!
Erläuterung
quelle
5
Byte Lösungṙ
oderŀ
, und das erste Zeichen (links) ist nichtA
R ,
847364 BytesProbieren Sie es online!
Eingabe als Ziffernliste.
Vielen Dank an MickyT für das Abschneiden von 11 Bytes! 8 Bytes durch Dennis 'Beweis, dass eine Deduplizierung nicht erforderlich ist.
quelle
array(D,K+1:0)
ist kürzer alsmatrix(D,K+1,K)
ein Byte.05AB1E , 9 Bytes
Probieren Sie es online!
quelle
v
mit neiny
, interessant.gFÀD})¨Osg/
war, wo ich nachdachte..æ = pop a compute permutations by function, usage: .æ<FUNC>}
Befehl benutzt? Ich auch nicht, aber es scheint passend zu sein.Stax , 6 Bytes
Führen Sie es aus und debuggen Sie es
Dieses Programm verwendet eine durch Anführungszeichen getrennte Zeichenfolge als Eingabe und drückt den Durchschnitt als reduzierten Bruch aus. zB
777/1
Es ist nicht notwendig, die Rotationen zu duplizieren. Es ändert nie das Ergebnis.Ausgepackt, ungolfed und kommentiert sieht es so aus.
Führen Sie dieses aus
quelle
Perl 6 , 15 Bytes
Probieren Sie es online!
Der Durchschnitt ist der auf jede Dezimalstelle angewendete Zahlenmittelwert, sodass die Zahlenmittelwerte mal 111 ...
1 x $_
eine Zeichenfolge von 1s erzeugen, die durch die Multiplikation zu Zeichenfolgen gezwungen wird.Nimmt eine Ziffernliste als Eingabe. Eine Sequenz würde einen .cache vor der Summe erfordern, und eine Zahlen- oder Zeichenketteneingabe würde ein .comb erfordern.
quelle
Wolfram Language (Mathematica) , 22 Byte
Probieren Sie es online!
quelle
JavaScript (Node.js) , 43 Byte
Probieren Sie es online!
quelle
Gelee ,
65 BytesProbieren Sie es online!
Wie es funktioniert
quelle
Japt , 8 Bytes
Nimmt die Eingabe als Array von Zeichenfolgen mit einer Ziffer an.
Versuch es
Erläuterung
quelle
APL (Dyalog Unicode) ,
2114 Byte SBCSProbieren Sie es online!
Tacit-Präfix-Funktion. Übernimmt die Eingabe als Zeichenfolge.
Vielen Dank an Adám für eine aufschlussreiche 7-Byte-Speicherung .
Wie?
quelle
Python 2,
83-77BytesEDIT: -6 Bytes dank @ovs
quelle
Holzkohle , 11 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:
quelle
J , 10 Bytes
Dies ist eine Portierung der großartigen APL-Lösung von H.PWiz für J.
Nimmt eine Liste von Ziffern als Argument.
Erläuterung:
+/%#
der Durchschnitt der Ziffern (Teilen Sie%
die Summe der Ziffern+/
durch ihre Anzahl#
)#$
Erstellt eine Liste mit Kopien des Durchschnittswerts entsprechend der Anzahl der Stellen10#.
Formularbasis konvertieren 10Probieren Sie es online!
quelle
Perl 5
-lpF
,2422 BytesProbieren Sie es online!
Das Auflisten von Ziffern ist nur 1 Byte kürzer und fühlt sich an wie Schummeln:
Probieren Sie es online!
quelle
usrt
? : P/usrt
Verzeichnis? Sowieso repariert. Vielen DankRuby , 60 Bytes
Probieren Sie es online!
quelle
Pari / GP , 34 Bytes
Übernimmt die Eingabe als Ziffernliste.
Probieren Sie es online!
quelle
Ruby , 33 Bytes
Probieren Sie es online!
Ein Port von Dennis 'Python 3-Antwort
Hier ist mein lahmer Versuch (74 Bytes)
Probieren Sie es online!
quelle
C ++
218208 Bytes-10 Bytes dank Zacharý
Und zum Testen:
quelle
#include
und<
, und Sie können die{}
um beide++c;
und entfernens+=v;
. Möglicherweise können Sieint s=0
das Element mit Ihren anderen Variablen an den Anfang verschieben.n=0
die zweite for-Schleife benötigen , da sie bis dahin hätte erreicht sein müssen0
.m/=10;m+=std::pow(10.f,c-1)*t;
=>m=m/10+std::pow(10.f,c-1)*t
. Und würde nichtint
anstelle vonauto
Arbeit verwenden?int s=0;
mit Ihren anderen Variablen bewegen , und benötigen Sie die geschweiften Klammern um dies+=v;
?n>0
=>n
könnte funktionieren.Pyth, 12 Bytes
Wahrscheinlich verbesserungsfähig.
Probieren Sie es hier aus!
quelle
o
. Wenn Sie dies tun und E / A als Ziffernliste ausführen, können Sie es auf 8 Byte reduzieren .Q
.J, 23 Bytes
Übernimmt die Eingabe als Zeichenfolge
Erläuterung
quelle
Matlab, 65 Bytes
Ich werde daran arbeiten, ziemlich sicher, dass es besser geht.
quelle
Clojure, 139 Bytes
Recht suboptimale Sprachfunktionen zum Konvertieren von Zeichenfolgen in Ganzzahlen.
quelle
Gleichstrom, 37 Bytes
Dies ist ein vollständiges Programm, das die Eingabe liest und die Ausgabe druckt:
Es trennt die Zahl in ihre Ziffern und multipliziert den Mittelwert der Ziffern mit der entsprechenden Längenangabe (die im weiteren Verlauf aufgebaut wird
d
).quelle