Teman saya dan saya memiliki permainan ini yang kami mainkan dengan kata-kata. Ini adalah hiburan yang menyenangkan dan melibatkan "membatalkan" surat dalam kata sampai tidak ada yang tersisa. Saya benar-benar lelah dia menjadi jauh lebih cepat daripada saya dalam hal itu, jadi itu adalah tugas Anda untuk mengimplementasikannya dan biarkan saya akhirnya mengalahkannya. Jelas, karena saya harus membuat program semudah mungkin bersembunyi, itu harus sekecil mungkin.
Bagaimana cara kerja game ini?
Gim ini adalah algoritma yang cukup sederhana. Ini mengurangi string abjad sampai tidak dapat direduksi lebih jauh, sehingga membuatnya menjadi semacam hash. Game sebenarnya yang kita manusia lakukan sangat sulit untuk diterapkan, tetapi dapat disederhanakan menjadi algoritma berikut:
Anda mulai dengan melipat alfabet menjadi dua dan membariskan dua bagian seperti:
a b c d e f g h i j k l m
z y x w v u t s r p q o n
Kemudian, mulai dari tengah, Anda menetapkan bilangan bulat positif ke bagian atas dan negatif ke bawah:
a b c d e f g h i j k l m
13 12 11 10 9 8 7 6 5 4 3 2 1
z y x w v u t s r p q o n
-13 -12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1
Kemudian Anda mengambil string Anda (kami akan menggunakan hello world
) dan mengabaikan karakter non-abjad, menerjemahkannya:
h e l l o w o r l d
6 9 2 2 -2 -10 -2 -5 2 10
Kemudian Anda menjumlahkan nilai huruf. Yang berbaris di diagram sebelumnya (misalnya d
dan w
, l
dan o
) akan dibatalkan, sementara yang lain akan bertambah.
sum(6 9 2 2 -2 -10 -2 -5 2 10 )=12
12 adalah nomor b
, sehingga hash dari hello world
isb
Untuk sebuah kata yang benar-benar membatalkan (misalnya love
), Anda output "0 karakter": -
. Perhatikan bahwa dalam input, -
masih akan diabaikan. Itu hanya masalah dalam output.
Jika besarnya angka lebih besar dari 13, maka Anda mulai menggandakan pada a
'dan z
' Anda pada dasarnya mengambil sebanyak a
atau z
cocok dengan angka dan mengambil apa pun yang tersisa ke dalam huruf terakhir seperti:
code golf: 43.
Sesuai dengan 3 a
dan tersisa 4:
aaa 4: j
result: aaaj
Petunjuk: Bagian ini pada dasarnya divmod
kecuali bahwa itu membulat ke nol, bukan -infinity
(misalnya -43 akan menjadi 3 z
dan dan -4
yang p
begitu zzzp
).
Catatan: tanda hubung tidak datang jika sesuai a
atau z
sempurna, hanya jika tepat 0
.
Klarifikasi:
- Hash adalah case dalam sensitif
- Celah Standar tidak diizinkan
- I / O bisa dalam format apa pun yang tidak terlalu aneh, stdin, stdout, arg baris perintah, fungsi, dll.
- Ini adalah kode-golf sehingga ukuran terpendek dalam byte menang.
Contoh:
hello world --> b
love --> -
this is an example --> aak
hello *&*(&(*&%& world --> b
good bye --> ae
root users --> zzs
love
kosong ...Jawaban:
CJam, 46 byte
Cobalah online , atau coba test suite online .
Penjelasan
Algoritma bekerja seperti yang Anda harapkan: membaca input, mengonversi menjadi huruf kecil, memetakan setiap karakter ke nilai, menjumlahkan nilai, dan mencetak karakter dan menyesuaikan jumlah sesuai hingga jumlahnya nol. Mungkin optimasi yang paling menarik (meskipun hanya menghemat dua byte) adalah bahwa pemetaan karakter yang dinegasikan digunakan sebagai gantinya, karena ini menghindari bertukar argumen pengurangan untuk memperbaiki tanda saat menghitung nilai yang dipetakan dan menghindari bertukar lagi ketika memetakan kembali ke huruf karena pemetaan pengurangan nilai yang dinegasikan diganti dengan penambahan.
sumber
Pyth,
797877656158sumber
@Jz
daripadaf}YJz
Mungkin ada lebih banyak, tetapi saya harus tidur sekarang. Semoga berhasil;)@
!Klip 10 , 87
sumber
R, 258 byte
Ini harus menjadi kode R terburuk yang pernah ada. Saya pikir R mungkin menjadi pilihan yang layak karena memiliki vektor semua huruf "a" hingga "z" sebagai variabel global bawaan. Namun ternyata sisanya berantakan.
Penjelasan + tidak dikumpulkan:
Ini menciptakan objek fungsi tanpa nama yang menerima string sebagai input dan mengembalikan nilai hash terkait. Untuk menyebutnya, berikan nama, mis
f=function(s){...}
.Contoh:
Cobalah online!
Pertanyaan? Saya akan dengan senang hati memberikan penjelasan lebih lanjut. Saran? Saran lebih dari diterima!
sumber
Haskell, 171 byte
Uji coba:
Cara kerjanya:
l
adalah tabel pencarian dari huruf ke nilai yang sesuai. Cari semua karakter dari string input dan buang yang tidak ditemukan. Jumlahkan daftar yang dihasilkan. Tergantung pada jumlah yangp
dicetak-
atau mungkin beberapaa
s atauz
s dan akhirnya (terbalik) mencari surat daril
.sumber
R - 200
sumber