Que dia é hoje (em Flooptonia)?

34

Você é um turista espacial a caminho do planeta Flooptonia! O vôo levará mais 47.315 anos. Assim, para passar o tempo antes que você fique congelado criogênicamente, você decide escrever um programa para ajudá-lo a entender o calendário flooptoniano.

Aqui está o calendário flooptoniano de 208 dias:

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)

Desafio

O seu programa, dado um dia inteiro no ano (intervalo [0-208)), deve gerar o dia do mês correspondente e o nome do mês (por exemplo 13 Dumaflop).

Há uma exceção, no entanto: Floopdoor, um horário especial para os Flooptonianos que aparentemente merece sua própria página de calendário. Por esse motivo, o Floopdoor não é gravado com um dia (ou seja, a saída é Floopdoor, não 1 Floopdoor).

Casos de teste

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

Regras

  • Você deve escrever um programa completo.
  • Você pode assumir que a entrada é sempre válida.
  • Sua saída pode ter uma nova linha à direita, mas deve estar livre de caracteres extras. O caso também deve corresponder aos exemplos fornecidos.
  • Você pode usar as funções de data / hora.
  • O comprimento do código deve ser medido em bytes.
Sean Latham
fonte
2
É "Floopdo ou " ou "Floopdor"? O primeiro gráfico tem o extra o, mas as outras instâncias do nome não.
jwodder
4
Então ... em 47k anos, nada vai mudar?
Não é Charles Charles
2
@NotthatCharles, além disso, se o planeta estiver tão longe, não estará desatualizado quando você o obtiver em primeiro lugar?
SuperJedi224
3
Como se o calendário gregoriano não fosse ruim o suficiente.
Arturo Torres Sánchez
3
@ ArturoTorresSánchez Bem, pelo menos não há ano bissexto. Mas há outras histórias sobre Flooptonia, ou todo o cenário foi criado exclusivamente para esse quebra-cabeça específico? Fwup é sua palavra para o inverno? Ou devo apenas voltar para o Worldbuilding?
Damian Yerrick

Respostas:

14

Pitão - 105 103 90 88 bytes

Usa conversão base. Duas tabelas de pesquisa simples, uma para os nomes e outra para as datas de início e uma ternária no final para o Floopdoor.

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

Comprime a sequência não como base 128, mas como base 23. Primeiro, ela a converte em índices do alfabeto. Isso exigia que o separador fosse o cque não aparece em nenhum dos nomes dos meses. Em seguida, ele codifica para a base dez a partir de um número base 23 (o valor mais alto que apareceu foi w) e depois converte para a base 256.

As datas de início são seus pontos de código unicode, sem conversão 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

Experimente online aqui .

Conjunto de Teste .

Maltysen
fonte
Eu sou muito novo em Pyth, você poderia explicar? Eu ficaria muito grato.
Winny
1
@ Winny eu vou, só queria terminar o golfe óbvio primeiro. Todos os símbolos estranhos são porque eu comprimi os 26 símbolos da base (o alfabeto) na base 256 para economizar espaço.
Maltysen
1
@ Winny é suficiente? Sinta-se à vontade para me enviar um ping aqui / no chat, se tiver alguma dúvida.
Maltysen
19

Python 3, 159 156 152 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

O objeto bytes no zipcontém caracteres não imprimíveis:

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

(Obrigado a @xnor por sugerir um for/ziploop para -3 bytes)

Sp3000
fonte
11
O momento em que uma resposta Python é --- <s> indo pescoço a pescoço para </ s> --- batendo uma resposta Pyth
Optimizer
1
O uso de uma bytestring é engenhoso!
Winny
Eu sinto que deve ser possível iterar bdiretamente com, ao forinvés de enquanto, com algo parecido for c in b"...":i+=n>0;n-=c.
Xnor
1
Ah, espere, você precisa do valor certo npara parar de descer também. Ainda deve ser possível com algo como, x=n>c;n-=c*x;i+=xmas não sei se vale a pena.
Xnor
13

Piet 2125 bytes

Não é de forma alguma o mais curto, mas é bonito e colorido ...

Cada pixel é colocado sozinho à mão. Para executá-lo, acesse aqui no FireFox (o Chrome não funcionará) e carregue-o com uma largura de codel igual a 1 (parecerá preto, não se preocupe), digite o número e pressione o botão Executar!

Programa pequeno: Versão Pequena


Ampliado (largura do codel de 10): insira a descrição da imagem aqui

DeadChex
fonte
Não dead chexadiciona à contagem de bytes?
Beta Decay
1
@Beta Para ser justo, a contagem de bytes é, na verdade, o tamanho da imagem menor no disco, portanto, independentemente da contagem de bytes ser corrigida
#
12

Pitão 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

Segundo golfe de todos os tempos, qualquer feedback sobre Pyth será muito útil.

Explicação

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
fonte
Você deve poder usar a atribuição em linha para colocar o todo J=...na condição ternária.
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\

O acima é um hexdump reversível, pois o código-fonte contém caracteres não imprimíveis.

A maioria dos caracteres não imprimíveis não é problema para o intérprete on-line, mas o byte nulo na primeira string é um separador de transações.

Com o custo de um byte, podemos corrigir isso adicionando 1 à entrada e 1 a cada ponto de código da primeira string. Você pode tentar esta versão no intérprete CJam .

Se o link permanente não funcionar no seu navegador, você pode copiar o código desta pasta .

Casos de teste

$ 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

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

Aqui, usamos o mecanismo de retorno do Prolog para aplicar repetidamente nth1/3à lista L, para obter o primeiro elemento LastDay+1:MonthNamedo Lqual X < LastDay+1é válido. Em seguida, procuramos o mês imediatamente anterior a este na lista para avaliar o dia do mês.

