Biorąc pod uwagę liczbę całkowitą od 1 do 999 włącznie, wypisz prawdziwą wartość, jeśli pojawia się poziomo, pionowo lub po przekątnej, do przodu lub do tyłu, gdziekolwiek w kwadracie cyfr 1–9 3x3 na standardowej klawiaturze numerycznej :
789
456
123
Jeśli liczba nie pojawi się, wpisz wartość fałszowania.
Dokładne 65 liczb, dla których musisz podać prawdę, to:
1
2
3
4
5
6
7
8
9
12
14
15
21
23
24
25
26
32
35
36
41
42
45
47
48
51
52
53
54
56
57
58
59
62
63
65
68
69
74
75
78
84
85
86
87
89
95
96
98
123
147
159
258
321
357
369
456
654
741
753
789
852
951
963
987
Cała reszta to fałsz.
Najkrótszy kod w bajtach wygrywa.
code-golf
number
decision-problem
integer
Hobby Calvina
źródło
źródło
Odpowiedzi:
JavaScript (ES6),
83...7473 bajtyPobiera dane wejściowe jako ciąg.
Zaoszczędzono 3 bajty dzięki produktom ETH
Jak to działa
Przekształcamy klawiaturę numeryczną, stosując przesunięcie do każdej cyfry zgodnie z wierszem, do którego należy:
Wszystkie poniższe kody są przedstawione w systemie szesnastkowym.
Rozważmy wszystkie kombinacje XOR tych nowych kodów kluczowych. Przylegające klawisze są wyróżnione nawiasami.
Widzimy, że dwa klucze są ciągłe tylko wtedy, gdy XOR ich kody prowadzą do jednej z następujących wartości:
Ta lista może być spakowana w następującą maskę binarną:
Stąd test, aby ustalić, czy dwa kody kluczy (a, b) odpowiadają dwóm sąsiednim kluczom:
W przypadku trzech kluczowych kodów (a, b, c) potrzebny jest ten dodatkowy test:
Przykład:
Próbny
Ten fragment wyświetla listę prawdziwych wartości.
Pokaż fragment kodu
źródło
a-.5
zwraca true dla każdej tablicya
zawierającej (zero lub) jedną liczbę całkowitą.n=>([a,b,c]=[...n].map(v=>--v+v/3|0))-.5||n%10&&n<100|b*2==a+c&&45242&1<<(a^b)
1/a
jest jeszcze krótszy i myślę, że powinien równie dobrze działać.Python3, 72 bajty
Dane wejściowe są traktowane jako ciąg.
Zapraszamy do gry w golfa! :RE
źródło
s
, możesz zapisać 1 bajt.s
, który ma spację84
, oznacza to, że jesteś niepoprawny, ponieważ jest wymagany. Gdyby nie zawierała białych znaków, wynikowy łańcuch miałby łańcuch „8448”, co prowadziłoby do nieudanych przypadków testowych. Dziękuję za sugestie!Befunge,
169161159 bajtówWypróbuj online!
Pierwsze dwa wiersze po prostu wypychają listę numerów testowych na stos. Odbywa się to według wielkości, ponieważ czasem łatwiej jest wygenerować liczbę jako przesunięcie od poprzedniej w serii, niż wygenerować ją od zera. Gdy dojdziemy do większych liczb, możemy czasami zaoszczędzić bajt, generując je w parach, np.
"kV"3*\3*
Daje nam 258 i 321 w dziewięciu bajtach, przy czym każdy z osobna zajmowałby po pięć bajtów.Główna pętla znajduje się na trzeciej linii, wykonując zawijanie od prawej do lewej. To tylko iteruje wszystkie liczby testowe na stosie, porównując samą wartość, wartość% 100 i wartość / 10. Jeśli którykolwiek z nich pasuje do numeru wejściowego lub liczby <= 9, wówczas wyprowadzamy 1 i wychodzimy. Jeśli nie ma dopasowania, kontynuujemy zapętlanie. Jeśli zabraknie numerów testowych na stosie, wówczas wyprowadzamy 0 i wychodzimy.
Dzięki Mistah Figgins za uratowanie mi kilku bajtów.
źródło
0<@.!!<
aby zapisać 2 bajty. Polega to na tym, że szczyt stosu jest niezerowy, gdy IP spada na drugą strzałkę. Wypróbuj online!Galaretka ,
292419 bajtówZaoszczędzono 5 bajtów dzięki sugestii @ Dennisa
K
iƓ
.Wypróbuj online!
Wyjaśnienie
źródło
9s3µUŒD;;Z;ŒDµ;UKƓẇ
zapisuje 5 bajtów.123,456,789
powinny być takie same jak789,456,123
Rubinowy, 77 bajtów
źródło
86
i24
zawiedzie.!!
ani towarzyszących jej nawiasów.bash, 75
wypisuje coś i zwraca 0 dla wszystkich wartości z tej listy
nic nie drukuje i zwraca 1 we wszystkich innych przypadkach
źródło
Java, 397 bajtów
źródło