¿Qué día es (en Flooptonia)?

34

¡Eres un turista espacial en camino al planeta Flooptonia! El vuelo tomará otros 47.315 años, por lo que para pasar el tiempo antes de que se congele criogénicamente, decide escribir un programa para ayudarlo a comprender el calendario flooptoniano.

Aquí está el calendario flooptoniano de 208 días:

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)

Reto

Su programa, dado un día entero en el año (rango [0-208)) es generar el día correspondiente del mes y el nombre del mes (por ejemplo 13 Dumaflop).

Sin embargo, hay una excepción: Floopdoor es un momento especial para los flooptonianos que aparentemente merece su propia página de calendario. Por esa razón, Floopdoor no se escribe con un día (es decir, el resultado Floopdoorno lo es 1 Floopdoor).

Casos de prueba

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

Reglas

  • Debes escribir un programa completo.
  • Puede suponer que la entrada siempre es válida.
  • Su salida puede tener una nueva línea final, pero debe estar libre de caracteres adicionales. El caso también debe coincidir con los ejemplos proporcionados.
  • Puede usar funciones de fecha / hora.
  • La longitud del código se medirá en bytes.
Sean Latham
fuente
2
¿Es "Floopdo o r" o "Floopdor"? El primer gráfico tiene el extra o, pero las otras instancias del nombre no.
jwodder
44
Entonces ... en 47k años, ¿nada cambiará?
No es que Charles
2
@NotthatCharles además, si el planeta está tan lejos, ¿no estará desactualizado para cuando lo obtengas en primer lugar?
SuperJedi224
3
Como si el calendario gregoriano no fuera lo suficientemente malo.
Arturo Torres Sánchez
3
@ ArturoTorresSánchez Bueno, al menos no hay año bisiesto. Pero, ¿hay otras historias sobre Flooptonia, o se creó todo el entorno únicamente para este rompecabezas específico? ¿Fwup es su palabra para el invierno? ¿O debería regresar a Worldbuilding?
Damian Yerrick

Respuestas:

14

Pyth - 105 103 90 88 bytes

Utiliza conversión de base. Dos tablas de búsqueda simples, una para los nombres y otra para las fechas de inicio, y una ternaria al final para Floopdoor.

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

Comprime la cadena no como base 128, sino como base 23. Primero, la traduce a índices del alfabeto. Esto requería que el separador fuera el cque no aparece en ninguno de los nombres de los meses. Luego codifica eso a base diez desde un número base 23 (el valor más alto que apareció fue w), luego se convierte a base 256.

Las fechas de inicio son sus puntos de código unicode, sin conversión 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

Pruébelo en línea aquí .

Test Suite .

Maltysen
fuente
Soy muy nuevo en Pyth, ¿podrías desglosarlo? Estaría muy agradecido
Winny
1
@Winny lo haré, solo quería terminar los campos de golf obvios primero. Todos los símbolos extraños se deben a que comprimí los símbolos de la base 26 (el alfabeto) en la base 256 para ahorrar espacio.
Maltysen
1
@Winny es suficiente? Si tiene alguna pregunta, no dude en hacerme ping aquí / en el chat .
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

El objeto bytes en zipcontiene caracteres no imprimibles:

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

(Gracias a @xnor por sugerir un for/zipbucle para -3 bytes)

Sp3000
fuente
11
Ese momento cuando una respuesta de Python es --- <s> ir codo con codo a </s> --- vencer a una respuesta de Pyth
Optimizer
1
¡El uso de una cadena de bytes es ingenioso!
Winny
Siento que debería ser posible iterar bdirectamente en forlugar de while, con algo así for c in b"...":i+=n>0;n-=c.
xnor
1
Oh, espera, también necesitas el valor correcto npara dejar de caer. Aún así debería ser posible con algo así, x=n>c;n-=c*x;i+=xpero no sé si vale la pena.
xnor
13

Piet 2125 bytes

De ninguna manera es la más corta, pero es bonita y colorida ...

Cada píxel es colocado por mí mismo a mano. Para ejecutarlo, vaya aquí en Firefox (Chrome no funcionará) y cárguelo con un ancho de códec de 1 (aparecerá en negro, no se preocupe), ingrese el número y presione el botón ejecutar.

Pequeño programa: Versión pequeña


Ampliado (ancho de codel de 10): ingrese la descripción de la imagen aquí

DeadChex
fuente
¿No se dead chexagrega al recuento de bytes?
Beta Decay
1
@Beta Para ser justos, el recuento de descanso es realmente el tamaño de la imagen más pequeña en el disco, por lo que independientemente de la cuenta de bytes es fijo
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

Enlace permanente

Segundo golf, cualquier comentario de Pyth será muy útil.

Explicación

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
fuente
Debería poder utilizar la asignación en línea para poner todo J=...en la condición ternaria.
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\

Lo anterior es un volcado hexadecimal reversible, ya que el código fuente contiene caracteres no imprimibles.

La mayoría de los caracteres no imprimibles no son un problema para el intérprete en línea, pero el byte nulo en la primera cadena es un factor decisivo.

A costa de un byte, podemos arreglar esto agregando 1 a la entrada y 1 a cada punto de código de la primera cadena. Puede probar esta versión en el intérprete de CJam .

Si el enlace permanente no funciona en su navegador, puede copiar el código de esta pasta .

Casos de prueba

$ 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

Cómo funciona

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

Aquí se utiliza mecanismo de retroceso de Prolog para aplicar repetidamente nth1/3a la lista L, para obtener el primer elemento LastDay+1:MonthNamede Lpara el cual X < LastDay+1sostiene. Luego buscamos el mes inmediatamente anterior a este en la lista para evaluar el día del mes.

Fatalizar
fuente
5

Q, 134 146 Bytes

