Sebelum membaca ini saya sarankan membaca puzzle kecil ini: /puzzling/11408/longest-word-with-adjacent-letters-on-a-keyboardboard
Saya ingin Anda membuat program yang mengambil satu argumen, satu kata (hanya huruf kecil), dan menghasilkan "Ya" jika kata itu dapat diketik dengan tombol yang berdekatan pada keyboard (lihat artikel) dan "Tidak" jika kata itu dapat diketik dengan huruf yang berdekatan.
Berikut tata letak keyboard yang digunakan dalam tantangan ini:
┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
| 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 |
└───┴───┴───┴───┴───┴───┴───┘
Ingat: ini codegolf sehingga jawaban terpendek menang!
code-golf
puzzle-solver
keyboard
Loovjo
sumber
sumber
Jawaban:
Pyth, 66
Coba di sini.
Saya terkejut mengetahui Pyth tidak memiliki fungsi miring, jadi ini kemungkinan akan dikalahkan oleh bahasa yang berbeda. Saya akan mengusulkan fungsi miring ke Pyth, jadi kekejaman ini tidak akan terjadi di masa depan.
Penjelasan
Saya mengubah keyboard menjadi ini:
Yang kemudian saya encode sebagai
"qwertyuiopasdfghjkl*zxcvbnm"
. Kemudian saya menggunakan divmod dengan modulo 9.5 untuk mengetahui koordinat 2D dari setiap kunci. Lalu saya menghitung jarak antara tombol berurutan, dan memeriksa apakah jarak kuadrat <2.sumber
CJam,
837574 byteCobalah online.
Penjelasan
Pendekatan umum adalah untuk menghasilkan string adjacency besar yang berisi setiap pasangan karakter keyboard yang berdekatan dan kemudian memeriksa bahwa setiap pasangan karakter input yang berdekatan terkandung dalam string itu.
Saya cukup senang dengan bagaimana saya berhasil membangun string adjacency, yang menggunakan logika yang sangat sederhana dan kompak.
sumber
J, 77 byte
Pemakaian:
Metode:
Untuk setiap huruf input yang saya hasilkan adalah koordinat 2D (mirip dengan gambar dalam pertanyaan) berdasarkan indeks dalam string
'qazwsxedcrfvtgbyhnujmikXolX'
. Untuk setiap pasangan huruf dalam input saya memeriksa apakah jarak Manhattan koordinat mereka lebih kecil dari 2. Jika semuanya, saya outputYes
,No
sebaliknya (dengan menyalahgunakan operator `).Cobalah online di sini.
sumber
p
.i.
operator mengembalikanindex of the last element + 1
sehingga saya dapat menyimpan 1 byte dengan tidak menulisp
dan masih mendapatkan indeks yang benar.CJam, 75
Coba di sini ( Firefox di sini ).
Mengabaikan bagian Ya / Tidak ... Diperbaiki.
sumber