Hari apa ini (di Flooptonia)?

34

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.
Sean Latham
sumber
2
Apakah itu "Floopdo o r" atau "Floopdor"? Bagan pertama memiliki tambahan o, tetapi contoh lain dari namanya tidak.
jwodder
4
Jadi ... dalam 47k tahun, tidak ada yang akan berubah?
Bukan itu Charles
2
@NotthatCharles lebih jauh, jika planet ini berada di kejauhan, bukankah itu akan usang pada saat Anda mendapatkannya di tempat pertama?
SuperJedi224
3
Seolah kalender Gregorian tidak cukup buruk.
Arturo Torres Sánchez
3
@ ArturoTorresSánchez Yah setidaknya tidak ada tahun kabisat. Tetapi apakah ada cerita lain tentang Flooptonia, atau apakah seluruh latar dibuat semata-mata untuk puzzle khusus ini? Apakah Fwup adalah kata mereka untuk musim dingin? Atau haruskah saya mengembalikan ekor saya ke Worldbuilding?
Damian Yerrick

Jawaban:

14

Pyth - 105 103 90 88 byte

Menggunakan konversi basis. Dua tabel pencarian sederhana, dengan satu untuk nama dan satu untuk tanggal mulai, dan sebuah terner di akhir untuk Floopdoor.

KhfgQhTC,aCM"mQP?'"Zcs@LGjC"îºBüÏl}W\"p%åtml-¢pTÇÉ(°±`"23\c+?nQ80+-hQhKdkreK3

Mengompresi string bukan sebagai basis 128, tetapi sebagai basis 23. Pertama, ia menerjemahkannya ke indeks alfabet. Ini mengharuskan pemisah cyang tidak muncul dalam nama bulan apa pun. Kemudian dikodekan ke basis sepuluh dari nomor basis 23 (nilai tertinggi yang muncul adalah w), kemudian dikonversi ke basis 256.

Tanggal mulai adalah codepoint unicode mereka, tidak ada konversi basis.

