¡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 Floopdoor
no 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.
o
, pero las otras instancias del nombre no.Respuestas:
Pyth -
1051039088 bytesUtiliza 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.
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
c
que 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ó fuew
), luego se convierte a base 256.Las fechas de inicio son sus puntos de código unicode, sin conversión de base.
Pruébelo en línea aquí .
Test Suite .
fuente
Python 3,
159156152151150148 bytesEl objeto bytes en
zip
contiene caracteres no imprimibles:(Gracias a @xnor por sugerir un
for/zip
bucle para -3 bytes)fuente
b
directamente enfor
lugar de while, con algo asífor c in b"...":i+=n>0;n-=c
.n
para dejar de caer. Aún así debería ser posible con algo así,x=n>c;n-=c*x;i+=x
pero no sé si vale la pena.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:
Ampliado (ancho de codel de 10):
fuente
dead chex
agrega al recuento de bytes?Pyth
178156153147 bytesEnlace permanente
Segundo golf, cualquier comentario de Pyth será muy útil.
Explicación
fuente
J=...
en la condición ternaria.CJam,
989693 bytesLo 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
Cómo funciona
fuente
SWI-Prolog,
237232213 bytesAquí se utiliza mecanismo de retroceso de Prolog para aplicar repetidamente
nth1/3
a la listaL
, para obtener el primer elementoLastDay+1:MonthName
deL
para el cualX < LastDay+1
sostiene. Luego buscamos el mes inmediatamente anterior a este en la lista para evaluar el día del mes.fuente
Q,
134146 Bytessegundo corte - programa (146 bytes)
primer corte - función (134 bytes)
pruebas
fuente
Julia,
231216184175 bytesEsto 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.
fuente
Swift 1.2, 256 bytes
Para ejecutar, coloque el código solo en un
.swift
archivo y ejecútelo usandoswift <filename> <inputNumber>
fuente
Java,
357339bytesNo 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.
De entrada y salida:
77 --> 15 Karpasus 80 --> Floopdoor
Espaciado y tabulado:
fuente
Java,
275269266257256252246244243 bytesFormateado:
Curiosamente, es unos bytes más cortos que esto
fuente
JavaScript utilizando ES6
171164163 bytesNo soy el mejor programador de JavaScript, pero hice mi mejor esfuerzo y terminé con el siguiente código
Para ver el resultado, debe consultar el código anterior en un archivo html y utilizar un código similar al siguiente.
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
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
fuente
"Qupu0Blinkorp0Paas0Karpasus0Floopdoor0Dumaflop0Lindilo0Fwup".split(0)
y guardar 7 bytes.You must write a complete program
Creo que esto tiene que ejecutarse solo, puede que tenga que usar algo como prompt ().Python 2, 168 bytes
Esto trata el día
80
internamente como18 Karpasus
, pero luego lo ignora cuando se le llama para imprimir. Además, lainput()
función de Python 2 (en oposición araw_input()
) era conveniente aquí.fuente
Perl 5, 140
Requiere correr a través de
perl -E
:Salida de prueba (código de prueba robado de @Dennis):
fuente
Haskell,
171167 bytesEl 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
. (Algunosecho
no entienden el-n
cambio y omiten el NL por defecto).Cómo funciona: la
main
función lee la entrada, la convierte en unaInteger
y llama, lof
que devuelve un literalFloopdoor
en caso de una entrada80
o crea una lista de todas las fechas posibles, es decir,["1 Qupu", "2 Qupu", ... "1 Blinkorp", ... "67 Fwup"]
de la que selecciona eln
elemento th. Lo hagoKarpasus
es un día más.18 Karpasus
está en posición80
y corrige lo que faltaFloopdoor
en la lista.Editar: @MtnViewMark tuvo la idea del
18 Karpasus
truco y guardó 4 bytes.fuente
,1
y `x`, ya que 80 coincidirá con el patrón correspondiente.Swift 2.0, 220 bytes
Nada inteligente, solo filtros de una colección de tuplas ...
Editado para corregir el error, eliminó un espacio
fuente
JavaScript (ES6 en Node.js), 196 bytes
Toma un argumento de línea de comando:
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:fuente
Swift 2.0,
215204Este es un programa completo que le pide al usuario que ingrese el número en STDIN.
fuente
Matlab, 187 bytes
Versión ampliada:
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
Julia
respuesta, 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 unaif
declaració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 .
fuente
Javascript ES5 con 168 bytes
Sin golf:
fuente
C, 241 bytes
Nada muy emocionante Podría haber reducido 27 bytes si hubiera requerido ser un programa completo.
fuente