Wyszukiwanie słów Numpad

20

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.

Hobby Calvina
źródło
Odpowiedni OEIS .
Fatalize
Dane wejściowe mogą zawierać 0, może to być ciąg znaków.
Calvin's Hobbies
Widzę, że Luis Mendo pojawia się z odpowiedzią MATL w najbliższej przyszłości heh.
Magic Octopus Urn

Odpowiedzi:

16

JavaScript (ES6), 83 ... 74 73 bajty

Pobiera dane wejściowe jako ciąg.

n=>1/([a,b,c]=[...n].map(v=>--v+v/3|0))||45242>>(a^b)&(~c&&n<99|b*2==a+c)

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:

  • +1 dla górnego rzędu
  • 0 dla środkowego rzędu
  • -1 dla dolnego rzędu.

Wszystkie poniższe kody są przedstawione w systemie szesnastkowym.

7 8 9      8 9 A  (+1)
4 5 6  =>  4 5 6  (unchanged)
1 2 3      0 1 2  (-1)

Rozważmy wszystkie kombinacje XOR tych nowych kodów kluczowych. Przylegające klawisze są wyróżnione nawiasami.

XOR|  0   1   2   4   5   6   8   9   A 
---+------------------------------------
 0 |  0  [1]  2  [4] [5]  6   8   9   A 
 1 | [1]  0  [3] [5] [4] [7]  9   8   B 
 2 |  2  [3]  0   6  [7] [4]  A   B   8 
 4 | [4] [5]  6   0  [1]  2  [C] [D]  E 
 5 | [5] [4] [7] [1]  0  [3] [D] [C] [F]
 6 |  6  [7] [4]  2  [3]  0   E  [F] [C]
 8 |  8   9   A  [C] [D]  E   0  [1]  2 
 9 |  9   8   B  [D] [C] [F] [1]  0  [3]
 A |  A   B   8   E  [F] [C]  2  [3]  0 

Widzimy, że dwa klucze są ciągłe tylko wtedy, gdy XOR ich kody prowadzą do jednej z następujących wartości:

1, 3, 4, 5, 7, C, D, F

Ta lista może być spakowana w następującą maskę binarną:

  FEDCBA9876543210
  ----------------
0b1011000010111010 = 0xB0BA = 45242

Stąd test, aby ustalić, czy dwa kody kluczy (a, b) odpowiadają dwóm sąsiednim kluczom:

45242 >> (a ^ b) & 1

W przypadku trzech kluczowych kodów (a, b, c) potrzebny jest ten dodatkowy test:

b * 2 == a + c

Przykład:

a = 0xA
b = 0x6
c = 0x2

0xB0BA >> (0xA ^ 0x6) & 1 == 0xB0BA >> 0xC & 1 == 1
=> 0xA and 0x6 are contiguous key codes

0x6 * 2 == 0xA + 0x2
=> 0xA, 0x6 and 0x2 are contiguous key codes on the same row, column or diagonal

Próbny

Ten fragment wyświetla listę prawdziwych wartości.

Arnauld
źródło
Koercja jest tutaj twoim przyjacielem: a-.5zwraca true dla każdej tablicy azawierają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)
ETHproductions
@ETHproductions Ach, miło! 1/ajest jeszcze krótszy i myślę, że powinien równie dobrze działać.
Arnauld,
5

Python3, 72 bajty

lambda n,s="123 456 789 741 852 963 42 753 86 26 159 84 ":n in s+s[::-1]

Dane wejściowe są traktowane jako ciąg.

Zapraszamy do gry w golfa! :RE

Yytsi
źródło
Czy to przyjmuje liczbę jako ciąg?
FlipTack,
@ Flp.Tkc Tak to robi. Wspomnę o tym w poście. Dzięki!
Yytsi,
@TuukkaX w łańcuchu jest dodatkowe miejsce s, możesz zapisać 1 bajt.
Gurupad Mamadapur,
@GurupadMamadapur Nie rozumiem, dlaczego miałbym zmienić moje obecne 72-bajtowe rozwiązanie na twoje 74-bajtowe rozwiązanie ...: D A jeśli odwołujesz się do mojego ciągu znaków 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!
Yytsi,
@TuukkaX Tak, masz rację co do dodatkowej spacji, tęskniłem :)
Gurupad Mamadapur
4

Befunge, 169 161 159 bajtów

