Vous êtes un touriste de l'espace sur votre chemin vers la planète Flooptonia! Le vol va prendre encore 47 315 années. Pour passer le temps qui précède, vous décidez de créer un programme qui vous aidera à comprendre le calendrier flooptonien.
Voici le calendrier Flooptonien de 208 jours:
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)
Défi
Votre programme, étant donné un nombre entier de jours dans l'année (plage [0-208)
), doit afficher le jour du mois correspondant et le nom du mois (par exemple 13 Dumaflop
).
Il existe toutefois une exception: Floopdoor est un moment spécial pour les Flooptoniens qui mérite apparemment sa propre page de calendrier. Pour cette raison, Floopdoor n'est pas écrit avec un jour (c'est-à-dire que la sortie l'est Floopdoor
, non 1 Floopdoor
).
Cas de test
0 => 1 Qupu
32 => 11 Blinkorp
62 => 24 Paas
77 => 15 Karpasus
80 => Floopdoor
99 => 19 Dumaflop
128 => 20 Lindilo
207 => 67 Fwup
Règles
- Vous devez écrire un programme complet.
- Vous pouvez supposer que la saisie est toujours valide.
- Votre sortie peut avoir une fin de ligne, mais doit sinon être exempte de caractères supplémentaires. Le cas devrait également correspondre aux exemples fournis.
- Vous pouvez utiliser les fonctions de date / heure.
- La longueur du code doit être mesurée en octets.
o
, mais pas les autres instances du nom.Réponses:
Pyth -
1051039088 octetsUtilise la conversion de base. Deux tables de recherche simples, une pour les noms et une pour les dates de début, et une ternaire à la fin pour Floopdoor.
Compresse la chaîne non pas en base 128, mais en base 23. Elle est d'abord traduite en index de l'alphabet. Cela nécessitait que le séparateur soit
c
qui n'apparaît dans aucun des noms de mois. Ensuite, il code la base 10 à partir d’un nombre de base 23 (la valeur la plus élevée affichée estw
), puis convertit en base 256.Les dates de début sont leurs points de code unicode, pas de conversion de base.
Essayez-le en ligne ici .
Suite de test .
la source
Python 3,
159156152151150148 octetsL'objet d'octets dans le
zip
contient des caractères non imprimables:(Merci à @xnor d'avoir suggéré une
for/zip
boucle de -3 octets)la source
b
directement avec,for
au lieu de, avec quelque chose commefor c in b"...":i+=n>0;n-=c
.n
pour arrêter de descendre aussi. Cela devrait quand même être possible avec quelque chose comme,x=n>c;n-=c*x;i+=x
mais je ne sais pas si cela en vaut la peine.Piet 2125 octets
C'est loin d'être le plus court, mais c'est joli et coloré ...
Chaque pixel est placé par moi-même à la main. Pour l'exécuter allez ici dans FireFox (Chrome ne fonctionne pas) et chargez-le avec une largeur de code de 1 (il paraîtra en noir, ne vous inquiétez pas), entrez le numéro et appuyez sur le bouton Exécuter!
Petit programme:
Élargi (largeur de code 10):
la source
dead chex
au nombre d'octets?Pyth
178156153147 octetsPermalink
Deuxième golf de tous les temps, les commentaires de Pyth seront très utiles.
Explication
la source
J=...
dans la condition ternaire.CJam,
989693 octetsCe qui précède est un hexdump réversible, car le code source contient des caractères non imprimables.
La plupart des caractères non imprimables ne posent aucun problème à l'interpréteur en ligne, mais l'octet nul de la première chaîne est un briseur de transaction.
Au prix d'un octet, nous pouvons résoudre ce problème en ajoutant 1 à l'entrée et 1 à chaque point de code de la première chaîne. Vous pouvez essayer cette version dans l' interpréteur CJam .
Si le permalien ne fonctionne pas dans votre navigateur, vous pouvez copier le code de cette pâte .
Cas de test
Comment ça marche
la source
SWI-Prolog,
237232213 octetsIci , nous utilisons le mécanisme de retours en arrière de Prolog pour appliquer à plusieurs reprises
nth1/3
à la listeL
, pour obtenir le premier élémentLastDay+1:MonthName
deL
pour lequelX < LastDay+1
détient. Nous recherchons ensuite le mois immédiatement avant celui-ci dans la liste pour évaluer le jour du mois.la source
Q,
134146 octetsdeuxième coupure - programme (146 octets)
première coupe - fonction (134 octets)
essai
la source
Julia,
231216184175 octetsCeci lit une ligne de STDIN et la convertit en un entier, trouve le premier élément d'une liste inversée de jours de début de mois où l'entrée est supérieure ou égale au début, puis s'imprime en conséquence.
la source
Swift 1.2, 256 octets
Pour exécuter, placez le code seul dans un
.swift
fichier et exécutez-le en utilisantswift <filename> <inputNumber>
la source
Java,
357339 octetsCe n'est pas le plus efficace, mais j'aime bien son fonctionnement. Il crée tout le calendrier Flooptonia, puis recherche la date du numéro.
Entrée sortie:
77 --> 15 Karpasus 80 --> Floopdoor
Espacés et tabulés:
la source
Java,
275269266257256252246244243 octetsFormaté:
Fait intéressant, c'est quelques octets plus court que cela
la source
JavaScript utilisant ES6
171164163 163 octetsJe ne suis pas le meilleur programmeur JavaScript, mais j'ai fait de mon mieux et j'ai obtenu le code suivant.
Pour voir le résultat, vous devez référencer le code ci-dessus dans un fichier html et utiliser un code similaire à celui ci-dessous
Dans le code ci-dessus, fp.js est le fichier contenant le code javascript.
Le code HTML et JavaScript combiné avec retrait est
Modifier:
J'aimerais remercier Vihan de m'avoir aidé à supprimer la déclaration de retour et à réduire mon code de 17 octets.
@ ipi, merci de m'aider à économiser 7 octets
la source
"Qupu0Blinkorp0Paas0Karpasus0Floopdoor0Dumaflop0Lindilo0Fwup".split(0)
et sauvegarder 7 octets.You must write a complete program
Je pense que cela doit fonctionner seul, vous devrez peut-être utiliser quelque chose comme prompt ().Python 2, 168 octets
Ceci traite le jour en
80
interne comme18 Karpasus
, mais l'ignore ensuite lorsqu'il est appelé pour imprimer. En outre, lainput()
fonction de Python 2 (par opposition àraw_input()
) était pratique ici.la source
Perl 5, 140
Nécessite de courir via
perl -E
:Résultat du test (code de test volé de @Dennis):
la source
Haskell,
171167 octetsLe programme lit son entrée de stdin qui ne doit pas se terminer en NL. Terminez la saisie avec EOF / ^ D ou utilisez quelque chose comme
echo -n 80 | ./what-day-is-it
. (Certainsecho
ne comprennent pas le-n
commutateur et omettent la NL par défaut).Comment ça marche: La
main
fonction lit l'entrée, la convertit en unInteger
appelantf
qui renvoie un littéralFloopdoor
en cas de saisie80
ou construit une liste de toutes les dates possibles, c'est-["1 Qupu", "2 Qupu", ... "1 Blinkorp", ... "67 Fwup"]
à- dire à partir de laquelle elle sélectionne l'n
élément th. Je faisKarpasus
est un jour de plus.18 Karpasus
est en position80
et corrige les manquantsFloopdoor
dans la liste.Edit: @MtnViewMark a eu l'idée du
18 Karpasus
truc et a sauvegardé 4 octets.la source
,1
et «x» - puisque 80 sera pris en compte par le motif correspondant.Swift 2.0, 220 octets
Rien d'intelligent, juste des filtres d'une collection de n-uplets ...
Édité pour corriger un bogue, suppression d'un espace
la source
JavaScript (ES6 sur Node.js), 196 octets
Prend un argument en ligne de commande:
Démo
Comme il n'y a pas d'argument de ligne de commande (
process.argv
) dans le navigateur, le code de l'extrait de code a été placé dans une fonction qui accepte un argument:la source
Rapide 2.0,
215204C'est un programme complet qui demande à l'utilisateur de saisir le numéro dans STDIN.
la source
Matlab, 187 bytes
Version étendue:
Lit une ligne de la console (
stdin
), trouve le premier élément d'une liste inversée de jours de début de mois où l'entrée est supérieure ou égale à l'élément de tableau, puis imprime en conséquence.C'est presque identique à la
Julia
réponse, sauf pour la phase d'affichage. ( Nous ne pouvons pas battre leur opérateur ternaire, indisponible dans Matlab ). Pour compenser l'obligation d'expliquer uneif
instruction complète , nous utilisons une petite astuce (un Backspacecaractère dans le format d'impression) pour "effacer" le chiffre 1 du jour / mois spécial.Floopdoor
En collaboration avec les participants au chat Matlab et Octave .
la source
Javascript ES5 utilisant 168 octets
Ungolfed:
la source
C, 241 octets
Rien de trop excitant. Vous auriez pu raser 27 octets s’il avait besoin d’être un programme complet.
la source