Prancis mengeja angka dengan cara yang aneh.
- 1-16 "normal"
- 17-19 dijabarkan 10 + 7. 10 + 8, 10 + 9 .
- 20-69 "normal" (OK, OK! Tidak juga, tetapi mereka dalam tantangan ini)
- 70-79 adalah 60 + 10, 60 + 11 ... 60 + 10 + 7, 60 + 10 + 8, 60 + 10 + 9 .
- 80-99 adalah 4 * 20, 4 * 20 + 1, 4 * 20 + 2 ... 4 * 20 + 16, 4 * 20 + 10 + 7, 4 * 20 + 10 + 8, 4 * 20 + 10 + 9
Tantangan:
Ambil bilangan bulat positif dalam kisaran [1.100] , dan keluarkan dengan "cara Prancis". Anda harus menampilkannya persis seperti yang ditunjukkan di bawah ini, dengan *
dan +
, demikian 97
juga 4*20+10+7
, bukan [4 20 10 7]
atau sesuatu yang lain.
Kasus uji:
1 - 1
.. - ..
16 - 16
17 - 10+7
18 - 10+8
19 - 10+9
20 - 20
21 - 21
.. - ..
69 - 69
70 - 60+10
71 - 60+11
72 - 60+12
77 - 60+10+7
78 - 60+10+8
79 - 60+10+9
80 - 4*20
81 - 4*20+1
82 - 4*20+2
.. - ..
90 - 4*20+10
91 - 4*20+11
96 - 4*20+16
97 - 4*20+10+7
98 - 4*20+10+8
99 - 4*20+10+9
100 - 100
code-golf
number
kolmogorov-complexity
Stewie Griffin
sumber
sumber
16
ke10+7
atas. (Dalam bahasa Inggris hal itu terjadi di antara12
dan10+3
, dengan penyamaran yang sedikit lebih morfologis.) Saya selalu sedikit terlalu terbebani dengan fakta bahwa bahasa yang berbeda membuat transisi pada angka yang berbeda.22
ketika "dix-huit" adalah10+8
?Jawaban:
Excel,
153149 BytesSaya yakin ini bisa lebih baik, saya berjuang untuk menemukan cara yang efisien untuk menghitung # 80.
sunting: Menggabungkan case 'Normal' dengan lebih baik untuk menghemat 4 byte. # 80 masih menyebalkan.
Tidak dapat menemukan jawaban spesifik di sini, tidak yakin aturan kode-golf tbh. Bisakah saya menggunakan banyak sel di Excel, dan menambahkan jumlah byte masing-masing?
yaitu. Untuk input dalam sel A1
A2: 11 Bytes
A3 (hasil): 125 Bytes
Dengan total 136?
sumber
IF(A1=80,,IF(MOD(A1,20)>16,"+10+"&MOD(A1,20)-10,"+"&MOD(A1,20)))
keIFS(A1=80,,MOD(A1,20)>16,"+10+"&MOD(A1,20)-10,1,"+"&MOD(A1,20))
)
di bagian akhir, dapatkah Anda melakukan hal yang sama di excel? Jadi Anda dapat menyimpan 5 "byte" (benar-benar ada UCS2-Chars, jadi jika Anda mengatakan Byte == oktet, Anda harus menghitungnya dua kali lipat). Dan Anda harus mengubah,
di;
Retina ,
5248 byte4 byte disimpan berkat Neil
Cobalah online! atau verifikasi semua input (disediakan oleh Neil)
Penjelasan
Pertama kita menangani terjemahan 70, 80, dan 90. Dalam 3 tahap pertama ini, 7 di awal dengan karakter lain yang mengikutinya digantikan oleh
60+1
. Demikian pula,9
digantikan oleh81
, dan8
oleh4*20+1
. Penggantian pada9
dasarnya mengubahnya menjadi "delapan puluh sepuluh" dan semacamnya, sehingga8
kemudian ditangani oleh penggantian berikutnya, yang menyimpan byte lebih dari menulis4*20+1
dua kali.Ini menangani kasus-kasus
17
,18
dan19
, dengan mengganti1
di masing-masing dengan10+
.Akhirnya, tidak boleh ada
+0
pada akhirnya, jadi hapus jika ada.sumber
7-9
, tapi saya rasa Anda tidak perlu melihatnya$1
hanya selama?=
.Python 2 , 98 byte
Cobalah online!
sumber
JavaScript (ES6),
7371 byteVersi bonus yang mencetak angka-angka karena sebenarnya dieja untuk tambahan 2 byte:
sumber
23
, misalnya, seharusnya menghasilkan23
, bukan20+3
.(m=n%20)
m
akan diatur ulang ke0
dalamf(n-n%20)
panggilan. (Ini adalah variabel global)n<70|n>99
ken%100<70
. Juga, dapatkah Anda menambahkan test-compiler?R, 110 byte
sumber
(i-r)/10
alih-alihfloor(i/10)
. Dani>15
seharusnyai>16
.PHP, 99 byte (Saya ingin menjadi versi bahagia)
port langsung dari JSP ETHproduk , 4 byte golf. Mencetak angka-angka sebagaimana diminta oleh OP.
kerusakan
Saya ingin menjadi versi yang tepat,
11498 bytependekatan baru yang diilhami oleh produk ETH , mencetak angka-angka sebagaimana mereka sebenarnya dijabarkan.
coba online .
kerusakan
sumber
Python 2,
130108 byte22 byte disimpan berkat @mathjunkie
Cobalah online!
sumber
f=
karena Anda menggunakannya di dalam lambda.Batch,
220217 byteMengambil input pada STDIN. Menghasilkan dan menghapus terkemuka
+
menghemat 1 byte di atas casing khusus 80. Edit: Disimpan 3 byte berkat @ ConorO'Brien.sumber
@echo off
dan mengawali semua pernyataan kecuali untuk pernyataan hte loop dengan@
Jelly , 55 byte
Cobalah online! atau lihat test suite
Tidak diragukan lagi ada cara yang lebih singkat!
Bagaimana?
sumber
Pyth,
6156 byteUji secara online!
Terima kasih kepada Leaky Nun untuk peningkatan 5 byte!
Penjelasan:
sumber
*-Q100>Q69
→}/QTr6T
@]b}17 19
→}b}17 19
+"10+"eb
→j\+,Teb
Python3, 127 byte
Setiap elemen array mengandung representasinya:
Kode sebenarnya tidak membuat fungsi, hanya sebuah array - Saya tidak tahu apakah itu diizinkan. Kalau tidak, saya harus membuat ini 139 byte dengan menambahkan
f=[...].__getitem__
.sumber
f=
, karena fungsi yang tidak disebutkan namanya (yaitu ekspresi yang mengevaluasi ke fungsi yang dikirimkan) baik-baik saja kecuali nama diperlukan untuk sesuatu seperti rekursi.Java 7,
9796109 byte+13 byte untuk kasus perbaikan bug
80
.. :(Penjelasan:
Kode uji:
Coba di sini.
sumber