代码高尔夫:钻石二十一点

发布于 2024-08-13 00:44:15 字数 3178 浏览 4 评论 0原文

挑战

按字符数计算的最短代码,从给定的数字牌列表中输出最佳情况的二十一点手牌。

输入是由空格分隔的从 1 到 10(含)的数字列表。

输出将是从该卡牌列表中形成的最佳二十一点手牌 - 最接近的可用组合,通过所有卡牌值的总和达到 21 点而不超过它。卡可以删除但不能添加。

如果需要移除两张或更多牌以支持一张牌来实现相同的结果(移除 5 或 4,1 以获得 21),则需要移除最少的牌。 如果要移除相同数量的牌(移除 1,4 或 3,2),则具有最小值的组将被移除(在前面的示例中,1,4 将被移除为 min(min (3,2), min(1,4)) 属于该对)。如果出现重复的卡牌,则应删除第一次遇到的卡牌。

输出将形成为钻石卡,并保留输入顺序:

 __________  __________ 
|          ||          |
|          || /\       |
|          || \/       |
|    /\    ||          |
|    \/    ||          |
|          ||       /\ |
|          ||       \/ |
|__________||__________|
 __________  __________ 
|          ||          |
| /\       || /\    /\ |
| \/       || \/    \/ |
|    /\    ||          |
|    \/    ||          |
|       /\ || /\    /\ |
|       \/ || \/    \/ |
|__________||__________|
 __________  __________ 
|          ||          |
| /\    /\ || /\    /\ |
| \/    \/ || \/    \/ |
|    /\    || /\    /\ |
|    \/    || \/    \/ |
| /\    /\ || /\    /\ |
| \/    \/ || \/    \/ |
|__________||__________|
 __________  __________ 
|          ||          |
| /\    /\ || /\    /\ |
| \/ /\ \/ || \/ /\ \/ |
| /\ \/ /\ || /\ \/ /\ |
| \/    \/ || \/ /\ \/ |
| /\    /\ || /\ \/ /\ |
| \/    \/ || \/    \/ |
|__________||__________|
 __________  __________ 
| /\    /\ || /\    /\ |
| \/    \/ || \/ /\ \/ |
| /\    /\ || /\ \/ /\ |
| \/ /\ \/ || \/    \/ |
| /\ \/ /\ || /\    /\ |
| \/    \/ || \/ /\ \/ |
| /\    /\ || /\ \/ /\ |
|_\/____\/_||_\/____\/_|

测试用例

Input:
    1 5 7 8
Output:
     __________  __________  __________  __________ 
    |          ||          ||          ||          |
    |          || /\    /\ || /\    /\ || /\    /\ |
    |          || \/    \/ || \/ /\ \/ || \/ /\ \/ |
    |    /\    ||    /\    || /\ \/ /\ || /\ \/ /\ |
    |    \/    ||    \/    || \/    \/ || \/ /\ \/ |
    |          || /\    /\ || /\    /\ || /\ \/ /\ |
    |          || \/    \/ || \/    \/ || \/    \/ |
    |__________||__________||__________||__________|

Input: 
    10 3 4 2 6
Output:
     __________  __________  __________  __________ 
    | /\    /\ ||          ||          ||          |
    | \/ /\ \/ || /\       || /\       || /\    /\ |
    | /\ \/ /\ || \/       || \/       || \/    \/ |
    | \/    \/ ||    /\    ||          || /\    /\ |
    | /\    /\ ||    \/    ||          || \/    \/ |
    | \/ /\ \/ ||       /\ ||       /\ || /\    /\ |
    | /\ \/ /\ ||       \/ ||       \/ || \/    \/ |
    |_\/____\/_||__________||__________||__________|

Input 
    5 10 5 2 3
Output:
     __________  __________  __________  __________ 
    | /\    /\ ||          ||          ||          |
    | \/ /\ \/ || /\    /\ || /\       || /\       |
    | /\ \/ /\ || \/    \/ || \/       || \/       |
    | \/    \/ ||    /\    ||          ||    /\    |
    | /\    /\ ||    \/    ||          ||    \/    |
    | \/ /\ \/ || /\    /\ ||       /\ ||       /\ |
    | /\ \/ /\ || \/    \/ ||       \/ ||       \/ |
    |_\/____\/_||__________||__________||__________|

代码计数包括输入/​​输出(即完整程序)。

The challenge

The shortest code by character count to output a best-case blackjack hand from the list of number-cards given.

Input is a list of numbers from 1 to 10 (inclusive) separated by space.

Output will be the best blackjack hand formed from that list of cards - the closest available combo to reach 21 by the sum of all card values without surpassing it. Cards can be removed but not added.

If a case where removing two or more cards in favor of one card to accomplish the same result (removing 5 or 4,1 to gain 21) removing the least cards is required.
If the equal amount of cards is to be removed (removing 1,4 or 3,2) the group with the minimum of the minimum will be removed (in the previous example, 1,4 will be removed as min(min(3,2), min(1,4)) belongs to that pair). In the case of duplicate cards, the first encounter should be removed.

Output will be formed as diamond cards, with input order preserved:

 __________  __________ 
|          ||          |
|          || /\       |
|          || \/       |
|    /\    ||          |
|    \/    ||          |
|          ||       /\ |
|          ||       \/ |
|__________||__________|
 __________  __________ 
|          ||          |
| /\       || /\    /\ |
| \/       || \/    \/ |
|    /\    ||          |
|    \/    ||          |
|       /\ || /\    /\ |
|       \/ || \/    \/ |
|__________||__________|
 __________  __________ 
|          ||          |
| /\    /\ || /\    /\ |
| \/    \/ || \/    \/ |
|    /\    || /\    /\ |
|    \/    || \/    \/ |
| /\    /\ || /\    /\ |
| \/    \/ || \/    \/ |
|__________||__________|
 __________  __________ 
|          ||          |
| /\    /\ || /\    /\ |
| \/ /\ \/ || \/ /\ \/ |
| /\ \/ /\ || /\ \/ /\ |
| \/    \/ || \/ /\ \/ |
| /\    /\ || /\ \/ /\ |
| \/    \/ || \/    \/ |
|__________||__________|
 __________  __________ 
| /\    /\ || /\    /\ |
| \/    \/ || \/ /\ \/ |
| /\    /\ || /\ \/ /\ |
| \/ /\ \/ || \/    \/ |
| /\ \/ /\ || /\    /\ |
| \/    \/ || \/ /\ \/ |
| /\    /\ || /\ \/ /\ |
|_\/____\/_||_\/____\/_|