segundo corte - programa (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;

primer corte - función (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}

pruebas

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
fuente
tienes razón: edité la respuesta para que sea un programa completo en lugar de una función y se imprima en stdout sin las comillas según las reglas de la pregunta
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])

Esto lee una línea de STDIN y la convierte en un número entero, encuentra el primer elemento de una lista invertida de días de inicio de mes donde la entrada es mayor o igual que el inicio, luego imprime en consecuencia.

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

Para ejecutar, coloque el código solo en un .swiftarchivo y ejecútelo usandoswift <filename> <inputNumber>

David Skrundz
fuente
3

Java, 357339 bytes

No es el más eficiente, pero me gusta cómo funciona. Crea todo el calendario Flooptonia y luego busca en qué fecha está el número.

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

De entrada y salida:

77 --> 15 Karpasus 80 --> Floopdoor

Espaciado y tabulado:

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
fuente
1
¡Te reto! Ver mi respuesta! =)
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]);}}

Formateado:

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

Curiosamente, es unos bytes más cortos que esto

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
fuente
Bien jugado Luigi!
DeadChex
1
Guarde 6 bytes con "nuevo Short (w [0])" en lugar de "Integer.valueOf (w [0])".
Olivia Trewin
@AndrewTrewin gran consejo, gracias!
Luigi Cortese
3

JavaScript utilizando ES6 171 164 163 bytes

No soy el mejor programador de JavaScript, pero hice mi mejor esfuerzo y terminé con el siguiente código

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;

Para ver el resultado, debe consultar el código anterior en un archivo html y utilizar un código similar al siguiente.

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

En el código anterior, fp.js es el archivo que contiene el código javascript.

El código HTML y JavaScript combinado con sangría es

        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>

Editar:

Me gustaría agradecer a Vihan por ayudarme a eliminar la declaración de devolución y reducir mi código en 17bytes

@ipi, gracias por ayudarme a ahorrar 7 bytes

Nota: Puede ver el resultado solo en los navegadores Firefox versión 22+ y Google Chrome 45+ debido al uso de las funciones de flecha ES6

Anandaraj
fuente
@ vihan1086, gracias por su sugerencia
Anandaraj
No tengo acceso a un navegador con soporte de notación de flecha en este momento (así que no lo he probado), pero debería poder reemplazar su matriz de mes con "Qupu0Blinkorp0Paas0Karpasus0Floopdoor0Dumaflop0Lindilo0Fwup".split(0)y guardar 7 bytes.
Sean Latham
Gracias ipi, me estaba dividiendo por un espacio, ¡pero el cero me ahorró dos bytes! You must write a complete programCreo que esto tiene que ejecutarse solo, puede que tenga que usar algo como prompt ().
Vartan
@ipi, gracias por tu comentario
Anandaraj
@Vartan, gracias a tu respuesta, guardé 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]

Esto trata el día 80internamente como 18 Karpasus, pero luego lo ignora cuando se le llama para imprimir. Además, la input()función de Python 2 (en oposición a raw_input()) era conveniente aquí.

Mathmandan
fuente
2

Perl 5, 140

Requiere correr a través de 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]

Salida de prueba (código de prueba robado 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
fuente
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]

El programa lee su entrada de stdin que no debe terminar en NL. Termine la entrada con EOF / ^ D o use algo como echo -n 80 | ./what-day-is-it. (Algunos echono entienden el -ncambio y omiten el NL por defecto).

Cómo funciona: la mainfunción lee la entrada, la convierte en una Integery llama, lo fque devuelve un literal Floopdooren caso de una entrada 80o crea una lista de todas las fechas posibles, es decir, ["1 Qupu", "2 Qupu", ... "1 Blinkorp", ... "67 Fwup"]de la que selecciona el nelemento th. Lo hago Karpasuses un día más. 18 Karpasusestá en posición 80y corrige lo que falta Floopdooren la lista.

Editar: @MtnViewMark tuvo la idea del 18 Karpasustruco y guardó 4 bytes.

nimi
fuente
Creo que puede ahorrar 4 bytes fingiendo que Karpasus dura 18 días, eliminando ,1y `x`, ya que 80 coincidirá con el patrón correspondiente.
MtnViewMark
@MtnViewMark: muy inteligente. Muchas gracias.
nimi
1

Swift 2.0, 220 bytes

Nada inteligente, solo filtros de una colección de tuplas ...

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

Editado para corregir el error, eliminó un espacio

GoatInTheMachine
fuente
55
"Debes escribir un programa completo". Entonces no puede ser una función.
Alex A.
1

JavaScript (ES6 en Node.js), 196 bytes

Toma un argumento de línea de comando:

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}

Manifestación

Como no hay argumento de línea de comandos ( process.argv) en el navegador, el código en el fragmento se ha colocado en una función que acepta un argumento:

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

Este es un programa completo que le pide al usuario que ingrese el número en STDIN.

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

Versión ampliada:

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

Lee una línea desde la consola ( stdin), encuentra el primer elemento de una lista invertida de días de inicio de mes donde la entrada es mayor o igual que el elemento de matriz, luego imprime en consecuencia.

Esto es casi idéntico a la Juliarespuesta, a excepción de la etapa de visualización. ( No podemos vencer a su operador ternario, no disponible en Matlab ). Para compensar tener que explicitar una ifdeclaración completa , usamos un pequeño truco (un Backspacecarácter en el formato de impresión) para "borrar" el número 1 para el día / mes especialFloopdoor


En colaboración con los participantes del chat de Matlab y Octave .

Hoki
fuente
1

Javascript ES5 con 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])

Sin golf:

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

C, 241 bytes

Nada muy emocionante Podría haber reducido 27 bytes si hubiera requerido ser un programa completo.

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");}
algun usuario
fuente