ASCII Seni Hari Ini # 4 - Zodiac Signs


12

Kita semua suka horoskop, bukan ? Tetapi saya memiliki masalah serius dalam Aplikasi Horoskop ini yang diinstal pada Ponsel Pintar saya bahwa itu hanya menampilkan ikon Zodiac Sign untuk horoskop setiap hari. Sekarang, saya ingat horoskop saya, tetapi sulit untuk mengingat horoskop orang lain yang saya minati.

Tantangan

Jadi di sini adalah tantangan Anda untuk tambahan lain untuk seri ASCII Seni Hari ini. Diberikan input tanggal dan bulan, mengeluarkan tanda Zodiac yang sesuai dalam format ASCII seperti yang ditunjukkan di bawah ini. Setiap Zodiac Sign diikuti setelah rentang nama dan tanggal ( DD MMformat) untuk zodiac sign.

Aries - 21 03 - 20 04
 .-.   .-.
(_  \ /  _)
     |
     |
Taurus - 21 04 - 20 05
 .     .
 '.___.'
 .'   '.
:       :
:       :
 '.___.'
Gemini - 21 05 - 20 06
._____.
  | |
  | |
 _|_|_
'     '
Cancer - 21 06 - 20 07
   .--.
  /   _'.
 (_) ( )
'.    /
  '--'
Leo - 21 07 - 20 08
  .--.
 (    )
(_)  /
    (_.
Virgo - 21 08 - 20 09
 _
' ':--.--.
   |  |  |_
   |  |  | )
   |  |  |/
        (J
Libra - 21 09 - 20 10
     __
___.'  '.___
____________
Scorpio - 21 10 - 20 11
 _
' ':--.--.
   |  |  |
   |  |  |
   |  |  |  ...
         '---':
Sagittarius - 21 11 - 20 12
      ...
      .':
    .'
'..'
.''.
Capricorn - 21 12 - 20 01
        _
\      /_)
 \    /'.
  \  /   :
   \/ __.'
Aquarius - 21 01 - 20 02
.-"-._.-"-._.-
.-"-._.-"-._.-
Pisces - 21 02 - 20 03
'-.    .-'
   :  :
 --:--:--
   :  :
.-'    '-.

Memasukkan

  • Anda akan diberikan dua bilangan bulat sesuai dengan tanggal bulan dan bulan tahun (dalam urutan itu) dari hari ulang tahun.
  • Tanggal dan bulan akan 1diindeks seperti di kalender normal.
  • Anda dapat mengambil bentuk input argumen STDIN / ARGV / fungsi atau yang setara terdekat

Keluaran

  • Berdasarkan rentang tanggal apa tanggal input jatuh, output ke STDOUT, Zodiac Sign yang sesuai.
  • Anda dapat memiliki hingga 4 spasi tambahan di setiap baris tetapi tidak ada spasi awal yang bukan bagian dari output.
  • Anda dapat menulis program lengkap atau fungsi bernama.

Ini adalah sehingga kode terpendek dalam byte menang!


Papan peringkat

Posting pertama dari seri menghasilkan leaderboard.

Untuk memastikan jawaban Anda muncul, mulailah setiap jawaban dengan tajuk utama, menggunakan templat Penurunan harga berikut:

# Language Name, N bytes

di mana Nukuran kiriman Anda. Jika Anda meningkatkan skor Anda, Anda dapat menyimpan skor lama di headline, dengan mencoretnya. Contohnya:

# Ruby, <s>104</s> <s>101</s> 96 bytes


@NinjaBearMonkey Saya tahu tentang itu, tetapi yang lebih rinci dan ditekankan pada parsing tanggal
Pengoptimal

Saya tahu, saya pasti tidak akan menganggapnya sebagai duplikat, tapi saya pikir saya akan menyebutkannya.
NinjaBearMonkey

Apakah spasi tambahan pada baris terakhir Taurus dan Pisces disengaja?
Siguza

@Siguza Anda dapat memiliki hingga 4 ruang tambahan. Jadi tidak masalah :)
Pengoptimal

Jawaban:


7

CJam, 296 284 272 265 264 byte

"03½åÙªWË#å¥ÜZ2ò'ýðDc}¦Ð£RÞ5ä<Üå§ÖÞYÏuäOe¤¶è2²|ZëßB«ô¬cm"257b2bSf*Qa/"®=&ðS¢Òpût£Ð`ç«^º,[öÄ©3¸YÝæ[%$>\D£(´õÓÆeUØRHáÄ¡ããîùK½ÊÆÇ:UBÍm¥·fèäBÓEwWOkQq×tÌVfè£g8·¨    q©ñäp-ÁgUÚ´Éõ'>r    Ê#"256bDb"
.\"'()-/:\_|J"f=.+sSN+/l~\K>+=

Cobalah online di penerjemah CJam .

Ide

Kita mulai dengan menggabungkan kedua belas tanda menggunakan string <SP><LF>sebagai pemisah. Kami memilih tanda-tanda zodiak untuk tidak mengandung spasi tambahan, jadi ini memungkinkan untuk memisahkannya dengan mudah.