Test cases

Input:
    1 5 7 8
Output:
     __________  __________  __________  __________ 
    |          ||          ||          ||          |
    |          || /\    /\ || /\    /\ || /\    /\ |
    |          || \/    \/ || \/ /\ \/ || \/ /\ \/ |
    |    /\    ||    /\    || /\ \/ /\ || /\ \/ /\ |
    |    \/    ||    \/    || \/    \/ || \/ /\ \/ |
    |          || /\    /\ || /\    /\ || /\ \/ /\ |
    |          || \/    \/ || \/    \/ || \/    \/ |
    |__________||__________||__________||__________|

Input: 
    10 3 4 2 6
Output:
     __________  __________  __________  __________ 
    | /\    /\ ||          ||          ||          |
    | \/ /\ \/ || /\       || /\       || /\    /\ |
    | /\ \/ /\ || \/       || \/       || \/    \/ |
    | \/    \/ ||    /\    ||          || /\    /\ |
    | /\    /\ ||    \/    ||          || \/    \/ |
    | \/ /\ \/ ||       /\ ||       /\ || /\    /\ |
    | /\ \/ /\ ||       \/ ||       \/ || \/    \/ |
    |_\/____\/_||__________||__________||__________|

Input 
    5 10 5 2 3
Output:
     __________  __________  __________  __________ 
    | /\    /\ ||          ||          ||          |
    | \/ /\ \/ || /\    /\ || /\       || /\       |
    | /\ \/ /\ || \/    \/ || \/       || \/       |
    | \/    \/ ||    /\    ||          ||    /\    |
    | /\    /\ ||    \/    ||          ||    \/    |
    | \/ /\ \/ || /\    /\ ||       /\ ||       /\ |
    | /\ \/ /\ || \/    \/ ||       \/ ||       \/ |
    |_\/____\/_||__________||__________||__________|

Code count includes input/output (i.e full program).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

舂唻埖巳落 2024-08-20 00:44:15

J, 303 个字符

4(1!:2)~,&(10{a.)"1>,.&.>/4 :'''/\/\''(x(<@:+)"1]4 2$1|.4#0 1)}y'&.>/@((<>1 7 1#1&|.@(2 10&#)&.>' _';'| ';'|_'),~>)"0(>({~[:(i.[:>./[*22&>)+/@>)(#:@i.@(2&^)@#<@#"1 _])".1!:1]3){a:,(((1$7);(a 0 _1;7),(a 0 2 _3 _1;7),((a=:,&.>/\)0 2 6 8 _3 _1;4;_5)){&.><,{(2+i.5);2 5 8),(4 5;k);<2 5;6 5;k=:,{2 8;~>:+:i.4
$ echo -n 1 5 7 8 | jconsole test.ijs
 __________  __________  __________  __________
|          ||          ||          ||          |
|          || /\    /\ || /\    /\ || /\    /\ |
|          || \/    \/ || \/ /\ \/ || \/ /\ \/ |
|    /\    ||    /\    || /\ \/ /\ || /\ \/ /\ |
|    \/    ||    \/    || \/    \/ || \/ /\ \/ |
|          || /\    /\ || /\    /\ || /\ \/ /\ |
|          || \/    \/ || \/    \/ || \/    \/ |
|__________||__________||__________||__________|

$ echo -n 10 3 4 2 6 | jconsole test.ijs
 __________  __________  __________  __________
| /\    /\ ||          ||          ||          |
| \/ /\ \/ || /\       || /\       || /\    /\ |
| /\ \/ /\ || \/       || \/       || \/    \/ |
| \/    \/ ||    /\    ||          || /\    /\ |
| /\    /\ ||    \/    ||          || \/    \/ |
| \/ /\ \/ ||       /\ ||       /\ || /\    /\ |
| /\ \/ /\ ||       \/ ||       \/ || \/    \/ |
|_\/____\/_||__________||__________||__________|

$ echo -n 5 10 5 2 3 | jconsole test.ijs
 __________  __________  __________  __________
| /\    /\ ||          ||          ||          |
| \/ /\ \/ || /\    /\ || /\       || /\       |
| /\ \/ /\ || \/    \/ || \/       || \/       |
| \/    \/ ||    /\    ||          ||    /\    |
| /\    /\ ||    \/    ||          ||    \/    |
| \/ /\ \/ || /\    /\ ||       /\ ||       /\ |
| /\ \/ /\ || \/    \/ ||       \/ ||       \/ |
|_\/____\/_||__________||__________||__________|

核心,找到最好的手牌,其实很容易。生成给定卡片的幂集,并选择最高值小于 22 的卡片。

