Welcher Tag ist heute (auf Flooptonia)?

34

Du bist ein Weltraumtourist auf dem Weg zum Planeten Flooptonia! Der Flug wird weitere 47.315 Jahre dauern. Wenn Sie also die Zeit verstreichen lassen möchten, bevor Sie kryogen gefroren sind, schreiben Sie ein Programm, mit dem Sie den Floopton-Kalender besser verstehen können.

Hier ist der 208-tägige Floopton-Kalender:

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)

Herausforderung

Ihr Programm gibt bei einem ganzzahligen Tag im Jahr (Bereich [0-208)) den entsprechenden Tag des Monats und den Namen des Monats aus (z 13 Dumaflop. B. ).

Es gibt jedoch eine Ausnahme: Floopdoor ist eine besondere Zeit für Flooptonianer, die anscheinend eine eigene Kalenderseite verdient. Aus diesem Grund wird Floopdoor nicht mit einem Tag geschrieben (dh die Ausgabe erfolgt Floopdoornicht 1 Floopdoor).

Testfälle

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

Regeln

  • Sie müssen ein vollständiges Programm schreiben.
  • Sie können davon ausgehen, dass die Eingabe immer gültig ist.
  • Ihre Ausgabe enthält möglicherweise einen nachgestellten Zeilenumbruch, muss jedoch ansonsten frei von zusätzlichen Zeichen sein. Der Fall sollte auch mit den bereitgestellten Beispielen übereinstimmen.
  • Sie können Datums- / Uhrzeitfunktionen verwenden.
  • Die Codelänge ist in Bytes zu messen.
Sean Latham
quelle
2
Ist es "Floopdo o r" oder "Floopdor"? Das erste Diagramm enthält das Extra o, die anderen Instanzen des Namens jedoch nicht.
Jwodder
4
Also ... in 47.000 Jahren wird sich nichts ändern?
Nicht dass Charles
2
@NotthatCharles außerdem, wenn der Planet so weit weg ist, wird er dann nicht veraltet sein, wenn Sie ihn überhaupt bekommen?
SuperJedi224
3
Als ob der Gregorianische Kalender nicht schlecht genug wäre.
Arturo Torres Sánchez
3
@ ArturoTorresSánchez Na jedenfalls gibt es kein Schaltjahr. Aber gibt es noch andere Geschichten über Flooptonia, oder wurde die gesamte Umgebung nur für dieses spezielle Rätsel erstellt? Ist Fwup ihr Wort für den Winter? Oder soll ich einfach meinen Schwanz zurück zu Worldbuilding bekommen?
Damian Yerrick

Antworten:

14

Pyth - 105 103 90 88 Bytes

Verwendet die Basisumwandlung. Zwei einfache Nachschlagetabellen, eine für die Namen und eine für die Startdaten und eine ternäre am Ende für Floopdoor.

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

Komprimiert die Zeichenfolge nicht als Basis 128, sondern als Basis 23. Zunächst wird sie in Indizes des Alphabets übersetzt. Dies erforderte, dass das Trennzeichen cin keinem der Monatsnamen vorkommt. Dann wird codiert, dass zehn von einer Zahl zur Basis 23 (der höchste Wert, der angezeigt wurde w, war ), und dann zu Basis 256 konvertiert.

Die Startdaten sind ihre Unicode-Codepunkte, keine Basiskonvertierung.

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

Probieren Sie es hier online aus .

Test Suite .

Maltysen
quelle
Ich bin sehr neu in Pyth. Könntest du es kaputt machen? Ich wäre sehr dankbar.
Winny
1
@Winny werde ich, wollte nur die offensichtlichen Golfplätze zuerst beenden. Alle seltsamen Symbole sind, weil ich die Symbole der Basis 26 (das Alphabet) in die Basis 256 komprimiert habe, um Platz zu sparen.
Maltysen
1
@Winny ist das genug? Wenn Sie Fragen haben, können Sie mich gerne hier / im Chat anrufen.
Maltysen
19

Python 3, 159 156 152 151 150 148 Bytes

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

Das bytes-Objekt in zipenthält nicht druckbare Zeichen:

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

(Danke an @xnor für den Vorschlag einer for/zipSchleife für -3 Bytes)

Sp3000
quelle
11
In dem Moment, in dem eine Python-Antwort lautet: <s> Hals an Hals, um </ s> eine Pyth-Antwort zu schlagen
Optimizer
1
Die Verwendung eines Bytestrings ist genial!
Winny
Ich habe das Gefühl, es sollte möglich sein, bdirekt mit foranstatt mit einer Weile zu iterieren , mit so etwas wie for c in b"...":i+=n>0;n-=c.
Xnor
1
Oh, warte, du brauchst den richtigen Wert, num aufhören zu sinken. x=n>c;n-=c*x;i+=xSollte immer noch mit so etwas möglich sein , weiß aber nicht, ob es sich lohnt.
Xnor
13

