Aufgabe
Gehen Sie bei einer Eingabezeichenfolge mit einem oder mehreren ASCII-Zeichen, deren Codepunkte zwischen 0 und 128 liegen (exklusiv), wie folgt vor:
- Konvertieren Sie jedes Zeichen in seinen 7-Bit-ASCII-Code (wenn der ASCII-Code weniger als 7 Bit beträgt, setzen Sie führende Nullbits)
- Verketten Sie alle Bits (dies führt zu
7*n
Bits, bei denenn
die Anzahl der Zeichen angegeben ist). - Drucken Sie für jedes Bit in diesem Bitstrom 1, wenn es sich vom vorherigen Bit unterscheidet, und drucken Sie andernfalls 0. Das erste Ausgangsbit ist immer 1.
Beispiel
Eingang:
Hi
Ausgabe:
11011001011101
Erläuterung:
Die Zeichenfolge "Hi" hat die ASCII-Codes
72 105
welche in Bits sind:
1001000 1101001
Und die Übergangsbitindikatoren:
11011001011101
Das ist Code Golf. Die niedrigste Byteanzahl gewinnt.
Testfälle
Testfall 1:
Hello World!
110110010101110011010101101010110001110000111110000110000001011101101010101100110001
Testfall 2:
%% COMMENT %%
1110111111011111100001100010010100001010110101011010011101010011111110011000001101111110111
Testfall 3 (Dank an Luis Mendo):
##
11100101110010
Herzlichen Glückwunsch an Luis Mendo für die kürzeste Lösung mit 9 Bytes in MATL!
##
(führendes0
Bit; einige Antworten scheitern derzeit daran)Antworten:
MATL , 9 Bytes
Probieren Sie es online aus!
Erläuterung
quelle
Python 2 , 58 Bytes
Probieren Sie es online aus!
quelle
Japt
-P
, 11 BytesNutzt die Tatsache aus, dass Leerzeichen
0
in JavaScript erzwungen werden können, wenn versucht wird, eine mathematische oder in diesem Fall bitweise Operation daran durchzuführen.Probieren Sie es aus oder führen Sie alle Testfälle aus
quelle
0100000
. Auch das% Zeichen (37) wäre0100101
CJam , 21 Bytes
Probieren Sie es online aus!
Erläuterung
Anzeigen des Stapels mit einer Beispieleingabe von
5
:Um festzustellen, ob sich ein Bit vom vorherigen Bit unterscheidet, führen wir einen Vektor (elementweise) xor zwischen dem Bitarray und dem Bitarray ohne das erste Element durch. Wir entfernen auch das letzte Bit des Ergebnisses, da es immer das letzte Bit des längeren Arrays unverändert ist.
quelle
APL (Dyalog Unicode) , 16 Byte SBCS
Volles Programm. Fordert zur Eingabe eines Strings von stdin auf.
Probieren Sie es online aus!
⍞
Eingabeaufforderung ("ein Zitat in einer Konsole")11⎕DR¨
ändern jedes Zeichen auf Bit-Boolesche D ata R ePresentation1↓¨
Lass das erste Bit von jedem fallen∊
ϵ nlist (abflachen)2≠/
paarweiser Unterschied1,
Stellen Sie eine Eins voranquelle
Gelee , 12 Bytes
Probieren Sie es online aus!
quelle
Holzkohle , 25 Bytes
Probieren Sie es online aus! Der Link führt zur ausführlichen Version des Codes. Erläuterung:
Konvertieren Sie alle Zeichen in Binärzeichen und füllen Sie sie auf eine Länge von 7 auf. Drucken Sie sie dann aus, lassen Sie den Cursor jedoch über der letzten Ziffer.
Wiederholen, bis sich der Cursor über der ersten Ziffer befindet.
Berechnen Sie, ob die Ziffern unterschiedlich sind, und überschreiben Sie jede Ziffer mit der Differenz.
Überschreiben Sie die erste Ziffer mit a
1
.quelle
PowerShell ,
735649 ByteProbieren Sie es online aus!
-17 Bytes dank mazzy :)
quelle
Ruby
-p
,6857 Bytes-11 Bytes durch schamlosen Diebstahl der von xnors Python-Lösung verwendeten Methode .
Probieren Sie es online aus!
Ursprüngliche Lösung:
Probieren Sie es online aus!
quelle
Oktave ,
3630 BytesFix dank Luis Mendo
-2 Bytes dank Sanchises
Probieren Sie es online aus!
quelle
de2bi
.Python 2 , 104 Bytes
Probieren Sie es online aus!
Ein kurzer Versuch.
quelle
a*128+ord(c)
! Aber ist nicht diereduce
undlambda
Art von teuer?Dart ,
213168 BytesVorheriger Einzeiler
Probieren Sie es online aus!
Diese Ausführlichkeit und der Mangel an einfachen Einbauten bringt diesen wirklich um. Trotzdem gelang es mir, einen Einzeiler zu ziehen.
quelle
Stax ,
1312 BytesFühren Sie es aus und debuggen Sie es
Wenn garantiert ist, dass für alle Eingabezeichen das 7. Bit gesetzt ist, wie einige Antworten annehmen, kann dies in 10 Bytes erfolgen
quelle
Kotlin , 182 Bytes
Probieren Sie es online aus!
Hoffentlich kann ich das bald verbessern. Ich habe das Gefühl, dass es einige Verbesserungsmöglichkeiten geben muss, aber ich kann momentan nicht denken
quelle
Perl 5
-p
, 60 BytesProbieren Sie es online aus!
quelle
C (gcc (MinGW)), 90 Bytes
Erfordert die Bereitstellung eines Compilers
itoa()
.quelle
Ruby
-p
, 50 BytesProbieren Sie es online aus!
Erläuterung
Erste Zeile, genau wie die Antwort von Value Ink :
Zweite Reihe:
In Ruby können Sie Interpolation in Regexp - Literale verwenden, zum Beispiel
/Hello #{name}/
, und für Variablen , die mit beginnen$
oder@
Sie können die geschweiften Klammern weglassen, also wenn zB$&
ist"0"
dann die grawlixy/#$&$/
wird/0$/
.quelle
K (ngn / k) ,
913 BytesLösung:
Probieren Sie es online aus!
Erläuterung:
Anmerkungen:
quelle
#
Beispiel für die Eingabe fehlzuschlagen (die Ausgabe hat nur 6 Bit)Emojicode , 263 Bytes
Probieren Sie es hier online aus.
Ungolfed:
quelle
JavaScript (V8) ,
150 bis95 Byte-55 danke an @dana
Probieren Sie es online aus!
quelle
Python3.8 , 72 Bytes
Lösung:
Erläuterung:
Seit Python 3.8 Zuweisungsausdrücke (anstelle der Standardzuweisungsanweisungen) eingeführt hat, wollte ich sie in einem Listenverständnis verwenden, das sich an das letzte Element erinnern muss. Dies ist nicht der beste Weg, zeigt jedoch eine interessante Methode zur Verwendung des Zuweisungsausdrucks.
Der Code erstellt eine Lambda-Funktion, die das erforderliche Argument verwendet, das die zu konvertierende Zeichenfolge ist. Beim Aufruf läuft die Funktion wie folgt ab. Jedes Zeichen in a wird in seinen Zeichencode konvertiert, dem 128 für den Umgang mit 6-Bit-Zeichen hinzugefügt wird (die binäre Darstellung beträgt immer 8 Bit, und wir können das erste Bit abhacken). Diese Zahl wird in eine Binärzahl umgewandelt und der Header (0x) und die anfängliche 1 aus dem Hinzufügen von 128 werden abgeschnitten. Diese neuen Zeichenfolgen werden dann zu einer größeren Zeichenfolge zusammengefügt.
Für jedes Zeichen in dieser neuen Zeichenfolge (die die verkettete 7-Bit-Darstellung des Textes enthält) wird geprüft, ob das Zeichen mit dem vorherigen Zeichen identisch ist. Was passiert mit dem ersten Charakter? Das erste Ergebniszeichen sollte immer "1" sein, daher müssen wir nur sicherstellen, dass alles, was in der letzten Zeichenvariablen enthalten ist, weder "1" noch "0" ist. Wir tun dies, indem wir den ursprünglichen Parameter jetzt wiederverwenden, da wir ihn nicht mehr verwenden. Dies kann ein Problem sein, wenn die ursprüngliche Zeichenfolge eine einzelne "0" war (eine einzelne "1" funktioniert einfach), aber wir werden das ignorieren.
Während des Vergleichs wurde das vorherige Zeichen zuerst ausgewertet. Wenn wir also den Zuweisungsausdruck verwenden, um die vorherige Zeichenvariable auf das aktuelle Zeichen zu setzen, hat dies keinen Einfluss auf die Auswertung der Vergleichsausdrücke.
Der Vergleich ergibt entweder True oder False, die in Python auch als 1 oder 0 verwendet werden können. Sie werden also verwendet, um entweder eine "1" oder "0" in einer Zeichenfolge nachzuschlagen
quelle
bin(ord(i)+128)[3:]
->f"{ord(i):07b}"
Tcl ,
215167140 BytesProbieren Sie es online aus!
Verwendet Shift-by-One und Exclusive-Or, um Übergänge zu erkennen. Überträgt lsb des aktuellen Zeichens zu msb des nächsten Zeichens. Kombiniert die Ausgabe für jedes Zeichen, indem die von lmap zurückgegebene Liste verknüpft wird.
Verwendet Lambdas mit Standardargumenten, um Bytes bei der Initialisierung und wiederholten Befehlen zu speichern.
Verlässt sich stark auf die Reihenfolge des Betriebs. Funktioniert für leere Zeichenfolgen.
quelle
05AB1E (Legacy) , 12 Bytes
Verwendet die Legacy-Version von 05AB1E, da
j
die Zeichenfolgen implizit miteinander verbunden werden, was in der neuen Version von 05AB1E ein explizitesJ
Nachj
erfordert.Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
quelle
Haskell , 137 Bytes
Probieren Sie es online aus!
Das größte Problem hierbei ist die Konvertierung von Booleschen Werten (Ergebnis des XOR) in '0' / '1'.
quelle
Python 3 ,
8884 BytesProbieren Sie es online aus!
Ich bin der Meinung, dass die Aufgaben vermeidbar sein sollten, konnte mir aber keine Möglichkeit vorstellen, dies zu tun.
Aktualisieren:
quelle
PHP , 90 Bytes
Probieren Sie es online aus!
quelle
C # (Visual C # Interactive Compiler) , 80 Byte
Probieren Sie es online aus!
quelle
JavaScript (V8) , 73 Byte
Probieren Sie es online aus!
quelle