Écrivez un programme qui prend une date de naissance (mois et jour du mois) comme entrée et produit le signe, l'élément et la qualité correspondants du zodiaque occidental . Aux fins de ce défi, ceux-ci sont définis exactement comme dans le tableau de la page wikipedia liée:
Sign Date Range Element Quality
Aries March 21 to April 19 Fire Cardinal
Taurus April 20 to May 20 Earth Fixed
Gemini May 21 to June 21 Air Mutable
Cancer June 22 to July 22 Water Cardinal
Leo July 23 to August 22 Fire Fixed
Virgo August 23 to September 22 Earth Mutable
Libra September 23 to October 23 Air Cardinal
Scorpio October 24 to November 20 Water Fixed
Sagittarius November 21 to December 22 Fire Mutable
Capricorn December 23 to January 20 Earth Cardinal
Aquarius January 21 to February 21 Air Fixed
Pisces February 22 to March 20 Water Mutable
Règles
- Le signe, l'élément et la qualité seront calculés à partir de la date d'entrée exactement selon le tableau wikipedia.
- Je donne une certaine liberté sur le format de date d'entrée (voir la section Entrée ci-dessous). Vous devez indiquer clairement dans votre réponse le format que vous utilisez.
- Si une date non valide est fournie (date non comparable ou mois ou jour du mois hors limites), le programme se termine avec le message
Invalid date
. - Le programme doit gérer correctement les années bissextiles. c'est-à-dire si le 29 février est l'entrée, alors la sortie doit être correctement
Pisces, Water, Mutable
. - Les bibliothèques de date / API de votre langue sont autorisées, mais toutes les API qui calculent spécifiquement les signes du zodiaque sont interdites.
- Des «failles» standard qui ne sont plus drôles
- Il s'agit de code-golf , donc la réponse la plus courte en octets l'emporte.
Contribution
- Le programme peut lire la date d'entrée à partir de STDIN, de la ligne de commande, des variables d'environnement ou de la méthode qui convient à la langue de votre choix.
- Ce n'est pas principalement un exercice d'analyse de chaîne de données, de sorte que la chaîne d'entrée peut être fournie dans le format que vous choisissez, tant qu'elle ne comprend que des composants de mois et de jour et pas d'autres valeurs (telles que l'année ou l'heure) . Par exemple,
Jul 24
ou24th of July
ou7/24
ou24/07
ou n'importe quel format est pratique. Si une entrée ne correspondant pas à votre choix de format d'entrée est entrée, l'Invalid date
erreur doit être levée.
Production
- Le programme sortira sur STDOUT, une boîte de dialogue ou toute autre méthode d'affichage convenant à la langue de votre choix.
- Le format de sortie sera le signe, l'élément et la qualité séparés par une virgule et un espace:
Sign, Element, Quality
Exemples
Input Output
1/1 Capricorn, Earth, Cardinal
2/29 Pisces, Water, Mutable
7/24 Leo, Fire, Fixed
13/1 Invalid date
2/31 Invalid date
-1/-1 Invalid date
1st of Golfember Invalid date
code-golf
kolmogorov-complexity
date
Traumatisme numérique
la source
la source
Jan 21 -> 21
. .Feb 5 -> 36
) un format d'entrée valide?Réponses:
JavaScript, 285 octets
(Ma première réponse ici après avoir rôdé ici pendant un certain temps)
Le premier
prompt()
est le mois sous forme numérique et le secondprompt()
est le jour du mois (Ignorez le texte de l'invite). Les zéros non significatifs sont facultatifs pour les deux. La sortie est affichée avecalert()
. (Merci à bitpwner, Snack, edc65 et core1024 pour avoir aidé à raccourcir le code.)Essayez-le ci-dessus à l'aide d'extraits de pile ou à http://jsfiddle.net/8vq89/5/ .
Code avec espace et commentaires pour expliquer les parties déroutantes ajoutées:
la source
'Cardinal0Fixed0Mutable'.split(0)
et'Earth0Air0Water0Fire'.split(0)
,['Cardinal','Fixed','Mutable']
et['Earth','Air','Water','Fire']
est un peu plus court.z='Air9Water9Fire9Earth9Fixed9Mutable9Cardinal9Aquarius9Pisces9Aries9Taurus9Gemini9Cancer9Leo9Virgo9Libra9Scorpio9Sagittarius9Capricorn'.split(9); [m,d]=prompt().split(/\D/); alert([m-->0&m<12&d>0&d<(32-'020101001010'[m])?z[(m+=(18-~'121012333413'[m]<d)+11)%12+7]+', '+z[m%4]+', '+z[m%3+4]:'Invalid date'])
. Jetez un œil au single splitInvalid left-hand side in assignment
erreur lorsque j'essaye de l'exécuter, probablement àp=prompt().split(/\D/),m=p[0],d=p[1]
devrait fonctionner (mais donc plus longtemps)'...ScorpioSagittarius'.match(/[A-Z][a-z]+/g)
au lieu de'...Scorpio0Sagittarius'.split(0)
C 353
352Éditer bug et faute de frappe corrigés, 1 caractère de plus
Avant de demander: oui, même sans #include est valide et fonctionne standard C.
Format d'entrée: deux chiffres, le premier mois, puis le jour.
Tester
la source
Ivalid
;-)Perl 287 (286 + 1 pour le
-p
drapeau)L'entrée est de STDIN et la sortie va à STDOUT. Voici les tests d'OP:
la source
Python,
447387 caractèresPrend l'entrée en MM / DD, doit toujours être à deux chiffres.
la source
[20,21,20,19,20,21,22,22,22,23,20,22][a%12]
->19+int('121012333413'[a%12])
et[32,30,32,31,32,31,32,32,31,32,31,32][a]
->30+int('202121221212'[a])
Javascript,
403396 octetsUne autre approche. Je pense que je peux plus jouer au golf, mais plus tard.
Entrez le mois à la première invite, la date à la deuxième invite.
la source
PHP - 294 octets (sans balises php *)
* Comme l'a fait l'autre entrée php
Entrée:
Month Day
sous forme d'entiers, le zéro devant n'est pas requis.Ex:
php starsign.php <<< "2 29"
pour le 29 février.Golfé (ne copiez pas cela directement, voir ci-dessous):
Hexdump du fichier php:
Pour générer un fichier golfé, exécutez le script php suivant (génère vers
starsign.php
):Version complètement non golfée:
la source
short_open_tag = On
pour que cela fonctionne. Fonctionne pour cette réponse, mais l'autre réponse PHP contient toujours des erreurs. +1 pour celui-ci.Python 3-332 octets
Prend l'entrée comme arguments séparés (c.-à-d.
1 1
)Un split pour toutes les cordes
L'indexation des octets dans py3 donne l'ordre
or E
est un moyen peu coûteux de générer une exception (NameError
)Existe-t-il un moyen moins coûteux de concaténer les chaînes?
+
et les littéraux se sont avérés être plus petits quejoin
.Il n'y a aucune bonne raison pour qu'une recherche d'octets commence par 1 et l'autre par 0, j'ai juste oublié le 29 février et j'ai changé 0-> 1 au lieu de refaire le tout.
la source
PHP
548524502419 (sans balises php)Nécessite PHP> = 5.4.0
Entrée:
Day Month
(valeur numérique commençant à 1) par exemple2 3
pour le 2 mars.EDIT: l'
A non well formed numeric value
avis est provoqué par l'exécution d'un pré-incrément sur la chaîne$m
. Indépendamment de l'avis, la sortie suivante doit toujours être correcte. Cet avis varie selon la version dePHP
. Pour résoudre ce problème, une simple chaîne de conversion en entier doit être placée avant l'avant-dernière ligne. J'ai mis à jour le code avec les conversions.Exemple d'entrée / sortie (sous Windows):
la source
echo 2 3 | php -f zod.php
, mais cela fait juste écho au script lui-même sur STDOUT<?php
plutôt<?
.PHP Notice: A non well formed numeric value encountered in /home/ubuntu/zod.php on line 6
. J'utilise php 5.5.9 sur Ubuntu 14.04