Piet 2125 Bytes

Es ist keineswegs das kürzeste, aber es ist hübsch und farbenfroh ...

Jedes Pixel wird von Hand von mir platziert. So führen sie gehen hier in FireFox (Chrome wird nicht funktionieren) und laden Sie es mit einer CODEL Breite von 1 (es wird schwarz erscheinen, keine Sorge), geben Sie die Nummer und drücken Sie die Taste Run!

Kleines Programm: Kleine Version


Vergrößert (Codel width von 10): Bildbeschreibung hier eingeben

DeadChex
quelle
Wird dead chexdie Byteanzahl nicht erhöht?
Beta Decay
1
@Beta Um fair zu sein, die Anzahl der Bytes ist eigentlich die Größe des kleineren Bildes auf der Festplatte, so dass unabhängig von der Anzahl der Bytes feststeht
DeadChex
12

Pyth 178 156 153 147 Bytes

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

Zum zweiten Mal ist jedes Pyth-Feedback sehr hilfreich.

Erläuterung

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
quelle
Sie sollten die Inline-Zuweisung verwenden können, um das Ganze J=...in den ternären Zustand zu versetzen .
Maltysen
7

CJam, 98 96 93 Bytes

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\

Das obige ist ein umkehrbarer Hexdump, da der Quellcode nicht druckbare Zeichen enthält.

Die meisten nicht druckbaren Zeichen sind für den Online-Interpreter kein Problem, aber das Null-Byte in der ersten Zeichenfolge ist ein Deal Breaker.

Auf Kosten eines Bytes können wir dies beheben, indem wir 1 zur Eingabe und 1 zu jedem Codepunkt der ersten Zeichenfolge hinzufügen. Sie können diese Version im CJam-Interpreter ausprobieren .

Wenn der Permalink in Ihrem Browser nicht funktioniert, können Sie den Code aus dieser Paste kopieren .

Testfälle

$ 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

Wie es funktioniert

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

SWI-Prolog, 237 232 213 Bytes

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

Hier verwenden wir den Rückverfolgungsmechanismus von Prolog, um wiederholt nth1/3auf die Liste anzuwenden L, um das erste Element LastDay+1:MonthNamezu erhalten, Lfür das X < LastDay+1gilt. Wir suchen dann den Monat unmittelbar vor diesem in der Liste, um den Tag des Monats auszuwerten.

Tödlich
quelle
5

Q, 134 146 Bytes

zweiter Schnitt - Programm (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;

first cut - Funktion (134 Bytes)

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

testen

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
quelle
du hast recht
ich habe die antwort
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])

Dies liest eine Zeile aus STDIN und konvertiert sie in eine Ganzzahl, findet das erste Element einer umgekehrten Liste von Monatsstarttagen, an denen die Eingabe größer oder gleich dem Start ist, und druckt dann entsprechend.

Alex A.
quelle
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}}

Setzen Sie zum Ausführen den Code alleine in eine .swiftDatei und führen Sie ihn mit ausswift <filename> <inputNumber>

David Skrundz
quelle
3

Java, 357 339 Bytes

Es ist nicht das effizienteste, aber ich mag, wie es funktioniert. Es wird der gesamte Flooptonia-Kalender erstellt und anschließend das Datum der Nummer ermittelt.

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

Mit Zwischenräumen und Tabs versehen:

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
quelle
1
Ich fordere dich heraus! Meine Antwort anzeigen! =)
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]);}}

Formatiert:

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

Interessanterweise ist es ein paar Bytes kürzer

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
quelle
Gut gemacht, Luigi!
DeadChex
1
Speichern Sie 6 Bytes mit "new Short (w [0])" anstelle von "Integer.valueOf (w [0])".
Olivia Trewin
@ AndrewTrewin toller Tipp, danke!
Luigi Cortese
3

JavaScript mit ES6 171 164 163 Bytes

Ich bin nicht der beste JavaScript-Programmierer, aber ich habe mein Bestes gegeben und den folgenden Code erhalten

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;

Um das Ergebnis zu sehen, müssen Sie auf den obigen Code in einer HTML-Datei verweisen und ihn ähnlich wie den folgenden Code verwenden

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

Im obigen Code ist fp.js die Datei, die den Javascript-Code enthält.

Kombinierter HTML- und JavaScript-Code mit Einzug ist

        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>

Bearbeiten:

Ich möchte Vihan dafür danken, dass er mir geholfen hat, die return-Anweisung zu entfernen und meinen Code um 17 Byte zu reduzieren

