Diese Frage fragt nach einer T9-Wörterbuch-Matching-Funktionalität, was ein sehr interessantes Problem darstellt. Aber T9 hat eine andere Art zu tippen, nämlich Zeichen für Zeichen. Sie benötigen KEIN Wörterbuch, um diese Tastatur zu implementieren.
Hier ist die Tastenkarte einer T9-Tastatur, wenn Sie vergessen haben:
+-------+-------+-------+
| 1 | 2 | 3 |
| .?! | ABC | DEF |
+-------+-------+-------+
| 4 | 5 | 6 |
| GHI | JKL | MNO |
+-------+-------+-------+
| 7 | 8 | 9 |
| PQRS | TUV | WXYZ |
+-------+-------+-------+
| * | 0 | # |
| ← | SPACE | → |
+-------+-------+-------+
Wie T9 funktioniert
Um ein Zeichen mit T9 einzugeben, müssen Sie die Zifferntaste drücken, die diese n
Zeichenzeiten darstellt. n
ist die Reihenfolge dieses Zeichens, die auf diesen Schlüssel geschrieben ist. Zahlen sind das letzte Zeichen, das Sie für jeden Schlüssel eingeben können. Zum Beispiel B
drücke ich 2
zweimal, um zu tippen, oder um zu tippen, 5
drücke ich 5
viermal. Um die Eingabe dieses Zeichens zu beenden, drücke ich #
. *
ist einfach Rücktaste. In unserer Tastaturversion gibt es keine Großschreibung.
Eingabe- und Ausgabebeispiele:
8#99999#055#33#999#22#666#2#777#3# → T9 KEYBOARD
Erläuterung:
8
wählt ausT
und wechselt#
zum nächsten Zeichen99999
Wählen Sie das letzte Zeichen der9
Taste aus9
und#
wechseln Sie zum nächsten Zeichen0
fügt ein Leerzeichen ein33
Wählt das zweite Zeichen der3
Taste ausK
und wechselt#
zum nächsten Zeichen- Und so weiter...
Regeln
Ihre Funktion oder Ihr Programm sollte eine Zeichenfolge akzeptieren, die T9-Tastendrücke darstellt. Die Ausgabe ist der resultierende Text aus diesen Tastendrücken, wie oben beschrieben.
Dies ist Basic Code Golf, daher ist der Gewinner in Bytes am kürzesten und es gelten Standardregeln / Lücken.
T9 KEYBOARD
ist völlig falsch. Das liestT9 JEYBARD
#
wenn aufeinanderfolgende Schaltflächen sowieso unterschiedlich sind. Davon#
abgesehen : Was soll ohne diesen Bonus passieren, wenn er weggelassen wird?Antworten:
CJam,
10994 Bytes (2 nd Bonus)Eine sehr naive und lange Lösung
Dies ist ein vollständiges Programm, obwohl eine Funktion dieselbe Länge hat.
Der Eingang geht in STDIN
Beispiel:
Ausgabe:
Probieren Sie es hier online aus
quelle
JavaScript ES6,
220-10 = 210178 ByteAls Teil von Helkas CMC habe ich meine erste Herausforderung überholt.
Beispielausgaben:
Erläuterung
Dies implementiert eine rekursive Ersetzung, wobei alle Zeichen ersetzt werden, gefolgt von den
*
verbleibenden Zeichen*
.Dies entspricht allen Läufen aufeinanderfolgender Ziffern oder
*
s.Dadurch wird das gewünschte Wörterbuch erstellt, wobei der codierte Teil aus der großen Zeichenfolge abgerufen und anschließend die gewünschte Ziffer angehängt wird.
Dies erhält den Charakter, Modulos
a
Länge.Dies bereitet den String für die Verarbeitung und Entfernung von
*
s vor.quelle
t("2#2");
gibtB
stattAA
. Versuchen Sie, eine zu finden,#
anstatt sie zu entfernen.Python,167157151 Bytes(unterstützt '*' nicht)
Nichts Besonderes. Ich verwende Regex, um die Eingabe in eine Liste umzuwandeln, dann schleife ich die Einträge. Ich benutze das erste Zeichen und die Länge jedes Eintrags, um ihn in einer Suchliste zu suchen:
Nach einigem Golfen sieht es so aus:
(Noch) keine Boni. Ich weiß nicht, wie ich den ersten Bonus in Regex implementieren würde. Der zweite Bonus würde viele Bytes hinzufügen, da die Suchelemente nicht dieselbe Größe haben. Verstehe den dritten Bonus nicht wirklich.
quelle
Perl 5: 106 (104 Code + 2 Flags)
Geändert, um Löschungen zu behandeln.
Verwendung:
Perl 5: 88 (86 Code + 2 Flags)Alte Version ohne Sternenlöschung.
quelle
AWK 211 Bytes (mit den Boni)
Dies ist ein vollständiges Programm, das die Eingabe von stdin liest. Es wäre effizienter, die Tastatur nicht für jede Zeile neu zu teilen, aber das Skript würde länger.
Auch wenn die "0" -Taste etwas anderes als 0 wäre, wäre das Skript 4 Bytes kürzer, aber das ist Teil des Spiels: o)
quelle
C (245 Bytes)
Ausgabe
Erläuterung
Die Byteanzahl enthält nicht die im ersten angegebene Eingabezeichenfolge
#define
.Ich verwende ein zweidimensionales Array als Nachschlagetabelle für das zu druckende Zeichen. Das Programm liest durch Zeichen getrennte Zeichen ein
'#'
.Für jede Gruppe bestimmt die Eingabenummer den Array-Index der ersten Dimension, und die Anzahl der Wiederholungen der Eingabenummer bestimmt den Array-Index der zweiten Dimension. Das
'*'
verschiebt den Index des Arrays für die Ausgabezeichenfolge zurück, um den vorherigen Buchstaben zu überschreiben.Die Eingabezeichenfolge
44#
(1 Wiederholung von'4'
) wird also in die Nachschlagetabelle übersetztK[4][1]
, bei der es sich um das Zeichen handeltH
.Ungolfed Version
quelle
Ruby
254,248, 229 BytesGolf:
Ungolfed:
Alle diese Spezifikationen sollten erfolgreich sein:
Die
0 0
Antwort sieht ein bisschen wie eine hackige Lösung aus. Werde mich darum kümmern, wenn ich Zeit habe.quelle
PHP, 183-10 = 173 Bytes
Alle Versionen werden vom Befehlszeilenargument eingegeben. mit anrufen
php -r '<code>' <string>
.Hinweis : Alle Versionen geben eine Warnung aus, wenn die Eingabe mit beginnt
*
.Stellen Sie
$o=[];
den Code voran , um diesen Fehler zu beheben .210-10 - ?? = ??? Bytes
181 Bytes, kein Bonus
Nervenzusammenbruch
Die "no hash tags" -Versionen teilen die Zeichenfolge in (Streifen gleicher Anzahl) und (Sternchen) und vergessen alles andere. Die No-Bonus-Version nimmt (Streifen von Zahlen gefolgt von
#
) und (Sternchen).Durchlaufen Sie dann die Übereinstimmungen: Wenn ein '*' gefunden wird, entfernen Sie das letzte Element des Ergebnisarrays.
Der Unterschied zwischen den Versionen liegt im
else
Teil:-1
.quelle
JavaScript, 147 Bytes
Conors Antwort wurde mit dem regulären Ausdruck meiner PHP-Antwort korrigiert und nach unten gespielt.
Nervenzusammenbruch
rotierende Version, 158 Bytes
hinzugefügt
s=
, um die Zeichenfolge%s.length
zu speichern und zu drehen.quelle