Saya tidak memeriksa kotak pasir sebelum memposting tantangan ini - sepertinya tantangan ini diusulkan oleh Cᴏɴᴏʀ O'Bʀɪᴇɴ .
Diberikan input integer, tulis sebuah program yang mencetak teka-teki "four is a magic number"
- Empat adalah angka ajaib
- Lima adalah empat dan empat adalah angka ajaib
- Enam adalah tiga dan tiga adalah lima dan lima adalah empat dan empat adalah angka ajaib
- Sebelas enam dan enam tiga dan tiga lima dan lima empat dan empat adalah angka ajaib
- Five Hundred adalah sebelas dan sebelas adalah enam dan enam adalah tiga dan tiga adalah lima dan lima adalah empat dan empat adalah angka ajaib
Jika Anda sudah tahu teka-teki itu, atau terlalu malas untuk menyelesaikannya dengan cemas untuk mencari tahu apa teka-teki itu, inilah penjelasannya
Nomor berikutnya adalah jumlah huruf di nomor sebelumnya. Jadi, misalnya, lima memiliki empat huruf, jadi angka berikutnya adalah empat .
enam memiliki tiga huruf, jadi angka berikutnya adalah 3 , dan tiga memiliki lima huruf, jadi angka berikutnya adalah 5 , dan lima memiliki empat huruf, jadi angka berikutnya adalah 4.
Alasan teka-teki berakhir pada empat adalah karena empat memiliki empat huruf , dan empat adalah empat dan empat adalah empat dan empat adalah empat ... (empat adalah angka ajaib)
Uji Kasus
0 =>
Zero is four and four is the magic number
1 =>
One is three and three is five and five is four and four is the magic number
2 =>
Two is three and three is five and five is four and four is the magic number
3 =>
Three is five and five is four and four is the magic number
4 =>
Four is the magic number
5 =>
Five is four and four is the magic number
6 =>
Six is three and three is five and five is four and four is the magic number
7 =>
Seven is five and five is four and four is the magic number
8 =>
Eight is five and five is four and four is the magic number
9 =>
Nine is four and four is the magic number
10 =>
Ten is three and three is five and five is four and four is the magic number
17 =>
Seventeen is nine and nine is four and four is the magic number
100 =>
One Hundred is ten and ten is three and three is five and five is four and four is the magic number
142 =>
One Hundred Forty Two is eighteen and eighteen is eight and eight is five and five is four and four is the magic number
1,000 =>
One Thousand is eleven and eleven is six and six is three and three is five and five is four and four is the magic number
1,642 =>
One Thousand Six Hundred Forty Two is twenty nine and twenty nine is ten and ten is three and three is five and five is four and four is the magic number
70,000 =>
Seventy Thousand is fifteen and fifteen is seven and seven is five and five is four and four is the magic number
131,072 =>
One Hundred Thirty One Thousand Seventy Two is thirty seven and thirty seven is eleven and eleven is six and six is three and three is five and five is four and four is the magic number
999,999 =>
Nine Hundred Ninety Nine Thousand Nine Hundred Ninety Nine is fifty and fifty is five and five is four and four is the magic number
Aturan
- Input dapat diambil dari
STDIN
atau sebagai argumen ke suatu fungsi - Masukan akan berupa angka positif antara 0 dan 999.999
- Input hanya akan berisi angka (akan mengikuti regex
^[0-9]+$
) - Input dapat diambil sebagai integer atau string
- Ketika dikonversi ke string kata, spasi dan tanda hubung tidak boleh dimasukkan dalam hitungan (100 [Seratus] adalah 10 karakter, bukan 11. 1.742 [Seribu Tujuh ratus Empat Puluh Dua] adalah 31 karakter, bukan 36)
- Ketika dikonversi menjadi string, 100 harus Seratus, bukan Seratus atau Seratus, 1000 harus Seribu, bukan Seribu atau Seribu.
- Ketika dikonversi ke string 142 harus Seratus Forty Two, tidak Seratus dan Forty Two
- Outputnya adalah case-insensitive , dan harus mengikuti format " N adalah K dan K adalah M dan M adalah ... dan empat adalah angka ajaib" (kecuali inputnya 4, dalam hal ini outputnya seharusnya hanya "empat adalah angka ajaib ")
- Outputnya dapat menggunakan angka alih-alih huruf ("5 adalah 4 dan 4 adalah angka ajaib" bukan "lima adalah empat dan empat adalah angka ajaib") selama program Anda selalu konsisten
- Outputnya bisa berupa nilai balik suatu fungsi, atau dicetak ke
STDOUT
- Celah standar berlaku
- Ini adalah kode-golf , jadi program terpendek dalam byte menang. Semoga berhasil!
Bonus
-30 byte jika program bekerja saat input berada di antara -999.999 dan 999.999.
Angka negatif, ketika dikonversi menjadi kata, hanya memiliki "negatif" di depannya. Misalnya -4
adalah "Negatif Empat", Negatif Empat adalah dua belas dan dua belas adalah enam dan enam adalah tiga dan tiga adalah lima dan lima adalah empat dan empat adalah angka ajaib
-150 byte jika program tidak menggunakan fungsi bawaan untuk menghasilkan representasi string dari angka tersebut
Papan peringkat
Ini adalah Cuplikan Stack yang menghasilkan leaderboard dan ikhtisar pemenang berdasarkan bahasa.
Untuk memastikan jawaban Anda muncul, silakan mulai jawaban Anda dengan tajuk utama menggunakan templat Penurunan harga berikut
## Language Name, N bytes
Di mana N adalah ukuran, dalam byte, dari kiriman Anda
Jika Anda ingin memasukkan beberapa angka dalam tajuk Anda (misalnya, mencoret skor lama, atau menyertakan bendera dalam jumlah byte), pastikan saja skor sebenarnya adalah angka terakhir di tajuk Anda
## Language Name, <s>K</s> X + 2 = N bytes
Jawaban:
Bash + utilitas umum (termasuk bsd-game), 123 - 30 = 93 byte
Untungnya keluaran dari utilitas bsd-games
number
hampir persis seperti yang kita butuhkan. Nomor-nomor keluaran semuanya ditulis secara numerik dan tidak dalam kata-kata sesuai dengan poin ke-8:sumber
C,
263261 byte - 180 = 81Terinspirasi oleh jawaban dari Cole Cameron . Saya pikir saya mungkin bisa melakukan yang lebih baik tanpa definisi makro. Meskipun pada akhirnya saya berhasil, perlu beberapa tekanan untuk mencapainya!
Ini membutuhkan set karakter host dengan huruf berurutan (jadi ASCII baik-baik saja, tetapi EBCDIC tidak akan berfungsi). Itu untuk sepasang tabel pencarian. Saya memilih
j
sebagai karakter nol, dan mengambil keuntungan dari membutuhkan dua pencarian, jadi saya bisa mengurangi satu dari yang lain daripada harus mengurangi nol dari keduanya.Versi yang dikomentari:
Ada perpanjangan jelas untuk mendukung jutaan, dengan mengganti
f(n/1000,8)
denganf(n/1000000,7)+f(n/1000%1000,8)
.Uji keluaran
sumber
Mathematica, 156 - 30 = 126 byte
Saya hanya terkejut bahwa ini menggunakan string dan tidak terlalu panjang.
sumber
Swift 2 ,
408419 - 30 = 389 BytesSaya akan dapat menghilangkan 176 byte jika Swift tidak begitu bertele-tele dengan ekspresi reguler (menghilangkan tanda hubung dan spasi) * melotot ke Apple *
Ini dapat diuji di swiftstub.com, di sini
Saya berlari sedikit untuk loop, dan ternyata
100003
angka antara 0 dan 999999 memiliki hasil string terpanjang, yang memiliki 6 iterasi, danTidak disatukan
sumber
NSStringCompareOptions.RegularExpressionSearch
Dan saya pikir JSString.fromCharCode
verbose. : Pstring.replace
. Swift:String.stringByReplacingOccurrencesOfString
Haskell, 285 - 180 = 105 Bytes
Bahkan, tidak ada built-in sama sekali untuk menampilkan nomor. Saya masih tidak puas dengan skor. Jangan ragu untuk berkomentar. Saya akan bereksperimen lebih lanjut. Skor masih lebih baik dari skor Swift
pemakaian
Penjelasan.
m
cukup sepele, namun,c
tidak.c
adalah fungsi untuk menghitung jumlah karakter nama bahasa inggris dari angka.sumber
C, 268 - 180 = 88 byte
Coba di sini .
Tidak disatukan
sumber
Java, 800 - 150 = 650 byte
De-golf
sumber
==0
menjadi<1
. Jadi:return P<1?_>0?d:e:P<R?f[P]+Q:P<Y?(f[R+(P/X)]+" "+a(P%X,0,e)).trim()+Q:P<Z?a(P/Y,0,O)+a(P%Y,0,e)+Q:a(P/Z,0," thousand ")+a((P/Y)%X,0,O)+a(P%Y,0,e)+Q;
( - 10 byte )QC, 265 - 30 - 150 = 85 byte
Suite uji
Tidak Disatukan:
sumber
JavaScript, 382 - 150 - 30 = 202 byte
Input diberikan sebagai parameter untuk Ekspresi Fungsi yang Segera Diminta.
Masukan tes:
De-golf:
sumber
Python 641-150 = 501 byte
Setidaknya itu tidak lebih lama dari Jawa! Ini didasarkan pada ini kecuali menggunakan string.
EDIT : Saya lupa tentang 0 dan saya harus mengatakan "5 adalah 4", bukan langsung ke "4 adalah angka ajaib" - yang menambahkan sedikit ke skor.
Coba di sini!
sumber
i(5)
cetakan4 is the magic number
, bukan5 is 4 and 4 is the magic number
.Moo,
182176/192188 bytes - 30 = 146/158Versi 188 byte:
Versi tergantung implementasi 176 byte :
Keduanya adalah fungsi.
sumber
PHP, 168 - 30 = 138 byte
sumber