String yang digabungkan memiliki panjang 542 byte. 236 dari byte ini adalah spasi, yang hampir setengahnya. Kami membangun array yang berisi 1 untuk setiap ruang dan 0 untuk setiap non-ruang. Dengan cara ini, pengkodean spasi hanya akan memakan biaya 1 bit.

Menghapus semua spasi dari string yang bergabung, kita dibiarkan dengan karakter <LF>."'()-/:J\_|. Menetapkan masing-masing nilai (misalnya, indeks dalam string ini) antara 0 dan 12

Akhirnya, kita mendekode array dasar 2 dan basis 13 sebagai array byte.

Dalam program akhir, untuk input yang diberikan DD MM, kami menghitung (int(MM) + (int(DD) > 20)) % 12, membalikkan proses di atas untuk mendapatkan larik semua tanda zodiak dan memilih yang tepat.

Kode

"03½åÙªWË#å¥ÜZ2ò'ýðDc}¦Ð£RÞ5ä<Üå§ÖÞYÏuäOe¤¶è2²|ZëßB«ô¬cm"

        e# Push the encoded space positions.

257b2b  e# Convert from base 257 to base 2.
Sf*     e# Replace 1's with spaces and 0's with empty strings.
Qa/     e# Split at empty strings.

"®=&ðS¢Òpût£Ð`ç«^º,[öÄ©3¸YÝæ[%$>\D£(´õÓÆeUØRHáÄ¡ããîùK½ÊÆÇ:UBÍm¥·fèäBÓEwWOkQq×tÌVfè£g8·¨ q©ñäp-ÁgUÚ´Éõ'>r    Ê#"

        e# Push the encoded non-space characters.

256bDb  e# Convert from base 256 to base 13.

"
.\"'()-/:\_|J"f=

        e# Replace each digit in base 13 by the corresponding character.

.+s     e# Interleave both arrays to create a string.
SN+/    e# Split at trailing spaces.
l~      e# Evaluate the input from STDIN.
\K>+    e# Add 1 to the month if the day is larger than 20.
=       e# Retrieve the corresponding element from the array.

Ð £ RÞ? DERP. . .
hapus tanda pada

Solusi Lang golf terpanjang yang pernah saya lihat.
Pavel

3

CJam, 324 byte

