Który to dzień (na Flooptonia)?

34

Jesteś kosmicznym turystą na swojej drodze do planety Flooptonia! Lot potrwa kolejne 47 315 ​​lat, więc aby minąć czas, zanim się zamrozisz, postanowisz napisać program, który pomoże ci zrozumieć kalendarz Flooptonian.

Oto 208-dniowy kalendarz Flooptonian:

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)

Wyzwanie

Twój program, podając liczbę całkowitą w roku (zakres [0-208)), ma wypisać odpowiedni dzień miesiąca i nazwę miesiąca (np 13 Dumaflop.).

Istnieje jednak wyjątek: Floopdoor to szczególny czas dla Flooptonian, który najwyraźniej zasługuje na własną stronę kalendarza. Z tego powodu nie jest napisane Floopdoor z dnia (czyli wyjście to Floopdoornie 1 Floopdoor).

Przypadki testowe

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

Zasady

  • Musisz napisać kompletny program.
  • Możesz założyć, że dane wejściowe są zawsze prawidłowe.
  • Twój wynik może mieć końcowy znak nowej linii, ale w przeciwnym razie nie może zawierać żadnych dodatkowych znaków. Sprawa powinna również pasować do podanych przykładów.
  • Możesz korzystać z funkcji daty / godziny.
  • Długość kodu należy mierzyć w bajtach.
Sean Latham
źródło
2
Czy to „Floopdo o r” czy „Floopdor”? Pierwszy wykres ma dodatkowe o, ale inne wystąpienia nazwy nie.
jwodder
4
Więc ... za 47 tysięcy lat nic się nie zmieni?
Nie, że Charles
2
@NotthatCharles ponadto, jeśli planeta jest tak daleko, czy nie stanie się przestarzała, zanim ją zdobędziesz?
SuperJedi224,
3
Jakby kalendarz gregoriański nie był wystarczająco zły.
Arturo Torres Sánchez
3
@ ArturoTorresSánchez Cóż, przynajmniej nie ma roku przestępnego. Ale czy są jeszcze jakieś historie o Flooptonii, czy też całe ustawienie zostało stworzone wyłącznie dla tej konkretnej układanki? Czy Fwup to słowo na zimę? A może powinienem po prostu wrócić do ogona Worldbuilding?
Damian Yerrick

Odpowiedzi:

14

Pyth - 105 103 90 88 bajtów

Wykorzystuje konwersję podstawową. Dwie proste tabele odnośników, jedna dla nazw i jedna dla dat rozpoczęcia, oraz trójka na końcu dla Floopdoor.

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

Kompresuje ciąg nie jako podstawę 128, ale jako podstawę 23. Najpierw tłumaczy go na indeksy alfabetu. Wymagało to separatora, cktóry nie pojawia się w żadnej z nazw miesięcy. Następnie koduje to do podstawy dziesięciu z liczby podstawowej 23 (najwyższa wyświetlona wartość to w), a następnie konwertuje do podstawy 256.

Daty rozpoczęcia są ich kodami Unicode, bez konwersji podstawowej.

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

Wypróbuj online tutaj .

Pakiet testowy .

Maltysen
źródło
Jestem bardzo nowy w Pyth, czy mógłbyś to rozbić? Byłbym bardzo wdzięczny.
Winny
1
@ Chcę, chcę najpierw skończyć oczywiste golfa. Wszystkie dziwne symbole są spowodowane tym, że skompresowałem podstawowe 26 symboli (alfabet) do podstawy 256, aby zaoszczędzić miejsce.
Maltysen
1
@ Winny to wystarczy? Jeśli masz jakieś pytania, możesz mnie pingować tutaj / na czacie .
Maltysen
19

Python 3, 159 156 152 151 150 148 148 bajtów

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

Obiekt bajtów w zipzawiera znaki niedrukowalne:

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

(Dzięki @xnor za zaproponowanie for/zippętli dla -3 bajtów)

Sp3000
źródło
11
Ten moment, w którym odpowiedź w języku Python jest --- <s> idąca łeb w łeb do </s> --- pokonując odpowiedź w języku Pyth
Optimizer
1
Zastosowanie bajtowania jest genialne!
Winny
Wydaje mi się, że powinno być możliwe powtarzanie bbezpośrednio forzamiast zamiast z czymś takim for c in b"...":i+=n>0;n-=c.
xnor
1
Och, czekaj, potrzebujesz odpowiedniej wartości, naby przestać spadać. Nadal powinno być możliwe z czymś takim, x=n>c;n-=c*x;i+=xale nie wiem, czy warto.
xnor
13

Piet 2125 bajtów

Nie jest wcale najkrótszy, ale jest ładny i kolorowy ...

