Tugas Anda adalah menghitung jumlah total penekanan tombol yang diperlukan untuk memasukkan teks yang diberikan pada ponsel lama.
Intinya adalah:
1:1
2:abcABC2
3:defDEF3
4:ghiGHI4
5:jklJKL5
6:mnoMNO6
7:pqrsPQRS7
8:tuvTUV8
9:wxyzWXYZ9
0:<space><newline>0
Untuk mengetik exaMPle TExt 01
, Anda akan menekan 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
total 37 penekanan tombol.
The *
key membawa peta karakter khusus:
.,'?!
"-()@
/:_;+
&%*=<
>£€$¥
¤[]{}
\~^¡¿
§#|`
dengan yang pertama ( .
) disorot. Anda dapat bergerak untuk menyorot karakter yang diperlukan menggunakan tombol navigasi persegi panjang dan perlu penekanan tombol lain untuk memilih.
Jadi untuk memasukkan $
, Anda akan menekan *↓↓↓↓→→→<select>
yaitu total 9 penekanan tombol.
- Input akan berasal dari file yang disebut
source
ditempatkan di direktori / direktori program Anda saat ini. EDIT: Per permintaan dalam komentar, saya menambahkanSTDIN
sebagai metode input yang valid. Permintaan maaf untuk mengubah spesifikasi setelah menerima jawaban. - Anda harus mengeluarkan
Total key presses <total_keypresses>
- Jika file input berisi karakter apa pun yang tidak ada dalam keymap yang diberikan, maka program Anda harus
Invalid character <character> in source
keluar dan keluar.
Singkatnya, input dan output dari program Anda harus mirip dengan skrip python (ungolfed) ini:
# 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)
Ini adalah kode-golf, program terpendek dalam byte yang menang.
Penafian tak tahu malu: Saya membuat tantangan ini untuk memiliki terjemahan skrip python di atas dalam berbagai bahasa yang akan digunakan untuk menilai tantangan ini di kotak pasir .
1ce5a2fdd0316e37c0a07d151d02db766a3adbb7
.Jawaban:
GolfScript, 219 karakter
Pendekatan dasar menggunakan tabel pencarian:
Coba di sini .
sumber
source
, bukan STDIN"#{File.read('source')}"
"#{File.read'source'}"
Ruby 2.0, 232
Skema pengkodean yang sangat sederhana sejauh ini: lebih dari 75% karakter digunakan untuk string / array literal ...
sumber
CJam, 207 byte
Program ini memiliki 207 karakter. Dengan penyandian yang sesuai (Windows-1252), ini cocok dengan 207 byte.
Perhatikan bahwa Stack Exchange mengonversi tab (yang saya gunakan sebagai pembatas di tabel pencarian) menjadi spasi, jadi Anda tidak dapat menyalin dan menempelkan kode di atas.
Pemakaian
Pengkodean Windows-1252
Pengkodean UTF-8
sumber
PHP,
711708676 karakter (membaca dari STDIN sekarang)Golf pertamaku sejauh ini :)
Ingin mencoba pendekatan yang agak tidak konvensional. Alih-alih memiliki daftar setiap karakter dan berapa banyak klik yang diperlukan untuk membuatnya, saya menggunakan nilai ASCII karakter dan menghitung penekanan tombol yang diperlukan. Saya pikir itu akan memberi saya beberapa karakter pertama, sekarang saya pikir itu bahkan lebih lama dari pendekatan array.
Masalah utama saya adalah tombol 7 dan 9, yang memiliki 4 huruf, bukan 3. Oleh karena itu saya perlu membuat beberapa fallback, yang meledakkan kode saya hingga hampir 200 karakter.
Versi tidak disatukan
Saya berasumsi masih ada banyak ruang untuk perbaikan, tapi saya cukup senang dengan ini.
Hal buruk lainnya adalah penggunaan yang diperlukan
iconv()
untuk daftar karakter khusus. Beberapa di antaranya (€
,,¥
...) tidak didukung oleh PHP.sumber
utf8_decode
akan bekerja dengan baik untuk setiap karakter kecuali dari€
. Itu sebabnya saya harus menggunakannyaiconv
. Kode saya tidak menghitung karakter khusus ini seperti halnya dengan karakter normal, karena tidak berurutan dan saya tidak dapat bekerja dengan andal dengan nilai ASCII masing-masing. Itu menggunakan daftar normal untuk mereka.Python 3, 239 karakter
sumber
JavaScript (E6) 291
Edit
Versi shell, menggunakan shell spydermonkey. Baca dari file 'sumber', tulis ke sdtout
Coba pertama, berfungsi di konsol FireFox menggunakan popup untuk input dan output
Dapat dibaca
sumber
VBScript 435
Tidak mendukung karakter non-ASCII. Saya cukup jauh dengan kode saya jadi saya pikir saya akan mempostingnya untuk referensi. Saya tidak berpikir orang lain menggunakan pendekatan ini.
sumber