K                       K =
 hf                     First that matches the filter
  gQ                    >= Q
   hT                   First element of filter var
  C,                    Zip two sequences
   a       Z            Append 0 (I could save a byte here but don't want to mess with null bytes)
    CM"..."             Map the string to its codepoints
   c          \c        Split by "c"
    s                   Sum by string concatenation
     @LG                Map to location in alphabet
      j     23          Base 10 -> Base 23
      C"..."            Base 256 -> Base 10
+                       String concatenation
 ?nQ80                  Ternary if input != 80
  +-hQhK                Input - start date + 1
  k                     Else empty string
 r  3                   Capitalize first letter
  eK                    Of month name

Cobalah online di sini .

Test Suite .

Maltysen
sumber
Saya sangat baru di Pyth, bisakah Anda memecahnya? Saya akan sangat berterima kasih.
Winny
1
@ Winny saya akan, hanya ingin menyelesaikan golf yang jelas terlebih dahulu. Semua simbol aneh adalah karena saya mengompresi simbol-simbol dasar 26 (alfabet) ke dalam basis 256 untuk menghemat ruang.
Maltysen
1
@ Winny apakah itu cukup? Silakan ping saya di sini / dalam obrolan jika Anda memiliki pertanyaan.
Maltysen
19

Python 3, 159 156 152 151 150 148 byte

n=int(input())+1
for c,x in zip(b" C","Qupu Blinkorp Paas Karpasus Floopdoor Dumaflop Lindilo Fwup".split()):c>=n>0and print(*[n,x][-c:]);n-=c

Objek byte di zipberisi karakter yang tidak diinginkan:

for c,x in zip(b"\x16\x11\x18\x11\x01\x1c C", ...): ...

(Terima kasih kepada @xnor karena menyarankan for/zipperulangan untuk -3 byte)

Sp3000
sumber
11
Saat itu ketika jawaban Python --- <s> akan saling berhadapan </s> --- mengalahkan jawaban Pyth
Pengoptimal
1
Penggunaan bytestring itu cerdik!
Winny
Saya merasa seperti itu harus mungkin untuk beralih blangsung dengan, forbukan sementara, dengan sesuatu seperti for c in b"...":i+=n>0;n-=c.
xnor
1
Oh, tunggu, Anda perlu nilai yang tepat nuntuk berhenti turun juga. Masih harus dimungkinkan dengan sesuatu seperti x=n>c;n-=c*x;i+=xtetapi tidak tahu apakah itu layak.
xnor
13

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: Versi Kecil


Diperbesar (Lebar codel 10): masukkan deskripsi gambar di sini

DeadChex
sumber
Tidak dead chexmenambah jumlah byte?
Beta Decay
1
@Beta Agar adil, bye count sebenarnya adalah ukuran gambar yang lebih kecil pada disk, jadi terlepas dari jumlah byte yang diperbaiki
DeadChex
12

Pyth 178 156 153 147 byte

J?<Q22,_1"Qupu"?<Q39,21"Blinkorp"?<Q63,38"Paas"?<Q80,62"Karpasus"?<Q81,k"Floopdoor"?<Q109,80"Dumaflop"?<Q141,108"Lindilo",140"Fwup"?nhJkjd,-QhJeJeJ

Permalink

Golf kedua, umpan balik Pyth akan sangat membantu.

Penjelasan

J                       (Auto)Assign J a tuple of the first day & month name
 ?<Q22,_1"Qupu"         Recall that Q auto-initialized to raw_input()
 ?<Q39,21"Blinkorp"     ? is ternary
 ?<Q63,38"Paas"         , is a two-pair tuple
 ?<Q80,62"Karpasus"
 ?<Q81,k"Floopdoor"     Special case handled by empty string as first day
 ?<Q109,80"Dumaflop"
 ?<Q141,108"Lindilo"
 ,140"Fwup"             Since input assumed valid, no need to test for Fwup
?nhJk                   Is day not an empty string?
jd,                     join on space
   -QhJ                 Q-(first day or -1 on first month) + 1
   eJ                   The month itself
eJ                      Else print only the month name on Floopdoor
Winny
sumber
Anda harus dapat menggunakan penugasan sebaris untuk menempatkan keseluruhan J=...ke dalam kondisi ternary.
Maltysen
7

CJam, 98 96 93 byte

0000000: 72 69 63 22 00 16 27 3f 50 51 6d 8d d0 22 66 2d  ric"..'?PQm.."f-
0000010: 5f 7b 30 3c 7d 23 28 5f 40 3d 29 53 40 22 06 32  _{0<}#(_@=)S@".2
0000020: 88 b2 ce d2 87 2f 1e 79 62 1b 7a 11 53 a6 cc 02  ...../.yb.z.S...
0000030: 40 c5 c6 82 d0 dd b7 4b ed ee 1c dc 4f f5 ec 67  @......K....O..g
0000040: 22 32 35 35 62 32 33 62 27 61 66 2b 27 63 2f 3d  "255b23b'af+'c/=
0000050: 5f 2c 39 3d 7b 5c 3f 7d 26 28 65 75 5c           _,9={\?}&(eu\

Di 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

$ LANG=en_US
$ xxd -ps -r > flooptonia.cjam <<< 726963220016273f50516d8dd022662d5f7b303c7d23285f403d29534022063288b2ced2872f1e79621b7a1153a6cc0240c5c682d0ddb74bedee1cdc4ff5ec6722323535623233622761662b27632f3d5f2c393d7b5c3f7d262865755c
$ wc -c flooptonia.cjam 
96 flooptonia.cjam
$ for d in 0 32 62 77 80 99 128 207; do cjam flooptonia.cjam <<< $d; echo; done
1 Qupu
11 Blinkorp
24 Paas
15 Karpasus
Floopdoor
19 Dumaflop
20 Lindilo
67 Fwup

Bagaimana itu bekerja

ric     e# Read a Long from STDIN and cast to Character.
"…"     e# Push the string that corresponds to [0 22 39 63 80 81 109 141 208].
f-      e# Subtract each character from the input char.
        e# Character Character - -> Long
_{0<}#  e# Find the index of the first negative integer.
(_      e# Subtract 1 from the index and push a copy.
@=)     e# Select the last non-negative integer from the array and add 1.
S@      e# Push a space and rotate the decremented index on top of it.
"…"     e# Push a string that encodes the months' names.
255b23b e# Convert from base 255 to 23.
'af+    e# Add the resulting digits to the character 'a'.
'c/     e# Split at occurrences of 'c' (used as separator).
=       e# Select the chunk that corresponds to the index.
_,9=    e# Check if its length is 9 (Floopdoor).
{\?}&   e# If so, swap and execute ternary if.
        e# Since the string " " is truthy, S Month Day ? -> Month.
(eu\    e# Shift out the first char, convert it to uppercase and swap.
Dennis
sumber
5

SWI-Prolog, 237 232 213 byte

a(X):-L=[22:"Qupu",39:"Blinkorp",63:"Paas",80:"Karpasus",81:"Floopdoor",109:"Dumaflop",141:"Lindilo",208:"Fwup"],nth1(I,L,A:B),X<A,J is I-1,(nth1(J,L,Z:_),Y=X-Z;Y=X),R is Y+1,(X=80,write(B);writef("%w %w",[R,B])).

Di sini kita menggunakan mekanisme backtracking Prolog untuk berulang kali mengajukan permohonan nth1/3ke dalam daftar L, untuk mendapatkan elemen pertama LastDay+1:MonthNamedari Lyang X < LastDay+1memegang. Kami kemudian mencari bulan segera sebelum ini dalam daftar untuk mengevaluasi hari dalam sebulan.

Fatalisasi
sumber
5

Q, 134 146 Bytes

cut-program kedua (146 bytes)

v:bin[l:0 22 39 63 80 81 109 141 208;x:(*)"I"$.z.x];1(,/)($)$[v=4;`;(1+x-l v)," "],`Qupu`Blinkorp`Paas`Karpasus`Floopdoor`Dumaflop`Lindilo`Fwup v;

fungsi potong pertama (134 byte)

{v:bin[l:0 22 39 63 80 81 109 141 208;x];(,/)($)$[v=4;`;(1+x-l v)," "],`Qupu`Blinkorp`Paas`Karpasus`Floopdoor`Dumaflop`Lindilo`Fwup v}

pengujian

q){v:bin[l:0 22 39 63 80 81 109 141 208;x];(,/)($)$[v=4;`;(1+x-l v)," "],`Qupu`Blinkorp`Paas`Karpasus`Floopdoor`Dumaflop`Lindilo`Fwup v} each 0 32 62 77 80 99 128 207
"1 Qupu"
"11 Blinkorp"
"24 Paas"
"15 Karpasus"
"Floopdoor"
"19 Dumaflop"
"20 Lindilo"
"67 Fwup"
scottstein37
sumber
Anda benar - saya mengedit jawaban untuk menjadikannya program yang lengkap dan bukan fungsi, sehingga mencetak ke stdout tanpa tanda kutip sesuai aturan pertanyaan
scottstein37
4

Julia, 231 216 184 175 bytes

r=readline()|>int
l=[141,109,81,80,63,39,22,0]
m=split("Qupu Blinkorp Paas Karpasus Floopdoor Dumaflop Lindilo Fwup")
i=findfirst(j->r>=j,l)
print(i==4?"":r-l[i]+1," ",m[9-i])

Ini 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.

Alex A.
sumber
3

Swift 1.2, 256 byte

var d=Process.arguments[1].toInt()!,f="Floopdoor",n=[("Qupu",22),("Blinkorp",17),("Paas",24),("Karpasus",17),(f,1),("Dumaflop",28),("Lindilo",32),("Fwup",67)]
for i in 0..<n.count{let m=n[i]
if d>=m.1{d-=m.1}else{println((m.0==f ?"":"\(d+1) ")+m.0)
break}}

Untuk menjalankannya, masukkan kode sendirian dalam .swiftfile dan jalankan dengan menggunakanswift <filename> <inputNumber>

David Skrundz
sumber
3

Java, 357 339 byte

Ini bukan yang paling efisien, tapi saya suka cara kerjanya. Ini menciptakan seluruh kalender Flooptonia dan kemudian mencari tahu tanggal berapa nomornya.

class X{public static void main(String[]q){String n[]={"Qupu","Blinkorp","Paas","Karpasus","Floopdoor","Dumaflop","Lindilo","Fwup"},l[]=new String[209];int m=0,d=0,i,b[]={0,22,39,63,80,81,109,141,208};for(i=0;i++<208;d++){l[i]=(m==4?"":d+" ")+n[m];if(i>b[m+1]){m++;d=0;}}System.out.print(l[new java.util.Scanner(System.in).nextInt()+2]);}}

Input output:

77 --> 15 Karpasus 80 --> Floopdoor

Spasi dan tab:

class X {
    public static void main(String[] q) {
        String n[] = { "Qupu", "Blinkorp", "Paas", "Karpasus", "Floopdoor", "Dumaflop", "Lindilo", "Fwup" },
          l[]=new String[209];
        int m = 0,
          d = 0,
          i,
          b[] = { 0, 22, 39, 63, 80, 81, 109, 141, 208 };
        for(i = 0; i++ < 208; d++) {
            l[i]=(m == 4 ? "" : d + " ") + n[m];
            if(i > b[m+1]){
                m++;
                d = 0;
            }
        }
        System.out.print(l[ new java.util.Scanner(System.in).nextInt() + 2 ]);
    }
}
DeadChex
sumber
1
Aku menantang kamu! Lihat jawaban saya! =)
Luigi Cortese
3

Jawa, 275 269 266 257 256 252 246 244 243 byte

class X{public static void main(String[]w){int x=new Short(w[0]),i=1,a[]={-1,21,38,62,79,80,108,140,207};w="Qupu,Blinkorp,Paas,Karpasus,Floopdoor,Dumaflop,Lindilo,Fwup".split(",");while(x>a[i++]);System.out.print((i==6?"":x-a[i-=2]+" ")+w[i]);}}

Diformat:

class X {
    public static void main(String[] w) {
        int x = new Short(w[0]), 
            i = 1, 
            a[] = { -1, 21, 38, 62, 79, 80, 108, 140, 207 };
            w = "Qupu,Blinkorp,Paas,Karpasus,,Dumaflop,Lindilo,Fwup".split(",");
        while (x > a[i++]);
        System.out.print(i == 6 ? "Floopdoor" : x - a[i-=2] + " " + w[i]);
    }
}

Menariknya, beberapa byte lebih pendek dari ini

class X {
    public static void main(String[] w) {
        int x = new Short(w[0]);
        System.out.print(x < 22 ? x + 1 + " Qupu" : x < 39 ? x - 21
                + " Blinkorp" : x < 63 ? x - 38 + " Paas" : x < 80 ? x - 62
                + " Karpasus" : x < 81 ? "Floopdoor" : x < 109 ? x - 80
                + " Dumaflop" : x < 141 ? x - 108 + " Lindilo" : x < 208 ? x
                - 140 + " Fwup" : "");
    }
}
Luigi Cortese
sumber
Luigi yang dimainkan dengan baik!
DeadChex
1
Simpan 6 byte dengan "Short baru (w [0])" bukan "Integer.valueOf (w [0])".
Olivia Trewin
@AndrewTrewin tip yang bagus, terima kasih!
Luigi Cortese
3

JavaScript menggunakan ES6 171 164 163 byte

Saya bukan programmer JavaScript terbaik tetapi saya mencoba yang terbaik dan berakhir dengan kode berikut

f=(n)=>[0,22,39,63,80,81,109,141,208].some((e,j,a)=>n<a[j+1]&&(r=(j-4?n-e+1+' ':'')+"Qupu0Blinkorp0Paas0Karpasus0Floopdoor0Dumaflop0Lindilo0Fwup".split(0)[j]))&&r;

Untuk melihat hasilnya, Anda perlu merujuk kode di atas dalam file html dan menggunakan yang serupa dengan kode di bawah ini

<html><body><p id="o"></p><script src="Fp.js"></script><script>t=[0,32,62,77,80,99,128,207];for(i=0;i<t.length;i++)document.getElementById('o').innerHTML+=f(t[i])+'<br/>';</script></body></html>

Dalam kode di atas fp.js adalah file yang berisi kode javascript.

Kode HTML dan JavaScript gabungan dengan indent adalah

        f=(n)=>[0,22,39,63,80,81,109,141,208].some(
          (e,j,a)=>n<a[j+1]&&(r=(j-4?n-e+1+' ':'')+"Qupu0Blinkorp0Paas0Karpasus0Floopdoor0Dumaflop0Lindilo0Fwup".split(0)[j]))
        &&r;
        
        
        t = [0, 32, 62, 77, 80, 99, 128, 207];
        for (i = 0; i < t.length; i++) 
            document.getElementById('o').innerHTML += f(t[i]) + '<br/>';

    
<html>
<body>
    <p id="o"></p>    
</body>
</html>

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

Catatan: Anda dapat melihat hasilnya hanya di browser Firefox versi 22+ dan Google Chrome 45+ karena menggunakan fungsi panah ES6

Anandaraj
sumber
@ vihan1086, Terima kasih atas saran Anda
Anandaraj
Saya tidak memiliki akses ke browser dengan dukungan notasi panah sekarang (jadi saya belum menguji ini) tetapi Anda harus dapat mengganti array bulan Anda dengan "Qupu0Blinkorp0Paas0Karpasus0Floopdoor0Dumaflop0Lindilo0Fwup".split(0)dan menyimpan 7 byte.
Sean Latham
Terima kasih ipi, saya terpecah oleh spasi, tetapi nol menyelamatkan saya dua byte! You must write a complete programSaya pikir ini harus berjalan sendiri, Anda mungkin harus menggunakan sesuatu seperti prompt ().
Vartan
@ipi, Terima kasih atas komentar Anda
Anandaraj
@Vartan, Terima kasih atas jawaban Anda, saya menyimpan 1 byte
Anandaraj
2

Python 2, 168 byte

n=input();e=[-1,21,38,62,80,108,140,207];m=1
while n>e[m]:m+=1
print[`n-e[m-1]`+' '+'Qupu Blinkorp Paas Karpasus Dumaflop Lindilo Fwup'.split()[m-1],'Floopdoor'][n==80]

Ini memperlakukan hari secara 80internal sebagai 18 Karpasus, tetapi kemudian mengabaikannya saat dipanggil untuk mencetak. Juga, input()fungsi Python 2 (sebagai lawan dari raw_input()) nyaman di sini.

mathmandan
sumber
2

Perl 5, 140

Membutuhkan berjalan melalui perl -E:

$i=<>+1;$i-=$b=(22,17,24,17,1,28,32,67)[$c++]while$i>0;say$b>1&&$i+$b.$",(x,Qupu,Blinkorp,Paas,Karpasus,Floopdoor,Dumaflop,Lindilo,Fwup)[$c]

Hasil uji (kode uji curian dari @Dennis):

$for d in 0 32 62 77 80 99 128 207; do perl -E '$i=<>+1;$i-=$b=(22,17,24,17,1,28,32,67)[$c++]while$i>0;say$b>1&&$i+$b.$",(x,Qupu,Blinkorp,Paas,Karpasus,Floopdoor,Dumaflop,Lindilo,Fwup)[$c]' <<< $d; echo; done
1 Qupu

11 Blinkorp

24 Paas

15 Karpasus

Floopdoor

19 Dumaflop

20 Lindilo

67 Fwup
Dom Hastings
sumber
2

Haskell, 171 167 byte

main=interact$f.read
f 80="Floopdoor"
f n=(g=<<zip[22,17,24,18,28,32,67](words"Qupu Blinkorp Paas Karpasus Dumaflop Lindilo Fwup"))!!n
g(n,s)=map((++' ':s).show)[1..n]

Program 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. (Beberapa echos tidak mengerti -nsaklar dan menghilangkan NL secara default).

Cara kerjanya: mainFungsi membaca input, mengubahnya menjadi Integerdan memanggil fyang mengembalikan literal Floopdoorjika input 80atau membangun daftar semua tanggal yang mungkin, yaitu ["1 Qupu", "2 Qupu", ... "1 Blinkorp", ... "67 Fwup"]dari mana ia mengambil nelemen th. Saya membuat Karpasussatu hari lebih lama. 18 Karpasusberada pada posisi 80dan memperbaiki yang hilang Floopdoordalam daftar.

Sunting: @MtnViewMark punya ide 18 Karpasustrik dan menyimpan 4 byte.

nimi
sumber
Saya pikir Anda dapat menyimpan 4 byte dengan berpura-pura Karpasus panjangnya 18 hari, menghapus ,1dan `x` - karena 80 akan ditangkap oleh pencocokan pola untuk itu.
MtnViewMark
@ MtnViewMark: sangat pintar. Terima kasih banyak.
nimi
1

Swift 2.0, 220 byte

Tidak ada yang pintar, cukup filter dari kumpulan tuple ...

func d(n:Int)->String{return n==80 ?"Floopdoor":[("Qupu",21,0),("Blinkorp",38,22),("Paas",62,39),("Karpasus",79,63),("Dumaflop",108,81),("Lindilo",140,109),("Fwup",208,141)].filter{$0.1>=n}.map{"\($0.0) \(n-$0.2+1)"}[0]}

Diedit untuk memperbaiki bug, menghapus spasi

GoatInTheMachine
sumber
5
"Kamu harus menulis program yang lengkap." Jadi itu bukan fungsi.
Alex A.
1

JavaScript (ES6 pada Node.js), 196 byte

Membawa satu argumen baris perintah:

a=+process.argv[2];for(d of['22Qupu','17Blinkorp','24Paas','17Karpasus','01Floopdoor','28Dumaflop','32Lindilo','67Fwup']){if(a<(z=parseInt(d)))return console.log((z>1?a+1+' ':'')+d.slice(2));a-=z}

Demo

Karena tidak ada argumen baris perintah ( process.argv) di browser, kode di snippet telah ditempatkan di fungsi yang menerima argumen:

// Snippet stuff
console.log = function(x){O.innerHTML += x + '\n'};

// Flooptonia function
function flooptonia(a) {
  a = +a;
  for (d in y=['22Qupu', '17Blinkorp', '24Paas', '17Karpasus', '01Floopdoor', '28Dumaflop', '32Lindilo', '67Fwup']) {
    if (a < (z = parseInt(y[d]))) return console.log((z > 1 ? a + 1 + ' ' : '') + y[d].slice(2));
    a -= z
  }
}

// Test
['0', '32', '62', '77', '80', '99', '128', '207'].map(flooptonia);
Test values: [0, 32, 62, 77, 80, 99, 128, 207]

<pre id=O></pre>

rink.attendant.6
sumber
1

Swift 2.0, 215 204

let(n,t)=(Int(readLine()!)!,[(141,"Fwup"),(109,"Lindilo"),(81,"Dumaflop"),(63,"Karpasus"),(39,"Paas"),(22,"Blinkorp"),(0,"Qupu")])
print({(n==80 ?"Floopdoor":"\(n-$0.0+1) "+$0.1)}(t[t.indexOf{$0.0<=n}!]))

Ini adalah program lengkap yang meminta pengguna untuk memasukkan nomor dalam STDIN.

Kametrixom
sumber
1

Matlab, 187 byte

d=input('');l=[141 109 81 80 63 39 22 0];t=find(d>=l,1);m=strsplit('Fwup Lindilo Dumaflop Floopdoor Karpasus Paas Blinkorp Qupu');f='%d %s';if t==4;f='%d\b%s';end;fprintf(f,d-l(t)+1,m{t})

Versi yang diperluas:

d=input('');
l=[141 109 81 80 63 39 22 0];
t=find(d>=l,1);
m=strsplit('Fwup Lindilo Dumaflop Floopdoor Karpasus Paas Blinkorp Qupu');
f='%d %s';
if t==4;
    f='%d\b%s';
end
fprintf(f,d-l(t)+1,m{t})

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 Juliajawabannya, kecuali untuk tahap tampilan. ( Kami tidak bisa mengalahkan operator ternary mereka, tidak tersedia di Matlab ). Untuk mengganti ifpernyataan 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 .

Hoki
sumber
1

Javascript ES5 menggunakan 168 byte

m=[-1,21,38,62,79,80,108,140];for(n=prompt(i=0);n>m[i+1]&&i++<8;);alert((i-4?n-m[i]+" ":"")+"Qupu0Blinkorp0Paas0Karpasus0Floopdoor0Dumaflop0Lindilo0Fwup".split(0)[i])

Tidak Disatukan:

m=[-1,21,38,62,79,80,108,140];   // create range of starting indexes - 1

for(                             // begin for loop
  n=prompt(i=0);                 // initialize i to zero and prompt user
  n>m[i+1] && i++ < 8;           // exit if n>0; increment i; exit if i was < 8
  );                             // end for loop

alert(
  (i-4 ? n-m[i]+" ":"") + // special floopdoor case
  "Qupu0Blinkorp0Paas0Karpasus0Floopdoor0Dumaflop0Lindilo0Fwup".split(0)[i]);

  //^  create an array of strings by splitting at zero. Then, select element i
Vartan
sumber
0

C, 241 byte

Tidak ada yang terlalu menarik. Bisa mencukur 27 byte seandainya itu harus menjadi program yang lengkap.

main(c,s)char**s;{c=atoi(s[1]);c-80?printf("%d ",c<22?c+1:c<39?c-21:c<63?c-38:c<80?c-62:c<109?c-80:c<141?c-108:c-140):0;puts(c<22?"Qupu":c<39?"Blinkorp":c<63?"Paas":c<80?"Karpasus":c<81?"Floopdoor":c<109?"Dumaflop":c<141?"Lindilo":"Fwup");}
beberapa pengguna
sumber