Hangi gün (Flooptonia'da)?


34

Flooptonia gezegenine giden yolda bir uzay turistisin! Uçuş 47.315 yıl daha sürecek, bu yüzden kriyojenik olarak dondurulmadan önceki zamanı geçirmek için Floopton takvimini anlamanıza yardımcı olacak bir program yazmaya karar veriyorsunuz.

İşte 208 günlük uzun Floopton takvimi:

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)

Meydan okuma

Yıl içinde tamsayı bir gün (aralık [0-208)) verilen programınız, ayın ilgili gününü ve ayın adını (örn. 13 Dumaflop) Vermektir .

Ancak bir istisna vardır: Floopdoor, kendi takvim sayfasını hak eden Flooptonyalılar için özel bir zaman. Bu nedenle, Floopdoor bir gün ile yazılmaz (yani, çıktı Floopdoordeğildir 1 Floopdoor).

Test Kılıfları

0   => 1 Qupu
32  => 11 Blinkorp
62  => 24 Paas
77  => 15 Karpasus
80  => Floopdoor
99  => 19 Dumaflop
128 => 20 Lindilo
207 => 67 Fwup

kurallar

  • Tam bir program yazmalısınız.
  • Girişin her zaman geçerli olduğunu varsayabilirsiniz.
  • Çıktınızın izleyen bir yeni satırı olabilir, ancak aksi takdirde fazladan karakter içermemelidir. Dava ayrıca verilen örneklerle de uyuşmalıdır.
  • Tarih / saat işlevlerini kullanabilirsiniz.
  • Kod uzunluğu bayt cinsinden ölçülecektir.

2
O "Floopdo mi o r" veya "Floopdor"? İlk çizelgede ekstralar var o, ancak ismin diğer örnekleri yok.
jwodder

4
Yani ... 47k yılda hiçbir şey değişmeyecek mi?
Charles,

2
@NotthatCharles ayrıca, eğer gezegen o kadar uzaktaysa, onu ilk aldığın zaman modası geçmiş olmaz mı?
SuperJedi224,

3
Gregoryen takvimi yeterince kötü değildi sanki.
Arturo Torres Sánchez

3
@ ArturoTorresSánchez En azından artık bir yıl yok. Fakat Flooptonia hakkında başka hikayeler var mı, yoksa bütün bu ayar sadece bu bilmeceye göre mi yapıldı? Fwup kelimelerini kışa mı çeviriyor? Yoksa kuyruğumu Worldbuilding'e geri götüreyim mi?
Damian Yerrick

Yanıtlar:


14

Pyth - 105 103 90 88 bayt

Temel dönüşüm kullanır. İki basit arama tablosu, biri isimler için diğeri başlangıç ​​tarihleri ​​için diğeri ise sonunda Floopdoor için üçlü tablo.

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

Dize, taban 128 olarak değil, taban 23 olarak sıkıştırır. İlk önce onu alfabenin indekslerine çevirir. Bu c, ayın hiçbirinde görünmeyen ayırıcının olmasını gerektiriyordu . Daha sonra on numarayı bir taban 23 numarasından (ortaya çıkan en yüksek değer w) on tabanına dönüştürür, sonra da taban 256'ya dönüştürür.

Başlangıç ​​tarihleri, unicode kod noktalarıdır, temel dönüşüm yoktur.

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

Burada çevrimiçi deneyin .

Test Takımı .


Pyth için çok yeniyim, bozabilir misin? Çok minnettar olurum.
Winny,

1
@Winny yapacağım, ilk önce bariz golfleri bitirmek istedim. Tüm garip semboller, tabandan tasarruf etmek için taban 26 sembollerini (alfabe) taban 256'ya sıkıştırdım çünkü.
Maltysen

1
@Winny bu yeterli mi? Herhangi bir sorunuz olursa beni buraya / sohbete atmaktan çekinmeyin .
Maltysen

19

Python 3, 159 156 152 151 150 148 bayt

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

zipİçerisindeki bytes nesnesi yazdırılamaz karakterler içeriyor:

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

