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.
o
, mas as outras instâncias do nome não.Respostas:
Pitão -
1051039088 bytesUsa 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.
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
c
que 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 foiw
) 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.
Experimente online aqui .
Conjunto de Teste .
fonte
Python 3,
159156152 152151150148 bytesO objeto bytes no
zip
contém caracteres não imprimíveis:(Obrigado a @xnor por sugerir um
for/zip
loop para -3 bytes)fonte
b
diretamente com, aofor
invés de enquanto, com algo parecidofor c in b"...":i+=n>0;n-=c
.n
para parar de descer também. Ainda deve ser possível com algo como,x=n>c;n-=c*x;i+=x
mas não sei se vale a pena.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:
Ampliado (largura do codel de 10):
fonte
dead chex
adiciona à contagem de bytes?Pitão
178156153147 bytesPermalink
Segundo golfe de todos os tempos, qualquer feedback sobre Pyth será muito útil.
Explicação
fonte
J=...
na condição ternária.CJam,
989693 bytesO 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
Como funciona
fonte
SWI-Prolog,
237232213 bytesAqui, usamos o mecanismo de retorno do Prolog para aplicar repetidamente
nth1/3
à listaL
, para obter o primeiro elementoLastDay+1:MonthName
doL
qualX < LastDay+1
é válido. Em seguida, procuramos o mês imediatamente anterior a este na lista para avaliar o dia do mês.fonte
Q,
134146 Bytessegundo corte - programa (146 bytes)
primeiro corte - função (134 bytes)
teste
fonte
Julia,
231216184175 bytesIsso 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.
fonte
Swift 1.2, 256 bytes
Para executar, coloque o código sozinho em um
.swift
arquivo e execute-o usandoswift <filename> <inputNumber>
fonte
Java,
357339 bytesNã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.
Entrada / Saída:
77 --> 15 Karpasus 80 --> Floopdoor
Espaçados e com guias:
fonte
Java,
275269266257256252246244243 bytesFormatado:
Curiosamente, é alguns bytes menor que esse
fonte
JavaScript usando ES6
171164163 bytesNão sou o melhor programador de JavaScript, mas tentei o meu melhor e acabei com o seguinte código
Para ver o resultado, você precisa consultar o código acima em um arquivo html e usar semelhante ao código abaixo
No código acima, fp.js é o arquivo que contém o código javascript.
O código HTML e JavaScript combinado com recuo é
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
fonte
"Qupu0Blinkorp0Paas0Karpasus0Floopdoor0Dumaflop0Lindilo0Fwup".split(0)
e salvar 7 bytes.You must write a complete program
Eu acho que isso tem que funcionar sozinho, talvez você precise usar algo como prompt ().Python 2, 168 bytes
Isso trata o dia
80
internamente como18 Karpasus
, mas depois o ignora quando chamado para imprimir. Além disso, ainput()
função do Python 2 (em oposição araw_input()
) era conveniente aqui.fonte
Perl 5, 140
Requer execução via
perl -E
:Saída de teste (código de teste roubado de @Dennis):
fonte
Haskell,
171167 bytesO 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
. (Algunsecho
s não entendem a-n
opção e omitem o NL por padrão).Como funciona: A
main
função lê a entrada, converte-a emInteger
e chama,f
que retorna um literalFloopdoor
no caso de uma entrada80
ou 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 on
elemento th. Eu façoKarpasus
é um dia a mais.18 Karpasus
está na posição80
e corrige a faltaFloopdoor
na lista.Edit: @MtnViewMark teve a idéia do
18 Karpasus
truque e salvou 4 bytes.fonte
,1
e `x` - já que 80 serão capturados pela correspondência de padrões.Swift 2.0, 220 bytes
Nada inteligente, apenas filtros de uma coleção de tuplas ...
Editado para corrigir o erro, removemos um espaço
fonte
JavaScript (ES6 no Node.js), 196 bytes
Leva um argumento de linha de comando:
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:fonte
Swift 2.0,
215204Este é um programa completo que solicita que o usuário insira o número no STDIN.
fonte
Matlab, 187 bytes
Versão expandida:
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 à
Julia
resposta, 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 umaif
declaraçã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 .
fonte
Javascript ES5 usando 168 bytes
Ungolfed:
fonte
C, 241 bytes
Nada muito emocionante. Poderia ter barbeado 27 bytes, caso fosse necessário um programa completo.
fonte