Penduduk Flapus menggunakan sistem nomor basis-8. Jumlahnya adalah:
0 - Kuzla
1 - Ponara
2 - Boqkel
3 - Colopee
4 - Vruenat
5 - Foham
6 - Stikty
7 - Kricola
Untuk angka di atas 7, nama lengkap dari digit terakhir didahulukan, diikuti oleh apostrof dan karakter pertama dari digit lainnya, hingga dan termasuk vokal pertama:
11 - Ponara (1) 'po (1)
13 - Colopee (3)' po (1)
64 - Vruenat'sti
55 - Foham'fo
47 - Kricola'vru
Ketika angkanya naik, rumusnya tetap sama - nama lengkap digit terakhir yang lebih dulu, diikuti oleh tanda kutip dan karakter pertama dari digit lainnya, hingga dan termasuk vokal pertama. Perhatikan bahwa terlepas dari digit terakhir (kata pertama), urutannya tetap sama.
123 - Colopee (3) 'po (1) bo (2)
205 - Foham (5)' bo (2) ku (0)
1123 - Colopee'popobo
7654 - Vruenat'kristifo
Pengecualian aturan adalah untuk angka yang diakhiri dengan 0. Di sini kata itu dimulai dengan Ku dan dilengkapi dengan huruf pertama dari digit lainnya, hingga dan termasuk vokal pertama. Tidak ada apostrof yang digunakan.
10 - Kupo
70 - Kukri
350 - Kucofo
630 - Kustico
1000 - Kupokuku
Tantangan
Tulis program atau fungsi yang menerima nomor basis-8 yang valid, dan hasilkan persamaan yang diucapkan. Anda mungkin menganggap Anda akan selalu menerima nomor yang valid. Mengejar whitepace / baris baru setelah jawaban Anda ok. Karakter pertama harus huruf besar, sesuai contoh.
Ini adalah kode-golf . Kode terpendek dalam byte menang. Celah standar berlaku. Jawaban yang panjangnya dikonversi dan tambahan dikirim di Flapussian mendapatkan cookie tambahan.
Uji kasus
0 -> Kuzla
1 -> Ponara
2 -> Boqkel
3 -> Colopee
4 -> Vruenat
5 -> Foham
6 -> Stikty
7 -> Kricola
10 -> Kupo
11 -> Ponara'po
23 -> Colopee'bo
56 - > > Stikty'fo
70 -> Kukri
100 -> Kupoku
222 -> Boqkel'bobo
2345 -> Foham'bocovru
Jawaban:
Pyth, 117 byte (Kricola'popo)
Dipindah tangan ke pseudocode pythonic:
sumber
if ... else
menjadi terner dengan mengubahfor
loop Anda menjadi sebuahmap
operasi, dan kemudian membuat beberapa perubahan kecil. Inilah yang saya dapat. Saya juga akan menarik perhatian Anda."
yang dapat digunakan pada string terkompresi.Retina , Colopee'pokri,
165157143127123 byteLinefeed tambahan sangat penting.
Cobalah online!
Penjelasan
Kami mulai dengan membawa digit tambahan ke depan dan memasukkan tanda kutip setelahnya. Perhatikan bahwa ini membuat angka satu digit tidak berubah, karena regex tidak cocok - sehingga mereka tidak pernah mendapatkan tanda kutip di tempat pertama.
Ini menggantikan setiap digit dengan nama lengkapnya, terlepas dari di mana ia muncul.
Ini memperpendek semua nama digit yang muncul setelah tanda kutip. Perhatikan bahwa hanya vokal yang
iou
muncul pertama kali dalam nama digit, jadi kami memeriksa posisi yang tepat setelah salah satu dari mereka, dan setelah tanda kutip dan kemudian mencocokkan (dan menghapus) semua huruf kecil yang mengikuti posisi itu. Karena kami telah memasukkan nama digit dalam case title, ini akan berhenti sebelum digit berikutnya.Ini menggunakan transliterasi untuk mengubah semua karakter huruf besar,
L
menjadi pasangan huruf kecill
,, asalkan ditemukan dalam pertandingan yang dimulai dengan'
(agar modal utama tidak tersentuh).Satu-satunya hal yang tersisa adalah menangani dengan benar kelipatan (oktal) 10. Dalam hal ini, kita akan mendapatkan hasil yang dimulai dengan
Kuzla'
, yang ingin kita mulai denganKu
. Jadi kami cukup menghapus semua kemunculanzla'
.sumber
JavaScript (ES6), 171
Uji
sumber
Java (1.8) - Vruenat'fobo (
486340 bytes)Tepat ketika saya pikir saya tidak mungkin bermain golf lagi, saya menemukan 33 byte lagi! Sangat tersanjung! Penghematan terbesar adalah dari beralih ke array char (lebih pendek ke huruf besar / kecil), dan menggunakan kembali array string input untuk kata-kata.
Menemukan banyak trik golf, hingga di bawah 400! Secara teori saya masih bisa mengurangi ini lagi, seperti yang saya katakan fungsi akan ok dalam aturan, sedangkan ini adalah program lengkap.
Diperbarui Menggunakan pendekatan Martin Büttner, saya refactored untuk menggunakan regex sebagai gantinya. Berhasil menyimpan 10 byte lagi! Terima kasih Martin.
Tidak disatukan
sumber
interface F
dan menghapus deklarasi publik tentang metode utama. Anda juga dapat menghapus ruang masukString[] x
dan masuk.substring(0, v+1)
."Kuzla,Ponara,Boqkel,Colopee,Vruenat,Foham,Stikty,Kricola".split(",")
adalah 70 byte, sedangkan array inline adalah 74.Python (3.5)
225222217202 byteSolusi yang berfungsi dengan pemahaman daftar dalam python
Penjelasan
Menang 3 byte dengan versi split (versi sebelumnya:
d="Kuzla","Ponara",...
)Inisialisasi hasil dalam fungsi digit terakhir
Ubah daftar d untuk mempertahankan 2 atau 3 karakter pertama dan masukkan huruf kecil
Cat string
sumber
Javascript ES6,
231228225222204 byteMenyimpan banyak byte berkat Neil.
sumber
[...s]
alih-alihs.split``
;b=b==c[0]?"Ku":b+"'"
bukannyaif(b==c[0]){b="Ku"}else b+="'"
; sama untukif(a.length)
(gunakan saja0
untukelse
bagian);a.map(d=>b+=c[d].match...)
bukannya mengutak-atikfor
danshift
. Saya pikir sudah 29 byte yang disimpan.[iou]
kelas "vokal" Anda.F #,
364288250 byte (Kubofo)Mengembalikan fungsi yang mengambil bilangan bulat dan mengembalikan setara Flapus-nya. = D
sumber
Python 3 -
181177 byte (Ponara'bosti)Waspadalah terhadap penggunaan paling menakjubkan yang
pow
pernah Anda lihat dalam seluruh hidup Anda.u**v
setara dengan konteks boolean sepertiu|(not v)
yang sebelumnya di-golf dengan~v+2|u
ekspresi yang bagus !sumber