Raumnummernfinder
Ich habe in meinem Job eine interessante Problemlösungstechnik gefunden, als ich von einem Kollegen die falsche Zimmernummer für ein Meeting erhalten habe. Von Zeit zu Zeit schickt mir ein Mitglied meines Teams auf dem Weg zu einer Besprechung die falsche Zimmernummer, normalerweise, weil es an seinem Schreibtisch eilig ist und der dicke Finger den falschen Schlüssel hat.
Interessanterweise kann ich bei der Ankunft im falschen Zimmer normalerweise erraten, welches Zimmer sie wirklich meinten, indem ich mir ein numerisches Tastenfeld vorstelle :
und indem sie eine benachbarte Zahl erraten, wollten sie drücken.
Herausforderung
Ihre Herausforderung besteht darin, eine Funktion zu schreiben, die eine Büronummer (000-999) annimmt und die möglichen Tippfehlerlösungen ausgibt, vorausgesetzt, Ihr Kollege gibt nur eine Ziffer falsch ein.
Die folgende Tabelle zeigt, welche Nummern auf einem Ziffernblock nebeneinander liegen:
0 -> 1,2
1 -> 0,2,4
2 -> 0,1,3,5
3 -> 2,6
4 -> 1,5,7
5 -> 2,4,6,8
6 -> 3,5,9
7 -> 4,8
8 -> 5,7,9
9 -> 6,8
Eingang
Eine 3 - stellige Nummer: 000-999
. Nehmen Sie die Eingabe von genau 3 Stellen an. Wenn die Zahl kleiner als 100 oder kleiner als 10 ist, erhalten Sie die führenden Nullen. (dh 004 & 028).
Ausgabe
Eine Liste der möglichen Zimmer. Dies kann in beliebiger Form erfolgen, sofern ein Trennzeichen zwischen den Zimmernummern vorhanden ist. (dh Leerzeichen, Komma, neue Zeile usw.) Wenn die Zahl kleiner als 100 oder kleiner als 10 ist, können Sie die führenden Nullen als Ausgabe haben oder nicht, das liegt an Ihnen. (dh 004 kann sein 004 04 4
, und 028 kann sein 028 28
)
Testfälle (führende Nullen sind optional):
008 -> 108, 208, 018, 028, 005, 007, 009
123 -> 023, 223, 423, 103, 113, 133, 153, 122, 126
585 -> 285, 485, 685, 885, 555, 575, 595, 582, 584, 586, 588
777 -> 477, 877, 747, 787, 774, 778
963 -> 663, 863, 933, 953, 993, 962, 966
555 -> 255, 455, 655, 855, 525, 545, 565, 585, 552, 554, 556, 558
Das ist Code-Golf , also gewinnt der kürzeste Code in Bytes für jede Sprache.
933
, ich habe es behoben.Antworten:
Wolfram Language (Mathematica) ,
112106 BytesWenn
GridGraph
wir erkennen, dass ein Ziffernblock im Grunde ein 3x3-Ziffernblock mit Kanten für 0 ist, erhalten wir die benachbarten Ziffern für jede eingegebene Ziffer mitAdjacencyList
.Dies ist unten zu sehen:
EdgeAdd[GridGraph[{3,3},VertexLabels->"Name",GraphLayout->"SpringEmbedding"],{0<->1,0<->2}]
ergibt:Dann nutze ich
Tuples
, um alle möglichen Fehler herauszufinden und diejenigen mit genau einem Fehler mitSelect
und auszuwählenEditDistance
. Dies funktioniert übrigens bei längeren Zimmernummern, und Sie können denEditDistance
Parameter auch erhöhen , um mehr als einen Fehler zuzulassen. Könnte dies ein wenig weiter Golf spielen können, wollte aber meine Herangehensweise zeigen.Etwas mehr Golf-Version auf Länge 3 Zimmernummern (106 Bytes) fest codiert. Dies wird als Rang 3-Liste ausgegeben, die jeder Ziffer entspricht:
Probieren Sie es online!
quelle
DamerauLevenshteinDistance
stattdessenEditDistance
auch Umsetzungsfehler enthalten würden.Python 2 , 89 Bytes
Probieren Sie es online!
Die 1 st und 5 th Zeichen können hier nicht angezeigt werden (Browser abhängig), aber die vollständige Zeichenfolge entspricht
[21, 204, 1035, 62, 157, 2468, 359, 48, 579, 68]
quelle
05AB1E , 29 Bytes
Probieren Sie es online!
quelle
R , 190 Bytes
Probieren Sie es online!
Mein zweiter Versuch bei CodeGolf! Ziemlich lang, 190 Bytes, aber das Beste, was ich mit R. schaffen konnte. Neugierig, ob andere Feedback haben oder es besser machen können!
quelle
:
over missbrauchen,*/+-
können Sie ein paar Bytes in der ersten Zeile einsparen, es entfernendo.call
,a
alsmatrix
Transponieren behandeln und rund 39 Bytes einsparen: Probieren Sie es online aus!JavaScript (Firefox 30-57),
115 bis109 ByteBearbeiten: 6 Bytes dank @ edc65 gespeichert (obwohl Vorschläge
0
jetzt nach anderen Vorschlägen erscheinen). ES6-Version,118112 Bytes:quelle
[...[12,240,1350,26,157,2468,359,48,579,78][c]+'']
[for(...)]
war einer von mehreren Syntaxvorschlägen für das Array-Verständnis, die es nie in ECMAscript geschafft haben. Sie haben die Möglichkeit, einen Iterator zu durchlaufen und die Ergebnisse genau zu filtern und / oder zuzuordnen. (Ich fand es besonders nützlich, wenn ich eine doppelte Iteration durchführte.)Java,
205177 BytesIch weiß, es ist lang im Vergleich zu den anderen Antworten. Meine Entschuldigung: Es ist in Java.
Oracle sollte
toCharArray
in so etwas wie umbenennengetCrs
.Credits
-28 Zeichen von Kevin Cruijssen
quelle
(String b)->
kann gerecht seinb->
, und Sie können das nachgestellte entfernen;
. Was das Golfen angeht: Du verwendest es nura
einmal, also kannst du es direkt entfernenString[]a=...;
und verwenden"12,024,0135,26,157,2468,359,48,579,68".split(",")[...]
. AuchByte.parseByte
kannnew Byte
. Insgesamt: 177 Bytes .Ruby 97 Bytes
Probieren Sie es online!
Alternativ 94 Zeichen, aber 100 Bytes
Probieren Sie es online!
quelle
C (gcc) , 136 oder 114 Bytes
ASCII-Version 136 Bytes
Probieren Sie es online!
Unicode
114108 Bytes (TiO scheint dafür seltsam zu zählen)Vielen Dank an @ceilingcat für diese Version.
Probieren Sie es online!
quelle
Perl 5 ,
12085 + 2 (-F
) = 87 BytesProbieren Sie es online!
35 Bytes durch Ausleihen einer Idee aus der Ruby-Antwort von @ AsoneTuhid gespart.
quelle
Python 2 , 103 Bytes
danke an @Lynn für -4 bytes.
Probieren Sie es online!
quelle
in`0x134cd9a07d1e58feab643f7db24102`[int(v)::10]
(Ich habe es auch versucht,int('…',36)
aber es ist ein Byte länger.)Julia 0,6 , 93 Bytes
Probieren Sie es online!
0x502A044228550A21102B05406
ist ein,UInt128
bei dem das1+10j
th-Bit gesetzt ist, wenn fi
neben stehtj
auf dem Nummernblock .big(1)
ist einBigInt
. Es wird verwendet, um einen Überlauf zu verhindern und verwendet weniger Zeichen alsInt128(1)
oderUInt128(1)
.quelle
SQL (SQLite), 533 Byte
Ungolfed
Erläuterung
Die Eingabe ist eine einzelne Textzeile in einer Tabelle
t
mit einer Spaltes
. Mein Verständnis ist, dass dies nach dieser Meta-Antwort eine akzeptable Form der Eingabe ist. Die Eingabe kann wie folgt erstellt werden.Kommentierte Lösung
quelle
Kotlin , 117 Bytes
Verschönert
Prüfung
TIO
TryItOnline
quelle
Gelee , 35 Bytes
Probieren Sie es online!
-1 Danke an Jonathan Allan .
Erklärung wird aktualisiert ...
quelle
Wẋ3
->ḷþ
T-SQL , 322 Bytes
Die Eingabe stammt aus der Spalte
s
einer einzeiligen Tabelle mit dem Nament
:Ungolfed:
SQLFiddle
quelle