( for/zip-3 bayt için bir döngü önerdiği için @xnor'a teşekkürler )


11
Bir Python cevabının --- <s> boyuna boyun attığı </s> --- bir Pyth cevabını dövdüğü o an
Optimizer

1
Bir test etmenin kullanımı dahicedir!
Winny

Gibi bir şey bile doğrudan foryerine, doğrudan tekrarlamak mümkün olması gerektiğini hissediyorum for c in b"...":i+=n>0;n-=c.
xnor

1
Bekle, naşağı inmeyi de kesmek için doğru değere ihtiyacın var . Yine de böyle bir şeyle mümkün olmalısın, x=n>c;n-=c*x;i+=xama buna değip değmediğini bilmiyorum.
xnor

13

Piet 2125 bayt

Hiç olmazsa en kısa yol, ama güzel ve renkli ...

Her piksel kendim tarafından elle yerleştirilir. FireFox'ta çalıştırmak için buraya gidin (Chrome çalışmaz) ve 1'lik bir genişlikle yükleyin (siyah görünür, endişelenmeyin), sayıyı girin ve çalıştır düğmesine basın!

Küçük Program: Küçük Versiyon


Büyütülmüş (10 kodel genişliği): görüntü tanımını buraya girin


Does not dead chexbayt sayısı eklemek?
Beta Decay

1
@Beta Adil olmak gerekirse, bye sayısı aslında diskteki daha küçük görüntünün boyutudur, bu yüzden bayt sayısı sabittir
DeadChex

12

Pyth 178 156 153 147 bayt

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

kalıcı

Şimdiye kadarki ikinci golf, herhangi bir Pyth geri bildirimi çok yardımcı olacaktır.

açıklama

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

J=...Üçlü duruma getirmek için satır içi atama kullanabilmelisiniz .
Maltysen

7

CJam, 98 96 93 bayt

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\

Kaynak kodu yazdırılamayan karakterler içerdiğinden yukarıdakiler ters çevrilebilir bir hexdump'tur.

Yazdırılamaz karakterlerin çoğu çevrimiçi tercüman için sorun değil, ancak ilk dizedeki boş bayt bir anlaşma kırıcı.

Bir bayt pahasına, girişe 1, ilk dizginin her kod noktasına 1 ekleyerek bunu düzeltebiliriz. Bu sürümü CJam tercümanında deneyebilirsiniz .

Permalink tarayıcınızda çalışmazsa, kodu bu yapıştırmadan kopyalayabilirsiniz .

Test durumları

$ 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

Nasıl çalışır

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.

5

SWI-Prolog, 237 232 213 bayt

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])).

Burada defalarca uygulamak için Prolog en backtracking mekanizmasını kullanın nth1/3listeye Lilk elemanını almak için, LastDay+1:MonthNamebir Lkendisi için X < LastDay+1tutar. Daha sonra, ayın gününü değerlendirmek için hemen bundan önceki ayı ararız.


5

Q, 134 146 Bayt

ikinci kesim - program (146 bayt)

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;

ilk kesim - işlev (134 bayt)

{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}

test yapmak

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"

haklısın - cevabı bir işlevsellikten ziyade tam bir program haline getirmek için düzenlemiştim ve böylece soru kurallarına göre tırnak işareti olmadan stdout'a yazdırdı
scottstein37

4

Julia, 231 216 184 175 bayt

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])

Bu, STDIN'den bir satır okur ve onu bir tamsayıya dönüştürür, girişin başlangıcından büyük veya eşit olduğu ay başlangıç ​​günlerinin ters çevrilmiş listesinin ilk öğesini bulur, ardından buna göre yazdırır.


3

Swift 1.2, 256 bayt

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}}

Çalıştırmak için kodu bir .swiftdosyaya koyun ve kullanarak çalıştırın.swift <filename> <inputNumber>


3

Java, 357 339 bayt

En verimli değil, ama çalışma şeklini seviyorum. Tüm Flooptonia takvimini oluşturur ve sayının hangi tarihte olduğuna bakar.

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]);}}

Giriş çıkış:

77 --> 15 Karpasus 80 --> Floopdoor

Aralıklı ve sekmeli:

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 ]);
    }
}

1
Sana meydan okuyorum! Cevabımı görüntüle! =)
Luigi Cortese

3

Java, 275 269 266 257 256 252 246 244 243 bayt

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]);}}

biçimlendirilmiş:

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]);
    }
}

İlginçtir, bundan daha kısa bir kaç bayt

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" : "");
    }
}

İyi oynadı Luigi!
DeadChex

1
"Integer.valueOf (w [0])" yerine "new Short (w [0])" ile 6 bayt kaydedin.
Olivia Trewin

@AndrewTrewin harika bir ipucu, teşekkür ederim!
Luigi Cortese,

3

ES6 171 164 163 bayt kullanarak JavaScript

En iyi JavaScript programcısı değilim ama elimden gelenin en iyisini yaptım ve aşağıdaki kodla geldim

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;

Sonucu görmek için bir html dosyasında yukarıdaki kodu kullanmanız ve aşağıdaki koda benzer bir şekilde kullanmanız gerekir.

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

Yukarıdaki kodda fp.js, javascript kodunu içeren dosyadır.

Girintili birleştirilmiş HTML ve JavaScript kodu

        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>

Düzenle:

Vihan’e return ifadesini silmeme ve kodumu 17 byte azaltmama yardım ettiğim için teşekkür etmek istiyorum

@ipi, 7 baytı kurtarmama yardım ettiğin için teşekkürler

Not: Sonucu, ES6 ok işlevlerini kullandığından yalnızca Firefox sürüm 22+ ve Google Chrome 45+ tarayıcılarında görebilirsiniz.


@ vihan1086, Öneriniz için teşekkürler
Anandaraj

Şu anda ok gösterme desteğine sahip bir tarayıcıya erişimim yok (bu yüzden bunu test etmedim) ancak ay dizinizi değiştirebilir "Qupu0Blinkorp0Paas0Karpasus0Floopdoor0Dumaflop0Lindilo0Fwup".split(0)ve 7 bayt kaydedebilirsiniz.
Sean Latham

Teşekkürler ipi, bir boşlukla böldüm, ama sıfır beni iki bayt kurtardı! You must write a complete programBunun tek başına çalışması gerektiğini düşünüyorum, prompt () gibi bir şey kullanmanız gerekebilir.
Vartan

@ipi, Yorumunuz için teşekkürler
Anandaraj

@ Vartan, Cevabınız için teşekkürler, 1 byte kurtardım
Anandaraj

2

Python 2, 168 bayt

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]

Bu, günü 80dahili olarak kabul eder 18 Karpasus, ancak yazdırmaya çağrıldığında bunu yok sayar. Ayrıca, Python 2'nin input()işlevi (aksine raw_input()) burada kullanışlıdır.


2

Perl 5, 140

Çalıştırmayı gerektirir 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]

Test çıkışı (@Dennis'den çalınan test kodu):

$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

2

Haskell, 171 167 bayt

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, NL'de bitmemesi gereken stdin'den girdi okuyor. Girişi EOF / ^ D ile sonlandırın veya benzer bir şey kullanın echo -n 80 | ./what-day-is-it. (Bazıları sviçi echoanlamıyor -nve NL'yi varsayılan olarak atlıyor).

Nasıl çalışır: mainİşlev girdiyi okur, onu dönüştürür ve girdi olması durumunda değişmez döndüren Integerçağrılar , olası tüm tarihlerin bir listesini oluşturur, yani öğeyi seçer . Yaptığım bir gün daha uzun. konumunda ve listede eksik olanları düzeltir .fFloopdoor80["1 Qupu", "2 Qupu", ... "1 Blinkorp", ... "67 Fwup"]nKarpasus18 Karpasus80Floopdoor

Düzenleme: @ MTnViewMark 18 Karpasushile fikri vardı ve 4 bayt kaydetti.


Karpasus'un 18 gün sürdüğünü iddia ederek 4 bayttan tasarruf edebileceğinizi düşünüyorum ,1.
MtnViewMark

@ MTnViewMark: çok zekice. Çok teşekkürler.
nimi

1

Swift 2.0, 220 bayt

Zekice değil, sadece bir koleksiyon koleksiyonundan filtreler ...

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]}

Hatayı düzeltmek için düzenlendi, bir boşluk kaldırıldı


5
"Tam bir program yazmalısınız." Yani bir fonksiyon olamaz.
Alex A.

1

JavaScript (Node.js'deki ES6), 196 bayt

Bir komut satırı argümanı alır:

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}

gösteri

process.argvTarayıcıda komut satırı argümanı ( ) olmadığından , snippet'teki kod argümanı kabul eden bir işleve yerleştirilmiştir:

// 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>


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}!]))

Bu, kullanıcıdan STDIN'deki sayıyı girmesini isteyen tam bir programdır.


1

Matlab, 187 bayt

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})

Genişletilmiş sürüm:

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})

Konsoldan bir satır okur ( stdin), girişin dizi elemanına eşit veya ondan daha büyük olduğu ay başlangıç ​​günlerinin ters çevrilmiş listesinin ilk öğesini bulur, ardından buna göre yazdırır.

Bu neredeyse aynı Julia gösterim aşaması dışında cevap ile . ( Matlab'da kullanılamayan üçlü operatörlerini yenemeyiz ). Tam bir ififadeyi açıklamak zorunda kalmak Backspaceiçin, özel gün / ayın 1 sayısını "silmek" için küçük bir numara kullanıyoruz ( baskı biçiminde bir karakter)Floopdoor


Matlab ve Octave ile işbirliği içinde sohbet katılımcıları .


1

168 bayt kullanarak Javascript ES5

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])

Ungolfed:

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

0

C, 241 bayt

Çok heyecan verici bir şey yok. Tam bir program olması gerekmekteydi 27 byte'ı tıraş etmiş olabilirsiniz.

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");}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.