({~[:(i.[:>./[*22&>)+/@>)(#:@i.@(2&^)@#<@#"1 _])

然后我们从一张空白卡片开始

<>1 7 1#1&|.@(2 10&#)&.>' _';'| ';'|_'

,在适当的位置铺上菱形。

'/\/\'(x(<@:+)"1]4 2$1|.4#0 1)}y

该计划的其余部分主要是钻石的去向表。

J, 303 characters

4(1!:2)~,&(10{a.)"1>,.&.>/4 :'''/\/\''(x(<@:+)"1]4 2$1|.4#0 1)}y'&.>/@((<>1 7 1#1&|.@(2 10&#)&.>' _';'| ';'|_'),~>)"0(>({~[:(i.[:>./[*22&>)+/@>)(#:@i.@(2&^)@#<@#"1 _])".1!:1]3){a:,(((1$7);(a 0 _1;7),(a 0 2 _3 _1;7),((a=:,&.>/\)0 2 6 8 _3 _1;4;_5)){&.><,{(2+i.5);2 5 8),(4 5;k);<2 5;6 5;k=:,{2 8;~>:+:i.4
$ echo -n 1 5 7 8 | jconsole test.ijs
 __________  __________  __________  __________
|          ||          ||          ||          |
|          || /\    /\ || /\    /\ || /\    /\ |
|          || \/    \/ || \/ /\ \/ || \/ /\ \/ |
|    /\    ||    /\    || /\ \/ /\ || /\ \/ /\ |
|    \/    ||    \/    || \/    \/ || \/ /\ \/ |
|          || /\    /\ || /\    /\ || /\ \/ /\ |
|          || \/    \/ || \/    \/ || \/    \/ |
|__________||__________||__________||__________|

$ echo -n 10 3 4 2 6 | jconsole test.ijs
 __________  __________  __________  __________
| /\    /\ ||          ||          ||          |
| \/ /\ \/ || /\       || /\       || /\    /\ |
| /\ \/ /\ || \/       || \/       || \/    \/ |
| \/    \/ ||    /\    ||          || /\    /\ |
| /\    /\ ||    \/    ||          || \/    \/ |
| \/ /\ \/ ||       /\ ||       /\ || /\    /\ |
| /\ \/ /\ ||       \/ ||       \/ || \/    \/ |
|_\/____\/_||__________||__________||__________|

$ echo -n 5 10 5 2 3 | jconsole test.ijs
 __________  __________  __________  __________
| /\    /\ ||          ||          ||          |
| \/ /\ \/ || /\    /\ || /\       || /\       |
| /\ \/ /\ || \/    \/ || \/       || \/       |
| \/    \/ ||    /\    ||          ||    /\    |
| /\    /\ ||    \/    ||          ||    \/    |
| \/ /\ \/ || /\    /\ ||       /\ ||       /\ |
| /\ \/ /\ || \/    \/ ||       \/ ||       \/ |
|_\/____\/_||__________||__________||__________|

The core, finding the best hand, is actually really easy. Generate the power set of the cards given, and select the one with the highest value less than 22.

({~[:(i.[:>./[*22&>)+/@>)(#:@i.@(2&^)@#<@#"1 _])

Then we start with a blank card

<>1 7 1#1&|.@(2 10&#)&.>' _';'| ';'|_'

and layer on diamonds in the appropriate places.

'/\/\'(x(<@:+)"1]4 2$1|.4#0 1)}y

The rest of the program is dominated by the table of what diamonds go where.

十级心震 2024-08-20 00:44:15

Golfscript - 228 个字符

' ':x/{~}%:h;9,{:r;h,2\?,{:m;h,,{2\?m&},{h\=}%}%1>{:j[{+}*.22<\j,j$j]}$)\;{:c;[x]3,{4\?'  \//\__'2/[11'?'*8'@'*'bb@BBbbbbbQY@AAQQQYYbfH@H@HbffYQD@D@DQQYfb@``bbbbfQY@PPQQQQQbf'8'?'*]']]'+10r*c+=@/3&=}%[x]++' _'1/7r&!=*}%'|':x;n}%
$ echo 10 9 8 7 6 5 | ../golfscript.rb black.gs
 __________  __________  __________ 
|          ||          ||          |
| /\    /\ || /\    /\ || /\    /\ |
| \/ /\ \/ || \/ /\ \/ || \/    \/ |
| /\ \/ /\ || /\ \/ /\ || /\    /\ |
| \/ /\ \/ || \/    \/ || \/    \/ |
| /\ \/ /\ || /\    /\ || /\    /\ |
| \/    \/ || \/    \/ || \/    \/ |
|__________||__________||__________|

231 个字符

' ':x/{~}%:h,2\?,{:m;h,,{2\?m&},{h\=}%}%1>{:j[{+}*.22<\j,j$j]}$-1=:h;9,{:r;h{:c;[x]3,{4\?'  \//\__'2/11'?'*8'@'*'bb@BBbbbbbQY@AAQQQYYbfH@H@HbffYQD@D@DQQYfb@``bbbbfQY@PPQQQQQbf'8'?'*']]'++++10r*c+=@/3&=}%[x]++' _'1/7r&!=*}%'|':x;n}%

工作原理

# parse input into a list 
' ':x/{~}%:h
# create the powerset
 ,2\?,{:m;h,,{2\?m&},
# map the powerset onto the cards
{h\=}%}%
# trim the empty set from the powerset
1>
# sort the hands. most preferred hand will be last
{:j[{+}*.22<\j,j$j]}$
# take the preferred hand from the end of the list
-1=:h;
# for r in 0..8
9,{:r
...more to follow

Golfscript - 228 Characters

' ':x/{~}%:h;9,{:r;h,2\?,{:m;h,,{2\?m&},{h\=}%}%1>{:j[{+}*.22<\j,j$j]}$)\;{:c;[x]3,{4\?'  \//\__'2/[11'?'*8'@'*'bb@BBbbbbbQY@AAQQQYYbfH@H@HbffYQD@D@DQQYfb@``bbbbfQY@PPQQQQQbf'8'?'*]']]'+10r*c+=@/3&=}%[x]++' _'1/7r&!=*}%'|':x;n}%
$ echo 10 9 8 7 6 5 | ../golfscript.rb black.gs
 __________  __________  __________ 
|          ||          ||          |
| /\    /\ || /\    /\ || /\    /\ |
| \/ /\ \/ || \/ /\ \/ || \/    \/ |
| /\ \/ /\ || /\ \/ /\ || /\    /\ |
| \/ /\ \/ || \/    \/ || \/    \/ |
| /\ \/ /\ || /\    /\ || /\    /\ |
| \/    \/ || \/    \/ || \/    \/ |
|__________||__________||__________|

231 Characters

' ':x/{~}%:h,2\?,{:m;h,,{2\?m&},{h\=}%}%1>{:j[{+}*.22<\j,j$j]}$-1=:h;9,{:r;h{:c;[x]3,{4\?'  \//\__'2/11'?'*8'@'*'bb@BBbbbbbQY@AAQQQYYbfH@H@HbffYQD@D@DQQYfb@``bbbbfQY@PPQQQQQbf'8'?'*']]'++++10r*c+=@/3&=}%[x]++' _'1/7r&!=*}%'|':x;n}%

how it works

# parse input into a list 
' ':x/{~}%:h
# create the powerset
 ,2\?,{:m;h,,{2\?m&},
# map the powerset onto the cards
{h\=}%}%
# trim the empty set from the powerset
1>
# sort the hands. most preferred hand will be last
{:j[{+}*.22<\j,j$j]}$
# take the preferred hand from the end of the list
-1=:h;
# for r in 0..8
9,{:r
...more to follow
柠檬心 2024-08-20 00:44:15

Python - 365 个字符

h=map(int,raw_input().split());H=len(h);R=range
for r in R(9):x=["| "[1>r]];print"".join("_ "[0<r<8].join(x+["  \//\__"[ord(('?'*11+'@'*8+'bb@BBbbbbbQY@AAQQQYYbfH@H@HbffYQD@D@DQQYfb@``bbbbfQY@PPQQQQQbf????????]]')[r*10+c])*2>>i&6:][:2]for i in 0,2,4]+x)for c in max([[h[b]for b in R(H)if n&1<<b]for n in R(1<<H)],key=lambda c:(sum(c)<22,sum(c),len(c),sorted(c),c)))
$ echo 2 4 8 1 8 3| python blackjack.py 
 __________  __________  __________  __________ 
|          ||          ||          ||          |
| /\       || /\    /\ || /\    /\ || /\       |
| \/       || \/ /\ \/ || \/ /\ \/ || \/       |
|          || /\ \/ /\ || /\ \/ /\ ||    /\    |
|          || \/ /\ \/ || \/ /\ \/ ||    \/    |
|       /\ || /\ \/ /\ || /\ \/ /\ ||       /\ |
|       \/ || \/    \/ || \/    \/ ||       \/ |
|__________||__________||__________||__________|
$ echo 1 4 5 4 7 4 8| python blackjack.py 
 __________  __________  __________  __________  __________ 
|          ||          ||          ||          ||          |
|          || /\    /\ || /\    /\ || /\    /\ || /\    /\ |
|          || \/    \/ || \/    \/ || \/ /\ \/ || \/    \/ |
|    /\    ||    /\    ||          || /\ \/ /\ ||          |
|    \/    ||    \/    ||          || \/    \/ ||          |
|          || /\    /\ || /\    /\ || /\    /\ || /\    /\ |
|          || \/    \/ || \/    \/ || \/    \/ || \/    \/ |
|__________||__________||__________||__________||__________|

369 个字符

h=map(int,raw_input().split());H=len(h);R=range;j=[]
for n in R(1<<H):c=[h[b]for b in R(H)if n&1<<b];j+=[(sum(c)<22,sum(c),len(c),sorted(c),c)]
for r in R(9):x=["| "[1>r]];print"".join("_ "[0<r<8].join(x+["  \//\__"[ord(('?'*11+'@'*8+'bb@BBbbbbbQY@AAQQQYYbfH@H@HbffYQD@D@DQQYfb@``bbbbfQY@PPQQQQQbf????????]]')[r*10+c])*2>>i&6:][:2]for i in 0,2,4]+x)for c in max(j)[-1])

377 个字符

h=map(int,raw_input().split());H=len(h);R=range;j=[]
for n in R(1<<H):c=[h[b]for b in R(H)if n&1<<b];j+=[(sum(c),len(c),sorted(c),c)]*(sum(c)<22)
T="@@@HD@@?@BA@@`P?@BAHD`P?@bQ@@bQ?@bQHDbQ?@bQbQbQ?@bYfQbQ?@bYfYfQ?bQbYfQb]bYfQbYf]"
for r in R(9):x=["| "[1>r]];print"".join("_ "[0<r<8].join(x+["  \//\__"[ord(('?'+T[c*8-8:])[r])*2>>i&6:][:2]for i in 0,2,4]+x)for c in max(j)[-1])

408 个字符

h=map(int,raw_input().split());H=len(h);R=range;j=[]
for n in R(1<<H):c=[h[b]for b in R(H)if n&1<<b];j+=[(sum(c),len(c),sorted(c),c)]*(sum(c)<22)
T="@@@DH@@ @AB@@P` @ABDHP` @Qb@@Qb @QbDHQb @QbQbQb @QfYbQb @QfYfYb QbQfYbQn QfYbQfYn".split();U="\x3f"
for r in R(9):s="_ "[0<r<8];x=["| "[1>r]];print"".join(s.join(x+[("  ","/\\","\/","__")[ord((U+T[c-1]+U)[r])>>i&3]for i in 0,2,4]+x)for c in sorted(j)[-1][-1])

Python - 365 Characters

h=map(int,raw_input().split());H=len(h);R=range
for r in R(9):x=["| "[1>r]];print"".join("_ "[0<r<8].join(x+["  \//\__"[ord(('?'*11+'@'*8+'bb@BBbbbbbQY@AAQQQYYbfH@H@HbffYQD@D@DQQYfb@``bbbbfQY@PPQQQQQbf????????]]')[r*10+c])*2>>i&6:][:2]for i in 0,2,4]+x)for c in max([[h[b]for b in R(H)if n&1<<b]for n in R(1<<H)],key=lambda c:(sum(c)<22,sum(c),len(c),sorted(c),c)))
$ echo 2 4 8 1 8 3| python blackjack.py 
 __________  __________  __________  __________ 
|          ||          ||          ||          |
| /\       || /\    /\ || /\    /\ || /\       |
| \/       || \/ /\ \/ || \/ /\ \/ || \/       |
|          || /\ \/ /\ || /\ \/ /\ ||    /\    |
|          || \/ /\ \/ || \/ /\ \/ ||    \/    |
|       /\ || /\ \/ /\ || /\ \/ /\ ||       /\ |
|       \/ || \/    \/ || \/    \/ ||       \/ |
|__________||__________||__________||__________|
$ echo 1 4 5 4 7 4 8| python blackjack.py 
 __________  __________  __________  __________  __________ 
|          ||          ||          ||          ||          |
|          || /\    /\ || /\    /\ || /\    /\ || /\    /\ |
|          || \/    \/ || \/    \/ || \/ /\ \/ || \/    \/ |
|    /\    ||    /\    ||          || /\ \/ /\ ||          |
|    \/    ||    \/    ||          || \/    \/ ||          |
|          || /\    /\ || /\    /\ || /\    /\ || /\    /\ |
|          || \/    \/ || \/    \/ || \/    \/ || \/    \/ |
|__________||__________||__________||__________||__________|

369 Characters

h=map(int,raw_input().split());H=len(h);R=range;j=[]
for n in R(1<<H):c=[h[b]for b in R(H)if n&1<<b];j+=[(sum(c)<22,sum(c),len(c),sorted(c),c)]
for r in R(9):x=["| "[1>r]];print"".join("_ "[0<r<8].join(x+["  \//\__"[ord(('?'*11+'@'*8+'bb@BBbbbbbQY@AAQQQYYbfH@H@HbffYQD@D@DQQYfb@``bbbbfQY@PPQQQQQbf????????]]')[r*10+c])*2>>i&6:][:2]for i in 0,2,4]+x)for c in max(j)[-1])

377 Characters

h=map(int,raw_input().split());H=len(h);R=range;j=[]
for n in R(1<<H):c=[h[b]for b in R(H)if n&1<<b];j+=[(sum(c),len(c),sorted(c),c)]*(sum(c)<22)
T="@@@HD@@?@BA@@`P?@BAHD`P?@bQ@@bQ?@bQHDbQ?@bQbQbQ?@bYfQbQ?@bYfYfQ?bQbYfQb]bYfQbYf]"
for r in R(9):x=["| "[1>r]];print"".join("_ "[0<r<8].join(x+["  \//\__"[ord(('?'+T[c*8-8:])[r])*2>>i&6:][:2]for i in 0,2,4]+x)for c in max(j)[-1])

408 characters

h=map(int,raw_input().split());H=len(h);R=range;j=[]
for n in R(1<<H):c=[h[b]for b in R(H)if n&1<<b];j+=[(sum(c),len(c),sorted(c),c)]*(sum(c)<22)
T="@@@DH@@ @AB@@P` @ABDHP` @Qb@@Qb @QbDHQb @QbQbQb @QfYbQb @QfYfYb QbQfYbQn QfYbQfYn".split();U="\x3f"
for r in R(9):s="_ "[0<r<8];x=["| "[1>r]];print"".join(s.join(x+[("  ","/\\","\/","__")[ord((U+T[c-1]+U)[r])>>i&3]for i in 0,2,4]+x)for c in sorted(j)[-1][-1])
゛时过境迁 2024-08-20 00:44:15

Perl

公然窃取gnibbler的Python解决方案;如果在命令行上给出输入,则结果会短三个字符,为 362。

sub p{(local$z=pop)?(@z=&p,map[@$_,$z],@z):[]}
for(p@ARGV){$t=0;$t+=$_ for@$_;($s,@c)=($t,@$_)if$t>=$s&&$t<22}
for$r(0..8){$x=$r?'|':$";for$c(@c){print+join$r*($r<8)?$":'_',$x,
map(join('',((split//,'  \//\__')[ord((('?')x11,('@')x8,split//,
'bb@BBbbbbbQY@AAQQQYYbfH@H@HbffYQD@D@DQQYfb@``bbbbfQY@PPQQQQQbf????????]]'
)[$r*10+$c])*2>>$_&6..7])[0,1]),0,2,4),$x}print$/}

要从标准输入读取,请将@ARGV 替换为@F 并使用perl -an ;使用传统的 Perl 高尔夫计分,计为 362。

当然,gnibbler 的其他 Python 技巧 可以复制也。

$ perl -pechomp <<'END' \
> >'bb@BBbbbbbQY@AAQQQYYbfH@H@HbffYQD@D@DQQYfb@``bbbbfQY@PPQQQQQbf????????]]'
> sub p{(local$z=pop)?(@z=&p,map[@$_,$z],@z):[]}
> for(p@F){$t=0;$t+=$_ for@$_;($s,@c)=($t,@$_)if$t>=$s&&$t<22}
> for$r(0..8){$x=$r?'|':$";for$c(@c){print+join$r*($r<8)?$":'_',$x,
> map(join('',((split//,'  \//\__')[ord((('?')x11,('@')x8,split//,$0)
> [$r*10+$c])*2>>$_&6..7])[0,1]),0,2,4),$x}print$/}
> END
$ wc -c <bb*
287
$ echo 10 5 2 9 3 | perl -an bb*
 __________  __________  __________ 
| /\    /\ ||          || /\    /\ |
| \/ /\ \/ || /\       || \/    \/ |
| /\ \/ /\ || \/       || /\    /\ |
| \/    \/ ||          || \/ /\ \/ |
| /\    /\ ||          || /\ \/ /\ |
| \/ /\ \/ ||       /\ || \/    \/ |
| /\ \/ /\ ||       \/ || /\    /\ |
|_\/____\/_||__________||_\/____\/_|

Perl

Blatantly stolen from gnibbler's Python solution; turns out to be three characters shorter, at 362 -- if input is given on the command line.

sub p{(local$z=pop)?(@z=&p,map[@$_,$z],@z):[]}
for(p@ARGV){$t=0;$t+=$_ for@$_;($s,@c)=($t,@$_)if$t>=$s&&$t<22}
for$r(0..8){$x=$r?'|':$";for$c(@c){print+join$r*($r<8)?$":'_',$x,
map(join('',((split//,'  \//\__')[ord((('?')x11,('@')x8,split//,
'bb@BBbbbbbQY@AAQQQYYbfH@H@HbffYQD@D@DQQYfb@``bbbbfQY@PPQQQQQbf????????]]'
)[$r*10+$c])*2>>$_&6..7])[0,1]),0,2,4),$x}print$/}

To read from stdin, replace @ARGV by @F and use perl -an; using traditional Perl golf scoring, that counts as 362.

And, of course, gnibbler's other other Python trick can be copied too.

$ perl -pechomp <<'END' \
> >'bb@BBbbbbbQY@AAQQQYYbfH@H@HbffYQD@D@DQQYfb@``bbbbfQY@PPQQQQQbf????????]]'
> sub p{(local$z=pop)?(@z=&p,map[@$_,$z],@z):[]}
> for(p@F){$t=0;$t+=$_ for@$_;($s,@c)=($t,@$_)if$t>=$s&&$t<22}
> for$r(0..8){$x=$r?'|':$";for$c(@c){print+join$r*($r<8)?$":'_',$x,
> map(join('',((split//,'  \//\__')[ord((('?')x11,('@')x8,split//,$0)
> [$r*10+$c])*2>>$_&6..7])[0,1]),0,2,4),$x}print$/}
> END
$ wc -c <bb*
287
$ echo 10 5 2 9 3 | perl -an bb*
 __________  __________  __________ 
