Teman Anda tidak terlalu pandai menggunakan komputer sehingga sebagai lelucon praktis seseorang mengacak-acak huruf (az) di keyboard-nya. Ketika dia duduk dan mencoba mengetik namanya sambil melihat keyboard, dia menyadari bahwa huruf-hurufnya berantakan dan meminta bantuanmu.
Anda cerdas sehingga Anda tahu bahwa jika ia mengetik namanya dan berulang kali mengetik ulang apa yang muncul di layar alih-alih namanya, ia akan berhasil memasukkan namanya pada akhirnya. Anda juga baik dan mengatur kembali kunci tetapi ingin tahu berapa banyak putaran yang diperlukan untuk berhasil.
Tugas Anda adalah menulis program atau fungsi yang memberikan pengocokan huruf-huruf dan nama teman menghitung jumlah belokan.
Detail input:
- Dua string diberikan sebagai input dalam struktur yang nyaman untuk bahasa Anda.
- String pertama adalah daftar huruf kecil baru dalam urutan abjad dari yang lama. (Karakter pertama adalah karakter yang ada di posisi
a
, karakter terakhir ada di posisiz
.) Beberapa perubahan akan selalu terjadi dalam string. - String kedua adalah namanya. Ini dapat berisi karakter ascii yang dapat dicetak tetapi hanya karakter alfabet huruf besar dan kecil yang akan dikocok jika ada. Nama itu sendiri mungkin tidak dikocok di al.
Rincian keluaran:
- Output adalah bilangan bulat tunggal jumlah belokan minimal yang diperlukan. Baris baru adalah opsional.
Contoh:
Input:
'abcfdeghijklmnopqrstuvwxyz' 'Mr. John Doe'
(d, e, f posisi berubah)
Output:
3
(Nama yang ditampilkan adalah: Mr. John Fod
=> Mr. John Eof
=> Mr. John Doe
)
Input:
'nopqrstuvwxyzabcdefghijklm' 'Mr. John Doe'
( cipher ROT13 )
Output:
2
(Setiap nama input yang berisi huruf akan mengambil 2
putaran untuk menghasilkan nama asli.)
Memasukkan:
'aebcdjfghiqklmnopzrstuvwxy' 'John Doe'
Keluaran:
140
Ini adalah kode-golf sehingga entri terpendek menang.
sumber
aebcdjfghiqklmnopzrstuvwxy
(output 1260 untukMr John Doe
). Ini adalah maksimum yang mungkin - ini terdiri dari siklus urutan 4, 5, 7, 9 (dan tidak berubaha
), dan setiap nama yang mengandung setidaknya satu huruf dari setiap siklus akan menghasilkan 1260. Dan saya kira mengambil alfabet itu sendiri sebagai input atau menggunakan nama yang tidak terpengaruh juga merupakan kasus tepi yang penting.EOF
sangat menakjubkan!Jawaban:
Pyth, 16 byte
Coba di sini.
Input harus diberikan pada dua baris, nama dan kemudian permutasi. Permutasi harus dikutip. Nama dapat dikutip atau tidak dikutip. Sebagai contoh:
Memberi 140.
Penjelasan:
sumber
CJam,
31 27 2524 byteMengambil input dalam bentuk:
yaitu baris pertama - huruf, baris kedua - nama.
Cara kerjanya :
Cobalah online di sini
sumber
Ruby, 58
Penjelasan
Enumerable#find
(terima kasih @Ventero!) DanString#tr!
untuk mengganti karakter sampai digantiString
sesuai dengan nama asli.sumber
""+n
sedikit lebih pendek daripadan.dup
, dan Anda dapat menyimpan byte lain dengan menggunakan kreatifEnumerable#find
alih-alih menggunakan penghitung eksplisit:(1..1e4).find{t.tr!(...)==n}
n.downcase!
).A-Z
dan+a.upcase
A-Z+a.upcase
dann.downcase!\n
memiliki panjang yang sama :)CJam,
3231 byteUji di sini. Dibutuhkan permutasi pada baris pertama, dan nama pada baris kedua dari input.
Penjelasan
sumber
Pyth 26
Cobalah online di sini.
Ada beberapa konsekuensi yang tidak menguntungkan yang menghabiskan biaya byte program ini, seperti harus menyimpan G dalam K untuk menggunakannya dalam pengurangan, serta perlu menggunakan not (bukan (J)) untuk memulai filter. Karena itu, saya berharap ini masih bisa bermain golf.
Ini adalah program yang mengambil input seperti:
(Catat kurangnya kutipan dalam argumen pertama)
Penjelasan yang akan datang setelah melelahkan kelelahan;)
sumber
Haskell 131 byte
Panggil
f
dengan string permutasi dan nama untuk mendapatkan hasilnyaPenjelasan
sumber
GolfScript (33 byte)
Mengambil input sebagai dua (satu atau dua) string yang dikutip dipisahkan oleh jumlah spasi putih; misalnya
Demo online
Pembedahan
Transliterasi bergantung pada fakta bahwa semua karakter terpengaruh (itu
{'ABC'?'abc'=}%
denganA$
penggantian string yang diurutkan'ABC'
dan permutasiA
menggantikan'abc'
); alternatif yang lebih umum tidak cukup menghemat karena filter ke karakter alfabet sangat murah.Ini juga bergantung pada
-1$
untuk mengakses bagian bawah tumpukan, yang merupakan trik GS yang relatif jarang.sumber