Mengingat bahwa Tahun Baru Cina akan tiba, inilah tantangan untuk menghitung Zodiak Cina, elemen, dan Taijitu untuk tanggal tertentu.
Masukan harus berupa tanggal:
1/31/2014
Tanggal yang digunakan di sini adalah gaya AS mm/dd/yyyy
, tetapi mungkin juga gaya ISO-8601: yyyy-mm-dd
sehingga gaya input tanggal tidak ketat.
Keluarannya harus berupa tanda binatang di Zodiak Tiongkok termasuk elemen yang sesuai dengan tanggal, dan timpalan Taijitu :
Horse - Wood - Yang
Tabel yang memperlihatkan hubungan Zodiak - unsur - Taijitu dapat dilihat di sini: Zodiak Cina - Tahun
Format output tidak ketat tetapi harus mengandung hewan, elemen dan komponen Taijitu, dan harus dibatasi dalam beberapa cara.
Contoh output yang valid untuk tanggal di atas mungkin termasuk:
(horse, wood, yang)
["Horse", "Wood", "Yang"]
Program Anda harus mengembalikan hasil yang valid untuk rentang minimal 100 tahun, termasuk tanggal hari ini. Ini berarti perlu paling tidak dua siklus 60 tahun ( Sexagenary ).
Jawaban:
Mathematica 63
Oke, ini mungkin sudah tua, tetapi berfungsi (input tanggal ambigu dalam banyak kasus):
Contoh:
sumber
C # -
357337339 byteDiformat:
sumber
string.Format
.Python 2: 360 *
387586594- KarakterDikurangi lebih jauh
Kode di atas berfungsi untuk interval berikut: 5 Feb 1924 - 31 Des 2043
Contoh: setelah menempelkan kode di atas dalam kursor python interpreter
dan kemudian tekan Enter, masukkan tanggal seperti ini
dan kemudian tekan Enterlagi, hasilnya akan menjadi
* Mengurangi 27 byte lebih lanjut dengan bantuan Brian melihat komentar.
sumber
1math6
dan2math6
. Bahkan 5 sebelumnya dan 3 berikut dicerminkan dengan karakter yang berbeda di antara. Itu 3spooky5me.Ruby, 340
Ini akan berlaku untuk tanggal antara 5 Februari 1924 dan 29 Jan 2044.
sumber
GolfScript (212 karakter)
Ini menggunakan karakter yang tidak dapat dicetak, jadi inilah output dari xxd:
Program setara yang menggunakan string lolos dan karenanya sedikit lebih lama adalah:
Bagian yang menarik adalah komputasi, mengingat tanggalnya, apakah itu sebelum atau sesudah Tahun Baru Cina yang jatuh pada tahun Gregorian itu. Mengambil inspirasi dari algoritma perhitungan Paskah yang telah saya gunakan pada pertanyaan sebelumnya, saya mencari perhitungan yang cukup sederhana dari tanggal Tahun Baru. Pada akhirnya saya telah pergi dengan formula sederhana yang membuat saya hampir sampai di sana, ditambah tabel pencarian untuk istilah kesalahan.
Perhitungan sederhana adalah
day_of_year = 21 + (19 * year % 30)
. Rentang jangka kesalahan dari0
ke8
atas kisaran bunga (1924-2044), dan tidak pernah berubah dari tahun ke tahun oleh lebih dari satu, sehingga tabel dikodekan dalam terner seimbang dan kesalahan dihitung dengan menjumlahkan hal kesalahan dari awalan tabel.sumber
C #,
630611604572570 byte, 120 tahun(tambahkan ~ 2⅔ byte per tahun tambahan jika Anda tahu offsetnya)
Ini bagus untuk orang yang lahir 31-Jan-1900 hingga 24-Jan-2020 dan kemungkinan akan crash di luar kisaran itu. Apakah ada poin bonus untuk jumlah tahun yang dicakup?
Atau kental (dengan jeda baris ditambahkan):
Salah satu triknya adalah memiliki asal meja offset pada 28 Januari. Ini terbukti memiliki jumlah karakter terendah.
Jika kebetulan itu bersikeras input adalah string, tambahkan 22 karakter untuk mengubah metode tanda tangan ke:
dan tambahkan baris:
EDIT:
string.Split()
Inspirasi diambil dari jawaban Eduard Florinescu .sumber
" - "+new[]{"Yang","Yin"}[x%2]
ke" - Y"+(x%2<1?"ang":"in")
:)Cukup lurus ke depan dengan PHP menggunakan pernyataan Switch .
Perhitungan sejauh yang Anda inginkan ...
sumber