Einführung
In letzter Zeit habe ich mich daran gewöhnt, mit Swype zu tippen .
Ich habe bemerkt, dass bestimmte Wörter erzeugt werden können, indem eine gerade Linie vom Anfangsbuchstaben zum Endbuchstaben gezogen wird oder indem Buchstaben, die sich wiederholen, übersprungen werden.
Zum Beispiel kann ich das Wort balloon
eingeben, indem ich über die folgenden Buchstaben tippe:
b> a> l> o> n.
Herausforderung
Definieren wir den kürzesten Swype-Pfad oder SSP
die Mindestanzahl unterscheidbarer Liniensegmente, die zum Eingeben einer Zeichenfolge erforderlich sind. Ein Liniensegment ist eine durchgehende gerade Linie zwischen zwei oder mehr Buchstaben. Bei jeder Richtungsänderung wird ein neues Liniensegment erstellt. Einige Wörter können jedoch durch Ziehen einer einzelnen geraden Linie vertauscht werden.
Verwenden Sie dieses einfache QWERTZ- Tastaturlayout:
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
In dem obigen Beispiel wird das Wort balloon
wird eine hat SSP
von 4
so detailliert in der folgenden Reihenfolge:
1) Start at `b` (line segments = 0)
2) slide to `a` (line segments = 1)
3) slide to `l` (line segments = 2)
4) slide to `o` (line segments = 3)
5) slide to `n` (line segments = 4)
Die Zeichenfolge qwerty
hat SSP
= 1, da beim Swippen dieses Wortes keine Richtungsänderung erforderlich ist.
Eingang
Eine einzelne Wortfolge, die a-z
über STDIN, ein Funktionsargument oder eine Befehlszeile eine beliebige Zeichenfolge enthält .
Ausgabe
Drucken Sie über STDOUT, return oder die nächstgelegene Alternative Ihrer Sprache, wobei die Zahl n
die Zeichenfolge darstellt SSP
.
Eine abschließende Newline optional in outut. Standardlücken sind nicht erlaubt. Kürzeste Einreichung in Bytes gewinnt.
Anmerkungen
- Ein Richtungswechsel startet ein neues Liniensegment.
- Buchstaben, die sich wiederholen, werden nur einmal gezählt (zB:
bookkeeper
sollten als behandelt werdenbokeper
). - Normalerweise korrigiert Swpye fehlende Buchstaben, indem es benachbarte Buchstaben ansieht und die bestmögliche Schätzung eingibt. Nehmen Sie für diese Herausforderung an, dass es keine natürlichen Spracherweiterungen, Textvorhersagen oder Fehlerkorrekturen gibt.
A-Z
Eingaben in Großbuchstaben werden wie ihre Gegenstücke in Kleinbuchstaben behandelt.- Ignorieren Sie alle Zahlen
0-9
in der Eingabe. - Diagonal Pfade erlaubt - das heißt, eine gerade Linie, die Abdeckungen Buchstaben
o
,k
,n
, beispielsweise als zählen1
Segment. Diese Regel gilt auch für alle diagonalen Neigung (zB Buchstabenc
,h
,i
sind in Zeile).
Beispiele
Input Output
---------------------
a 0
aa 0
aaaaaa 0
aaaaaabc 2
in 1
int 2
java 3
qwerty 1
chicago 5
balloon 4
BALLOON 4
typewriter 5
bookkeeper 6
stackexchange 11
2hello7 3
2HELLO7 3
Antworten:
CJam,
7876736862 BytesBeachten Sie, dass der Code nicht druckbare Zeichen enthält.
Die clevere Idee von Borrowing @ isaacg, RLE zu verwenden, um die 6 Bytes gespeicherten Pfade zu zählen.
Probieren Sie es online im CJam-Interpreter aus . Wenn der Link nicht funktioniert, kopieren Sie den Code aus dieser Paste .
Wie es funktioniert
quelle
Pyth,
535049 BytesTastaturkomprimierungsformat dank @Dennis.
Diese Antwort enthält einige nicht druckbare Zeichen. Den richtigen Code finden Sie unter den folgenden Links.
Vorführung . Testgeschirr.
Erläuterung:
quelle