38*:2+"*0>DTV{51"3*\3*"kV"3*\3*"{w"3*\3*"mr"v
v:\&+*83:++66:+"c":+"?":+"$":++66:+"W":*6\*4<
_v#:\_v#*-+%+55g00*+55g02\*-g02\*-g00\`9::::p02/+55p00%"d":
0<@.!!<

Wypró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.

James Holderness
źródło
Myślę, że możesz zmienić ostatni wiersz, 0<@.!!<aby zapisać 2 bajty. Polega to na tym, że szczyt stosu jest niezerowy, gdy IP spada na drugą strzałkę. Wypróbuj online!
MildlyMilquetoast
3

Galaretka , 29 24 19 bajtów

Zaoszczędzono 5 bajtów dzięki sugestii @ Dennisa Ki Ɠ.

9s3µUŒD;;Z;ŒDµ;UKƓẇ

Wypróbuj online!

Wyjaśnienie

9Rs3µUŒD;;Z;ŒDµ;UKƓẇ  Main link. Argument: number
9s3                   Split [1..9] into [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
   µ                  New monadic chain
    U                 Reverse the rows
     ŒD               Take the diagonals of the result
       ;              Append the original rows
        ;Z            Append the original columns
          ;ŒD         Append the original diagonals
             µ        New monadic chain
              ;U      Append the reverse of everything
                K     Join by spaces
                 Ɠẇ   Check if a line from STDIN is in the result
PurkkaKoodari
źródło
Jeśli czytasz dane wejściowe ze STDIN, 9s3µUŒD;;Z;ŒDµ;UKƓẇzapisuje 5 bajtów.
Dennis,
Czy potrzebujesz odwrócić rzędy? Mogą pojawiać się do przodu lub do tyłu, więc 123,456,789powinny być takie same jak789,456,123
Riley
@ Riley Odwracam każdy wiersz, a nie wiersze jako tablicę. Myślę, że mógłbym tam być jaśniejszy. W każdym razie robi się to, aby uzyskać połowę przekątnych.
PurkkaKoodari,
2

Rubinowy, 77 bajtów

->n{!!((s='123 456 789 147 258 369 753 951 86 62 24 48 ')+s.reverse)["#{n}"]}
Vasu Adari
źródło
Tworzysz ciąg, który jest „123 456 789 147 258 369 753 951” + ten sam ciąg odwrócony i sprawdzasz, czy parametr znajduje się w ciągu, prawda? Jeśli tak, to rozwiązanie jest nieprawidłowe. Na przykład 86i 24zawiedzie.
Yytsi,
Reguły mówią, że potrzebujesz tylko podać wartość prawdy lub fałszu, więc nie potrzebujesz !!ani towarzyszących jej nawiasów.
Jordan
0

bash, 75

printf %s\\n 123 456 789 741 852 963 42 753 86 26 159 84|tee >(rev)|grep $1

wypisuje coś i zwraca 0 dla wszystkich wartości z tej listy

nic nie drukuje i zwraca 1 we wszystkich innych przypadkach

izabera
źródło
0

Java, 397 bajtów

public class Numpad {public static void main(String[] args){Scanner input=new Scanner(System.in);int in=input.nextInt();int h=in/100;int u=in%10;int t=(in%100)/10;boolean out=false;input.close();if(in<10)out=true;else if( h==0){int decider=Math.abs(t-u);if((decider==1)||(decider==3)||(decider==4))out=true;}else{if ( Math.abs(h-t) == Math.abs(t-u))out=true;}System.out.println("RESULT : "+out);}}
Nefi knomore
źródło
Jestem nowy w tym .. uprzejmie wybaczcie wszelki niepamięć.
Nefi knomore
Witam i witam na stronie! Zredagowałem twój post, aby sekcja kodu była wyświetlana jako kod i dodałem liczbę bajtów, co jest standardem dla odpowiedzi tutaj. Ta konkurencja to zawody w kodzie golfowym , co oznacza, że ​​ostatecznym celem jest jak najkrótszy kod. Na przykład możesz użyć krótkich nazw zmiennych i zdefiniować funkcję zamiast pełnej klasy. Nie jestem świetny w Javie, ale więcej wskazówek można znaleźć tutaj . Powinieneś spróbować skrócić swój kod, a następnie edytować nową wersję w swoim poście.
DJMcMayhem