Prezenty zostały otwarte. Mielone placki zostały zjedzone. Gwiezdne wojny zostały obejrzane. Sezon świąteczny zaczyna się kończyć. Do tej pory mogłeś wyciągnąć kilka Christmas Crackers . Jeśli masz szczęście, zamiast zwykłych bezużytecznych plastikowych zabawek, możesz wygrać Mystery Calculator, dzięki któremu możesz zadziwić swoich przyjaciół i krewnych .
Ta sztuczka składa się z 6 kart każda z nadrukowaną siatką liczb 4x8. Każda karta zawiera inny podzbiór liczb całkowitych [1,63]
. Mag poprosi cię o wybranie numeru z jednej karty i zachowanie tego numeru w tajemnicy. Mag zapyta następnie, które karty mają ten numer. Dzięki tej wiedzy mag będzie w stanie w magiczny sposób ustalić i ujawnić pierwotną liczbę.
Wydrukuj pełny zestaw 6 kart Tajemniczego kalkulatora dokładnie w następujący sposób:
1 3 5 7 9 11 13 15
17 19 21 23 25 27 29 31
33 35 37 39 41 43 45 47
49 51 53 55 57 59 61 63
- - - - - - - - - - -
2 3 6 7 10 11 14 15
18 19 22 23 26 27 30 31
34 35 38 39 42 43 46 47
50 51 54 55 58 59 62 63
- - - - - - - - - - -
4 5 6 7 12 13 14 15
20 21 22 23 28 29 30 31
36 37 38 39 44 45 46 47
52 53 54 55 60 61 62 63
- - - - - - - - - - -
8 9 10 11 12 13 14 15
24 25 26 27 28 29 30 31
40 41 42 43 44 45 46 47
56 57 58 59 60 61 62 63
- - - - - - - - - - -
16 17 18 19 20 21 22 23
24 25 26 27 28 29 30 31
48 49 50 51 52 53 54 55
56 57 58 59 60 61 62 63
- - - - - - - - - - -
32 33 34 35 36 37 38 39
40 41 42 43 44 45 46 47
48 49 50 51 52 53 54 55
56 57 58 59 60 61 62 63
Dane wyjściowe mogą zawierać jedną końcową nową linię lub nie. Nie może być żadnych spacji końcowych. Każda karta jest oddzielona 11 -
perforacjami.
- md5sum z ostatnim znakiem nowej linii:
7aa2d9339b810ec62a2b90c5e11d6f4a
- md5sum bez końcowej nowej linii:
e9abe4e32dca3e8fbfdaa4886fc5efd2
Dla tych z was, którzy orientują się bardziej na okna, pozwolę również na CRLF
stylowe zakończenia linii. W takim przypadku md5 to:
- md5sum z ostatnim znakiem nowej linii:
e4f16ff9752eee2cedb5f97c7b5aec6d
- md5sum bez końcowej nowej linii:
78c560eed3b83513e3080117ab5dc5fa
źródło
Odpowiedzi:
Python 2 ,
99969391 bajtówWychodzi z błędem, który jest domyślnie dozwolony .
Wypróbuj online! lub sprawdź skrót MD5 .
Jak to działa
Po zainicjowaniu k jako 1 , wchodzimy w nieskończoną pętlę, która wykonuje następujący kod.
tuple(n for n in range(64)if k&n)
tworzy krotkę wszystkich nieujemnych liczb całkowitych poniżej 64, które mają tam ustawiony j- ty bit, gdzie j jest liczbą iteracji pętli, tj. 2 j = k .('%2d '*7+'%2d\n')*4
najpierw tworzy ciąg formatu'%2d %2d %2d %2d %2d %2d %2d \n'
, a następnie powtarza go cztery razy. Jest to szablon dla każdej karty, który dopełnia każdą liczbę całkowitą w krotce do dwóch znaków (poprzedzające spacje), oddziela każdą grupę 8 liczb całkowitych spacjami, a same grupy liniami.Teraz wypowiedź Pythona 2
print
jest ciekawą bestią. Pobiera kilka wyrażeń oddzielonych przecinkami i drukuje je jeden po drugim. Ocenia pierwsze wyrażenie, drukuje je, ocenia następne wyrażenia, drukuje itp., Aż nie pozostaną już żadne wyrażenia. O ile po ostatnim wyrażeniu nie występuje przecinek, dodaje do niego kreskę. Ponadto wstawia spację do wszystkich wyrażeń, chyba że są drukowane na początku wiersza.W każdej iteracji najpierw drukujemy wynik zastosowania ciągu formatu na krotce. Jesteśmy na początku linii, więc nie ma miejsca na spację.
Następnie (próbujemy) wydrukować wynik
11/(k<32)*' -'
. Jeśli k <32 , wyrażenia te są obliczane na' - - - - - - - - - - -'
. Znów jesteśmy na początku linii, więc nie ma miejsca na spację. Po tym wyrażeniu nie ma przecinka, więcprint
dołącza on linię. Jednak w szóstej iteracji k = 2 5 = 32 , więc próba oceny11/(k<32)*' -'
podnosi nieprzechwycony ZeroDivisionError . To przerywa pętlę i natychmiast kończy program.źródło
C (gcc), 105 bajtów
źródło
Python 2, 132 bajty
Dzielenie sekwencji jest denerwujące w Pythonie.
Wypróbuj online .
źródło
Galaretka ,
2726 bajtówWypróbuj online! lub sprawdź skrót MD5 .
Jak to działa
źródło
G
wbudowane jest poważnie obezwładnione na to wyzwanie. Potrzebowałem około 10 bajtów, aby zrobić to samo.Pip ,
494844 bajtów43 bajty kodu, +1 dla
-S
flagi.Wypróbuj online!
Wyjaśnienie
źródło
Rubinowy, 90 bajtów
Nie golfił
Dość bezpośredni. Jedyne, co może wymagać dodatkowego wyjaśnienia, to kiedy podążać za liczbą z nowym znakiem zamiast spacji. Dzieje się tak, gdy
j+1%16==0
w pierwszych czterech kartach ij+1%8
== 0 w dwóch ostatnich. Stąd wyrażenie15>>i/64/4
lub równoważne15>>i/256
jest AND z,j
aby określić, czy wymagana jest spacja czy nowa linia.źródło
JavaScript (ES6), 150 bajtów
źródło
Perl 6 ,
194 11686 bajtówSpróbuj
Spróbuj
Spróbuj
(sprawdź sekcje debugowania dla wyników MD5)
Dwa ostatnie zostały zainspirowane / przepisane z implementacji Ruby i C.
źródło
05AB1E , 71 bajtów
Wypróbuj online!
To podejście, nie próbuj tego. Szczerze mówiąc, usunie to ze wstydu. Manipulacja matrycą nie jest moją mocną stroną, więc próbowałem brutalnie wygenerować wszystkie 6 sekwencji, a następnie pompować je niechlujnie.
źródło
Partia, 249 bajtów
Generuje końcowy CRLF.
źródło
JavaScript (ES6),
103102 bajtówMD5: 7AA2D9339B810EC62A2B90C5E11D6F4A
Test
Pokaż fragment kodu
źródło
narzędzia bash / Unix,
125124 bajtyEdycja: Usunięto niepotrzebne ^ z wyrażenia regularnego na końcu; regex zawsze będzie pasował na początku linii.
źródło
PHP, 102 bajty
wypisuje wiodący, ale nie kończący znak nowej linii oraz jedno spacje wiodące w każdej linii. Uruchom
-nr
lub wypróbuj online .PHP <5,6, wymienić
2**$c
się(1<<$c)
.&~1<<$c?:
Zamiast tego można użyć PHP 5.5%2**$c||
.PHP <5,5, wymienić
"\n"[$n++%8]
się($n++%8?"":"\n")
.Kreski są wyłączone o jedną postać ze względu na wiodące pole; dodaj spację do pierwszego
str_pad
parametru (wstaw spację przed drugą linią kodu), aby naprawić.Usunięcie wiodącej spacji zamiast tego wymaga trochę zabawy i trzech dodatkowych bajtów:
printf("%c%2d",$n++%8?32:10,++$b%64);
i23
zamiast25
.Przekształcenie wiodącego nowego wiersza w końcowy kosztowałoby kolejne trzy bajty:
PHP, 109 bajtów
pasuje do wszystkich specyfikacji i działa ze wszystkimi wersjami PHP.
źródło
Python 2 , 89 bajtów
Wypróbuj online!
Wyjaśnienie:
źródło
05AB1E , 29 bajtów
Port z @Emigna „s 05AB1E odpowiedzi tutaj , po czym dodałem dodatkowy kod, aby go wydrukować, zgodnie z wymogami określonymi w tym wyzwaniem.
Wypróbuj online lub sprawdź md5sum .
Wyjaśnienie:
źródło
JavaScript, 234 bajty.
Wyjaśnienia napiszę później.
Jeśli
console.log
jest to wymagane, liczba bajtów wynosiłaby 247 bajtów.źródło