Quel jour sommes-nous (sur Flooptonia)?

34

Vous êtes un touriste de l'espace sur votre chemin vers la planète Flooptonia! Le vol va prendre encore 47 315 ​​années. Pour passer le temps qui précède, vous décidez de créer un programme qui vous aidera à comprendre le calendrier flooptonien.

Voici le calendrier Flooptonien de 208 jours:

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)

Défi

Votre programme, étant donné un nombre entier de jours dans l'année (plage [0-208)), doit afficher le jour du mois correspondant et le nom du mois (par exemple 13 Dumaflop).

Il existe toutefois une exception: Floopdoor est un moment spécial pour les Flooptoniens qui mérite apparemment sa propre page de calendrier. Pour cette raison, Floopdoor n'est pas écrit avec un jour (c'est-à-dire que la sortie l'est Floopdoor, non 1 Floopdoor).

Cas de test

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

Règles

  • Vous devez écrire un programme complet.
  • Vous pouvez supposer que la saisie est toujours valide.
  • Votre sortie peut avoir une fin de ligne, mais doit sinon être exempte de caractères supplémentaires. Le cas devrait également correspondre aux exemples fournis.
  • Vous pouvez utiliser les fonctions de date / heure.
  • La longueur du code doit être mesurée en octets.
Sean Latham
la source
2
Est-ce "Floopdo ou " ou "Floopdor"? Le premier graphique a un extra o, mais pas les autres instances du nom.
jwodder
4
Alors ... dans 47k ans, rien ne changera?
Pas que Charles
2
@NotthatCharles En outre, si la planète est si éloignée, ne sera-t-elle pas dépassée au moment où vous l'obtiendrez au départ?
SuperJedi224
3
Comme si le calendrier grégorien n'était pas assez grave.
Arturo Torres Sánchez
3
@ ArturoTorresSánchez Au moins, il n'y a pas d'année bissextile. Mais y a-t-il d'autres histoires à propos de Flooptonia, ou l'ensemble a-t-il été créé uniquement pour ce puzzle? Fwup est-il leur mot pour l'hiver? Ou devrais-je simplement récupérer ma queue pour Worldbuilding?
Damian Yerrick

Réponses:

14

Pyth - 105 103 90 88 octets

Utilise la conversion de base. Deux tables de recherche simples, une pour les noms et une pour les dates de début, et une ternaire à la fin pour Floopdoor.

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

Compresse la chaîne non pas en base 128, mais en base 23. Elle est d'abord traduite en index de l'alphabet. Cela nécessitait que le séparateur soitc qui n'apparaît dans aucun des noms de mois. Ensuite, il code la base 10 à partir d’un nombre de base 23 (la valeur la plus élevée affichée est w), puis convertit en base 256.

Les dates de début sont leurs points de code unicode, pas de conversion de 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

Essayez-le en ligne ici .

Suite de test .

Maltysen
la source
Je suis très nouveau sur Pyth, pourriez-vous le décomposer? Je serais très reconnaissant.
Winny
1
@ Winny je veux, je voulais juste finir les golfs évidents en premier. Tous les symboles étranges sont dus au fait que j'ai compressé les 26 symboles de base (l'alphabet) en base 256 pour économiser de l'espace.
Maltysen
1
@ Winny est-ce suffisant? N'hésitez pas à me contacter ici / en discussion si vous avez des questions.
Maltysen
19

Python 3, 159 156 152 151 150 148 octets

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'objet d'octets dans le zipcontient des caractères non imprimables:

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

