Geben Sie bei einer Ganzzahl von 1 bis einschließlich 999 einen Wahrheitswert aus, wenn dieser horizontal, vertikal oder diagonal vorwärts oder rückwärts im 3x3-Quadrat der Ziffern 1-9 auf einem Standard- Ziffernblock angezeigt wird :
789
456
123
Wenn die Nummer nicht angezeigt wird, geben Sie einen falschen Wert aus.
Die genauen 65 Zahlen, für die Sie die Wahrheit ausgeben müssen, sind:
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
Alles andere ist falsch.
Der kürzeste Code in Bytes gewinnt.
code-golf
number
decision-problem
integer
Calvins Hobbys
quelle
quelle
Antworten:
JavaScript (ES6),
83...7473 BytesÜbernimmt die Eingabe als Zeichenfolge.
3 Bytes gespart dank ETHproductions
Wie es funktioniert
Wir transformieren den Nummernblock, indem wir jeder Ziffer einen Versatz zuweisen, der der Zeile entspricht, zu der sie gehört:
Alle folgenden Codes werden hexadezimal dargestellt.
Betrachten wir alle XOR-Kombinationen dieser neuen Schlüsselcodes. Angrenzende Tasten sind in eckigen Klammern markiert.
Wir können sehen, dass zwei Schlüssel genau dann zusammenhängend sind, wenn die XOR-Verknüpfung ihrer Codes zu einem der folgenden Werte führt:
Diese Liste kann in die folgende Binärmaske gepackt werden:
Daher der Test, um festzustellen, ob zwei Tastencodes (a, b) zwei zusammenhängenden Tasten entsprechen:
Für drei Tastencodes (a, b, c) benötigen wir diesen zusätzlichen Test:
Beispiel:
Demo
Dieses Snippet gibt die Liste der Wahrheitswerte aus.
Code-Snippet anzeigen
quelle
a-.5
Gibt true für jedes Array zurück,a
das (null oder) eine ganze Zahl enthält.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
ist noch kürzer und sollte genauso gut funktionieren, denke ich.Python3, 72 Bytes
Die Eingabe wird als Zeichenfolge verwendet.
Golfvorschläge willkommen! : D
quelle
s
, Sie können 1 Byte speichern.s
hinter der ein Leerzeichen steht84
, dann sind Sie falsch, da dies erforderlich ist. Wenn es kein Leerzeichen enthalten würde, hätte die resultierende Zeichenfolge eine Kette '8448', was zu fehlgeschlagenen Testfällen führen würde. Vielen Dank für die Vorschläge!Befunge,
169161159 BytesProbieren Sie es online!
Die ersten beiden Zeilen drücken nur die Liste der Testnummern auf den Stapel. Dies erfolgt in der Reihenfolge der Größe, da es manchmal einfacher ist, eine Zahl als Versatz von der vorherigen in der Reihe zu generieren, als sie von Grund auf neu zu generieren. Sobald wir zu den größeren Zahlen gekommen sind, können wir manchmal auch ein Byte speichern, indem wir sie paarweise erzeugen, z
"kV"3*\3*
258 und 321 in neun Bytes, wobei sie einzeln jeweils fünf Bytes benötigen.Die Hauptschleife befindet sich in Zeile drei und wird von rechts nach links mit Umlauf ausgeführt. Dadurch werden nur alle Testnummern auf dem Stapel durchlaufen und der Wert selbst, der Wert% 100 und der Wert / 10 verglichen. Wenn einer dieser Werte mit der eingegebenen Zahl oder der Zahl <= 9 übereinstimmt, geben wir 1 aus und beenden den Vorgang. Wenn es keine Übereinstimmung gibt, wird die Schleife fortgesetzt. Wenn uns die Testnummern auf dem Stapel ausgehen, geben wir 0 aus und beenden.
Vielen Dank an Mistah Figgins , die mir ein paar Bytes gespart hat.
quelle
0<@.!!<
, um 2 Bytes zu sparen. Dies setzt voraus, dass die Spitze des Stapels nicht Null ist, wenn die IP auf den zweiten Pfeil fällt. Probieren Sie es online!Jelly ,
292419 Bytes5 Bytes gespart dank @ Dennis 'Vorschlag von
K
undƓ
.Probieren Sie es online!
Erläuterung
quelle
9s3µUŒD;;Z;ŒDµ;UKƓẇ
5 Bytes gespeichert .123,456,789
sollten also mit789,456,123
Ruby, 77 Bytes
quelle
86
und24
wird fehlschlagen.!!
oder die zugehörigen Klammern.Bash, 75
gibt etwas aus und gibt für alle Werte in dieser Liste 0 zurück
druckt nichts und gibt in allen anderen Fällen 1 zurück
quelle
Java, 397 Bytes
quelle