Fatalizar
fonte
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;

primeiro corte - função (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}

teste

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
fonte
Você está correto - eu editei a resposta para torná-lo um programa completo, em vez de uma função e para que ele imprime na saída padrão w / o as aspas conforme as regras de interrogação
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])

Isso lê uma linha de STDIN e a converte em um número inteiro, localiza o primeiro elemento de uma lista invertida de dias de início do mês em que a entrada é maior ou igual ao início e, em seguida, imprime em conformidade.

Alex A.
fonte
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 executar, coloque o código sozinho em um .swiftarquivo e execute-o usandoswift <filename> <inputNumber>

David Skrundz
fonte
3

Java, 357 339 bytes

Não é o mais eficiente, mas gosto de como funciona. Ele cria todo o calendário Flooptonia e, em seguida, procura em que data é o 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]);}}

Entrada / Saída:

77 --> 15 Karpasus 80 --> Floopdoor

Espaçados e com guias:

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
fonte
1
Eu desafio-te! Veja minha resposta! =)
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]);}}

Formatado:

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, é alguns bytes menor que esse

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
fonte
Luigi bem jogado!
23915 DeadChex
1
Salve 6 bytes com "novo Short (w [0])" em vez de "Integer.valueOf (w [0])".
Olivia Trewin
@AndrewTrewin ótima dica, obrigado!
Luigi Cortese
3

JavaScript usando ES6 171 164 163 bytes

Não sou o melhor programador de JavaScript, mas tentei o meu melhor e acabei com o seguinte 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 o resultado, você precisa consultar o código acima em um arquivo html e usar semelhante ao código abaixo

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

No código acima, fp.js é o arquivo que contém o código javascript.

O código HTML e JavaScript combinado com recuo é

        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:

Gostaria de agradecer à Vihan por me ajudar a remover a declaração de retorno e reduzir meu código em 17 bytes

@ipi, obrigado por me ajudar a economizar 7 bytes

Nota: Você pode ver o resultado apenas nos navegadores Firefox versão 22+ e Google Chrome 45+ devido ao uso das funções de seta ES6

Anandaraj
fonte
@ vihan1086, Obrigado pela sua sugestão
Anandaraj
No momento, não tenho acesso a um navegador com suporte para notação de seta (por isso não testei), mas você poderá substituir sua matriz do mês "Qupu0Blinkorp0Paas0Karpasus0Floopdoor0Dumaflop0Lindilo0Fwup".split(0)e salvar 7 bytes.
Sean Latham
Graças ipi, eu estava dividindo por um espaço, mas o zero me salvou dois bytes! You must write a complete programEu acho que isso tem que funcionar sozinho, talvez você precise usar algo como prompt ().
Vartan
@ipi, Obrigado pelo seu comentário
Anandaraj
@Vartan, Graças a sua resposta, eu salvei 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]

Isso trata o dia 80internamente como 18 Karpasus, mas depois o ignora quando chamado para imprimir. Além disso, a input()função do Python 2 (em oposição a raw_input()) era conveniente aqui.

mathmandan
fonte
2

Perl 5, 140

Requer execução 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]

Saída de teste (código de teste roubado 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
fonte
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]

O programa lê sua entrada de stdin, que não deve terminar em NL. Encerre a entrada com EOF / ^ D ou use algo parecido echo -n 80 | ./what-day-is-it. (Alguns echos não entendem a -nopção e omitem o NL por padrão).

Como funciona: A mainfunção lê a entrada, converte-a em Integere chama, fque retorna um literal Floopdoorno caso de uma entrada 80ou cria uma lista de todas as datas possíveis, ou seja, a ["1 Qupu", "2 Qupu", ... "1 Blinkorp", ... "67 Fwup"]partir da qual ela seleciona o nelemento th. Eu faço Karpasusé um dia a mais. 18 Karpasusestá na posição 80e corrige a falta Floopdoorna lista.

Edit: @MtnViewMark teve a idéia do 18 Karpasustruque e salvou 4 bytes.

nimi
fonte
Eu acho que você pode salvar 4 bytes fingindo que Karpasus tem 18 dias, removendo ,1e `x` - já que 80 serão capturados pela correspondência de padrões.
MtnViewMark
@MtnViewMark: muito inteligente. Muito obrigado.
nimi
1

Swift 2.0, 220 bytes

Nada inteligente, apenas filtros de uma coleção 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 corrigir o erro, removemos um espaço

GoatInTheMachine
fonte
5
"Você deve escrever um programa completo." Portanto, não pode ser uma função.
Alex A.
1

JavaScript (ES6 no Node.js), 196 bytes

Leva um argumento de linha 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}

Demo

Como não há argumento de linha de comando ( process.argv) no navegador, o código no snippet foi colocado em uma função que aceita um 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
fonte
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 é um programa completo que solicita que o usuário insira o número no STDIN.

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

Versão expandida:

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

Lê uma linha do console ( stdin), localiza o primeiro elemento de uma lista invertida de dias de início do mês em que a entrada é maior ou igual ao elemento da matriz e depois imprime de acordo.

Isso é quase idêntico à Juliaresposta, exceto no estágio de exibição. ( Não podemos vencer o operador ternário, indisponível no Matlab ). Para compensar a necessidade de explicitar uma ifdeclaração completa , usamos um pequeno truque (um Backspacecaractere no formato de impressão) para "apagar" o número 1 do dia / mês especialFloopdoor


Em colaboração com os participantes do chat Matlab e Octave .

Hoki
fonte
1

Javascript ES5 usando 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
fonte
0

C, 241 bytes

Nada muito emocionante. Poderia ter barbeado 27 bytes, caso fosse necessário um 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");}
algum usuário
fonte