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 ...