Każdy piksel jest umieszczany przeze mnie ręcznie. Aby go uruchomić, przejdź tutaj w FireFox (Chrome nie będzie działał) i załaduj go z koderem o szerokości 1 (będzie czarny, nie martw się), wpisz numer i naciśnij przycisk uruchamiania!

Mały program: Small Version


Powiększony (szerokość kodu 10): enter image description here

DeadChex
źródło
Nie dead chexdodaje się do liczby bajtów?
Beta Decay
1
@Beta Aby być uczciwym, liczba bajtów jest w rzeczywistości rozmiarem mniejszego obrazu na dysku, więc niezależnie od liczby bajtów jest ustalona
DeadChex
12

Pyth 178 156 153 147 bajtów

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

Drugi golf w historii, wszelkie opinie Pyth będą bardzo pomocne.

Wyjaśnienie

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
źródło
Powinieneś być w stanie użyć przypisania wbudowanego, aby wprowadzić całość J=...w stan trójkowy.
Maltysen
7

CJam, 98 96 93 bajtów

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\

Powyższe jest odwracalnym zrzutem szesnastkowym, ponieważ kod źródłowy zawiera znaki niedrukowalne.

Większość niedrukowalnych znaków nie stanowi problemu dla interpretera online, ale bajt zerowy w pierwszym ciągu jest przerywnikiem.

Kosztem jednego bajtu możemy to naprawić, dodając 1 do wejścia i 1 do każdego punktu kodowego pierwszego ciągu. Możesz wypróbować tę wersję w interpretatorze CJam .

Jeśli bezpośredni link nie działa w przeglądarce, możesz skopiować kod z tej pasty .

Przypadki testowe

$ 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

Jak to działa

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
źródło
5

SWI-Prolog, 237 232 213 bajtów

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

Tutaj używamy mechanizmu wycofywania prolog do wielokrotnie zastosować nth1/3do listy L, aby uzyskać pierwszy element LastDay+1:MonthNamez L, dla których X < LastDay+1przechowuje. Następnie szukamy miesiąca bezpośrednio przed tym na liście, aby ocenić dzień miesiąca.

Fatalizować
źródło
5

Q, 134 146 bajtów

drugie cięcie - program (146 bajtów)

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;

pierwsze cięcie - funkcja (134 bajty)

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

testowanie

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
źródło
masz rację - zredagowałem odpowiedź, aby uczynić z niej pełny program, a nie funkcję, i aby drukował na standardowym poziomie bez znaków cudzysłowu zgodnie z regułami pytania
scottstein37
4

Julia, 231 216 184 175 bajtów

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

Odczytuje wiersz ze STDIN i konwertuje go na liczbę całkowitą, znajduje pierwszy element na odwróconej liście dni początkowych miesiąca, w których dane wejściowe są większe lub równe początkowi, a następnie odpowiednio drukuje.

Alex A.
źródło
3

Swift 1.2, 256 bajtów

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

Aby uruchomić, umieść kod sam w .swiftpliku i uruchom go za pomocąswift <filename> <inputNumber>

David Skrundz
źródło
3

Java, 357 339 bajtów

To nie jest najbardziej wydajne, ale podoba mi się to, jak to działa. Tworzy cały kalendarz Flooptonia, a następnie sprawdza datę tego numeru.

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

Wejście wyjście:

77 --> 15 Karpasus 80 --> Floopdoor

Rozstawiony i tabulowany:

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
źródło
1
Wyzywam cię! Zobacz moją odpowiedź! =)
Luigi Cortese,
3

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

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

Sformatowany:

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

Co ciekawe, jest o kilka bajtów krótszy niż ten

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
źródło
Dobrze zagrany Luigi!
DeadChex,
1
Zapisz 6 bajtów za pomocą „new Short (w [0])” zamiast „Integer.valueOf (w [0])”.
Olivia Trewin
@AndrewTrewin świetna wskazówka, dziękuję!
Luigi Cortese,
3

JavaScript za pomocą ES6 171 164 163 bajtów

Nie jestem najlepszym programistą JavaScript, ale starałem się, aby uzyskać następujący kod

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;

Aby zobaczyć wynik, musisz odwołać się do powyższego kodu w pliku HTML i użyć podobnego do kodu poniżej

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

W powyższym kodzie fp.js to plik zawierający kod javascript.

Połączony kod HTML i JavaScript z wcięciem to

        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>

Edytować:

Chciałbym podziękować Vihan za pomoc w usunięciu instrukcji return i zmniejszeniu mojego kodu o 17 bajtów

@ipi, dziękuję za pomoc w oszczędzeniu 7 bajtów

