Weź ciąg znaków binarnych oddzielonych spacją i przekonwertuj go na ciąg ASCII.
Na przykład...
1001000 1100101 1101100 1101100 1101111 100000 1010111 1101111 1110010 1101100 1100100
Konwertuje się na ...
Hello World
Ciąg binarny zostanie zapisany w zmiennej o nazwie s
.
To wyzwanie dla golfa, więc wygrywa najkrótsze rozwiązanie.
ZX81
tutaj.Odpowiedzi:
Ruby,
3632Lub 31
Optymalizacje dzięki Chronowi
źródło
.join""
do*""
zaoszczędzić kilka znaków. Możesz to również zrobić za pomocą gsub zamiast split + map + join, coś w stylu:s.gsub(/\w+ ?/){$&.to_i(2).chr}
(31 znaków).s.gsub(/\d+./){$&.to_i(2).chr}
działa i jest 30 znaków, ale nie mam pojęcia, dlaczego to działa. Nie.
powinno pasować do ostatniego razu, ale tak jest.JavaScript (ES6) 49
55 56 64Edytuj Akceptowanie sugestii @bebe - dzięki
Edit2 Nie wiedziałem o binarnym dosłownym - dzięki @kapep
Edit3 Wow 6
nie 4bajty zapisane thx @ETHproductionsWyjaśnienie zgodnie z żądaniem w komentarzach
String.replace
może przyjąć 2 argumenty:/\d+./g
: jedna lub więcej cyfr, po których następuje jeden inny znak - flaga g określa, że wzór ma być przeszukiwany więcej niż jeden razWarto zauważyć, że na końcu łańcucha wyrażenie regularne pasuje do sekwencji cyfr bez spacji końcowej, w tym przypadku kropka odpowiada ostatniej cyfrze. Spróbuj „123”. Dopasuj (/ (\ d +) ./), aby zweryfikować.
(Nadal) jeden z bardziej pełnych fragmentów javascript kiedykolwiek ...
(Przypisanie ciągów nie jest liczone)
źródło
s.replace(/\d+./g,x=>String.fromCharCode(parseInt(x,2)))
56s.replace(/\d+./g,x=>String.fromCharCode(eval("0b"+x)))
55/\d+./g,x=>
robi?eval('0b'+x)
, aby'0b'+x-0
zapisać 4 bajty.Bash + wspólne narzędzia linuksowe, 25 bajtów
wyjaśnienie DC
m
aby:m
makro, jeśli stos nie jest pustym
zarejestrowaćPonieważ najpierw wypychamy cały ciąg binarny do stosu, kiedy popujemy każdą wartość, kończymy na odwróconym ciągu. Więc używamy tego
rev
narzędzia, aby to poprawić.Przykładowe użycie:
źródło
PowerShell, 49
EDYCJA: Nie widziałem innej odpowiedzi PowerShell. Ale jest zasadniczo tylko jeden sposób na rozwiązanie tego.
źródło
C -
574338/3138 bajtów wersja:
Lub tylko 31 bajtów, jeśli s jest wskaźnikiem:
Nie sądzę, że tak właśnie należy używać pętli for i while ... ale to działa.
źródło
Pyth , 12
Zauważ, że s nie jest dopuszczalną zmienną w Pyth, więc zamiast tego użyłem Z.
Wyjaśnienie:
Przykład:
źródło
id2
zamiastv+"0b"d
? W każdym razie jest to zarówno nieczytelne, jak i fajne.Kod maszynowy x86 w systemie DOS - 22 bajty
Ponieważ w kodzie maszynowym nie ma żadnych rzeczywistych zmiennych łańcuchowych (a w szczególności żadnych zmiennych o nazwie „
s
”), zdecydowałem się na wejście standardowe.Wejście NASM:
źródło
PowerShell (
5249)Prosta pętla nad ciągiem binarnym w $ s. Jednak włączenie [konwersji] zabija mój wynik.
EDYCJA: Naprawdę jest tylko jeden sposób, aby to zrobić w PowerShell, wowie. Joey i ja otrzymaliśmy prawie taką samą odpowiedź działającą niezależnie!
Wkład:
Wydajność:
źródło
Mathematica, 52 bajty
Ach, piękne nazwy funkcji Mathematiki
źródło
Perl
3332Edycja: zaktualizowane rozwiązanie, 32.
Poprzednie rozwiązanie (33):
lub
Test:
źródło
J (23)
Test:
Wyjaśnienie:
źródło
Golfscript - 21
Możesz to przetestować tutaj .
źródło
Python shell
4440 znakówDzięki za pomoc Griffin .
źródło
APL (15)
Test:
Wyjaśnienie:
⍎s
: ocenas
, zamieniając go w tablicę liczb całkowitych. Tablice są zapisywane jako liczby oddzielone spacjami, więc dzieli sięs
.{
...}¨
: dla każdego elementu:⍕⍵
: zamień liczbę z powrotem na ciąg znaków⍎¨
: oceniaj każdą pojedynczą cyfrę, podając ciąg bitów2⊥
: dekodowanie base-2, podając liczby⎕UCS
: uzyskaj znak dla każdej liczbyźródło
PHP (61)
źródło
foreach(str_split($s,8)as$v)echo chr(bindec($v));
str_split($s,8)
nie będzie działać.foreach(explode(' ',$s)as$v)echo chr(bindec($v));
byłoby ważne, ale nie planuję edytować jednej z moich pierwszych odpowiedzi PPGC, która oczywiście nie jest tak naprawdę golfa. Mimo wszystko dziekuję!Bachus , 25 bajtów
Wyjaśnienie:
S,' 'j
podziel String S przez pustą spację i przekształci go w blok (pewnego rodzaju tablicę).:A=
pobierz poprzedni Blok i przypisz go do zmiennej A.(),A¨
dla każdego elementu w AÖ,2,10b
Przeczytaj bieżący element (reprezentuj przezÖ
) w bazie 2 i przekształć go w bazę 10.:c
pobierz poprzednią wartość i wydrukuj jako charźródło
GolfScript 23
Test online tutaj .
źródło
C - 63
ponieważ C nie ma konwertera base 2 w standardowej bibliotece: przetestuj tutaj
edytuj: jest, jestem po prostu zbyt głupi, żeby o tym wiedzieć
źródło
Brainfuck z kodowaniem długości przebiegu, 49 bajtów
Ponieważ w Brainfuck nie ma żadnych zmiennych, po prostu użyłem standardowego wejścia i wyjścia.
Kod
32+
powinien być interpretowany+
przez tłumacza jako 32 s. Po prostu zastąp je ręcznie, jeśli Twój tłumacz nie obsługuje RLE.Wersja rozszerzona (nie RLE): (91 bajtów)
Kod zakłada, że EOF jest zakodowany jako 0.
Wyjaśnienie
Używany jest następujący układ:
Gdzie
x
jest drukowany bajt ASCII,a
jest znakiem ze standardowego wejścia iflag
wynosi 1, jeślia
był spacją.źródło
Java 8: 60 bajtów
Używanie lambda w Javie 8 (75 bajtów):
A jeśli zezwolisz na import statyczny (z którego niektórzy tutaj korzystali), będzie to (61 bajtów):
Trochę krótsza wersja korzystająca z pętli for (60 bajtów):
źródło
Clojure 63 (lub 57)
Implikacja All-Clojure:
Z interopem Java:
Sesja REPL:
źródło
QBasic, 103
Co? Nie mamy tutaj żadnych wymyślnych funkcji binarnych do dziesiętnych. Zrób to sam!
Liczę nowy wiersz (który moim zdaniem jest konieczny, aby uzyskać if-then-else bez an
END IF
) jako jeden bajt na ten meta post . Nie wiem, czy QB64 w systemie Windows zaakceptuje plik kodu w ten sposób, czy nie. Prawdopodobnie nie ma to większego znaczenia.źródło
NodeJS - 62
PHP - 75
źródło
JavaScript 111
Dokonuje konwersji liczb bez analizy lub analizy. Czytanie ciągu wstecz i liczenie bitów ustawia bit x, jeśli jest jeden. Po znalezieniu spacji liczba jest konwertowana na znak i rozpoczyna się nowa liczba 0 w celu ustawienia bitów.
źródło
Groovy 64
źródło
CJam, 11 bajtów
s nie jest prawidłową nazwą zmiennej w CJam, więc zamiast tego wybrałem N.
Wypróbuj online.
Przykładowy przebieg
Jak to działa
źródło
Haskell - 48 (+13 importów (?))
Oto moja pierwsza próba golfa w Haskell.
Musisz zaimportować Data.Char
użycie (w ghci):
Wyjaśnienie:
źródło
GNU Sed, 19 bajtów
Zainspirowany doskonałą odpowiedzią @Digital Trauma.
Grał w golfa
Test
źródło
Pyth, 7 bajtów (niekonkurencyjny)
Pobiera dane wejściowe jako ciąg.
Spróbuj!
źródło
05AB1E , 4 bajty (niekonkurujące)
Zaoszczędź 3 bajty dzięki @Emigna
Wypróbuj online!
źródło
#CçJ
działa również. Chociaż zarówno w tej, jak i twojej wersji potrzebujeszð¡
zamiast tego,#
czy dane wejściowe mogą mieć tylko 1 znak.