To wyzwanie dla golfa. Tak jak mówi tytuł, napisz program, który ukryje ciąg znaków ascii w formacie binarnym.
Na przykład:
"Hello World!"
powinien zamienić się w
1001000 1100101 1101100 1101100 1101111 100000 1010111 1101111 1110010 1101100 1100100 100001
.
Uwaga: Szczególnie interesuje mnie implementacja Pyth.
code-golf
string
binary
conversion
ericmarkmartin
źródło
źródło
Odpowiedzi:
CJam, 8 bajtów
Bułka z masłem:
Wypróbuj tutaj
źródło
Python 3, 41 bajtów
Podobnie jak odpowiedź KSFT , ale pomyślałem, że zwrócę uwagę na to, że
raw_input -> input
Python 3 ma tutaj również przewagę ze względu na splatprint
.źródło
Pyth, 10 bajtów
Mapowanie i objaśnienie Pythona:
Dane wejściowe to ciąg, który należy przekonwertować bez cudzysłowów.
Wypróbuj tutaj
źródło
Psum(d).append(Pfilter(lambda T:gte(head(join(Plen(k),Plen())))))
, whee d = '' i k = ''. Więc nie, to wcale nie jest ważne.Python 3 - 43 bajty
Nie najkrótsza, ale ciekawe podejście IMO. Ma tę dodatkową zaletę, że jeśli liczba znaczących bitów jest różna, EG
Hi!
, wypełnianie zerami jest trywialne (2 dodatkowe bajty, w przeciwieństwie do 9 dla.zfill(8)
):źródło
Python - 52
Popracuję nad przetłumaczeniem tego na Pyth.Ktoś inny już odpowiedział na pytanie Pyth.Jeśli nie obchodzi Cię, że jest to pełny program lub format I / O i korzystasz z Python 3, możesz to zrobić w 23 bajtach, takich jak:
x
jest wejściem.Wiem, że to się nie liczy, ponieważ tłumacz nie został zwolniony przed opublikowaniem wyzwania, ale tutaj jest w KSFTgolf:
źródło
Rubin,
342824 bajtówPobiera dane wejściowe przez STDIN. 6 bajtów zaoszczędzonych dzięki za AShelly i kolejne 4 dzięki Britishtea.
źródło
$<.each_byte{|c|$><<"%b "%c}
String#bytes
zamiastString#each_byte
. Forma bloku jest przestarzała, ale nadal działa :)PowerShell,
635946 bajtów-13 bajtów dzięki @mazzy
Wypróbuj online!
źródło
Matlab
To anonimowa funkcja
użycie jest
f('Hello World')
.Alternatywnie, jeśli
x
jest zdefiniowany jako ciąg znakówHello World!
w obszarze roboczym, po prostudec2bin(char(x))
będzie działać.źródło
char
? Myślę, że masz na myślidec2bin(x)-'0'
char(x)
gdyx
jest już ciągiem, nic nie robi. Możesz go usunąć, aby zaoszczędzić miejsce. Z drugiej strony wynikiemdec2bin
jest ciąg znaków i myślę, że wynikiem powinny być liczbyJ - 9
Nie mam pojęcia, jak zrobić to z rzędu bez podwojenia długości kodu, potrzebuję J guru, aby mi powiedzieć :)
źródło
".
na początek. Ocenia twój wynik, więc będzie w jednym wierszu i będzie oddzielony spacjami. Jeszcze krótsza jest stworzenie Base10 liczb z cyfr base2:10#.#:3&u:
.Java - 148 bajtów
Edytowane w celu włączenia pełnego pliku
źródło
for(char c:a[0].toCharArray()){
a nawetfor(byte b:a[0].getBytes()){
ponieważ dane wejściowe są ascii, przy założeniu, że ustawienia regionalne maszyny są inne niż utf-16public
i skrócić nazwę programu do jednego znaku, aby wygrać więcej bajtów. Plus(String[]a)
jest doskonale akceptowany przez kompilator, dzięki czemu zyskujesz kolejny bajt.JavaScript ES6, 63
65bajtówJest to dość długie, dzięki długim nazwom funkcji JavaScript. Poniższy fragment stosu jest przybliżonym odpowiednikiem ES5, więc można go uruchomić w dowolnej przeglądarce. Dzięki edc65 za ulepszenia gry w golfa.
źródło
[for of]
jest nieco krótszy niż[...].map
wyliczenie znaków w ciągach:alert([for(c of prompt())c.charCodeAt().toString(2)].join(' '))
.join(' ')
je.join` `
. Możeszprompt
alert
Scala -
59- 55 bajtówZwykle należy używać foreach, a nie map.
źródło
Kod maszynowy 8088, IBM PC DOS,
3331 bajtów *Wymienianie kolejno:
Kompletny plik COM systemu DOS na komputer PC, dane wejściowe są przekazywane z wiersza poleceń.
Z wiodącymi zerami:
Pobierz i przetestuj ASCBIN.COM .
Lub 39 bajtów bez wiodących zer:
Pobierz i przetestuj ASCBIN2.COM .
* Ponieważ nie było dla mnie wyraźnie jasne, czy wiodące zera są dozwolone, publikuję wersje w obie strony.
źródło
MITS Altair 8800 , 0 bajtów
Łańcuch wejściowy znajduje się pod adresem pamięci
#0000H
( dozwolony ). Wyjście binarne za pośrednictwem lampek we / wy na panelu przednimD7-D0
.Przykład: do
RESET
, następnie,EXAMINE
aby zobaczyć pierwszy bajt, a następnie powtórz,EXAMINE NEXT
aby zobaczyć resztę."H" = 01 001 000:
"e" = 01 100 101:
"l" = 01 101 100:
Wypróbuj online!
Oczywiście niekonkurujące. :)
źródło
Haskell, 65
intensywne korzystanie z monady listy. nie można go przekonwertować na listy zgodności, ponieważ ostatnie instrukcje nie były
return
.źródło
C ++ - 119 bajtów
Uwalnianie pamięci? Co to jest?
(MSVC kompiluje kod z ostrzeżeniem)
źródło
main(int c,char**v){char x[9];for(;c=*(v[1]++);printf("%s ",itoa(c,x,2)));}
Galaretka , 3 bajty
Wypróbuj online!
źródło
Tcl , 52 bajty
Wypróbuj online!
źródło
binary scan [join $argv] B* b;puts [regsub -all .{8} $b {& }]
APL (Dyalog) , 12 bajtów
Wypróbuj online!
Dziękujemy Adámowi za pomoc w tym rozwiązaniu.
źródło
Python 3.6 , 39 bajtów
Wypróbuj online!
źródło
Commodore VIC-20 / C64 / 128 i TheC64Mini, 101 tokenizowanych bajtów BASIC
Oto zaciemniony wykaz przy użyciu skrótów słów kluczowych Commodore BASIC:
Tutaj w celu wyjaśnienia znajduje się lista symboliczna nie zaciemniona:
Funkcja
fn b
zadeklarowana w linii zero przyjmuje parametr numeryczny,x
którego wartość jestAND
edytowana z wartościąb
; SGN jest następnie wykorzystywany do konwersjix and b
do1
lub0
.Pierwszy wiersz akceptuje ciąg wejściowy do zmiennej
a$
, a pętla rozpoczyna się (oznaczona za pomocąi
) na długości tego wejścia.b
reprezentuje każdy bit od 6 do 0 bitu.c$
przyjmuje każdy znak ciągu na pozycjęi
.linia 5 rozpoczyna pętlę w celu przetestowania każdej pozycji bitu;
right$
jest używany w wierszu 6 do usunięcia problemu z automatycznym formatowaniem, gdy Commodore BASIC wyświetla liczbę, przekształcając dane wyjściowefn b
na ciąg;asc(c$)
konwertuje bieżący znak na jego kod ascii jako wartość dziesiętną.Wiersz 7 reprezentuje następną wartość bitu. Pętla
j
kończy się przed wydrukowaniem spacji, a następniei
kończy się ostatnia pętla .źródło
JavaScript ES6, 71 bajtów
źródło
.split('')
podzielić na pusty ciąg;.split()
zamienia się"abc"
w["abc"]
.Dalej (gforth) , 45 bajtów
Wypróbuj online!
Objaśnienie kodu
źródło
Ruby, 24 bajty
Miałem nadzieję pokonać Martina Endera , ale udało mi się go tylko związać.
Pobiera dane wejściowe na STDIN; +1 bajty dla
-p
flagi.Wypróbuj online!
źródło
Gaia , 4 bajty
Całkiem zadowolony z tego
Jak to działa
Wypróbuj online!
źródło
Python 3 , 39 bajtów
Wypróbuj online!
Nieznaczna poprawa w stosunku do obecnej wiodącej odpowiedzi w języku Python
źródło
STATA 158
Zastosowałem inne podejście niż większość. Odczyt za pomocą monitu _request () (skrócony do di _r (r)). Zapisz ciąg do pliku o nazwie bw trybie tekstowym. Otwórz bw trybie binarnym i odczytaj każdy znak jako bajt i przekonwertuj na binarny. Technicznie rzecz biorąc, plik b powinien zostać zamknięty na końcu, ale jest to poprawny program i działa bez niego poprawnie.
źródło
Golang - 68
Jestem nowy w Go i nie jestem pewien zasad liczenia znaków w tym języku tutaj.
Import (11 bajtów):
Funkcja (55 bajtów):
Możesz go uruchomić tutaj .
źródło
C # nigdy nie wygra tego rodzaju pytań, ale oto próba, całkowicie bez kodowania. :)
C # - 84
źródło
x=>String.Join(" ",x.Select(y=>Convert.ToString(y,2)));
Należy jednak pamiętać, że ze względu na użycie.Select()
zarówno tej krótszej odpowiedzi, jak i oryginalnej odpowiedzi, należy podać 18 bajtów,using System.Linq;
chyba że podasz, że używa kompilatora interaktywnego Visual C # , który domyślnie importuje System.LinqKobra - 64
Jako lambda:
źródło