Ihre Aufgabe ist es, die Gesamtzahl der Tastendrücke zu berechnen, die erforderlich sind, um einen bestimmten Text auf einem alten Mobiltelefon einzugeben.
Die Keymaps sind:
1:1
2:abcABC2
3:defDEF3
4:ghiGHI4
5:jklJKL5
6:mnoMNO6
7:pqrsPQRS7
8:tuvTUV8
9:wxyzWXYZ9
0:<space><newline>0
Zum Tippen exaMPle TExt 01
müssen Sie 33 99 2 6666 77777 555 33 0 8888 33333 99 8 0 <a 1-sec pause here in real life but we'll ignore it>000 1
insgesamt 37 Tasten drücken .
Die *
Taste ruft eine Karte mit Sonderzeichen auf:
.,'?!
"-()@
/:_;+
&%*=<
>£€$¥
¤[]{}
\~^¡¿
§#|`
mit dem ersten ( .
) hervorgehoben. Mit den rechteckigen Navigationstasten können Sie das gewünschte Zeichen markieren und es ist ein weiterer Tastendruck erforderlich, um es auszuwählen.
Zum Einfügen $
würden Sie *↓↓↓↓→→→<select>
also insgesamt 9 Tastendrücke drücken.
- Die Eingabe erfolgt aus einer Datei,
source
die im aktuellen Verzeichnis / Verzeichnis Ihres Programms abgelegt ist. BEARBEITEN: Pro Anfragen in Kommentaren füge ichSTDIN
als gültige Eingabemethode hinzu. Entschuldigung für die Änderung der Spezifikation nach Erhalt der Antworten. - Sie müssen ausgeben
Total key presses <total_keypresses>
- Wenn die Eingabedatei ein Zeichen enthält, das nicht in der angegebenen Keymap enthalten ist, muss Ihr Programm ausgeben
Invalid character <character> in source
und beenden .
Kurz gesagt, die Eingabe und Ausgabe Ihres Programms muss derjenigen dieses (ungolfed) Python-Skripts ähneln:
# This Python file uses the following encoding: utf-8
from __future__ import print_function
import sys
general_dict = { '1':1,
'a':1, 'b':2, 'c':3, 'A':4, 'B':5, 'C':6, '2':7,
'd':1, 'e':2, 'f':3, 'D':4, 'E':5, 'F':6, '3':7,
'g':1, 'h':2, 'i':3, 'G':4, 'H':5, 'I':6, '4':7,
'j':1, 'k':2, 'l':3, 'J':4, 'K':5, 'L':6, '5':7,
'm':1, 'n':2, 'o':3, 'M':4, 'N':5, 'O':6, '6':7,
'p':1, 'q':2, 'r':3, 's':4, 'P':5, 'Q':6, 'R':7, 'S':8, '7':9,
't':1, 'u':2, 'v':3, 'T':4, 'U':5, 'V':6, '8':7,
'w':1, 'x':2, 'y':3, 'z':4, 'W':5, 'X':6, 'Y':7, 'Z':8, '9':9,
' ':1, '\n':2, '0':3
}
special_chars = ['.',',',"'",'?','!','"','-','(',')','@','/',':','_',';','+','&','%','*','=','<','>','£','€','$','¥','¤','[',']','{','}','\\','~','^','¡','¿','§','#','|','`']
for x in special_chars:
general_dict[x]=(special_chars.index(x)/5) + (special_chars.index(x)%5) + 2
key_press_total = 0
with open('source') as f: # or # with sys.stdin as f:
for line in f:
for character in line:
if character in general_dict:
key_press_total+=general_dict[character]
else:
print('Invalid character',character,'in source')
sys.exit(1)
print('Total key presses',key_press_total)
Dies ist Code-Golf, das kürzeste Programm in Bytes gewinnt.
Schamloser Haftungsausschluss: Ich habe mich dieser Herausforderung gestellt, um Übersetzungen des obigen Python-Skripts in verschiedene Sprachen zu haben, die verwendet werden, um diese Herausforderung im Sandkasten zu bewerten .
1ce5a2fdd0316e37c0a07d151d02db766a3adbb7
.Antworten:
GolfScript, 219 Zeichen
Grundlegender Ansatz unter Verwendung einer Nachschlagetabelle:
Versuchen Sie es hier .
quelle
source
STDIN erfolgen"#{File.read('source')}"
"#{File.read'source'}"
Ruby 2.0, 232
Bisher sehr einfaches Kodierungsschema: Über 75% der Zeichen werden für String- / Array-Literale verwendet ...
quelle
CJam, 207 Bytes
Dieses Programm hat 207 Zeichen. Bei entsprechender Codierung (Windows-1252) passt es in 207 Bytes.
Beachten Sie, dass Stack Exchange Registerkarten (die ich als Trennzeichen in der Nachschlagetabelle verwende) in Leerzeichen konvertiert, sodass Sie den obigen Code nicht kopieren und einfügen können.
Verwendung
Windows-1252-Codierung
UTF-8-Codierung
quelle
PHP,
711708676 Zeichen (wird jetzt aus STDIN gelesen)Mein erster Golf bisher :)
Wollte einen eher unkonventionellen Ansatz ausprobieren. Anstatt eine Liste jedes Zeichens zu haben und wie viele Klicks erforderlich sind, um es zu erstellen, verwende ich die ASCII-Werte des Zeichens und berechne ihre erforderlichen Tastendrücke. Dachte, es würde mir zuerst ein paar Charaktere ersparen, jetzt denke ich, ist es sogar länger als ein Array-Ansatz.
Mein Hauptproblem sind die Tasten 7 und 9, die 4 anstatt 3 Buchstaben haben. Deshalb musste ich ein paar Fallbacks erstellen, die meinen Code um fast 200 Zeichen in die Luft sprengten.
Ungolfed-Version
Ich gehe davon aus, dass es noch viel Raum für Verbesserungen gibt, aber ich bin ziemlich zufrieden damit.
Eine weitere schlechte Sache ist die erforderliche Verwendung von
iconv()
für die Liste der Sonderzeichen. Einige davon (€
,¥
, ...) nicht nativ von PHP unterstützt.quelle
utf8_decode
würde gut funktionieren für jeden Charakter mit Ausnahme von€
. Deshalb musste ichiconv
stattdessen verwenden. Mein Code berechnet diese Sonderzeichen nicht wie normale Zeichen, da sie nicht in Ordnung sind und ich nicht zuverlässig mit ihren jeweiligen ASCII-Werten arbeiten kann. Es wird eine normale Liste für sie verwendet.Python 3, 239 Zeichen
quelle
JavaScript (E6) 291
Bearbeiten
Shell-Version mit Spydermonkey-Shell. Lesen Sie aus einer 'Quell'-Datei und schreiben Sie sie in sdtout
Erster Versuch, funktioniert in der FireFox-Konsole mit Popup für Ein- und Ausgabe
Lesbar
quelle
VBScript 435
Unterstützt keine Nicht-ASCII-Zeichen. Ich war ziemlich weit mit meinem Code zusammen und dachte, ich würde ihn als Referenz posten. Ich glaube nicht, dass irgendjemand anders diesen Ansatz gewählt hat.
quelle