Nghệ thuật ASCII trong ngày # 4 - Dấu hiệu hoàng đạo


12

Tất cả chúng ta đều thích lá số tử vi, phải không ? Nhưng tôi có một vấn đề nghiêm trọng trong Ứng dụng Tử vi này được cài đặt trên Điện thoại thông minh của tôi rằng nó chỉ hiển thị biểu tượng Dấu hiệu Hoàng đạo cho tử vi mỗi ngày. Bây giờ, tôi nhớ tử vi của mình, nhưng thật khó để nhớ người khác mà tôi quan tâm đến tử vi.

Thử thách

Vì vậy, đây là thách thức của bạn cho một bổ sung khác cho loạt Nghệ thuật của Ngày ASCII. Đưa ra một đầu vào ngày và tháng, xuất ra dấu hiệu Zodiac tương ứng ở định dạng ASCII như dưới đây. Mỗi DD MMDấu hiệu Hoàng đạo được theo sau tên và phạm vi ngày ( định dạng) cho dấu hiệu hoàng đạo.

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
'-.    .-'
   :  :
 --:--:--
   :  :
.-'    '-.

Đầu vào

  • Bạn sẽ được cung cấp hai số nguyên tương ứng với ngày tháng và tháng trong năm (theo thứ tự đó) của ngày sinh nhật.
  • Ngày và tháng sẽ được 1lập chỉ mục như trong lịch bình thường.
  • Bạn có thể lấy các đối số hàm STDIN / ARGV / hàm đầu vào hoặc tương đương gần nhất

Đầu ra

  • Dựa trên phạm vi ngày mà ngày đầu vào rơi vào, xuất ra STDOUT, Dấu hiệu hoàng đạo tương ứng.
  • Bạn có thể có tối đa 4 khoảng trắng ở mỗi dòng nhưng không có khoảng trắng ở đầu không phải là một phần của đầu ra.
  • Bạn có thể viết một chương trình đầy đủ hoặc một chức năng được đặt tên.

Đây là vì vậy mã ngắn nhất tính bằng byte sẽ thắng!


Bảng xếp hạng

Bài đầu tiên của loạt bài tạo ra một bảng thành tích.

Để đảm bảo rằng câu trả lời của bạn hiển thị, vui lòng bắt đầu mọi câu trả lời bằng tiêu đề, sử dụng mẫu Markdown sau:

# Language Name, N bytes

nơi Nlà kích thước của trình của bạn. Nếu bạn cải thiện điểm số của mình, bạn có thể giữ điểm số cũ trong tiêu đề, bằng cách đánh chúng qua. Ví dụ:

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


@NinjaBearMonkey Tôi biết về nó, nhưng cái đó chi tiết hơn và nhấn mạnh vào phân tích ngày
Trình tối ưu hóa

Tôi biết, tôi chắc chắn sẽ không coi nó là một bản sao, nhưng tôi chỉ nghĩ rằng tôi sẽ đề cập đến nó.
NinjaBearMonkey

Là những khoảng trống trên dòng cuối cùng của Kim Ngưu và Song Ngư có chủ ý?
Siguza

@Siguza dù sao bạn cũng có thể có tối đa 4 dấu cách. Vì vậy, nó không thành vấn đề :)
Trình tối ưu hóa

Câu trả lời:


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>+=

Hãy thử trực tuyến trong trình thông dịch CJam .

Ý tưởng

Chúng tôi bắt đầu bằng cách nối tất cả mười hai dấu hiệu bằng cách sử dụng chuỗi <SP><LF>làm dấu phân cách. Chúng tôi chọn các dấu hiệu hoàng đạo không chứa dấu cách, vì vậy điều này cho phép phân tách chúng dễ dàng.

Chuỗi tham gia dài 542 byte. 236 trong số các byte này là khoảng trắng, gần một nửa trong số chúng. Chúng tôi xây dựng một mảng chứa 1 cho mọi không gian và 0 cho mọi không gian. Bằng cách này, mã hóa một không gian sẽ chỉ tốn 1 bit.

Xóa tất cả các khoảng trắng khỏi chuỗi đã tham gia, chúng ta chỉ còn lại các ký tự <LF>."'()-/:J\_|. Chỉ định mỗi trong số chúng một giá trị (ví dụ: chỉ mục trong chuỗi này) trong khoảng từ 0 đến 12

Cuối cùng, chúng tôi giải mã các mảng cơ sở 2 và cơ sở 13 ở trên như các mảng byte.

Trong chương trình cuối cùng, với một đầu vào nhất định DD MM, chúng tôi tính toán (int(MM) + (int(DD) > 20)) % 12, đảo ngược quá trình trên để có được mảng của tất cả các dấu hiệu hoàng đạo và chọn một đầu vào thích hợp.

"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. . .
khai mạc

Giải pháp Lang golf dài nhất tôi từng thấy.
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>+=

Nỗ lực đầu tiên của tôi. Dùng thử trực tuyến


2

Python 2, 961 698 692 687 byte

Chắc chắn vẫn sẽ đi chơi golf hơn nữa, chỉ muốn đặt một ý tưởng xuống. Bây giờ sử dụng một từ điển.

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]]

Phương pháp cũ, sử dụng xen kẽ.

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)]

Vì vậy, tôi đã có một chút lười biếng và quyết định không chơi golf này. Thay vào đó, tôi quyết định để cho python golf chính nó.

Giải pháp trên được tạo bằng mã dưới đây:

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)]'

Điều này hoàn toàn không tạo ra đầu ra đúng .. Tất cả chúng cần được thay đổi, và nếu bạn vượt quá 20,12 thì chỉ số danh sách sẽ vượt ra khỏi phạm vi. z (21,1) sẽ tạo ra Bảo Bình, nhưng nó tạo ra Picses, v.v.
Kade

@ Vioz- Wow, tôi đang trở nên cẩu thả. Cảm ơn, nó hoạt động đúng bây giờ.
Matty

1

Perl, 414

Không có nhiều để làm ở đây, chỉ áp dụng nén từ điển:

#!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]

Kiểm tra tôi .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.