Perusahaan kabel tertentu yang terkenal memiliki fitur 'Cari Program' yang agak canggung yang bekerja melalui remote. Dibutuhkan banyak tombol untuk mendorong; jadi, sebagai pengagum ekonomi gerak, saya pikir saya akan mencari bantuan programmer untuk meminimalkan jumlah gerakan jari yang harus saya buat.
Fitur Pencarian Craptastic menampilkan tata letak sel yang dapat dipilih, 1 baris 3 sel diikuti oleh 6 baris 6 sel, yang terlihat seperti ini:
del spa sav
A B C D E F
G H I J K L
M N O P Q R
S T U V W X
Y Z 0 1 2 3
4 5 6 7 8 9
Ada sel untuk masing-masing huruf A-Z
, dan spa
yang digunakan untuk menambahkan spasi ke string pencarian. del
seharusnya digunakan untuk menghapus karakter; dan sav
dimaksudkan untuk digunakan untuk menyimpan string pencarian. Kami akan mengabaikan fungsi aktual ini untuk tantangan ini; tetapi sel-sel itu masih dapat dipilih untuk tujuan kita.
Kami mulai dengan string pencarian kosong dan A
sel dipilih; dan kami menggunakan tombol panah kiri, kanan, atas dan bawah untuk mengubah sel yang dipilih. Ketika tombol 'OK' pusat ditekan, karakter di sel yang dipilih ditambahkan ke string pencarian. Untuk kenyamanan, kita akan menggunakan <
, >
, ^
, v
dan _
untuk kiri, kanan, atas, bawah dan OK, masing-masing.
Untuk huruf dan angka, aksi tombol arah sangat mudah. Tidak ada 'bungkus'; misalnya, jika sel saat ini G
, maka <
tidak berpengaruh.
Jadi untuk memasukkan string pencarian BIG
, kita bisa menggunakan urutan
>_>v_<<_
(awal >
diperlukan untuk memindahkan kami dari sel awal default A
ke sel B
). Atau, tentu saja kita bisa menggunakan >_v>_<<_
; tetapi perhatikan tidak ada urutan yang lebih pendek dari 8 kunci yang dapat melakukan pekerjaan.
Sekarang karena baris paling atas hanya memiliki tiga sel, aksi di sana sedikit berbeda dan sedikit mempersulit:
Pertama, jika sel yang dipilih berada di baris huruf atas A-F
, ^
kunci itu memindahkan sel yang dipilih tepat di atas; jadi A,B
pergi ke del
, C,D
pergi ke spa
dan E,F
pergi ke sav
.
Sebaliknya, jika sel yang dipilih adalah 'del', v
kunci tersebut memindahkan sel yang dipilih A
, dan >
kunci membuat sel yang dipilih spa
. Demikian pula v
kunci memindahkan sel yang dipilih dari spa
ke C
, dan sav
ke E
.
Ini berarti bahwa misalnya, jika Anda saat ini berada di B
sel, urutannya ^v
tidak mengembalikan Anda ke B
sel; alih-alih itu membawa Anda ke A
sel.
Dan mulai dari A
sel, urutan v>>^
memindahkan kita ke C
sel; sementara urutan ^>>v
memindahkan kita ke E
sel.
Tantangan
Diberikan acara TV atau judul film s
, yang hanya terdiri dari karakter dalam A-Z
, 0-9
dan space
, program / fungsi Anda harus menampilkan salah satu urutan penekanan tombol dengan panjang minimal untuk dimasukkan s
sebagai string pencarian dari keadaan awal dengan mode Craptastic.
Output Anda harus berupa string atau daftar nilai berbeda yang mewakili urutan atas, bawah, kanan, kiri, dan OK; jadi Anda tidak terbatas pada rangkaian karakter <>^v_
(misalnya, udrl*
atau daftar dengan elemen bilangan bulat 0,1,2,3,4 akan menjadi alternatif yang dapat diterima, asalkan Anda mengartikulasikan apa skema Anda).
Ini adalah kode-golf ; tabu celah biasa berlaku. Semoga peluang selalu menguntungkan Anda untuk setiap bahasa.
Uji Kasus
Di bawah ini adalah input dan contoh jawaban yang dapat diterima (urutan berbeda lainnya akan benar juga, tetapi harus paling banyak dari panjang contoh yang diberikan).
(Saya memposting ulang tombol di sini sehingga orang dapat lebih mudah bermain bersama secara visual, jika itu adalah salah satu ...)
del spa sav
A B C D E F
G H I J K L
M N O P Q R
S T U V W X
Y Z 0 1 2 3
4 5 6 7 8 9
BIG >_>v_<<_
THE OFFICE >vvv_^^_>>>^_^<_vvv_>>>^^__<<<v_^_>>_
FARGO ^>>v>_^<<v_^>>v>vv_<<<<<^_>>v_
BUFFY >_>vvv_>>>^^^__^<<vvvvv_
DALLAS >>>_<<<_^>>v>v__^^<<v_vvv_
THX1138 >vvv_^^_>>>>vv_<<v__>>_<v_
ON DEMAND >>vv_<_^^^>_v>_>_<<<<vv_^^_>vv_>>^^_
NEWS RADIO >vv_>>>^^_vvv_<<<<_^^^^>_>vvv>_^^^<<v_>>>_<v_v_
ROOM 909 ^>>v>vv_<<<__<<_^^^>_>vvvvvv>_<<<^_>>>v_
FA
lurus tetapi naik-turundel
dansav
tidak berguna di sini?del
dansav
tidak memiliki fungsi jika 'OK' digunakan ketika mereka dipilih; tapi itu akan membuang penekanan tombol.Jawaban:
JavaScript (ES6), 196 byte
Golf kode ini di bawah 200 byte pada dasarnya adalah mimpi buruk (tapi itu menyenangkan). Saya benar-benar menantikan implementasi yang lebih sederhana dan lebih pendek.
Cobalah online!
Bagaimana?
Variabel
p adalah posisi saat ini pada keypad sesuai dengan pemetaan berikut dan diinisialisasi ke 6 (tombol "A" )
P adalah posisi karakter target c
Pindahkan pengodean
Ada 7 kemungkinan gerakan. Kami menyandikan masing-masing sebagai bilangan bulat 7-bit. 4 bit paling signifikan memegang nilai perpindahan V + 6 dan 3 bit paling signifikan memegang simbol ID S .
Penjajaran dengan tombol fungsi
Di awal setiap iterasi, kami mengeksekusi kode berikut untuk memastikan bahwa p disejajarkan dengan tombol fungsi saat ini jika kami berada di baris pertama:
Pindahkan logika
Langkah ini dipilih dengan rantai panjang (terlalu) operator ternary yang dirinci di bawah ini.
sumber
Python 2 ,
294293289 byteCobalah online!
sumber
JavaScript, 311 byte
Tidak yakin bagaimana cara bermain golf ini ...
f
: konversi 'A-Z0-9' ke 1-36, spasi menjadi "S"g
: dapatkan 4 saudara kunci yang diberikanh
: temukan jalur terpendek dari p ke qF
: jawabannyasumber