| /\    /\ ||          || /\    /\ |
| \/ /\ \/ || /\       || \/    \/ |
| /\ \/ /\ || \/       || /\    /\ |
| \/    \/ ||          || \/ /\ \/ |
| /\    /\ ||          || /\ \/ /\ |
| \/ /\ \/ ||       /\ || \/    \/ |
| /\ \/ /\ ||       \/ || /\    /\ |
|_\/____\/_||__________||_\/____\/_|
幽梦紫曦~ 2024-08-20 00:44:15

Lua,895

好的,现在改正。甚至可以得到 1 分作为 A。

t=table p=ipairs j=arg x={}r={}o={}b=0 function f()local e,s,n,m=0,0,{}for i,v in p(j)do s=s+v e=e+(v+0==1 and 1 or 0)n[i]=v end t.sort(n)for i,v in p(n)do if o[i]and v~=o[i]then m=v>o[i]break end end while e>0 and s<12 do s=s+10 e=e-1 end if s<=21 and s>b or(s==b and(#j>#r or(#j==#r and m)))then b=s for i=1,#r>#j and #r or #j do r[i]=j[i]o[i]=j[i]end t.sort(o)end if s>0 then for i=1,#j do t.insert(x,t.remove(j,i))f()t.insert(j,i,table.remove(x))end end end f()t={" __________ ","|          |","|__________|","|    /\\    |","| /\\       |","|       /\\ |","| /\\    /\\ |","| \\/ /\\ \\/ |","|_\\/____\\/_|"}c={"12224D223","125E226F3","125E4D6F3","127G227G3","127G4D7G3","127G7G7G3","1278HG7G3","1278H8HG3","17G78HG79","178HG78H9"}for i=1,9 do for j,x in p(r)do v=c[tonumber(x)]:sub(i,i):byte()io.write(v<64 and t[v-48]or(t[v-64]:gsub("[/\\]",{["/"]="\\",["\\"]="/"})))end io.write("\n")end

示例输出:

>lua card.lua 8 9 10 7 
 __________  __________ 
| /\    /\ || /\    /\ |
| \/    \/ || \/ /\ \/ |
| /\    /\ || /\ \/ /\ |
| \/ /\ \/ || \/    \/ |
| /\ \/ /\ || /\    /\ |
| \/    \/ || \/ /\ \/ |
| /\    /\ || /\ \/ /\ |
|_\/____\/_||_\/____\/_|

>lua card.lua 1 4 5 4 7 4 8 
 __________  __________  __________  __________  __________ 
|          ||          ||          ||          ||          |
|          || /\    /\ || /\    /\ || /\    /\ || /\    /\ |
|          || \/    \/ || \/    \/ || \/ /\ \/ || \/    \/ |
|    /\    ||    /\    ||          || /\ \/ /\ ||          |
|    \/    ||    \/    ||          || \/    \/ ||          |
|          || /\    /\ || /\    /\ || /\    /\ || /\    /\ |
|          || \/    \/ || \/    \/ || \/    \/ || \/    \/ |
|__________||__________||__________||__________||__________|

>lua card.lua 1 9 5 5
 __________  __________  __________
|          ||          ||          |
|          || /\    /\ || /\    /\ |
|          || \/    \/ || \/    \/ |
|    /\    ||    /\    ||    /\    |
|    \/    ||    \/    ||    \/    |
|          || /\    /\ || /\    /\ |
|          || \/    \/ || \/    \/ |
|__________||__________||__________|

Lua, 895

OK, correct now. Can even score 1 as ace.

t=table p=ipairs j=arg x={}r={}o={}b=0 function f()local e,s,n,m=0,0,{}for i,v in p(j)do s=s+v e=e+(v+0==1 and 1 or 0)n[i]=v end t.sort(n)for i,v in p(n)do if o[i]and v~=o[i]then m=v>o[i]break end end while e>0 and s<12 do s=s+10 e=e-1 end if s<=21 and s>b or(s==b and(#j>#r or(#j==#r and m)))then b=s for i=1,#r>#j and #r or #j do r[i]=j[i]o[i]=j[i]end t.sort(o)end if s>0 then for i=1,#j do t.insert(x,t.remove(j,i))f()t.insert(j,i,table.remove(x))end end end f()t={" __________ ","|          |","|__________|","|    /\\    |","| /\\       |","|       /\\ |","| /\\    /\\ |","| \\/ /\\ \\/ |","|_\\/____\\/_|"}c={"12224D223","125E226F3","125E4D6F3","127G227G3","127G4D7G3","127G7G7G3","1278HG7G3","1278H8HG3","17G78HG79","178HG78H9"}for i=1,9 do for j,x in p(r)do v=c[tonumber(x)]:sub(i,i):byte()io.write(v<64 and t[v-48]or(t[v-64]:gsub("[/\\]",{["/"]="\\",["\\"]="/"})))end io.write("\n")end

Sample output:

>lua card.lua 8 9 10 7 
 __________  __________ 
| /\    /\ || /\    /\ |
| \/    \/ || \/ /\ \/ |
| /\    /\ || /\ \/ /\ |
| \/ /\ \/ || \/    \/ |
| /\ \/ /\ || /\    /\ |
| \/    \/ || \/ /\ \/ |
| /\    /\ || /\ \/ /\ |
|_\/____\/_||_\/____\/_|

>lua card.lua 1 4 5 4 7 4 8 
 __________  __________  __________  __________  __________ 
|          ||          ||          ||          ||          |
|          || /\    /\ || /\    /\ || /\    /\ || /\    /\ |
|          || \/    \/ || \/    \/ || \/ /\ \/ || \/    \/ |
|    /\    ||    /\    ||          || /\ \/ /\ ||          |
|    \/    ||    \/    ||          || \/    \/ ||          |
|          || /\    /\ || /\    /\ || /\    /\ || /\    /\ |
|          || \/    \/ || \/    \/ || \/    \/ || \/    \/ |
|__________||__________||__________||__________||__________|

>lua card.lua 1 9 5 5
 __________  __________  __________
|          ||          ||          |
|          || /\    /\ || /\    /\ |
|          || \/    \/ || \/    \/ |
|    /\    ||    /\    ||    /\    |
|    \/    ||    \/    ||    \/    |
|          || /\    /\ || /\    /\ |
|          || \/    \/ || \/    \/ |
|__________||__________||__________|
任谁 2024-08-20 00:44:15

Python - 298 个字符

只需像这样重命名脚本

mv blackjack.py '???????????@@@@@@@@bb@BBbbbbbQY@AAQQQYYbfH@H@HbffYQD@D@DQQYfb@``bbbbfQY@PPQQQQQbf????????]].py'

这是脚本

import sys
h=map(int,raw_input().split());H=len(h);R=range
for r in R(9):x=["| "[1>r]];print"".join("_ "[0<r<8].join(x+["  \//\__"[ord(sys.argv[0][r*10+c])*2>>i&6:][:2]for i in 0,2,4]+x)for c in max([[h[b]for b in R(H)if n&1<<b]for n in R(1<<H)],key=lambda c:(sum(c)<22,sum(c),len(c),sorted(c),c)))

和示例运行

$ echo 1 2 3 4 5 | python '???????????@@@@@@@@bb@BBbbbbbQY@AAQQQYYbfH@H@HbffYQD@D@DQQYfb@``bbbbfQY@PPQQQQQbf????????]].py'
 __________  __________  __________  __________  __________ 
|          ||          ||          ||          ||          |
|          || /\       || /\       || /\    /\ || /\    /\ |
|          || \/       || \/       || \/    \/ || \/    \/ |
|    /\    ||          ||    /\    ||          ||    /\    |
|    \/    ||          ||    \/    ||          ||    \/    |
|          ||       /\ ||       /\ || /\    /\ || /\    /\ |
|          ||       \/ ||       \/ || \/    \/ || \/    \/ |
|__________||__________||__________||__________||__________|

Python - 298 Characters

simply rename the script like this

mv blackjack.py '???????????@@@@@@@@bb@BBbbbbbQY@AAQQQYYbfH@H@HbffYQD@D@DQQYfb@``bbbbfQY@PPQQQQQbf????????]].py'

Here is the script

import sys
h=map(int,raw_input().split());H=len(h);R=range
for r in R(9):x=["| "[1>r]];print"".join("_ "[0<r<8].join(x+["  \//\__"[ord(sys.argv[0][r*10+c])*2>>i&6:][:2]for i in 0,2,4]+x)for c in max([[h[b]for b in R(H)if n&1<<b]for n in R(1<<H)],key=lambda c:(sum(c)<22,sum(c),len(c),sorted(c),c)))

and a sample run

$ echo 1 2 3 4 5 | python '???????????@@@@@@@@bb@BBbbbbbQY@AAQQQYYbfH@H@HbffYQD@D@DQQYfb@``bbbbfQY@PPQQQQQbf????????]].py'
 __________  __________  __________  __________  __________ 
|          ||          ||          ||          ||          |
|          || /\       || /\       || /\    /\ || /\    /\ |
|          || \/       || \/       || \/    \/ || \/    \/ |
|    /\    ||          ||    /\    ||          ||    /\    |
|    \/    ||          ||    \/    ||          ||    \/    |
|          ||       /\ ||       /\ || /\    /\ || /\    /\ |
|          ||       \/ ||       \/ || \/    \/ || \/    \/ |
|__________||__________||__________||__________||__________|
另类 2024-08-20 00:44:15

Python,632 个字符

from itertools import*
o=sum;q=range;r=filter
l=map(int,raw_input().split())
s=r(lambda x:o(x)<22,chain.from_iterable(imap(combinations,repeat(l),q(len(l)+1))))
s=r(lambda x:o(x)==max(map(o,s)),s)
t=max(([(min(x),x)for x in s if len(x)==max(map(len,s))]))[1]
a=" __________ "
b="|          |"
c="| /\    /\ |";e=c[::-1]
d="| /\       |";l=d[::-1]
g="| \/       |";k=g[::-1]
i="|    /\    |";j=i[::-1]
h="| /\ \/ /\ |";f=h[::-1]
n="|_\/____\/_|"
m="|__________|"
y="aaaaaaaaaabbbbbbbbccbddcccccefbggeeeffchibibichhfejbjbjeefhcbkkcccchefblleeeeechmmmmmmmmnn"
for x in q(9):
 print''.join([globals()[y[x*10:(x+1)*10][v-1]]for v in t])

示例输出:

10 5 7 4 1 1
 __________  __________  __________  __________  __________ 
| /\    /\ ||          ||          ||          ||          |
| \/ /\ \/ || /\    /\ || /\    /\ ||          ||          |
| /\ \/ /\ || \/    \/ || \/    \/ ||          ||          |
| \/    \/ ||    /\    ||          ||    /\    ||    /\    |
| /\    /\ ||    \/    ||          ||    \/    ||    \/    |
| \/ /\ \/ || /\    /\ || /\    /\ ||          ||          |
| /\ \/ /\ || \/    \/ || \/    \/ ||          ||          |
|_\/____\/_||__________||__________||__________||__________|

Python, 632 characters

from itertools import*
o=sum;q=range;r=filter
l=map(int,raw_input().split())
s=r(lambda x:o(x)<22,chain.from_iterable(imap(combinations,repeat(l),q(len(l)+1))))
s=r(lambda x:o(x)==max(map(o,s)),s)
t=max(([(min(x),x)for x in s if len(x)==max(map(len,s))]))[1]
a=" __________ "
b="|          |"
c="| /\    /\ |";e=c[::-1]
d="| /\       |";l=d[::-1]
g="| \/       |";k=g[::-1]
i="|    /\    |";j=i[::-1]
h="| /\ \/ /\ |";f=h[::-1]
n="|_\/____\/_|"
m="|__________|"
y="aaaaaaaaaabbbbbbbbccbddcccccefbggeeeffchibibichhfejbjbjeefhcbkkcccchefblleeeeechmmmmmmmmnn"
for x in q(9):
 print''.join([globals()[y[x*10:(x+1)*10][v-1]]for v in t])

Sample output:

10 5 7 4 1 1
 __________  __________  __________  __________  __________ 
| /\    /\ ||          ||          ||          ||          |
| \/ /\ \/ || /\    /\ || /\    /\ ||          ||          |
| /\ \/ /\ || \/    \/ || \/    \/ ||          ||          |
| \/    \/ ||    /\    ||          ||    /\    ||    /\    |
| /\    /\ ||    \/    ||          ||    \/    ||    \/    |
| \/ /\ \/ || /\    /\ || /\    /\ ||          ||          |
| /\ \/ /\ || \/    \/ || \/    \/ ||          ||          |
|_\/____\/_||__________||__________||__________||__________|
只涨不跌 2024-08-20 00:44:15

Haskell 最低限度测试了 721 个字符

更新了 Haskell 版本,现在据说适用于所有情况,但可能需要更多测试。

import Data.List --17

--shorteners

m=map --6
r=reverse --10
l=length --9
u=True --7
g=minimum --10

--printing of the cards

p=foldl1(zipWith(++)).m d --26
a=[" __________ ","|          |","| /\\    /\\ |",r(a!!2),"| /\\       |",r(a!!4),"| \\/       |",r(a!!6),"|    /\\    |",r(a!!8),"| /\\ \\/ /\\ |",r(a!!10),"|_\\/____\\/_|","|__________|"] --190
j(Just x)=x --12
d(n+1)=m(j.(flip$lookup)(zip"abcedlgkijhfnm"a).("aaaaaaaaaabbbbbbbbccbddcccccefbggeeeffchibibichhfejbjbjeefhcbkkcccchefblleeeeechmmmmmmmmnn"!!).(+n))[0,10..80] --160

-- interaction and pipeline

main=interact$unlines.p.f.m read.words --39
f x=head.filter((<22).sum).r.sortBy(o x)$x:z x --47

-- generate all possible hands (power set)

z[]=[] --7
z(x:s)=s:m(x:)(z s)++z s --25

-- sorting logic
c f a b=compare(f a)$f b --25

o x a b|l a==l b=s x a b|u=c l a b --35
s o a b|g a==g b=t o a b|u=c g a b --35
t o a b|all(`elem`b)a=c(n o)a b|u=GT --37
n t=m(j.(`elemIndex`t)) --24

Haskell 版本尚未完成 622 个字符

它不会赢得任何选美比赛,我确信还可以改进,并且不完全遵循规范(仍在研究 min( min(3,2), min(1,4)) 问题以及重复过滤(o 函数需要更多情况))。尽管它不完整,但它确实通过了给出的所有测试用例。

每行都带有注释 (--) 以及其中的字符数,包括新行。

import Data.List --17
p=foldl1(zipWith(++)).m d --26
r=reverse --10
a=[" __________ ","|          |","| /\\    /\\ |",r(a!!2),"| /\\       |",r(a!!4),"| \\/       |",r(a!!6),"|    /\\    |",r(a!!8),"| /\\ \\/ /\\ |",r(a!!10),"|_\\/____\\/_|","|__________|"] --190
j(Just x)=x --12
d(n+1)=m(j.(flip$lookup)(zip"abcedlgkijhfnm"a).("aaaaaaaaaabbbbbbbbccbddcccccefbggeeeffchibibichhfejbjbjeefhcbkkcccchefblleeeeechmmmmmmmmnn"!!).(+n))[0,10..80] --160
m=map --6

main=interact$unlines.p.snd.f.m read.words --43

f x=head.filter((<22).fst).m(\x->(sum x,x))$r$sortBy o$x:z x --61

c f a b=compare(f a)$f b --25
z[]=[] --7
z(x:s)=s:m(x:)(z s)++z s --25
l=length --9

o a b|l a==l b=GT|True=c l a b --31

Haskell minimally tested 721 characters

Updated Haskell version, now supposedly works for all cases but it could probably do with more testing.

import Data.List --17

--shorteners

m=map --6
r=reverse --10
l=length --9
u=True --7
g=minimum --10

--printing of the cards

p=foldl1(zipWith(++)).m d --26
a=[" __________ ","|          |","| /\\    /\\ |",r(a!!2),"| /\\       |",r(a!!4),"| \\/       |",r(a!!6),"|    /\\    |",r(a!!8),"| /\\ \\/ /\\ |",r(a!!10),"|_\\/____\\/_|","|__________|"] --190
j(Just x)=x --12
d(n+1)=m(j.(flip$lookup)(zip"abcedlgkijhfnm"a).("aaaaaaaaaabbbbbbbbccbddcccccefbggeeeffchibibichhfejbjbjeefhcbkkcccchefblleeeeechmmmmmmmmnn"!!).(+n))[0,10..80] --160

-- interaction and pipeline

main=interact$unlines.p.f.m read.words --39
f x=head.filter((<22).sum).r.sortBy(o x)$x:z x --47

-- generate all possible hands (power set)

z[]=[] --7
z(x:s)=s:m(x:)(z s)++z s --25

-- sorting logic
c f a b=compare(f a)$f b --25

o x a b|l a==l b=s x a b|u=c l a b --35
s o a b|g a==g b=t o a b|u=c g a b --35
t o a b|all(`elem`b)a=c(n o)a b|u=GT --37
n t=m(j.(`elemIndex`t)) --24

Haskell version not finished yet 622 characters

it won't win any beauty contests, could also be improved I'm sure, and doesn't exactly follow the spec (still working on the min(min(3,2), min(1,4)) issue as well as the duplicate filtering (the o function needs more cases)). Despite it's incompleteness it does pass all the test cases given.

Each line is commented (--) with the number of characters on it, including the new line.

import Data.List --17
p=foldl1(zipWith(++)).m d --26
r=reverse --10
a=[" __________ ","|          |","| /\\    /\\ |",r(a!!2),"| /\\       |",r(a!!4),"| \\/       |",r(a!!6),"|    /\\    |",r(a!!8),"| /\\ \\/ /\\ |",r(a!!10),"|_\\/____\\/_|","|__________|"] --190
j(Just x)=x --12
d(n+1)=m(j.(flip$lookup)(zip"abcedlgkijhfnm"a).("aaaaaaaaaabbbbbbbbccbddcccccefbggeeeffchibibichhfejbjbjeefhcbkkcccchefblleeeeechmmmmmmmmnn"!!).(+n))[0,10..80] --160
m=map --6

main=interact$unlines.p.snd.f.m read.words --43

f x=head.filter((<22).fst).m(\x->(sum x,x))$r$sortBy o$x:z x --61

c f a b=compare(f a)$f b --25
z[]=[] --7
z(x:s)=s:m(x:)(z s)++z s --25
l=length --9

o a b|l a==l b=GT|True=c l a b --31
毁梦 2024-08-20 00:44:15

Perl,410 char

不知道还有多少改进可能,但也许这比 gnibbler 的算法更容易移植到 GolfScript:

sub R{for(@_){substr$q[$_],$B+$z,2,'/\\';substr$q[$_+1],$B+$z,2,'\/';
if($B==2){$B=8;R(8-$_);$B=2}}}
for$i(1..1<<(@p=@ARGV)){$s=$n=0;$i&1<<$n++&&($s+=21*$_+1)for@p;
$q=$s,$N=$i if$s<462&&$q<$s}
@q=($/)x9;for$p(grep$N&1<<$_,0..@p){
s/$/|          |/for@q;
$B=5;($P=$p[$p])&1&&R(4-($P==7));$P-8||R 5,3;$P>9&&R 6,2;
$B=2;if($P>8){R 1,3,5,7}else{R 2if$P>1;R 6if$P>3;R 4if$P>5}$z+=12}
$q[0]=~y/| / _/;$q[-1]=~y/ /_/;print@q

Perl, 410 char

Don't know how much more improvement is possible, but maybe this would be easier to port to GolfScript than gnibbler's algorithm:

sub R{for(@_){substr$q[$_],$B+$z,2,'/\\';substr$q[$_+1],$B+$z,2,'\/';
if($B==2){$B=8;R(8-$_);$B=2}}}
for$i(1..1<<(@p=@ARGV)){$s=$n=0;$i&1<<$n++&&($s+=21*$_+1)for@p;
$q=$s,$N=$i if$s<462&&$q<$s}
@q=($/)x9;for$p(grep$N&1<<$_,0..@p){
s/$/|          |/for@q;
$B=5;($P=$p[$p])&1&&R(4-($P==7));$P-8||R 5,3;$P>9&&R 6,2;
$B=2;if($P>8){R 1,3,5,7}else{R 2if$P>1;R 6if$P>3;R 4if$P>5}$z+=12}
$q[0]=~y/| / _/;$q[-1]=~y/ /_/;print@q
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文