Uwaga: wynik można zobaczyć tylko w przeglądarkach Firefox w wersji 22+ i Google Chrome 45+ ze względu na użycie funkcji strzałek ES6

Anandaraj
źródło
@ vihan1086, Dzięki za sugestię
Anandaraj,
Nie mam teraz dostępu do przeglądarki z obsługą notacji strzałek (więc tego nie testowałem), ale powinieneś być w stanie zastąpić tablicę miesięcy "Qupu0Blinkorp0Paas0Karpasus0Floopdoor0Dumaflop0Lindilo0Fwup".split(0)i zapisać 7 bajtów.
Sean Latham
Dzięki ipi, dzieliłem się spacją, ale zero zaoszczędziło mi dwa bajty! You must write a complete programMyślę, że to musi działać sam, być może będziesz musiał użyć czegoś takiego jak prompt ().
Vartan
@ipi, dzięki za komentarz
Anandaraj,
@Vartan, Dzięki twojej odpowiedzi zapisałem 1 bajt
Anandaraj
2

Python 2, 168 bajtów

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]

Traktuje to dzień 80wewnętrznie jako 18 Karpasus, ale następnie ignoruje go, gdy zostanie wezwany do drukowania. Również input()funkcja Pythona 2 (w przeciwieństwie do raw_input()) była tu wygodna.

Mathmandan
źródło
2

Perl 5, 140

Wymaga uruchomienia przez 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]

Wyjście testowe (skradziony kod testowy z @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
źródło
2

Haskell, 171 167 bajtów

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 odczytuje wejście ze standardowego wejścia, które nie może kończyć się na NL. Zakończ wprowadzanie za pomocą EOF / ^ D lub użyj czegoś podobnego echo -n 80 | ./what-day-is-it. (Niektóre echonie rozumieją -nprzełącznika i domyślnie pomijają NL).

Jak to działa: mainFunkcja odczytuje dane wejściowe, konwertuje je na Integeri wywołuje, fktóry zwraca literał Floopdoorw przypadku danych wejściowych 80lub tworzy listę wszystkich możliwych dat, tj. ["1 Qupu", "2 Qupu", ... "1 Blinkorp", ... "67 Fwup"]Od których wybiera ten nelement. robięKarpasus to o jeden dzień dłużej. 18 Karpasusjest na miejscu 80i naprawia brakujące Floopdoorna liście.

Edycja: @MtnViewMark wpadł na pomysł 18 Karpasussztuczki i zapisał 4 bajty.

nimi
źródło
Myślę, że możesz zaoszczędzić 4 bajty udając, że Karpasus ma 18 dni, usuwając ,1i `x` - ponieważ 80 zostanie złapane przez dopasowanie wzorca dla niego.
MtnViewMark
@MtnViewMark: bardzo sprytny. Wielkie dzięki.
nimi
1

Swift 2.0, 220 bajtów

Nic sprytnego, po prostu filtry z kolekcji krotek ...

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

Edytowano, aby poprawić błąd, usunięto spację

GoatInTheMachine
źródło
5
„Musisz napisać kompletny program”. Więc to nie może być funkcja.
Alex A.
1

JavaScript (ES6 na Node.js), 196 bajtów

Bierze jeden argument wiersza poleceń:

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}

Próbny

Ponieważ w przeglądarce nie ma argumentu wiersza polecenia ( process.argv), kod we fragmencie został umieszczony w funkcji, która przyjmuje argument:

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

lodowisko. dozorca 6
źródło
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}!]))

Jest to pełny program, który prosi użytkownika o wprowadzenie numeru w STDIN.

Kametrixom
źródło
1

Matlab, 187 bajtów

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

Wersja rozszerzona:

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

Odczytuje wiersz z konsoli ( stdin), znajduje pierwszy element na odwróconej liście dni początkowych miesiąca, w których dane wejściowe są większe lub równe elementowi tablicy, a następnie odpowiednio drukuje.

Jest to prawie identyczne z Juliaodpowiedzią, z wyjątkiem etapu wyświetlania. ( Nie możemy pokonać ich trójskładnikowego operatora, niedostępnego w Matlabie ). Aby nadrobić konieczność ifwyrażenia pełnego oświadczenia, używamy małej sztuczki ( Backspaceznaku w formacie wydruku), aby „skasować” cyfrę 1 w specjalnym dniu / miesiącuFloopdoor


We współpracy z uczestnikami czatu Matlab i Octave .

Hoki
źródło
1

JavaScript ES5 przy użyciu 168 bajtów

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

Nie golfowany:

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
źródło
0

C, 241 bajtów

Nic zbyt ekscytującego. Mógłby ogolić 27 bajtów, gdyby wymagał kompletnego programu.

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");}
jakiś użytkownik
źródło