Orang tua saya punya perangkat home theatre. Remote rusak sehingga sangat sulit untuk menavigasi ke kanan dalam menu. Sebagian besar waktu itu tidak bekerja tetapi ketika itu bergerak ke kanan sangat cepat.
Ini jelas membuat frustasi tetapi yang paling membuat frustrasi ketika Anda ingin memasukkan judul film yang mengharuskan Anda menavigasi keyboard yang terlihat seperti ini:
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 1 2 3 4
5 6 7 8 9 0
Tugas Anda adalah memasukkan judul film dan menghitung seberapa "frustasi" mengetikkan judul film itu. Jumlah frustasi dari string tertentu adalah jumlah huruf yang perlu dipindahkan tepat dari huruf sebelum mereka. Kami tidak peduli seberapa jauh mereka, karena jika kami mulai bergerak ke kanan, kami akan langsung menuju ke ujung garis, dan kami tidak peduli dengan gerakan naik, turun atau ke kiri karena mudah.
Misalnya jika kita ingin mengetik
keyboard
- Kita mulai dari
k
secara gratis. e
tepat di atask
sehingga kita tidak perlu bergerak ke kanan.y
semua jalan kiri sehingga tidak perlu bergerak ke kanan.b
Namun ada di kolom berikutnya ke kanan sehingga kita perlu bergerak ke kanan untuk sampai ke sana.o
ada di kolom berikutnya sehingga kita harus bergerak ke kanan untuk mendapatkannya.a
kembali di kolom pertama sehingga kami bergerak ke kiri untuk sampai ke sana.r
adalah semua jalan di kanan jadi kami bergerak ke kanan ke sana.d
adalah dua kolom di sebelah kirir
kolom.
Karakter yang perlu bergerak ke kanan bor
berarti bahwa ini adalah frustrasi 3.
Aturan tambahan
Ini adalah tantangan kode-golf sehingga jawaban Anda akan dinilai dalam byte dengan lebih sedikit byte yang lebih baik. Input akan selalu terdiri dari karakter alfanumerik, Anda dapat mendukung huruf besar atau kecil dan Anda hanya perlu mendukungnya. Masukan tidak akan pernah kosong.
Testcases
keyboard -> 3
2001aspaceodyssey -> 6
sorrytobotheryou -> 8
thinblueline -> 5
blast2 -> 3
"blast2" -> 3
(bukan film sungguhan, tetapi beberapa jawaban memiliki masalah dengan test case seperti itu)90 -> 1
Jawaban:
JavaScript (Node.js) ,
615554 byteDisimpan 1 byte berkat @nwellnhof
Mengambil input sebagai array karakter.
Cobalah online!
Bagaimana?
Untuk semua karakter tetapi digit lebih besar dari0 , kolom 0-diindeks x diberikan oleh:
di mana adalah kode ASCII dari karakter.c
Untuk digit positif , kita perlu melakukan sebaliknya:n
Contoh:
Berkomentar
sumber
"blast2"
."234"
,.Jelly , 11 byte
Tautan monadik yang menerima daftar karakter (huruf besar).
Cobalah online!
Bagaimana?
Pertama, ganti any
'0'
dengan'4'
s (jadi sisa kode memperlakukannya sebagai yang ada di kolom paling kanan). Kemudian dilemparkan ke ordinal, menambahkan satu dan modulo dengan6
untuk mendapatkan indeks kolom berbasis 0. Kemudian membandingkan tetangga dengan is-less-than dan menjumlahkan hasilnya.sumber
Perl 6 ,
4539 byteCobalah online!
Bekerja dengan huruf besar.
(2-ord(c))%46%6
menghitung koordinat x terbalik.sumber
Bersih , 85 byte
Cobalah online!
sumber
Ruby , 56 byte
Cobalah online!
Versi naif awal, akan golf.
sumber
Japt
-x
, 14 byteCobalah online!
Port jawaban Jelly ini . Mengambil input sebagai array karakter, dengan huruf besar.
Penjelasan:
sumber
Java (OpenJDK 8) , 73 byte
Bukan solusi buruk untuk Jawa! Nol itu berada di sisi kanan saya biaya beberapa byte.
Cobalah online!
Dijelaskan
sumber
05AB1E ,
1211 byte-1 byte terima kasih kepada @Kevin Cruijssen
Port lain dari jawaban Jelly Jonathan Allan. Mengambil input dalam huruf besar.
Penjelasan:
Cobalah online!
sumber
0'4
dapat¾4
menyimpan byte ( tip 05AB1E relevan ).K (ngn / k) ,
32 3128 byteCobalah online!
sumber
Retina 0.8.2 , 46 byte
Cobalah online! Tautan termasuk kasus uji. Penjelasan:
Tuliskan alfabet dan digit dalam urutan pada OSK dan petakan masing-masing ke nomor kolom (diindeks).
Ubah setiap nomor kolom menjadi unary.
Hitung jumlah kolom yang diikuti oleh kolom yang lebih besar (yaitu ke kanan). The
&`
memungkinkan pertandingan untuk tumpang tindih.sumber
Python 2 , 84 byte
Cobalah online!
sumber
Mathematica, 102 byte
Fungsi murni. Mengambil daftar karakter sebagai input dan mengembalikan nomor sebagai output. Ini adalah solusi yang cukup naif, saran golf menyambut.
sumber
PHP,
74 8177 byteJalankan sebagai pipa dengan
-nR
atau coba online .sumber
C (gcc) ,
82 7977 byteCobalah online!
Fungsi ini hanya akan mendukung input huruf kecil
Tidak dikumpulkan dan berkomentar:
Jika fungsi saya diizinkan untuk menerima string karakter lebar, itu dapat dikurangi menjadi 76 byte dengan:
Cobalah online!
Versi ini hanya menerima input sebagai
int*
gantinyachar*
Suntingan:
c
)sumber