BCD Unterschied
Konvertieren Sie eine Ganzzahl n in BCD ( binär codierte Dezimalzahl ), indem Sie jede Dezimalstelle durch ihre 4-stellige Binärdarstellung ersetzen
234 -> 0 0 1 0 0 0 1 1 0 1 0 0
Drehen Sie dann die Liste der Binärziffern, um die größten und kleinsten Zahlen zu finden, die durch diese Liste ohne andere Umordnungen dargestellt werden können.
max: 1 1 0 1 0 0 0 0 1 0 0 0 (the entire list rotated left 6 times)
min: 0 0 0 0 1 0 0 0 1 1 0 1 (the entire list rotated right 2 times)
Konvertieren Sie diese Zahlen zurück in eine Dezimalzahl. Behandeln Sie dabei die Liste der Bits als reguläre Binärzahl und subtrahieren Sie die kleinste von der größten:
1 1 0 1 0 0 0 0 1 0 0 0 -> 3336
0 0 0 0 1 0 0 0 1 1 0 1 -> 141
3336 - 141 -> 3195
Die Ausgabe ist die Differenz der größten und kleinsten gefundenen Zahlen.
Testfälle:
234 -> 3195
1234 -> 52155
12 -> 135
975831 -> 14996295
4390742 -> 235954919
9752348061 -> 1002931578825
quelle
Max@#-Min@#&
Speichert ein Byte. Recht?Max@#-Min@#&[#~FromDigits~2&/@Partition[s=Join@@(i=IntegerDigits)[i@#,2,4],Tr[1^s],1,1]]&
89 Bytes UND effizient gemacht. Verdammt noch mal!1-9,10-99,100-999...
Hier sind einige verschiedene Zooms: imgur.com/RXLMkcoJelly , 13 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
Python 3 ,
115108 BytesDanke an Jonathan Frech für -7 Bytes
Probieren Sie es online!
quelle
PowerShell , 153 Byte
Probieren Sie es online!
Blöde lange .NET-Aufrufe zum Konvertieren in / aus Binärdateien haben hier wirklich die Länge aufgebläht. ;-)
Wir nehmen Eingaben als
$args
, wickeln sie in eine Zeichenfolge ein undchar
wandeln sie dann in ein -array um. Wir durchlaufen jede Ziffer, indem wirconvert
die ZiffertoString
in der Basis2
(dh die Ziffer in eine Binärzahl umwandeln) und dann.padLeft
eine vierstellige Binärzahl daraus machen. Das resultierende Array von Zeichenfolgen wird dann-join
in eine einzelne Zeichenfolge umgewandelt und alschar
-array neu umgewandelt, bevor es in gespeichert wird$b
.Als nächstes durchlaufen wir eine Schleife
$b
, was nur sicherstellt, dass wir genug Zeit haben, um jede Umdrehung zu berücksichtigen. Bei jeder Iteration schälen wir das erste Zeichen in$x
und die verbleibenden Zeichen in$y
Mehrfachzuweisung ab. Dann fügen wir sie wieder zusammen$b=$y+$x
, um das erste Element ans Ende zu verschieben, dh das Array effektiv um eins zu drehen. Das ist-join
eine Zeichenfolge, die als Eingabe für denconvert
Aufruf verwendet wird, um die Zeichenfolge von einer binären Basis2
in eine umzuwandelnInt64
. Wir dannsort
alle diese resultierenden Zahlen und speichern sie in$c
. Schließlich nehmen wir das Größte[-1]
und subtrahieren das Kleinste[0]
. Das bleibt in der Pipeline und die Ausgabe ist implizit.quelle
Ohm v2 , 15 Bytes
Probieren Sie es online!
Erläuterung:
quelle
JavaScript (ES6),
11810099 ByteBearbeiten: 11 Bytes dank @RickHitchcock gespeichert. 1 Byte dank @ETHproductions eingespart. Erläuterung: Das
0x1
Präfix bewirkt, dass die Eingabe als Hexadezimalzahl interpretiert wird, deren Binärzahl der BCD der ursprünglichen Nummer mit dem Präfix 1 entspricht (ich denke, dies ist besser als jede andere Art des Auffüllens auf ein Vielfaches von 4 Stellen). . Ohne das Präfix, das von 1 auf 0 geändert wird, wird die resultierende Zeichenfolge an jeder möglichen Position gedreht und von binär zurück in dezimal konvertiert. Schließlich werden das Maximum und das Minimum abgezogen.quelle
.join``
in welchem Fall Sie dreifache Backticks usw. benötigenn=>(g=m=>Math[m](...[...s=(+`0x1${n}`).toString(2).slice(1)].map(_=>`0b${s=s.slice(1)+s[0]}`)))`max`-g`min`
slice
habe!m=>Math[m]
Trick ist großartig. Vielleicht wechseln(+`0x1${n}`)
zu('0x1'+n-0)
oder ähnlich?Python 2 ,
115113 BytesProbieren Sie es online!
quelle
Pyth , 29 Bytes
Probieren Sie es hier aus! oder Schauen Sie sich die Testsuite an.
quelle
Schale , 18 Bytes
Probieren Sie es online!
Es sollte einen kürzeren Weg geben, eine Ziffer in ihre 4-Bit-Binärdarstellung umzuwandeln ...
Erläuterung
quelle
APL (Dyalog) , 31 Bytes
Voller Programmteil. Fordert zur Eingabe einer Nummer von STDIN auf. Gibt das Ergebnis an STDOUT aus.
Probieren Sie es online!
⍞
Eingabeaufforderung für Textzeile von STDIN⍎¨
jedes (Zeichen) ausführen (auswerten)(
…)⊤
Verschlüsseln (Anti-Base) nach folgendem Zahlensystem:4/2
vier binäre Bits⍉
transponieren,
Ravel (Abflachen)b←
speichern inb
(für b inary)⊂
beifügen (damit wir diese gesamte Liste für jede Umdrehung verwenden)(
…)⌽¨
Rotieren (links) um jeweils folgende Beträge:≢b
Länge vonb
⍳
Ich verstehe das2⊥¨
Dekodiere jedes von Base-2.(
…)
Wenden darauf die folgende implizite Funktion an⌈/
die max (-reduktion)-
Minus⌊/
die min (-reduktion)quelle
APL (Dyalog) ,
3734 BytesProbieren Sie es online!
quelle
Jelly , 21 Bytes
Probieren Sie es online!
quelle
Ruby ,
9691 BytesProbieren Sie es online!
quelle
Mathematica,
11099 BytesProbieren Sie es online!
quelle
Python 3, 141 Bytes
Probieren Sie es online aus
quelle
Retina ,
9689 BytesProbieren Sie es online! Da der Link etwas langsam ist, enthält er nur einen kleinen Testfall. Bearbeiten: 7 Bytes dank @MartinEnder gespeichert. Erläuterung:
@
Stellen Sie jeder Ziffer drei s voran. (Diese stellen die0
s des BCD dar, sind aber Golfspieler.)Ändern Sie gegebenenfalls das
@
s in_
s (das1
s des BCD).Korrigieren Sie die letzte Ziffer des BCD.
Generieren Sie alle Rotationen.
Sortieren Sie sie in aufsteigender Reihenfolge.
Konvertieren Sie sie zu unary.
Subtrahieren Sie die erste von der letzten Zahl, ignorieren Sie Zwischenzahlen und konvertieren Sie sie in Dezimalzahlen.
quelle
%
die Binär-zu-Unär-Konvertierung zu verwenden, und Sie können einige Bytes mehr sparen, indem Sie andere Zeichen als verwenden0
1
Binär zu UnärHaskell , 130 Bytes
Probieren Sie es online!
Erklärung / Ungolfed
Da wir
foldl1((+).(2*))
zur Konvertierung von Binär in Dezimal verwenden werden, können wir auch nichtmaximum
undminimum
, sondernfoldl1 max
(oder dasselbe mitmin
) und eine Kurzform verwendenr = foldr1
.Definieren wir nun einen Operator
f#x
, derx
in BCD konvertiert , alle Rotationen generiert, diese mit reduziertf
und in Dezimalzahlen konvertiert:Jetzt geht es nur noch darum, diesen Operator einmal mit
max
und einmal mitmin
ihren Ergebnissen zu verwenden und sie zu subtrahieren:quelle
PHP,
156153 BytesProbieren Sie es online!
quelle
Japt
-x
, 20 BytesProbieren Sie es online!
Eingabe als Array von Ziffern.
Erläuterung:
quelle
-x
Flag verwenden, um 2 Bytes zu speichern.Pyth, 24/26 Bytes
Übernimmt die Eingabe in Anführungszeichen. 26 Bytes, wenn die Eingabe als Ganzzahl erfolgen soll;
dz
in diesem Fall anhängen .Testfälle (Eingabe als Strings, 24 Bytes)
Testfälle (Eingabe als Zahlen, 26 Bytes)
quelle
J, 43 Bytes
Probieren Sie es online!
Manchmal macht stillschweigender Stil die Sache schwierig. Aber es gibt wahrscheinlich eine Möglichkeit, es stillschweigend zu machen, die viel prägnanter ist als diese. Ich denke, ich erinnere mich an eine bessere Möglichkeit, eine Zahl in andere Ziffern als aufzuteilen
"."0@":
aber ich kann mich anscheinend nicht daran erinnern ...Erläuterung
Das Voranstellen und Entfernen von 8 soll sicherstellen, dass die richtige Anzahl von Nullen vorhanden ist (J wird seine Arrays so umformen, dass sie die Größe ihres Elements mit maximaler Länge haben, und 8 ist 4-stellig in binärer Form, sodass es verwendet wird).
quelle
APL (NARS), 34 Zeichen, 68 Byte
ein kleiner Test:
quelle
Perl 5 ,
979189 + 2 (-F
) =999391 BytesProbieren Sie es online!
quelle