"%[hÿìs5!zaÆT=ªñ=Û]ÌUMàûÓ»¦f¼³ëµ1þÈUÑyéC4¬u1T9KÍü!+Úøöà&J~âZ®uRtkRÿ+*ÐFeÜPý¤SÙËU7óÎ?LXÝ2D@0¶ÆÀ¡kÚça­çªñܧ#iµ3L®ó&Ë'iºyè½?JS÷SjS`ösÓò»zjRoaÃIYrµ&M>ÍKaaúcg®Ð\p¨²:LqÜݶo¯ÆkµúÒ4Ezú©æ¼xP»¸¯gd^ßg±>ï ÃºDÎŧ@3Bßt\<GÒcû)ËûwíUÑdØoiTv>¤&ý°mÊ13ÛUÿØjª¬Ì±(¦¿çÍX4tõãÜÑ*ÃmÜ9ãSÁ3IþÜìÙ,"{_'~>33*32+-}%191bEb428Et"
 \"'()-./:\_a|J"f='a/q~\K>+=

Usaha pertamaku. Cobalah online


2

Python 2, 961 698 692 687 Bytes

Pasti masih akan bermain golf lebih jauh, hanya ingin meletakkan ide. Sekarang menggunakan kamus.

a,b=raw_input().split()
b=int(b)
c='.-"-._.-"-._.-'
print{0:c+'\n'+c,1:"'-.    .-'\n   :  :\n --:--:--\n   :  :\n.-'    '-.",2:" .-.   .-.\n(_  \ /  _)\n     |\n     |",3:" .     .\n '.___.'\n .'   '.\n:       :\n:       :\n '.___.'",4:"._____.\n  | |\n  | |\n _|_|_\n'     '",5:"   .--.\n  /   _'.\n (_) ( )\n'.    /\n  '--'",6:"  .--.\n (    )\n(_)  /\n    (_.",7:" _\n' ':--.--.\n   |  |  |_\n   |  |  | )\n   |  |  |/\n        (J",8:"     __\n___.'  '.___\n"+'_'*12,9:" _\n' ':--.--.\n   |  |  |\n   |  |  |\n   |  |  |  ...\n         '---':",10:"      ...\n      .':\n    .'\n'..'\n.''.",11:"        _\n\      /_)\n \    /'.\n  \  /   :\n   \/ __.'"}[[[b-2,11][b<2],b-1][int(a)>20]]

Metode lama, menggunakan interleaving.

d,m=raw_input().split()
m=int(m)
print'.\'  .       --.._  _ _  ".- _ .\n \n  - . _.-\' \'  .   _--     _   _-.\'_\'  .   ..\n:_:. -...\n\n -\n-. "--\n  (-_-._-\'.    ._.\n\n.\n\n\'|/ -_- \\_ (.   -.-  . __|  .\'.  -  _\n )\n \n  \n: _ _\n     . \\. \'( \'   -  \'|._ . . ":/\n \n)|_|\'/-\n  |   _ :_.  .\n(  _ \n)_-_\' _/|\n| \n.-) _)\n _   -:\n |   _  \\"-  _( |_|  -- \'|  __\n. .: ._) \n_ \' _- \n\n\n( _ \n .- :\'\'_ _ \'/-\n|  .. _|.\'  \n    |_ ..        _ \'\n        _|\n  :     |_ .     \'/    \'\\     \n   |\'  :|:   | \n.  \n \n       / . : \' )     -   - \n     \'   -   |       \'     :           \n       | |               \'           - :   | | \\ . \n       /               \'   | . _   .   / . _   _   \n . .   _     \n \'   _           .           \'                                                               (           J             \'           -           -           -           \'           :  '[[m-2,m-1][int(d)>21]::12].rstrip()

2

Python 2, 565 568 553 byte

def z(d,m):b="\n "+"  |"*3;c=" _\n' ':--.--.";a="  ...\n      ";print["\      /_)\n \    /'.\n  \  /   :\n   \/ __.'",'.-"-._.-"-._.-\n'*2,"'-.    .-'\n   :  :\n --:--:--\n   :  :\n.-'    '-.",' .-.   .-.\n(_  \ /  _)'+'\n     |'*2," .     .\n '.___.'\n .'   '.\n:       :\n:       :\n '.___.'","._____.\n  | |\n  | |\n _|_|_\n'     '","   .--.\n  /   _'.\n (_) ( )\n'.    /\n  '--'",'  .--.\n (    )\n(_)  /\n    (_.',c+b+"_"+b+" )"+b+"/\n        (J","     __\n___.'  '.___\n"+"_"*12,c+b*3+a+"   '---':","    "+a+".':\n    .'\n'..'\n.''."][m%12-(d<21)]

Jadi saya agak malas dan memutuskan untuk tidak bermain golf ini. Sebagai gantinya, saya memutuskan untuk membiarkan golf python itu sendiri.

Solusi di atas dibuat menggunakan kode di bawah ini:

full_string = """
\      /_)
 \    /'.
  \  /   :
   \/ __.'
*
.-"-._.-"-._.-
.-"-._.-"-._.-
*
...               # The others in this list as well
*
      ...
      .':
    .'
'..'
.''.
"""

# Golf the input string
string_list = full_string.split('*')
# Remove begin and end \n
string_list = [s[1:-1] for s in string_list]
# Remove unnescessary repr characters
golf = repr(string_list).replace(r'\\ ', r'\ ').replace(r'\\/', r'\/').replace(', ', ',')
# Special case for the Aquarius as it's a full duplicate
middle = golf.find('\\n', 50)
end = golf.find(',', middle)
golf = golf[0:middle+2] + "'*2" + golf[end:]
# Special case for the 12 underscores
golf = golf.replace('____________"', '"+"_"*12')
# Replace the three bars and their whitespace
golf = golf.replace('\\n   |  |  |', '"+b+"')
# Replace the bar-cover
cover = '" _\\n\' \':--.--."'
golf = golf.replace(cover, 'c')
# Replaces aries' foot
golf = golf.replace("\\n     |\\n     |'", "'+'\\n     |'*2")
# Replace dots
golf = golf.replace('  ...\\n      ', '"+a+"')
# Remove empty strings and optimize b's
golf = golf.replace('""+', '').replace('b+b+b', 'b*3')

# Surround the lookup table with the function that that prints the correct zodiac sign for the day/month
golf = 'def z(d,m):a="  ...\\n      ";b="\\n "+"  |"*3;c=" _\\n\' \':--.--.";print' + golf + '[m%12-(d<21)]'

Ini sama sekali tidak menghasilkan output yang tepat .. Semuanya perlu digeser, dan jika Anda melampaui 20,12 maka indeks daftar keluar dari jangkauan. z (21,1) harus menghasilkan Aquarius, namun ia menghasilkan Picses, dll.
Kade

@ Vioz- Wow, saya mulai ceroboh. Terima kasih, ini berfungsi dengan baik sekarang.
Matty

1

Perl, 414

Tidak banyak yang bisa dilakukan di sini, cukup gunakan kompresi kamus:

#!perl -p
/ /;$i=$'%12-($`<21);
$_="cc_
\\ct_s \\c/'ga\\thlh\\/ __ijkee
keej'-.ck'n q:q:qnk'c'-gA k.hkg(_a\\ /a_sm|
m|j .mg oi
 ih'g:chl:chl oij.d__grr _|_|_
'm'jhk-gth_'g (_) ( s'.c/
a'q'jak-g (cs(_)t
c(_.f_b )b/
cc(Jjm__
diao
ddddfbbpm'q-':jcpailci
'.i
i'g";
1while s![a-t]!(split z,"  z
a |a|a|zaaz___z\"-._.-z
A _
' ':--.--.bz.
za z.'z
Az.-z:
zc z
h:alz'.dza..gcz--za| |
z)
za/")[(ord$&)%97]!e;$_=(split A)[$i]

Ujilah aku .

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.