(Merci à @xnor d'avoir suggéré une for/zipboucle de -3 octets)

Sp3000
la source
11
Ce moment où une réponse Python est --- <s> va au coude à coude pour </ s> --- battre une réponse Pyth
Optimiseur
1
L'utilisation d'un bytestring est ingénieuse!
Winny
Je pense qu'il devrait être possible de parcourir bdirectement avec, forau lieu de, avec quelque chose comme for c in b"...":i+=n>0;n-=c.
xnor
1
Oh, attends, tu as besoin de la bonne valeur npour arrêter de descendre aussi. Cela devrait quand même être possible avec quelque chose comme, x=n>c;n-=c*x;i+=xmais je ne sais pas si cela en vaut la peine.
xnor
13

Piet 2125 octets

C'est loin d'être le plus court, mais c'est joli et coloré ...

Chaque pixel est placé par moi-même à la main. Pour l'exécuter allez ici dans FireFox (Chrome ne fonctionne pas) et chargez-le avec une largeur de code de 1 (il paraîtra en noir, ne vous inquiétez pas), entrez le numéro et appuyez sur le bouton Exécuter!

Petit programme: Small Version


Élargi (largeur de code 10): enter image description here

DeadChex
la source
N'ajoute pas dead chexau nombre d'octets?
Beta Decay
1
@Beta Pour être honnête, le nombre d'octets est en fait la taille de la plus petite image sur le disque. Par conséquent, le nombre d'octets est fixe
DeadChex
12

Pyth 178 156 153 147 octets

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

Deuxième golf de tous les temps, les commentaires de Pyth seront très utiles.

Explication

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
la source
Vous devriez pouvoir utiliser l'affectation en ligne pour placer le tout J=...dans la condition ternaire.
Maltysen
7

CJam, 98 96 93 octets

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\

Ce qui précède est un hexdump réversible, car le code source contient des caractères non imprimables.

La plupart des caractères non imprimables ne posent aucun problème à l'interpréteur en ligne, mais l'octet nul de la première chaîne est un briseur de transaction.

Au prix d'un octet, nous pouvons résoudre ce problème en ajoutant 1 à l'entrée et 1 à chaque point de code de la première chaîne. Vous pouvez essayer cette version dans l' interpréteur CJam .

Si le permalien ne fonctionne pas dans votre navigateur, vous pouvez copier le code de cette pâte .

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

Comment ça marche

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
la source
5

SWI-Prolog, 237 232 213 octets

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

Ici , nous utilisons le mécanisme de retours en arrière de Prolog pour appliquer à plusieurs reprises nth1/3à la liste L, pour obtenir le premier élément LastDay+1:MonthNamede Lpour lequel X < LastDay+1détient. Nous recherchons ensuite le mois immédiatement avant celui-ci dans la liste pour évaluer le jour du mois.

Fataliser
la source
5

Q, 134 146 octets

deuxième coupure - programme (146 octets)

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;

première coupe - fonction (134 octets)

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

essai

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
la source
vous avez raison - j'ai modifié la réponse pour en faire un programme complet plutôt qu'une fonction et pour qu'elle s'imprime sur la sortie standard sans les guillemets selon les règles de la question
scottstein37 le
4

Julia, 231 216 184 175 octets

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

Ceci lit une ligne de STDIN et la convertit en un entier, trouve le premier élément d'une liste inversée de jours de début de mois où l'entrée est supérieure ou égale au début, puis s'imprime en conséquence.

Alex A.
la source
3

Swift 1.2, 256 octets

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

Pour exécuter, placez le code seul dans un .swiftfichier et exécutez-le en utilisantswift <filename> <inputNumber>

David Skrundz
la source
3

Java, 357 339 octets

Ce n'est pas le plus efficace, mais j'aime bien son fonctionnement. Il crée tout le calendrier Flooptonia, puis recherche la date du numéro.

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

Entrée sortie:

77 --> 15 Karpasus 80 --> Floopdoor

Espacés et tabulés:

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
la source
1
Je te met au défi! Voir ma réponse! =)
Luigi Cortese
3

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

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

Formaté:

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

Fait intéressant, c'est quelques octets plus court que cela

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
la source
Bien joué Luigi!
DeadChex
1
Enregistrez 6 octets avec "new Short (w [0])" au lieu de "Integer.valueOf (w [0])".
Olivia Trewin
@AndrewTrewin excellent conseil, merci!
Luigi Cortese
3

JavaScript utilisant ES6 171 164 163 163 octets

Je ne suis pas le meilleur programmeur JavaScript, mais j'ai fait de mon mieux et j'ai obtenu le code suivant.

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;

Pour voir le résultat, vous devez référencer le code ci-dessus dans un fichier html et utiliser un code similaire à celui ci-dessous

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

Dans le code ci-dessus, fp.js est le fichier contenant le code javascript.

Le code HTML et JavaScript combiné avec retrait est

        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>

Modifier:

J'aimerais remercier Vihan de m'avoir aidé à supprimer la déclaration de retour et à réduire mon code de 17 octets.

@ ipi, merci de m'aider à économiser 7 octets

