Che giorno è (su Flooptonia)?


34

Sei un turista spaziale sulla strada per il pianeta Flooptonia! Il volo impiegherà altri 47.315 anni, quindi per passare il tempo prima che tu sia congelato criogenicamente decidi di scrivere un programma per aiutarti a capire il calendario flooptoniano.

Ecco il calendario flooptoniano di 208 giorni:

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)

Sfida

Il tuo programma, dato un giorno intero nell'anno (intervallo [0-208)) è quello di produrre il giorno corrispondente del mese e il nome del mese (ad es 13 Dumaflop.).

C'è un'eccezione, tuttavia: Floopdoor è un momento speciale per i flooptoniani che apparentemente merita una sua pagina di calendario. Per questo motivo, Floopdoor non è scritto con un giorno (ovvero l'output è Floopdoor, non 1 Floopdoor).

Casi test

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

Regole

  • Devi scrivere un programma completo.
  • Si può presumere che l'input sia sempre valido.
  • L'output potrebbe avere una nuova riga finale, ma in caso contrario deve essere privo di caratteri aggiuntivi. Il caso dovrebbe anche corrispondere agli esempi forniti.
  • È possibile utilizzare le funzioni di data / ora.
  • La lunghezza del codice deve essere misurata in byte.

2
È "Floopdo o r" o "Floopdor"? Il primo grafico ha un extra o, ma le altre istanze del nome no.
jwodder,

4
Quindi ... tra 47k anni, nulla cambierà?
Non che Charles

2
@NotthatCharles inoltre, se il pianeta è così lontano, non sarà superato dal momento in cui lo ottieni in primo luogo?
SuperJedi224,

3
Come se il calendario gregoriano non fosse abbastanza male.
Arturo Torres Sánchez,

3
@ ArturoTorresSánchez Beh, almeno non c'è un anno bisestile. Ma ci sono altre storie su Flooptonia o l'intera ambientazione è stata creata esclusivamente per questo specifico puzzle? Fwup è la loro parola per l'inverno? O dovrei semplicemente riportare la coda a Worldbuilding?
Damian Yerrick,

Risposte:


14

Pyth - 105 103 90 88 byte

Utilizza la conversione di base. Due semplici tabelle di ricerca, con una per i nomi e una per le date di inizio e un ternario alla fine per Floopdoor.

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

Comprime la stringa non come base 128, ma come base 23. Innanzitutto, la traduce in indici dell'alfabeto. Ciò ha richiesto che il separatore fosse cche non appare in nessuno dei nomi dei mesi. Quindi lo codifica per basare dieci da un numero di base 23 (il valore più alto apparso era w), quindi converte in base 256.

Le date di inizio sono i loro punti di codice unicode, nessuna conversione di base.

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

Provalo online qui .

Test Suite .


Sono molto nuovo in Pyth, potresti romperlo? Le sarei molto grato.
Winny,

1
@Winny lo farò, volevo solo finire prima gli ovvi golf. Tutti i simboli strani sono perché ho compresso i simboli della base 26 (l'alfabeto) nella base 256 per risparmiare spazio.
Maltysen,

1
@Winny è abbastanza? Sentiti libero di chiamarmi qui / in chat per qualsiasi domanda.
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

L'oggetto byte nel zipcontiene caratteri non stampabili:

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

(Grazie a @xnor per aver suggerito un for/ziploop per -3 byte)


11
Quel momento in cui una risposta Python è --- <s> andando a testa a testa </s> --- battendo una risposta Pyth
Optimizer

1
L'uso di un bytestring è geniale!
Winny,

Sento che dovrebbe essere possibile scorrere bdirettamente con forinvece di while, con qualcosa di simile for c in b"...":i+=n>0;n-=c.
xnor

1
Oh, aspetta, hai bisogno del giusto valore nper smettere di scendere anche tu . Comunque dovrebbe essere possibile con qualcosa del genere, x=n>c;n-=c*x;i+=xma non so se ne valga la pena.
xnor

13

Piet 2125 byte

Non è affatto il più corto, ma è carino e colorato ...

Ogni pixel viene posizionato da solo a mano. Per eseguirlo vai qui in FireFox (Chrome non funziona) e caricalo con una larghezza del codice di 1 (apparirà nero, non ti preoccupare), inserisci il numero e premi il pulsante Esegui!

Piccolo programma: Small Version


Ingrandito (larghezza del codice di 10): enter image description here


Non si dead chexaggiunge al conteggio byte?
Decadimento beta

1
@Beta Per essere onesti, il conteggio di ciao è in realtà la dimensione dell'immagine più piccola sul disco, quindi indipendentemente dal numero di byte è fisso
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

Secondo golf in assoluto, qualsiasi feedback Pyth sarà molto utile.

Spiegazione

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

Dovresti essere in grado di utilizzare l'assegnazione in linea per mettere l'intero J=...nella condizione ternaria.
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\

Quanto sopra è un hexdump reversibile, poiché il codice sorgente contiene caratteri non stampabili.

La maggior parte dei caratteri non stampabili non è un problema per l'interprete online, ma il byte nullo nella prima stringa è un elemento di rottura.

Al costo di un byte, possiamo risolvere questo problema aggiungendo 1 all'input e 1 a ciascun punto di codice della prima stringa. Puoi provare questa versione nell'interprete CJam .

Se il permalink non funziona nel tuo browser, puoi copiare il codice da questo incolla .

Casi test

$ 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

Come funziona

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

Qui usiamo il meccanismo di backtracking di Prolog per applicare ripetutamente nth1/3all'elenco L, per ottenere il primo elemento LastDay+1:MonthNamedi Lcui X < LastDay+1vale. Quindi cerchiamo il mese immediatamente precedente a questo nell'elenco per valutare il giorno del mese.


5

Q, 134 146 byte

secondo taglio - programma (146 byte)

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;

primo taglio - funzione (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}

analisi

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"

you're correct -- i edited the answer to make it a full program rather than a function and so that it prints to stdout w/o the quotation marks as per the question rules
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])

