Leonardo of Pisa (ca. 1175 - ca. 1245) lebih dikenal sebagai Fibonacci . Tetapi ini sebenarnya adalah kependekan dari bahasa Latin "filius Bonacci" (putra Bonacci) yang dibuat pada abad ke-18 (menurut Wikipedia ).
Dalam tantangan ini, Anda akan diberi nomor urut (dalam arti harfiah) antara 1 st dan 20 th dan Anda harus kembali istilah yang sesuai dalam deret Fibonacci .
Twist adalah bahwa nomor urut akan diberikan dalam bahasa Latin.
Contoh : "duodecimus" → .
Tabel I / O penuh
input | meaning | output
--------------------+---------+--------
"primus" | 1st | 0
"secundus" | 2nd | 1
"tertius" | 3rd | 1
"quartus" | 4th | 2
"quintus" | 5th | 3
"sextus" | 6th | 5
"septimus" | 7th | 8
"octavus" | 8th | 13
"nonus" | 9th | 21
"decimus" | 10th | 34
"undecimus" | 11th | 55
"duodecimus" | 12th | 89
"tertius decimus" | 13th | 144
"quartus decimus" | 14th | 233
"quintus decimus" | 15th | 377
"sextus decimus" | 16th | 610
"septimus decimus" | 17th | 987
"duodevicesimus" | 18th | 1597
"undevicesimus" | 19th | 2584
"vicesimus" | 20th | 4181
Aturan
- Input dijamin persis salah satu string yang dijelaskan di atas.
- Jika itu membantu, Anda dapat menggunakannya dalam huruf besar penuh sebagai gantinya. Tetapi harus konsisten untuk semua entri. Kasing campuran tidak diizinkan.
- Bergantung pada algoritme dan bahasa Anda, hardcoding atau komputasi ketentuan urutannya dapat menang atau kalah byte. Kedua pendekatan secara eksplisit diizinkan.
- Ini golf kode !
Jawaban:
R ,
9186 byteCari indeks jumlah byte dalam tabel pencarian UTF8 yang brutal dan gunakan fungsi penghasil Fibonacci ajaib untuk memberikan jawabannya.
Cobalah online!
Sunting: -2 byte dengan pembulatan numerik yang ditingkatkan
Sunting: -3 byte dengan perubahan pada pencarian (terima kasih atas petunjuknya, @Giuseppe!)
sumber
chartr
UTF8 dari jumlah dengan UTF8 dari nilai fibonacci, dan kemudianintToUtf8
output darichartr
."sextus decimus"
, Giuseppe.Ruby,
10493 byteCobalah online!
Cukup ambil jumlah byte, modulo 192 modulo 76 modulo 23, dan indeks ke dalam tabel pencarian. (Angka ajaib ditemukan dengan kekuatan kasar.)
sumber
Bersihkan , 87 byte
Semua lolos kecuali
\n
diperlakukan sebagai satu byte, karena kompiler baik-baik saja dengan nilai mentah aktual. (TIO dan SE memiliki masalah dengan itu tidak valid UTF-8, jadi itu lolos di sini)FryAmTheEggman membuat demonstrasi / solusi yang bagus: di sini
Cobalah online!
Menentukan fungsi
$ :: [Char] -> Int
, yang menggunakan keunikan dalam penjumlahan nilai karakter huruf besar untuk menentukan istilah mana dalam urutan (dihasilkan oleh fungsi helperk
) untuk mengembalikan.sumber
6502 kode mesin (C64), 82 byte
Ini menggunakan hashing (tentu saja), tetapi dioptimalkan untuk implementasi singkat pada 6502, mengambil keuntungan dari flag carry yang ditetapkan dengan bergeser dan digunakan sebagai tambahan. Angka ajaib untuk hashing ditemukan dengan memaksa kasar dengan program C kecil; yang
FF
byte adalah lubang disayangkan dalam tabel hash;)Jumlah byte: 2 byte memuat alamat, 38 byte kode, 42 byte hashtable untuk nilai.
Demo online
Penggunaan:,
SYS49152"[ordinal]"
misalnyaSYS49152"DUODECIMUS"
. (perhatikan huruf-huruf yang muncul huruf besar dalam konfigurasi C64 default).Penting : Sebelum awal pertama, berikan
NEW
perintah. Ini diperlukan karenaLOAD
perintah BASIC C64 mengutak-atik beberapa vektor BASIC, bahkan ketika memuat program mesin ke beberapa alamat absolut (seperti di sini$C000
/49152
).Berkomentar pembongkaran :
Suite uji C64 BASIC V2
(berisi program mesin
DATA
sejalan)Demo online
sumber
Perl 6 , 62 byte
Cobalah online!
Menggunakan tabel pencarian dalam string, serta generator urutan fibonacci pendek.
sumber
C (gcc) ,
135129 byte6 byte turun atas saran dari ceilingcat dan Logern
Cobalah online!
Penjelasan:
sumber
return i;
dengana=i;
Pyth , 54 byte
Suite uji
Memperhatikan: karena kode menggunakan beberapa karakter yang tidak patut dicetak, mungkin tidak ditampilkan dengan benar di Stack Exchange. Tautan yang disediakan mengarah ke sumber yang berfungsi dan dapat disalin dengan copy.
Singkatnya,
Q[0]+Q[618%len(Q)]
memberikan hasil unik untuk semua input yang diterimaQ
.sumber
Python 2 , 292 byte
Cobalah online!
Generator Fibonacci dicuri tanpa malu-malu dari jawaban ini .
Memecah setiap kata menjadi bagian-bagian komponen yang bermakna dan membuang sisanya (dalam "duodevicesimus", misalnya, kami hanya peduli tentang "duo ev es" -> "2 - 20" -> abs ("2-20") -> 18).
Melewati nilai yang dihitung (minus 1 hingga 0-offset) ke fungsi generator Fibonacci.
Penjelasan Tidak Dikunci:
sumber
Python 2 ,
9779 byteCobalah online!
Pertama, kami ingin mengonversi dari bahasa latin ke angka
n
; ini dilakukan denganmereplikasi string input cukup banyak untuk memastikan setidaknya ada total 11 karakter; dan kemudian karaktermengambil hash mod 69 dan mengubahnya menjadi char yang dapat dicetak.3
rd dan10
th (nol diindeks) membentuk pasangan unikSekarang sudah
n
. Untuk menemukan angkan
Fibonacci, kita dapat menggunakan metode pembulatan , hanya menggunakan presisi digit sebanyak yang kita butuhkan hingga Fib (20).sumber
JavaScript (Node.js) ,
10097959291 byteCobalah online!
Peringatan: BEKERJA KARENA TIDAK MENGAMBIL POINT INACCURACY
JavaScript tidak memiliki fungsi hash bawaan, atau fungsi karakter-ke-ASCII yang cukup pendek (
String.charCodeAt
sudah terpendek), jadi saya perlu mendefinisikan fungsi hash sederhana sendiri.Menggunakan metode pembulatan yang sama seperti yang dilakukan Chas Brown setelah menghitung hash.
Setelah seharian dengan brute-force, yang lebih baik ditemukan:
b32_to_dec(x.length + x) % 12789 % 24
(* ketidaktepatan floating point)b32_to_dec(x.length + x) % 353 % 27
(* ketidaktepatan floating point)b36_to_dec(x.length + x[2]) % 158 % 29 - 4
b36_to_dec(x[2] + x.length) % 741 % 30
b36_to_dec(x[0] + x[2] + x.length) % 4190 % 27
parseInt(x.length + x, 32)
hasilVersi tanpa eksploitasi ketidaktepatan floating point: 95 byte
Cobalah online!
b36_to_dec(x.length + x[2]) % 158 % 29 - 4
Meja Hash
sumber