Bevor ich dies lese, empfehle ich, dieses kleine Rätsel zu lesen: /puzzling/11408/längstes-Wort-mit-benachbarten- Buchstaben-auf-einer- Tastatur
Ich möchte, dass Sie ein Programm erstellen, das ein Argument, ein Wort (nur Kleinbuchstaben), und "Ja" ausgibt, wenn das Wort mit benachbarten Tasten auf der Tastatur eingegeben werden kann (siehe Artikel), und "Nein", wenn das Wort kann nicht mit nebenstehenden Buchstaben geschrieben werden.
Hier ist das Tastaturlayout für diese Herausforderung:
┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
| Q | W | E | R | T | Y | U | I | O | P |
└─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┘
| A | S | D | F | G | H | J | K | L |
└─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┘
| Z | X | C | V | B | N | M |
└───┴───┴───┴───┴───┴───┴───┘
Denken Sie daran: Dies ist Codegolf, also gewinnt die kürzeste Antwort!
code-golf
puzzle-solver
keyboard
Loovjo
quelle
quelle
Antworten:
Pyth, 66
Probieren Sie es hier aus.
Ich war überrascht zu erfahren, dass Pyth keine Hypotenuse-Funktion hat, daher wird dies wahrscheinlich von einer anderen Sprache geschlagen. Ich werde Pyth eine Hypotenuse-Funktion vorschlagen, damit diese Gräueltat in Zukunft nicht mehr vorkommt.
Erläuterung
Ich verwandle die Tastatur in diese:
Was ich dann als codiere
"qwertyuiopasdfghjkl*zxcvbnm"
. Dann benutzte ich divmod mit modulo 9.5, um die 2D-Koordinaten jeder Taste herauszufinden. Dann berechne ich die Abstände zwischen aufeinanderfolgenden Schlüsseln und überprüfe, ob der Quadratabstand <2 ist.quelle
CJam,
837574 BytesProbieren Sie es online aus.
Erläuterung
Der allgemeine Ansatz besteht darin, eine große Adjazenzzeichenfolge zu erzeugen, die jedes Paar benachbarter Tastaturzeichen enthält, und dann zu überprüfen, ob jedes Paar benachbarter Eingabezeichen in dieser Zeichenfolge enthalten ist.
Ich bin ziemlich zufrieden damit, wie ich es geschafft habe, die Adjazenzzeichenfolge zu erstellen, die eine sehr einfache und kompakte Logik verwendet.
quelle
J, 77 Bytes
Verwendung:
Methode:
Für jeden eingegebenen Buchstaben wird eine 2D-Koordinate (ähnlich dem Bild in der Frage) basierend auf dem Index in der Zeichenfolge generiert
'qazwsxedcrfvtgbyhnujmikXolX'
. Für jedes Buchstabenpaar in der Eingabe überprüfe ich, ob die Manhattan-Entfernung ihrer Koordinaten kleiner als 2 ist. Wenn alle sind, gebe ich sie ausYes
,No
andernfalls (durch Missbrauch des Operators).Probieren Sie es hier online aus.
quelle
p
.i.
Operator das zurück,index of the last element + 1
damit ich 1 Byte sparen kann, indem ich nicht ausschreibep
und trotzdem den korrekten Index erhalte.CJam, 75
Probieren Sie es hier aus ( Firefox hier ).
Übersehen den Ja / Nein-Teil ... Behoben.
quelle