This reads a line from STDIN and converts it to an integer, finds the first element of a reversed list of month start days where the input is greater than or equal to the start, then prints accordingly.


3

Swift 1.2, 256 bytes

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

To run put the code alone in a .swift file and run it using swift <filename> <inputNumber>


3

Java, 357 339 bytes

It's not the most efficient, but I do like how it works. It creates the entire Flooptonia calendar and then looks up what date the number is.

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

Spaced and tabbed out:

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
I challenge you! View my answer! =)
Luigi Cortese

3

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

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

Formatted:

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

Interestingly, it's a few bytes shorter than this

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

Well played Luigi!
DeadChex

1
Save 6 bytes with "new Short(w[0])" instead of "Integer.valueOf(w[0])".
Olivia Trewin

@AndrewTrewin great tip, thank you!
Luigi Cortese

3

JavaScript using ES6 171 164 163 bytes

I'm not the best JavaScript programmer but I tried my best and ended up with the following code

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;

To see the result you need to refer above code in a html file and use similar to the code below

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

In the above code fp.js is the file that contains the javascript code.

Combined HTML and JavaScript code with indent is

        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:

I'd like to thank Vihan for helping me remove the return statement and reduce my code by 17bytes

@ipi, thanks for helping me save 7 bytes

Note: You can see the result only in browsers Firefox version 22+ and Google Chrome 45+ because of using ES6 arrow functions


@vihan1086, Thanks for your suggestion
Anandaraj

I don't have access to a browser with arrow notation support right now (so I haven't tested this) but you should be able to replace your month array with "Qupu0Blinkorp0Paas0Karpasus0Floopdoor0Dumaflop0Lindilo0Fwup".split(0) and save 7 bytes.
Sean Latham

Thanks ipi, i was splitting by a space, but the zero saved me two bytes! You must write a complete program I think this has to run alone, you might have to use something like prompt().
Vartan

@ipi, Thanks for your comment
Anandaraj

@Vartan, Thanks to your answer, I saved 1 byte
Anandaraj

2

Python 2, 168 bytes

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]

This treats day 80 internally as 18 Karpasus, but then ignores it when called to print. Also, Python 2's input() function (as opposed to raw_input()) was convenient here.


2

Perl 5, 140

Requires running via 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 output (stolen test code from @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

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]

Il programma legge l'input di stdin che non deve terminare in NL. Termina l'input con EOF / ^ D o usa qualcosa di simile echo -n 80 | ./what-day-is-it. (Alcuni echonon capiscono lo -nswitch e omettono la NL per impostazione predefinita).

Come funziona: la mainfunzione legge l'input, lo converte in an Integere chiama il fquale restituisce un valore letterale Floopdoorin caso di input 80o crea un elenco di tutte le date possibili, ovvero ["1 Qupu", "2 Qupu", ... "1 Blinkorp", ... "67 Fwup"]da cui seleziona l' nelemento th. Faccio Karpasusè un giorno in più. 18 Karpasusè in posizione 80e corregge i dispersi Floopdoornell'elenco.

Edit: @MtnViewMark had the idea of the 18 Karpasus trick and saved 4 bytes.


I think you can save 4 bytes by pretending Karpasus is 18 days long, removing ,1 and ` x` - since 80 will be caught by the pattern match for it.
MtnViewMark

@MtnViewMark: very clever. Thanks a lot.
nimi

1

Swift 2.0, 220 bytes

Nothing clever, just filters from a collection of tuples...

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

Edited to correct bug, removed a space


5
"You must write a complete program." So it can't be a function.
Alex A.

1

JavaScript (ES6 on Node.js), 196 bytes

Takes one command line argument:

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

As there is no command-line argument (process.argv) in the browser, the code in the snippet has been placed in a function that accepts an 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>


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

This is a full program which asks the user to input the number in STDIN.


1

Matlab, 187 bytes

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

Expanded version:

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

Reads a line from the console (stdin), finds the first element of a reversed list of month start days where the input is greater than or equal to the array element, then prints accordingly.

This is almost identical to the Julia answer, except for the display stage. (We can't beat their ternary operator, unavailable in Matlab). To make up having to explicit a full if statement, we use a little trick (a Backspace character in the print format) to "erase" the number 1 for the special day/month Floopdoor


In collaboration with the Matlab and Octave chat participants.


1

Javascript ES5 using 168 bytes

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 bytes

Nothing too exciting. Could have shaved 27 bytes had it require to be a complete program.

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");}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.