Anda adalah turis antariksa dalam perjalanan Anda ke planet Flooptonia! Penerbangan akan memakan waktu 47.315 tahun lagi, jadi untuk menghabiskan waktu sebelum Anda membeku secara kriogenik, Anda memutuskan untuk menulis sebuah program untuk membantu Anda memahami kalender Flooptonian.
Berikut adalah kalender Flooptonian selama 208 hari:
Month Days Input Range
Qupu 22 [0-22)
Blinkorp 17 [22-39)
Paas 24 [39-63)
Karpasus 17 [63-80)
Floopdoor 1 [80]
Dumaflop 28 [81-109)
Lindilo 32 [109-141)
Fwup 67 [141-208)
Tantangan
Program Anda, diberi hari bilangan bulat dalam tahun (rentang [0-208)
) adalah untuk menampilkan hari yang sesuai bulan dan nama bulan (misalnya 13 Dumaflop
).
Namun, ada pengecualian: Floopdoor merupakan waktu khusus bagi warga Floopton yang tampaknya layak mendapatkan halaman kalendernya sendiri. Karena alasan itu, Floopdoor tidak ditulis dengan satu hari (artinya outputnya adalah Floopdoor
, bukan 1 Floopdoor
).
Uji Kasus
0 => 1 Qupu
32 => 11 Blinkorp
62 => 24 Paas
77 => 15 Karpasus
80 => Floopdoor
99 => 19 Dumaflop
128 => 20 Lindilo
207 => 67 Fwup
Aturan
- Anda harus menulis program yang lengkap.
- Anda dapat mengasumsikan bahwa input selalu valid.
- Output Anda mungkin memiliki trailing newline tetapi harus bebas dari karakter tambahan apa pun. Kasing juga harus sesuai dengan contoh yang disediakan.
- Anda dapat menggunakan fungsi tanggal / waktu.
- Panjang kode harus diukur dalam byte.
o
, tetapi contoh lain dari namanya tidak.Jawaban:
Pyth -
1051039088 byteMenggunakan konversi basis. Dua tabel pencarian sederhana, dengan satu untuk nama dan satu untuk tanggal mulai, dan sebuah terner di akhir untuk Floopdoor.
Mengompresi string bukan sebagai basis 128, tetapi sebagai basis 23. Pertama, ia menerjemahkannya ke indeks alfabet. Ini mengharuskan pemisah
c
yang tidak muncul dalam nama bulan apa pun. Kemudian dikodekan ke basis sepuluh dari nomor basis 23 (nilai tertinggi yang muncul adalahw
), kemudian dikonversi ke basis 256.Tanggal mulai adalah codepoint unicode mereka, tidak ada konversi basis.
Cobalah online di sini .
Test Suite .
sumber
Python 3,
159156152151150148 byteObjek byte di
zip
berisi karakter yang tidak diinginkan:(Terima kasih kepada @xnor karena menyarankan
for/zip
perulangan untuk -3 byte)sumber
b
langsung dengan,for
bukan sementara, dengan sesuatu sepertifor c in b"...":i+=n>0;n-=c
.n
untuk berhenti turun juga. Masih harus dimungkinkan dengan sesuatu sepertix=n>c;n-=c*x;i+=x
tetapi tidak tahu apakah itu layak.Piet 2125 byte
Ini tidak berarti yang terpendek, tapi itu cantik dan penuh warna ...
Setiap piksel ditempatkan sendiri oleh tangan. Untuk menjalankannya buka di sini di FireFox (Chrome tidak akan berfungsi) dan muatkan dengan lebar codel 1 (akan tampak hitam, jangan khawatir), masukkan nomornya dan tekan tombol run!
Program Kecil:
Diperbesar (Lebar codel 10):
sumber
dead chex
menambah jumlah byte?Pyth
178156153147 bytePermalink
Golf kedua, umpan balik Pyth akan sangat membantu.
Penjelasan
sumber
J=...
ke dalam kondisi ternary.CJam,
989693 byteDi atas adalah hexdump reversibel, karena kode sumber berisi karakter yang tidak patut.
Sebagian besar karakter yang tidak patut dicetak tidak menjadi masalah bagi penerjemah online, tetapi byte nol pada string pertama adalah pemecah kesepakatan.
Dengan biaya satu byte, kita dapat memperbaikinya dengan menambahkan 1 ke input dan 1 ke setiap titik kode dari string pertama. Anda dapat mencoba versi ini dalam juru bahasa CJam .
Jika permalink tidak berfungsi di browser Anda, Anda dapat menyalin kode dari paste ini .
Uji kasus
Bagaimana itu bekerja
sumber
SWI-Prolog,
237232213 byteDi sini kita menggunakan mekanisme backtracking Prolog untuk berulang kali mengajukan permohonan
nth1/3
ke dalam daftarL
, untuk mendapatkan elemen pertamaLastDay+1:MonthName
dariL
yangX < LastDay+1
memegang. Kami kemudian mencari bulan segera sebelum ini dalam daftar untuk mengevaluasi hari dalam sebulan.sumber
Q,
134146 Bytescut-program kedua (146 bytes)
fungsi potong pertama (134 byte)
pengujian
sumber
Julia,
231216184175 bytesIni membaca garis dari STDIN dan mengubahnya menjadi bilangan bulat, menemukan elemen pertama dari daftar terbalik dari hari mulai bulan di mana input lebih besar atau sama dengan awal, kemudian mencetak sesuai.
sumber
Swift 1.2, 256 byte
Untuk menjalankannya, masukkan kode sendirian dalam
.swift
file dan jalankan dengan menggunakanswift <filename> <inputNumber>
sumber
Java,
357339 byteIni bukan yang paling efisien, tapi saya suka cara kerjanya. Ini menciptakan seluruh kalender Flooptonia dan kemudian mencari tahu tanggal berapa nomornya.
Input output:
77 --> 15 Karpasus 80 --> Floopdoor
Spasi dan tab:
sumber
Jawa,
275269266257256252246244243 byteDiformat:
Menariknya, beberapa byte lebih pendek dari ini
sumber
JavaScript menggunakan ES6
171164163 byteSaya bukan programmer JavaScript terbaik tetapi saya mencoba yang terbaik dan berakhir dengan kode berikut
Untuk melihat hasilnya, Anda perlu merujuk kode di atas dalam file html dan menggunakan yang serupa dengan kode di bawah ini
Dalam kode di atas fp.js adalah file yang berisi kode javascript.
Kode HTML dan JavaScript gabungan dengan indent adalah
Edit:
Saya ingin mengucapkan terima kasih kepada Vihan karena membantu saya menghapus pernyataan pengembalian dan mengurangi kode saya sebesar 17bytes
@ipi, terima kasih telah membantu saya menghemat 7 byte
sumber
"Qupu0Blinkorp0Paas0Karpasus0Floopdoor0Dumaflop0Lindilo0Fwup".split(0)
dan menyimpan 7 byte.You must write a complete program
Saya pikir ini harus berjalan sendiri, Anda mungkin harus menggunakan sesuatu seperti prompt ().Python 2, 168 byte
Ini memperlakukan hari secara
80
internal sebagai18 Karpasus
, tetapi kemudian mengabaikannya saat dipanggil untuk mencetak. Juga,input()
fungsi Python 2 (sebagai lawan dariraw_input()
) nyaman di sini.sumber
Perl 5, 140
Membutuhkan berjalan melalui
perl -E
:Hasil uji (kode uji curian dari @Dennis):
sumber
Haskell,
171167 byteProgram membaca input dari stdin yang tidak boleh diakhiri dengan NL. Hentikan input dengan EOF / ^ D atau gunakan sesuatu seperti
echo -n 80 | ./what-day-is-it
. (Beberapaecho
s tidak mengerti-n
saklar dan menghilangkan NL secara default).Cara kerjanya:
main
Fungsi membaca input, mengubahnya menjadiInteger
dan memanggilf
yang mengembalikan literalFloopdoor
jika input80
atau membangun daftar semua tanggal yang mungkin, yaitu["1 Qupu", "2 Qupu", ... "1 Blinkorp", ... "67 Fwup"]
dari mana ia mengambiln
elemen th. Saya membuatKarpasus
satu hari lebih lama.18 Karpasus
berada pada posisi80
dan memperbaiki yang hilangFloopdoor
dalam daftar.Sunting: @MtnViewMark punya ide
18 Karpasus
trik dan menyimpan 4 byte.sumber
,1
dan `x` - karena 80 akan ditangkap oleh pencocokan pola untuk itu.Swift 2.0, 220 byte
Tidak ada yang pintar, cukup filter dari kumpulan tuple ...
Diedit untuk memperbaiki bug, menghapus spasi
sumber
JavaScript (ES6 pada Node.js), 196 byte
Membawa satu argumen baris perintah:
Demo
Karena tidak ada argumen baris perintah (
process.argv
) di browser, kode di snippet telah ditempatkan di fungsi yang menerima argumen:sumber
Swift 2.0,
215204Ini adalah program lengkap yang meminta pengguna untuk memasukkan nomor dalam STDIN.
sumber
Matlab, 187 byte
Versi yang diperluas:
Membaca garis dari konsol (
stdin
), menemukan elemen pertama dari daftar terbalik dari hari awal bulan di mana input lebih besar atau sama dengan elemen array, lalu mencetak sesuai.Ini hampir identik dengan
Julia
jawabannya, kecuali untuk tahap tampilan. ( Kami tidak bisa mengalahkan operator ternary mereka, tidak tersedia di Matlab ). Untuk menggantiif
pernyataan eksplisit penuh , kami menggunakan sedikit trik ( Backspacekarakter dalam format cetak) untuk "menghapus" angka 1 untuk hari / bulan khususFloopdoor
Bekerja sama dengan peserta obrolan Matlab dan Oktaf .
sumber
Javascript ES5 menggunakan 168 byte
Tidak Disatukan:
sumber
C, 241 byte
Tidak ada yang terlalu menarik. Bisa mencukur 27 byte seandainya itu harus menjadi program yang lengkap.
sumber