Tulis program yang mencatat tanggal lahir (bulan dan hari-bulan) sebagai input dan output tanda, elemen, dan kualitas zodiak barat yang sesuai . Untuk keperluan tantangan ini, ini didefinisikan persis seperti pada tabel di halaman wikipedia tertaut:
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
Aturan
- Tanda, elemen, dan kualitas akan dihitung dari tanggal input persis sesuai dengan tabel wikipedia.
- Saya memberikan beberapa kebebasan atas format tanggal input (lihat bagian Input di bawah). Anda harus menyatakan dengan jelas dalam jawaban Anda format apa yang Anda gunakan.
- Jika tanggal yang tidak valid diberikan (tanggal yang tidak dapat diparsing, atau bulan atau hari di luar jangkauan), program akan keluar dengan pesan tersebut
Invalid date
. - Program harus benar menangani tahun kabisat. yaitu jika 29 Februari adalah input, maka output harus benar
Pisces, Water, Mutable
. - Pustaka Tanggal / API Tanggal bahasa Anda diizinkan, tetapi API apa pun yang secara spesifik menghitung tanda-tanda zodiak dilarang.
- Standar “celah” yang tidak lagi lucu
- Ini adalah kode-golf , jadi jawaban tersingkat dalam byte menang.
Memasukkan
- Program dapat membaca tanggal input dari STDIN, baris perintah, variabel lingkungan atau metode apa pun yang sesuai untuk bahasa pilihan Anda.
- Ini bukan terutama latihan dalam penguraian data, sehingga string input dapat diberikan dalam format apa pun yang Anda pilih, asalkan itu hanya terdiri dari komponen bulan dan hari-bulan, dan bukan nilai-nilai lain (seperti tahun atau waktu) . Misalnya
Jul 24
atau24th of July
atau7/24
atau24/07
format apa pun yang nyaman. Jika input yang tidak sesuai dengan pilihan Anda dari format input dimasukkan, makaInvalid date
kesalahan harus dibuang.
Keluaran
- Program akan menampilkan ke STDOUT, kotak dialog atau metode tampilan apa pun yang sesuai untuk bahasa pilihan Anda.
- Format output akan menjadi tanda, elemen dan kualitas yang dipisahkan oleh koma dan spasi:
Sign, Element, Quality
Contohnya
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
Trauma Digital
sumber
sumber
Jan 21 -> 21
,Feb 5 -> 36
) Format input yang valid?Jawaban:
JavaScript, 285 byte
(Jawaban pertamaku di sini setelah bersembunyi di sini sebentar)
Yang pertama
prompt()
adalah bulan dalam bentuk angka, dan yang keduaprompt()
adalah hari dalam bulan (Abaikan teks prompt). Nol terkemuka adalah opsional untuk keduanya. Output ditampilkan denganalert()
. (Terima kasih kepada bitpwner, Snack, edc65, dan core1024 untuk membantu mempersingkat kodenya.)Cobalah di atas menggunakan Stack Snippets atau di http://jsfiddle.net/8vq89/5/ .
Kode dengan spasi putih dan komentar untuk menjelaskan bagian yang membingungkan ditambahkan:
sumber
'Cardinal0Fixed0Mutable'.split(0)
dan'Earth0Air0Water0Fire'.split(0)
,['Cardinal','Fixed','Mutable']
dan['Earth','Air','Water','Fire']
sedikit lebih pendek.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'])
. Lihatlah single splitInvalid left-hand side in assignment
kesalahan saat mencoba menjalankannya, mungkin ada hubungannya dengan promptp=prompt().split(/\D/),m=p[0],d=p[1]
harus bekerja (tetapi lebih lama)'...ScorpioSagittarius'.match(/[A-Z][a-z]+/g)
bukan'...Scorpio0Sagittarius'.split(0)
C 353
352Edit bug dan kesalahan pengetikan, 1 karakter lainnya
Sebelum Anda bertanya: ya, bahkan tanpa #include valid dan bekerja dengan standar C.
Format input: dua angka, bulan pertama, lalu hari.
Uji
sumber
Ivalid
;-)Perl 287 (286 +1 untuk
-p
bendera)Input dari STDIN dan output ke STDOUT. Berikut adalah tes dari OP:
sumber
Python,
447387 karakterMengambil input sebagai MM / DD, harus selalu dua digit.
sumber
[20,21,20,19,20,21,22,22,22,23,20,22][a%12]
->19+int('121012333413'[a%12])
dan[32,30,32,31,32,31,32,32,31,32,31,32][a]
->30+int('202121221212'[a])
Javascript,
403396 bytePendekatan lain. Saya pikir saya bisa bermain golf lebih banyak, tetapi nanti.
Masukkan bulan pada prompt pertama, tanggal pada prompt kedua.
sumber
PHP - 294 byte (tanpa tag php *)
* Seperti yang dilakukan entri php lainnya
Input:
Month Day
sebagai bilangan bulat, nol di depan tidak diperlukanMis:
php starsign.php <<< "2 29"
untuk tanggal 29 Februari.Golf (jangan menyalin ini secara langsung, lihat di bawah):
Hexdump file php:
Untuk menghasilkan file golf, jalankan skrip php berikut (buat ke
starsign.php
):Versi yang sama sekali tidak dikoleksi:
sumber
short_open_tag = On
agar ini berfungsi. Berfungsi untuk jawaban ini, tetapi jawaban PHP lainnya masih salah. +1 untuk yang ini.Python 3 - 332 byte
Mengambil input sebagai argumen terpisah (yaitu
1 1
)Satu split untuk semua string
Mengindeks byte dalam py3 memberikan ord
or E
adalah cara murah untuk menghasilkan pengecualian (NameError
)Apakah ada cara yang lebih murah untuk menggabungkan senar?
+
dan literal ternyata lebih kecil darijoin
.Tidak ada alasan yang baik untuk pencarian satu byte untuk memulai dengan 1 dan yang lainnya dengan 0, saya hanya lupa tanggal 29 hari pada bulan Februari dan mengubah 0> 1 daripada mengulangi semuanya.
sumber
PHP
548524502419 (tanpa tag php)Membutuhkan PHP> = 5.4.0
Input:
Day Month
(nilai numerik mulai dari 1) misalnya2 3
untuk 2 Maret.EDIT: The
A non well formed numeric value
pemberitahuan disebabkan dengan melakukan pre-increment pada string$m
. Terlepas dari pemberitahuan itu, output berikut ini harus tetap benar. Pemberitahuan ini bervariasi per versiPHP
. Untuk memperbaikinya, string sederhana ke konversi bilangan bulat harus ditempatkan sebelum baris terakhir kedua. Saya telah memperbarui kode dengan konversi.Contoh Input / Output (pada Windows):
sumber
echo 2 3 | php -f zod.php
, tetapi itu hanya menggemakan skrip itu sendiri ke STDOUT<?php
saja<?
.PHP Notice: A non well formed numeric value encountered in /home/ubuntu/zod.php on line 6
. Saya menjalankan php 5.5.9 di Ubuntu 14.04