Nehmen Sie eine durch ein Leerzeichen getrennte Folge von Binärzeichen und konvertieren Sie sie in eine ASCII-Zeichenfolge.
Beispielsweise...
1001000 1100101 1101100 1101100 1101111 100000 1010111 1101111 1110010 1101100 1100100
Würde konvertieren zu ...
Hello World
Die Binärzeichenfolge wird in einer Variablen namens gespeichert s
.
Dies ist eine Code-Golf-Herausforderung, bei der die kürzeste Lösung gewinnt.
ZX81
hier nach.Antworten:
Ruby,
3632Oder 31
Optimierungen dank Chron
quelle
.join""
für*""
ein paar Zeichen zu speichern. Du könntest es auch mit gsub machen, anstatt split + map + join, so etwas wie:s.gsub(/\w+ ?/){$&.to_i(2).chr}
(31 Zeichen).s.gsub(/\d+./){$&.to_i(2).chr}
funktioniert und es ist 30 Zeichen, ich habe keine Ahnung, warum es funktioniert. Das.
sollte nicht zum letzten Mal passen, aber das tut es.JavaScript (ES6) 49
55 56 64Bearbeiten Akzeptiere @bebe Vorschlag - danke
Bearbeiten2 Wusste nichts über binäres numerisches Literal - danke @kapep
Bearbeiten3 Wow 6,
nicht 4Bytes gespeichert dank @ETHproductionsErklärung wie in den Kommentaren angefordert
String.replace
kann 2 Argumente annehmen:/\d+./g
: eine oder mehrere Ziffern, gefolgt von einem anderen Zeichen - das g-Flag gibt an, dass das Muster mehrmals durchsucht werden sollEs ist erwähnenswert, dass der reguläre Ausdruck am Ende der Zeichenfolge mit der Ziffernfolge ohne Leerzeichen übereinstimmt. In diesem Fall stimmt der Punkt mit der letzten Ziffer überein. Versuchen Sie es mit '123'.match (/ (\ d +) ./).
(Immer noch) eines der ausführlicheren Javascript-Elemente aller Zeiten ...
(Zuweisung zu Zeichenfolge wird nicht gezählt)
quelle
s.replace(/\d+./g,x=>String.fromCharCode(parseInt(x,2)))
56s.replace(/\d+./g,x=>String.fromCharCode(eval("0b"+x)))
55/\d+./g,x=>
macht?eval('0b'+x)
zu'0b'+x-0
4 Byte zu speichern.Bash + gemeinsame Linux-Utils, 25 Bytes
dc erklärung
m
um:m
Makro auf, wenn der Stack nicht leer istm
registrierenDa wir die gesamte Binärzeichenfolge zuerst in den Stapel verschieben, wird die Zeichenfolge beim Aufrufen der einzelnen Werte umgekehrt. Also verwenden wir das
rev
Dienstprogramm, um das zu korrigieren.Anwendungsbeispiel:
quelle
PowerShell, 49
BEARBEITEN: Die andere PowerShell-Antwort wurde nicht angezeigt. Aber es gibt im Wesentlichen nur einen Weg, dies zu lösen.
quelle
C -
574338/3138 Byte Version:
Oder nur 31 Bytes, wenn s ein Zeiger ist:
Ich denke nicht, dass dies genau die Art und Weise ist, wie eine for and while-Schleife verwendet werden soll ... aber es funktioniert.
quelle
Pyth , 12
Beachten Sie, dass s in Pyth keine legale Variable ist, also habe ich stattdessen Z verwendet.
Erläuterung:
Beispiel:
quelle
id2
anstelle von zu verwendenv+"0b"d
? In jedem Fall ist dies sowohl unlesbar als auch cool.x86-Maschinencode unter DOS - 22 Byte
Da der Maschinencode keine echten Zeichenfolgenvariablen enthält (und insbesondere keine Variablen mit dem Namen "
s
"), habe ich mich für stdin als Eingabe entschieden.NASM-Eingabe:
quelle
Powershell (
5249)Einfache Schleife über binären String in $ s. Das Einschließen von [convert] tötet meine Punktzahl.
EDIT: Es gibt wirklich nur einen Weg, dies in Powershell durchzuziehen, wowie. Joey und ich haben fast die gleiche Antwort bekommen, wenn wir unabhängig voneinander arbeiten!
Eingang:
Ausgabe:
quelle
Mathematica, 52 Bytes
Ah, Mathematics schöne Funktionsnamen
quelle
Perl
3332Bearbeiten: Aktualisierte Lösung, 32.
Vorherige Lösung (33):
oder
Prüfung:
quelle
J (23)
Prüfung:
Erläuterung:
quelle
Golfscript - 21
Sie können es hier testen .
quelle
Python-Shell
4440 ZeichenDanke für die Hilfe Griffin .
quelle
APL (15)
Prüfung:
Erläuterung:
⍎s
: auswertens
, in ein Array von ganzen Zahlen verwandeln. Arrays werden als Zahlen geschrieben, die durch Leerzeichen getrennt sinds
.{
...}¨
: für jedes Element:⍕⍵
: verwandle die Zahl wieder in eine Zeichenfolge⍎¨
: werte jede einzelne Ziffer aus und gib einen Bitstring2⊥
: Base-2-Dekodierung unter Angabe der Zahlen⎕UCS
: Ermittelt das Zeichen für jede Zahlquelle
PHP (61)
quelle
foreach(str_split($s,8)as$v)echo chr(bindec($v));
str_split($s,8)
funktioniert also nicht.foreach(explode(' ',$s)as$v)echo chr(bindec($v));
wäre gültig, aber ich habe nicht vor, eine meiner ersten PPGC-Antworten zu bearbeiten, die offensichtlich sowieso nicht wirklich golfen ist. Trotzdem danke!Bacchus , 25 Bytes
Erläuterung:
S,' 'j
Teilen Sie den String S durch den leeren Raum und konvertieren Sie ihn in einen Block (eine Art Array).:A=
Holen Sie sich den vorherigen Block und weisen Sie ihn der Variablen A zu.(),A¨
für jedes Element in AÖ,2,10b
Lesen Sie das aktuelle Element (repräsentiert durchÖ
) in Basis 2 und transformieren Sie es in Basis 10.:c
Holen Sie sich den vorherigen Wert und drucken Sie ihn als Zeichenquelle
GolfScript 23
Online Test hier .
quelle
C - 63
da c keinen base 2 konverter in der standard bibliothek hat: test hier
edit: da bin ich einfach zu doof um es zu wissen
quelle
Lauflängencodiertes Brainfuck, 49 Bytes
Da es in Brainfuck keine Variablen gibt, habe ich stattdessen nur die Standardeingabe und -ausgabe verwendet.
Der Code
32+
sollte vom Interpreter als 32+
s interpretiert werden. Ersetzen Sie sie einfach manuell, wenn Ihr Dolmetscher RLE nicht unterstützt.Erweiterte (Nicht-RLE) Version: (91 Bytes)
Der Code setzt voraus, dass EOF als 0 codiert ist.
Erläuterung
Das folgende Layout wird verwendet:
Wo
x
soll das ASCII-Byte gedruckt werden,a
ist das Zeichen aus der Standardeingabe undflag
ist 1, wenna
war ein Leerzeichen.quelle
Java 8: 60 Bytes
Verwenden von Lambdas in Java 8 (75 Byte):
Und wenn Sie statische Importe zulassen (die einige hier verwendet haben), sind es (61 Bytes):
Eine etwas kürzere Version mit for-Schleife (60 Bytes):
quelle
Clojure 63 (oder 57)
Das All-Clojure-Werkzeug:
Mit Java Interop:
REPL-Sitzung:
quelle
QBasic, 103
Was? Wir haben hier keine ausgefallenen Binär-zu-Dezimal-Funktionen. Mach es selbst!
Ich zähle die neue Zeile (die ich für notwendig halte, um das Wenn-Dann-Sonst ohne zu erhalten
END IF
) als ein Byte pro Metapost . Ich weiß nicht, ob QB64 unter Windows eine Codedatei auf diese Weise akzeptieren würde oder nicht. Vermutlich spielt nicht viel eine Rolle.quelle
NodeJS - 62
PHP - 75
quelle
JavaScript 111
Dies führt die Zahlenkonvertierung ohne parseInt oder eval durch. Lesen Sie die Zeichenfolge rückwärts und zählen Sie die Bits, die das Bit x gesetzt hat, wenn es eine Eins ist. Wenn ein Leerzeichen gefunden wird, wird die Zahl in ein Zeichen umgewandelt und eine neue 0-Zahl zum Setzen von Bits gestartet.
quelle
Groovy 64
quelle
CJam, 11 Bytes
s ist in CJam kein zulässiger Variablenname, daher habe ich stattdessen N gewählt.
Probieren Sie es online aus.
Beispiellauf
Wie es funktioniert
quelle
Haskell - 48 (+13 Importe (?))
Hier ist mein erster Golfversuch in Haskell.
Sie müssen Data.Char importieren
Verwendung (in ghci):
Erläuterung:
quelle
GNU Sed, 19 Bytes
Inspiriert von einer exzellenten @ Digital Trauma Antwort.
Golf gespielt
Prüfung
quelle
Pyth, 7 Bytes (nicht konkurrierend)
Übernimmt die Eingabe als String.
Versuch es!
quelle
05AB1E , 4 Bytes (nicht konkurrierend)
3 Bytes gespart dank @Emigna
Probieren Sie es online!
quelle
#CçJ
funktioniert auch. Obwohl sowohl in dieser als auch in Ihrer Version benötigen Sieð¡
statt#
wenn die Eingabe nur 1 Zeichen sein kann.