Schreiben Sie ein Programm, das ein Geburtsdatum (Monat und Tag des Monats) als Eingabe verwendet und das entsprechende Zeichen, Element und die Qualität des westlichen Tierkreises ausgibt . Für die Zwecke dieser Herausforderung werden diese genau wie in der Tabelle auf der verknüpften Wikipedia-Seite definiert:
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
Regeln
- Das Zeichen, Element und die Qualität werden ab dem Eingabedatum genau nach der Wikipedia-Tabelle berechnet.
- Ich gebe etwas Freiheit über das Eingabe-Datumsformat (siehe Abschnitt Eingabe unten). Sie müssen in Ihrer Antwort klar angeben, welches Format Sie verwenden.
- Wenn ein ungültiges Datum angegeben wird (nicht analysierbares Datum oder Monat oder Monatstag außerhalb des gültigen Bereichs), wird das Programm mit der Meldung beendet
Invalid date
. - Das Programm muss Schaltjahre korrekt handhaben. dh wenn der 29. Februar der Eingang ist, muss der Ausgang korrekt sein
Pisces, Water, Mutable
. - Die Datumsbibliotheken / APIs Ihrer Sprache sind zulässig, aber alle APIs, die speziell Sternzeichen berechnen, sind verboten.
- Standard "Schlupflöcher", die nicht mehr lustig sind
- Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes.
Eingang
- Das Programm kann das Eingabedatum von STDIN, Befehlszeile, Umgebungsvariablen oder einer anderen für Ihre Sprache geeigneten Methode lesen.
- Dies ist nicht in erster Linie eine Übung zum Analysieren von Datenreihen. Daher kann die Eingabezeichenfolge in einem von Ihnen gewählten Format bereitgestellt werden, sofern sie nur aus Monats- und Tag-von-Monat-Komponenten und keinen anderen Werten (wie Jahr oder Uhrzeit) besteht. . ZB
Jul 24
oder24th of July
oder7/24
oder24/07
oder welches Format auch immer ist bequem. Wenn eine Eingabe eingegeben wird, die nicht dem von Ihnen gewählten Eingabeformat entspricht,Invalid date
muss der Fehler ausgegeben werden.
Ausgabe
- Das Programm gibt STDOUT, ein Dialogfeld oder eine andere für die Sprache Ihrer Wahl geeignete Anzeigemethode aus.
- Das Ausgabeformat ist das durch Komma und Leerzeichen getrennte Zeichen, Element und die Qualität:
Sign, Element, Quality
Beispiele
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
Digitales Trauma
quelle
quelle
Jan 21 -> 21
,Feb 5 -> 36
) ein gültiges Eingabeformat?Antworten:
JavaScript, 285 Bytes
(Meine erste Antwort hier nach einer Weile hier lauern)
Der erste
prompt()
ist der Monat in numerischer Form, und der zweiteprompt()
ist der Tag des Monats (Ignorieren Sie den Text der Eingabeaufforderung). Führende Nullen sind für beide optional. Die Ausgabe wird mit angezeigtalert()
. (Dank an bitpwner, Snack, edc65 und core1024 für die Kürzung des Codes.)Versuchen Sie es oben mit Stack Snippets oder unter http://jsfiddle.net/8vq89/5/ .
Code mit Leerzeichen und Kommentaren, um die hinzugefügten verwirrenden Teile zu erklären:
quelle
'Cardinal0Fixed0Mutable'.split(0)
und'Earth0Air0Water0Fire'.split(0)
,['Cardinal','Fixed','Mutable']
und['Earth','Air','Water','Fire']
ist ein wenig kürzer.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'])
. Schauen Sie sich die Single Split anInvalid left-hand side in assignment
Fehlermeldung, wenn ich versuche, das auszuführen, wahrscheinlich aufgrund der Eingabeaufforderungp=prompt().split(/\D/),m=p[0],d=p[1]
sollte funktionieren (aber so länger)'...ScorpioSagittarius'.match(/[A-Z][a-z]+/g)
anstelle von'...Scorpio0Sagittarius'.split(0)
C 353
352Bearbeiten Behobener Fehler und Tippfehler, 1 Zeichen mehr
Bevor Sie fragen: Ja, auch ohne #include ist gültiger und funktionierender C-Standard.
Eingabeformat: zwei Zahlen, erster Monat, dann Tag.
Prüfung
quelle
Ivalid
;-)Perl 287 (286 + 1 für die
-p
Flagge)Die Eingabe erfolgt von STDIN und die Ausgabe geht an STDOUT. Hier sind die Tests von OP:
quelle
Python,
447387 ZeichenNimmt Eingabe als MM / DD, muss immer zweistellig sein.
quelle
[20,21,20,19,20,21,22,22,22,23,20,22][a%12]
->19+int('121012333413'[a%12])
und[32,30,32,31,32,31,32,32,31,32,31,32][a]
->30+int('202121221212'[a])
Javascript,
403396 BytesEin anderer Ansatz. Ich denke, ich kann mehr Golf spielen, aber später.
Geben Sie bei der ersten Eingabeaufforderung den Monat und bei der zweiten Eingabeaufforderung das Datum ein.
quelle
PHP - 294 Bytes (ohne PHP-Tags *)
* Wie der andere PHP-Eintrag
Eingabe:
Month Day
als Ganzzahl, führende Null nicht erforderlich.Bsp .:
php starsign.php <<< "2 29"
für den 29. Februar.Golf (nicht direkt kopieren, siehe unten):
Hexdump der PHP-Datei:
Um eine Golf-Datei zu generieren, führen Sie das folgende PHP-Skript aus (generiert bis
starsign.php
):Völlig ungolfed version:
quelle
short_open_tag = On
, damit dies funktioniert. Funktioniert für diese Antwort, aber die andere PHP-Antwort ist immer noch fehlerfrei. +1 für diesen.Python 3 - 332 Bytes
Nimmt Eingaben als separate Argumente (zB
1 1
)Ein Split für alle Saiten
Indizieren von Bytes in py3 ergibt die ord
or E
ist eine kostengünstige Möglichkeit, eine Ausnahme zu generieren (NameError
)Gibt es eine billigere Möglichkeit, die Zeichenfolgen zu verketten?
+
und Literale erwiesen sich als kleiner alsjoin
.Es gibt keinen guten Grund, warum eine Bytesuche mit 1 und die andere mit 0 beginnt. Ich habe nur den 29-tägigen Februar vergessen und 0-> 1 geändert, anstatt das Ganze zu wiederholen.
quelle
PHP
548524502419 (ohne PHP-Tags)Benötigt PHP> = 5.4.0
Eingabe:
Day Month
(Zahlenwert ab 1) zB2 3
für den 2. März.BEARBEITEN: Der
A non well formed numeric value
Hinweis wird durch Ausführen eines Vorinkrements für die Zeichenfolge verursacht$m
. Unabhängig von der Meldung sollte die folgende Ausgabe immer noch korrekt sein. Dieser Hinweis variiert je nach Version vonPHP
. Um dies zu beheben, sollte eine einfache Umwandlung von Zeichenfolge in Ganzzahl vor der vorletzten Zeile stehen. Ich habe den Code mit den Konvertierungen aktualisiert.Beispiel für Ein- / Ausgabe (unter Windows):
quelle
echo 2 3 | php -f zod.php
, aber es gibt das Skript nur an STDOUT<?php
statt<?
.PHP Notice: A non well formed numeric value encountered in /home/ubuntu/zod.php on line 6
. Ich laufe PHP 5.5.9 auf Ubuntu 14.04