Haftungsausschluss: Die Levenshtein-Codierung hat nichts mit der Levenshtein-Editierdistanzmetrik zu tun .
<Fügen Sie hier eine lange Geschichte darüber ein, warum Levenshtein-Codes berechnet werden müssen.>
Der Code
Die Levenshtein-Codierung ist ein System zum Zuweisen von Binärcodes zu nichtnegativen Ganzzahlen, das eine seltsame Eigenschaft in der Wahrscheinlichkeit beibehält, die für diese Herausforderung nicht relevant ist. Wir werden diesen Code als L ( n ) bezeichnen. Wikipedia beschreibt dies als einen fünfstufigen Prozess:
- Initialisieren Sie die Schrittzählvariable C auf 1.
- Schreiben Sie die binäre Darstellung der Zahl, ohne dass dies
1
zum Anfang des Codes führt. - Sei M die Anzahl der in Schritt 2 geschriebenen Bits.
- Wenn M nicht 0 ist, erhöhen Sie C und wiederholen Sie ab Schritt 2 mit M als neuer Zahl.
- Schreiben Sie C-
1
Bits und a0
an den Anfang des Codes.
Der Code kann jedoch auch rekursiv beschrieben werden:
- Wenn die Zahl 0 ist, lautet der Code
0
. - Schreiben Sie die binäre Darstellung der Zahl, ohne dass dies
1
zum Anfang des Codes führt. - Sei M die Anzahl der in Schritt 2 geschriebenen Bits.
- Schreiben Sie L ( M ) an den Anfang des Codes.
- Schreiben Sie ein
1
bisschen an den Anfang des Codes.
Für diejenigen, die Beispiele bevorzugen, ist hier der rekursive Prozess für L (87654321) mit der Bezeichnung Verkettung:
Die Herausforderung
Schreiben Sie ein Programm oder eine Funktion, die bei gegebener Zahl n den Bitstring L ( n ) in einem beliebigen vernünftigen Format ausgibt (dies schließt die Rückgabe einer Zahl mit diesen Bits ein). Standardlücken sind wie immer nicht erlaubt.
Beispiele
Eingang: 5
Ausgabe: 1110001
Eingang: 30
Ausgabe: 111100001110
Eingang: 87654321
Ausgabe: 111110000101001001110010111111110110001
Eingang: 0
Ausgabe: 0
±
anstelle einer Funktion definierenf
.JavaScript (ES6),
5452 ByteBearbeiten: 2 Bytes dank @Arnauld gespeichert.
quelle
replace(1,...
anstelle vonreplace(/1/,...
=> 52 Bytes verwendenPyth, 12 Bytes
Demonstration
(Am
y
Ende wird die resultierende Funktion am Eingang ausgeführt.)Erläuterung:
quelle
SQF, 110
Rekursive Funktion:
Rufen Sie an als:
[NUMBER] call f
Beachten Sie, dass dies bei 87654321 oder anderen großen Zahlen aufgrund eines Fehlers in der ArmA-Engine nicht funktioniert. Obwohl es wahrscheinlich bald behoben sein wird und gemäß Spezifikation funktionieren sollte.
( Dieses Ticket hier )
quelle
PHP,
116114 BytesGeben Sie die Nummer als erstes Argument an.
Aktualisieren:
strlen($b)-1
durch~~log10($b)
(endlich verstanden, warum alle anderen Logarithmus verwendeten) und ein anderes durch anderes Verketten gespeichert.quelle
Ruby, 38 Bytes
Sehr ähnlich zu Neils JavaScript-Antwort .
Siehe es auf repl.it: https://repl.it/CnhQ
quelle
Java 8 (Vollprogramm),
257249 BytesLesbare Version mit Erklärung (meistens nur Rekursion):
EDIT 1 : 8 Bytes gespeichert : Das erste Zeichen der Binärzeichenfolge ist immer 1; Daher ist
s.charAt(0)
eine bessere Option einfach , anstatt sie zu verwenden"1"
.quelle