Inspirowany następującym komiksem XKCD:
W „Work It” Missy Elliot część refrenu brzmi następująco:
Is it worth it, let me work it
I put my thing down, flip it and reverse it
Mając to na uwadze, proponuję następujące wyzwanie golfowe:
Utwórz kod, który działa, w celu:
- Pobiera 8-bitowe wejście ASCII ze STDIN; np.
n
(Hex 6E lub Bin 01101110) - Przesuwa o 8 bitów każdego bajtu w dół o 1 bit (wydaje mi się, że nazywa się to przesunięciem bitowym w dół), np.
01101110
Staje się00110111
(„odłóż moją rzecz”); - Odwraca bity każdego bajtu, np.
00110111
Staje się11001000
(„odwróć”); - Odwraca bity dla każdego bajtu, np.
11001000
Staje się00010011
(„odwróć”); - Jeśli wartość bajtu jest mniejsza niż 32, wykonaj
(95 + [byte value])
, lub innymi słowy,(126-(31-[byte value]))
bajt przed konwersją z powrotem do ASCII ... Jeśli wartość bajtu jest nadal mniejsza niż 32, powtórz krok 5 - Jeśli wartość bajtu jest większa niż 126, wykonaj
([byte value] - 95)
, lub innymi słowy,(32+([byte value]-127))
bajt przed konwersją z powrotem do ASCII ... JEŻELI wartość jest nadal większa niż 126, powtórz krok 6. - Wyświetl nowo przekonwertowany ciąg jako ASCII.
Przykład tego kodu w akcji:
(Wkład, czy warto?)
workit missy
(„missy” jest wejściem, „workit” jest funkcją)
Teraz za kulisami ...
(pozwól mi pracować ... w binarny)
01101101 01101001 01110011 01110011 01111001
(Odłóż moją rzecz ... Bitowo)
00110110 00110100 00111001 00111001 00111100
(...Odwróć to...)
11001001 11001011 11000110 11000110 11000011
(... i odwróć to!)
10010011 11010011 01100011 01100011 11000011
(Przekształcony z powrotem na dziesiętny)
147 211 99 99 195
(Wykonaj niezbędną matematykę)
147-95 211-95 99 99 195-95 => 52 116 99 99 100
(Konwertuj z powrotem na ASCII i wyświetl, dane wyjściowe)
4tccd
Zasady
- Najkrótszy kod wygrywa ... tak prosty ...
- Dane wejściowe mogą być wprowadzane za pomocą funkcji, przez monit lub cokolwiek, co Ci odpowiada, pod warunkiem, że możesz sprawić, że Zasada 1 „zadziała” dla Ciebie ...;)
- Nie jestem po odwracalności, dopóki możesz zmusić kod do zrobienia tego, o co go poprosiłem, będę szczęśliwy ...
Powodzenia!
źródło
0 1 1 0 1 1 0 1
i0 1 1 0 1 0 0 1
zami
P
zamienia się w wartość bajtu,235
a odejmowanie95
pozostawia140
. Nadal nie można drukować. A może źle zrozumiałem?Odpowiedzi:
APL
5045Pobiera dane z klawiatury, np .:
źródło
GolfScript
433835Objaśnienie: Dla każdego znaku w ciągu wykonamy następujące czynności:
Stosowanie:
Dzięki pomocy PeterTaylor.
źródło
2base{0\+.,9<}do
tego byłoby512+2base(;
. Należy również pamiętać, że jeśli intencją jest jedynie, aby uzyskać prawidłowe wyjście można zmienić kolejność operacji, więc zamiast{!}%
po prostu trzeba~
wejściowych przed konwersją bazy (i wtedy wymienić512+
z511&
).2/
jako przesunięcie bitowe, możesz nadal przesuwać bitowo, a~
następnie konwertować bazę ...K,
6858.
źródło
J - 61
źródło
J,
5554 znakówźródło
Ruby, 115
Ten wpis jest niekonkurencyjnie długi. Więc pójdę z „ale możesz to przeczytać!” :-P
Czyta z
stdin
:źródło
Python 2.7, 106
Kolejna dość długa odpowiedź, ale hej, to moja pierwsza próba:
Zmodyfikowano na podstawie komentarzy Darrena Stone'a i grc poniżej ...
źródło
a:
.chr
ekspresji z tego przez kolejne oszczędności 1-char:chr(x-(95,(-95,0)[x>32])[x<126])
.print'\b%c'%(x+95*((x<32)-(x>126))),
Python 2.7 - 73
86Dzięki zmianie reguł znalazłem znacznie prostszy sposób na zrobienie tego wszystkiego za pomocą manipulacji binarnych i całkowitoliczbowych. Oszczędza to miejsce na Quirlioms, nie potrzebując zmiennej tymczasowej:
I w formie wyjaśnienia:
źródło