@ipi, danke, dass du mir geholfen hast, 7 Bytes zu sparen

Hinweis: Das Ergebnis wird nur in den Browsern Firefox Version 22+ und Google Chrome 45+ angezeigt, da die Pfeilfunktionen von ES6 verwendet werden

Anandaraj
quelle
@ vihan1086, Vielen Dank für Ihren Vorschlag
Anandaraj
Ich habe derzeit keinen Zugriff auf einen Browser mit Pfeilnotationsunterstützung (daher habe ich dies nicht getestet), aber Sie sollten in der Lage sein, Ihr Monatsarray durch zu ersetzen "Qupu0Blinkorp0Paas0Karpasus0Floopdoor0Dumaflop0Lindilo0Fwup".split(0)und 7 Bytes zu sparen.
Sean Latham
Dank IPI, ich wurde durch ein Leerzeichen geteilt, aber die Null hat mir zwei Bytes gespart! You must write a complete programIch denke das muss alleine laufen, eventuell muss man so etwas wie prompt () benutzen.
Vartan,
@ipi, vielen Dank für Ihren Kommentar
Anandaraj
@Vartan, Dank Ihrer Antwort habe ich 1 Byte gespeichert
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]

Dies behandelt den Tag 80intern als 18 Karpasus, ignoriert ihn jedoch, wenn er zum Drucken aufgerufen wird. Auch die input()Funktion von Python 2 (im Gegensatz zu raw_input()) war hier praktisch.

mathmandan
quelle
2

Perl 5, 140

Benötigt Laufen über 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]

Testausgabe (gestohlener Testcode von @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
quelle
2

Haskell, 171 167 Bytes

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]

Das Programm liest seine Eingabe von stdin, die nicht auf NL enden darf. Beenden Sie die Eingabe mit EOF / ^ D oder verwenden Sie etwas wie echo -n 80 | ./what-day-is-it. (Einige echoverstehen den -nSchalter nicht und lassen die NL standardmäßig weg).

So funktioniert es: Die mainFunktion liest die Eingabe, konvertiert sie in eine Integerund ruft auf, fdie Floopdoorbei einer Eingabe ein Literal zurückgibt 80oder eine Liste aller möglichen Daten aufbaut, dh ["1 Qupu", "2 Qupu", ... "1 Blinkorp", ... "67 Fwup"]von der sie das nth-Element auswählt. Ich mache Karpasuseinen Tag länger. 18 Karpasusist auf Position 80und behebt das Fehlen Floopdoorin der Liste.

Edit: @MtnViewMark hatte die Idee des 18 KarpasusTricks und sparte 4 Bytes.

nimi
quelle
Ich denke, Sie können 4 Bytes sparen, indem Sie so tun, als wäre Karpasus 18 Tage lang, entfernen ,1und "x" - da 80 durch die Musterübereinstimmung dafür abgefangen werden.
MtnViewMark
@MtnViewMark: sehr klug. Vielen Dank.
nimi
1

Swift 2.0, 220 Bytes

Nichts Schlaues, nur Filter aus einer Sammlung von Tupeln ...

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

Bearbeitet, um Fehler zu korrigieren, ein Leerzeichen entfernt

GoatInTheMachine
quelle
5
"Sie müssen ein vollständiges Programm schreiben." Es kann also keine Funktion sein.
Alex A.
1

JavaScript (ES6 auf Node.js), 196 Byte

Nimmt ein Befehlszeilenargument an:

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

Da process.argvim Browser kein Befehlszeilenargument ( ) vorhanden ist , wurde der Code im Snippet in eine Funktion eingefügt, die ein Argument akzeptiert:

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

Dies ist ein vollständiges Programm, das den Benutzer auffordert, die Nummer in STDIN einzugeben.

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

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

Liest eine Zeile von der Konsole ( stdin), findet das erste Element einer umgekehrten Liste von Monatsbeginntagen, an denen die Eingabe größer oder gleich dem Array-Element ist, und druckt dann entsprechend.

Dies ist fast identisch mit der JuliaAntwort, mit Ausnahme der Anzeigebühne. ( Wir können ihren ternären Operator nicht schlagen, der in Matlab nicht verfügbar ist .) Um eine vollständige ifAussage zu machen, verwenden wir einen kleinen Trick (ein BackspaceZeichen im Druckformat), um die Zahl 1 für den speziellen Tag / Monat zu "löschen"Floopdoor


In Zusammenarbeit mit den Chat-Teilnehmern Matlab und Octave .

Hoki
quelle
1

Javascript ES5 mit 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
Vartan
quelle
0

C 241 Bytes

Nichts zu aufregend. Hätte 27 Bytes rasieren können, wenn es ein vollständiges Programm sein müsste.

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");}
ein Benutzer
quelle