Remarque: vous ne pouvez voir le résultat que dans les navigateurs Firefox version 22+ et Google Chrome 45+ en raison de l'utilisation des fonctions de flèche ES6.

Anandaraj
la source
@ vihan1086, merci pour votre suggestion
Anandaraj
Je n'ai pas accès à un navigateur prenant en charge la notation de flèche (je ne l'ai donc pas testée), mais vous devriez pouvoir remplacer votre tableau de mois par "Qupu0Blinkorp0Paas0Karpasus0Floopdoor0Dumaflop0Lindilo0Fwup".split(0)et sauvegarder 7 octets.
Sean Latham
Merci ipi, je me séparais d'un espace, mais le zéro m'a sauvé deux octets! You must write a complete programJe pense que cela doit fonctionner seul, vous devrez peut-être utiliser quelque chose comme prompt ().
Vartan
@ipi, merci pour votre commentaire
Anandaraj le
@Vartan, grâce à votre réponse, j'ai enregistré 1 octet
Anandaraj
2

Python 2, 168 octets

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]

Ceci traite le jour en 80interne comme 18 Karpasus, mais l'ignore ensuite lorsqu'il est appelé pour imprimer. En outre, la input()fonction de Python 2 (par opposition à raw_input()) était pratique ici.

Mathmandan
la source
2

Perl 5, 140

Nécessite de courir 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]

Résultat du test (code de test volé de @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
la source
2

Haskell, 171 167 octets

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]

Le programme lit son entrée de stdin qui ne doit pas se terminer en NL. Terminez la saisie avec EOF / ^ D ou utilisez quelque chose comme echo -n 80 | ./what-day-is-it. (Certains echone comprennent pas le-n commutateur et omettent la NL par défaut).

Comment ça marche: La mainfonction lit l'entrée, la convertit en un Integerappelant fqui renvoie un littéral Floopdooren cas de saisie 80ou construit une liste de toutes les dates possibles, c'est- ["1 Qupu", "2 Qupu", ... "1 Blinkorp", ... "67 Fwup"]à- dire à partir de laquelle elle sélectionne l' nélément th. Je fais Karpasusest un jour de plus. 18 Karpasusest en position 80et corrige les manquants Floopdoordans la liste.

Edit: @MtnViewMark a eu l'idée du 18 Karpasustruc et a sauvegardé 4 octets.

nimi
la source
Je pense que vous pouvez économiser 4 octets en prétendant que Karpasus dure 18 jours, en supprimant ,1et «x» - puisque 80 sera pris en compte par le motif correspondant.
MtnViewMark
@ MtnViewMark: très intelligent. Merci beaucoup.
nimi
1

Swift 2.0, 220 octets

Rien d'intelligent, juste des filtres d'une collection de n-uplets ...

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

Édité pour corriger un bogue, suppression d'un espace

GoatInTheMachine
la source
5
"Vous devez écrire un programme complet." Donc ça ne peut pas être une fonction.
Alex A.
1

JavaScript (ES6 sur Node.js), 196 octets

Prend un argument en ligne de commande:

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}

Démo

Comme il n'y a pas d'argument de ligne de commande ( process.argv) dans le navigateur, le code de l'extrait de code a été placé dans une fonction qui accepte un 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>

rink.attendant.6
la source
1

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

C'est un programme complet qui demande à l'utilisateur de saisir le numéro dans STDIN.

Kametrixom
la source
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})

Version étendue:

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

Lit une ligne de la console (stdin ), trouve le premier élément d'une liste inversée de jours de début de mois où l'entrée est supérieure ou égale à l'élément de tableau, puis imprime en conséquence.

C'est presque identique à la Juliaréponse, sauf pour la phase d'affichage. ( Nous ne pouvons pas battre leur opérateur ternaire, indisponible dans Matlab ). Pour compenser l'obligation d'expliquer une ifinstruction complète , nous utilisons une petite astuce (un Backspacecaractère dans le format d'impression) pour "effacer" le chiffre 1 du jour / mois spécial.Floopdoor


En collaboration avec les participants au chat Matlab et Octave .

Hoki
la source
1

Javascript ES5 utilisant 168 octets

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
Vartan
la source
0

C, 241 octets

Rien de trop excitant. Vous auriez pu raser 27 octets s’il avait besoin d’être un programme complet.

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");}
un utilisateur
la source