洗牌交易!


14

今天是星期五,我很累,所以让我们快速做一个!不输入任何内容,但是您应该在标准纸牌中输出所有13种不同编号的纸牌。您应该通过Ace(不可知的Suit)输出2。

每张卡的顶部都有一个空格 和十个_空格

从顶部开始的第二行用a /和10空格 以及a表示\

第三行与所有中间行相同,不同之处在于表示卡值的字符在边缘的右边向右两个空格(如果在顶部)或在左边向左两个空格(如果在底部)。

每个中间十岁上下行是一个简单的|十位 还有一|

最后一行是a \和10 _,最后是a/

如果该值是多位数,则卡的总宽度(以高度为单位)不应更改。(即10不会使卡的边变宽​​)

国王示例:

 __________ 
/          \
| K        |
|          |
|          |
|          |
|          |
|          |
|        K |
\__________/

9例子

 __________ 
/          \
| 9        |
|          |
|          |
|          |
|          |
|          |
|        9 |
\__________/

10个例子

 __________ 
/          \
| 10       |
|          |
|          |
|          |
|          |
|          |
|       10 |
\__________/

按从小到大的顺序输出(A高!)。

这是代码高尔夫球,因此最短的代码获胜。

玩得开心,周末愉快!


2
我们可以举个10例子看看下10头是否粘在右边缘上吗?
Sunny Pun

@SunnyPun当然是为什么
jacksonecac

1
卡应该垂直,水平排列还是有关系?
DLosc

从左到右或从上到下的玩家选择。
jacksonecac

Answers:


10

PowerShell的V2 +,120 116 114 108个字节

2..10+[char[]]'JQKA'|%{$z=' '*(8-!($_-10));$x='_'*10;$y=' '*10;" $x 
/$y\
| $_$z|";,"|$y|"*5;"|$z$_ |
\$x/"}

构造一个范围2..10并使用char-array进行数组连接JQKA。将其送入循环|%{...}。每次迭代时,我们都设置为$z等于适当数量的空格(基于是否在卡片上10),设置$x10下划线,然后设置$y10空格。

然后,我们开始放置。我们将利用默认值Write-Output在管道元素之间插入换行符,因此我们只需要在管道上获取内容即可。请注意,在大多数地方,我们使用文字换行符,而不是关闭并重新打开字符串以节省几个字节。

第一个是只有$x两个空格,然后$y是两个斜杠,然后| $_$z|"是管道,一个空格,适当数量的空格和另一个管道。这构成了直到价值线为止的牌的顶部。

我们必须在这里分号,因为下一个使用数组。该,"|$y|"*5结构使用逗号运算符构造带有空格的管道的字符串数组-在输出时,该数组的每个元素免费获取换行符。

然后,"|$z$_ |以表示底部的值,最后$x以斜线表示卡的底部。

输出片段

PS C:\Tools\Scripts\golfing> 2..10+[char[]]'JQKA'|%{$z=' '*(8,7)[$_-eq10];" $(($x='_'*10)) ";"/$(($y=' '*10))\";"| $_$z|";,"|$y|"*5;"|$z$_ |";"\$x/"}
 __________ 
/          \
| 2        |
|          |
|          |
|          |
|          |
|          |
|        2 |
\__________/
 __________ 
/          \
| 3        |
|          |
|          |
|          |
|          |
|          |
|        3 |
\__________/
 __________ 
/          \
| 4        |
...

1
这是PowerShell获胜的奇怪日子!做得好:)
Kade

@Shebang谢谢!Sub-100如此接近,但不确定是否能做到。
AdmBorkBork '16

[握拳]你在殴打我3个字节。三个字节!
加布里埃尔·贝纳米

6

Python中,161个 160 156 149字节

Shebang保存了一个字节

这可能需要一些工作,但是这里是:

o=" ";v="_"*10
for x in map(str,range(2,11)+list("JKQA")):print o+v+"\n/",o*9+"\\\n|",x.ljust(8),"|"+("\n|"+o*10+"|")*5+"\n|",o*6+x.ljust(3)+"|\n\\"+v+"/"

说明

我们使用列出所有等级的列表map(str,range(2,11)。然后,我们遍历每个等级并制作一张卡片。

print o+"_"*10+"\n/",o*9+"\\\n|",x.ljust(8),"|"+("\n|"+o*10+"|")*5+"\n|",o*6+x.ljust(3)+"|\n\\"+"_"*10+"/"

我们将卡片放在顶部:

o+v+"\n"

然后,排名在左侧:

"/",o*9+"\\\n|",x.ljust(8),"|"

我们使用.ljust因为10是两个长而其他所有都是一个宽。

然后我们在中间打印5行:

"|"+("\n|"+o*10+"|")*5+"\n|"

和最低排名:

"\n|",o*6+x.ljust(3)+"|\n"

最后,我们打印卡片的底部:

"\\"+v+"/"

2
速度很快的
圣莫利

您的字节数似乎不正确(我数155)。但是,如果您创建变量v="_"*10并替换这些实例,则会为您节省另一个字节!
卡德,2016年

5

JavaScript(ES6),151个字节

f=
_=>`2345678910JQKA`.replace(/.0?/g,s=>` __________
/          \\
| `+(s+=`   `+s).slice(0,4)+`     |
|     `.repeat(6)+s.slice(-4)+` |
\\__________/
`)
;
document.write('<pre>'+f());


@Emigna谢谢,我也忘记了其他答案。
尼尔

4

Perl中,128个 117 111字节

map{printf$"."_"x10 ."
/".$"x10 .'\
| %-9s|
'.("|".$"x10 ."|
")x5 ."|%9s |
\\"."_"x10 ."/
",$_,$_}2..10,J,Q,K,A

6个文字换行符每个保存1个字节。 由于第2行和第4行中的单引号是为了不必通过转义反斜杠来节省1个字节,因此不能直接从命令行运行该命令

编辑:我把Ace放在开头,但应该放在结尾。它不会更改字节数。

编辑2:-11个字节:删除了一些不必要的语句,并添加了另一个文字换行符。现在,所有内容都通过一个printf输出。

编辑3:-5个字节,感谢@Ton Hospel。但是由于某种原因,与工作时相比,我在家中得到的是111个字节,而不是112个,所以我要使用家用计算机给我的字节数。


您不必引用是有效符号名称的文字,因此可以_ x10代替"_"x10。也qw几乎永远不会有用。在打高尔夫球。请改用不加引号的 J,Q,K,A()
格式

当我删除下划线周围的引号时,我得到了一个解释器错误:Can't locate object method "_" via package "x10" (perhaps you forgot to load "x10"?) at shuffle.pl line 1. 不知道为什么,但是我不会与解释器打架:(
Gabriel Benamy

1
打高尔夫球的次数更多(\n由实际的换行符代替):printf' %2$s\n/%3$10s\\n| %-9s|\n'.'|%3$10s|\n'x5 .'|%1$9s |\n\%s/\n',$_,"_"x10for 2..10,J,Q,K,A
Ton Hospel '16年

4

PHP,233字节

foreach([2,3,4,5,6,7,8,9,10,J,Q,K,A]as$k){for($c="",$i=0;$i<10;$i++)$c.=str_pad($i?$i>1&$i<9?"|":($i<2?"/":"\\"):" ",11,$i%9?" ":_).($i?$i>1&$i<9?"|":($i<2?"\\":"/"):" ")."\n";$c[113]=$c[28]=$k;$k>9&&$c[29]=$c[113]=0&$c[112]=1;echo$c;}

1
您的最后一个if可以替换为$k>9&&$c[29]=$c[113]=0&$c[112]=1;,以节省一些字节。另外,Notepad ++表示您的代码实际上是241个字节长。我知道这些字节中的1个来自换行符。但是另一个对我来说是个迷。
Ismael Miguel

3

///,182180字节

/+/_____//*/# |
&//&/@@@@@|# //%/ |
\\\\++\\\/
//$/ ++
\\\/!\\\\
| //#/       //!/#   //@/|!|
/$2*2%$3*3%$4*4%$5*5%$6*6%$7*7%$8*8%$9*9%$10#|
@@@@@|#10 |
\\++\/
$J*J%$K*K%$Q*Q%$A*A%

在线尝试!

-2个字节,感谢m-chrzan


您可以保存两个字节,方法+是仅替换5 _s,然后+在现在有single +的地方添加2。
m-chrzan '16

3

Python 3.5,110个字节

u='_'*10
for c in[*range(2,11),*'JQKA']:print(' %s\n/%%11s\n'%u%'\\'+'| %-6s%2s |\n'*7%(c,*' '*12,c)+'\%s/'%u)

版画

  • 最上面两行' %s\n/%%11s\n'%u%'\\',其中u'_'*10
  • 中间的7行'| %-2s %2s |\n',每行有两个字符串格式化插槽。第一个和最后一个填充有卡的值,其余填充有空格,则无效
  • 底线'\%s /'%u

Python 3.5的新解包功能在两个地方使用。标签列表[*range(2,11),*'JQKA']将数字和字母打包到一个列表中。并且,元组将(c,*' '*12,c)十二个空格的条目解压缩到中心。


2

Scala,161个字节

val a=" "*7
val u="_"*10
((2 to 10)++"JQKA")map(_+"")map{x=>val p=" "*(2-x.size)
s" $u \n/$a   \\\n| $x$p$a|\n" + s"|$a   |\n" * 5 + s"|$a$p$x |\n\\$u/\n"}

2

批处理,236字节

@echo off
for %%v in (2 3 4 5 6 7 8 9 10 J Q K A)do call:v %%v
exit/b
:v
set s=%1       %1
echo  __________
echo /          \
echo ^| %s:~0,8% ^|
for /l %%l in (1,1,5)do echo ^|          ^|
echo ^| %s:~-8% ^|
echo \__________/

我尝试用三种不同的方式打高尔夫球,但每次都以相同的字节数结束...


2

05AB1E71 70 68 66 65 64字节

使用CP-1252编码。

TL¦"JQKA"S«vð'_TשððT×…/ÿ\9yg-ð×y"| ÿÿ|"ÂðT×…|ÿ|5×sT‡®…\ÿ/JTä»,

略微修改的链接,因为在TIO atm上不起作用ÿ

在线尝试!

说明

TL¦"JQKA"S« 推列表 [2,3,4,5,6,7,8,9,10,J,Q,K,A]

然后,我们用 v

ð'_Tשð构造" __________ "
ðT×…/ÿ\构造"/ \"
9yg-ð×y"| ÿÿ|"Â具有卡值的2行(第二行是第一个反转的)
ðT×…|ÿ|5×构造以下形式的5行"| |"

然后我们

s     # move the 2nd card value row after the 5 "middle rows"
 T‡  # and replace 1 with 0 and vice versa

®…\ÿ/ 构造最底行

J       # join everything into 1 string
 Tä     # split into 10 parts
   »,   # merge by newline and print with newline

2

V,87字节

i ±_ 
/± \Ypr|$.Y6P3|r2Lhhr2o\±_/
H8ñy}GP2j6j? _ñ2j$X6jxG"04p/9
rJn.nrQn,nrKn.nrAn.

在线尝试!

由于其中包含一些不可打印的内容,因此这里是一个十六进制转储:

0000000: 6920 b15f 200a 2fb1 205c 1b59 7072 7c24  i ._ ./. \.Ypr|$
0000010: 2e59 3650 337c 7232 4c68 6872 326f 5cb1  .Y6P3|r2Lhhr2o\.
0000020: 5f2f 0a1b 4838 f179 7d47 5032 6a01 366a  _/..H8.y}GP2j.6j
0000030: 013f 205f f132 6a24 5836 6a78 4722 3034  .? _.2j$X6jxG"04
0000040: 702f 390a 724a 6e2e 6e72 516e 2c6e 724b  p/9.rJn.nrQn,nrK
0000050: 6e2e 6e72 416e 2e                        n.nrAn.

2

PHP,135个 131 158 134字节

希望我能找到一种方法来缩短这一点。

foreach([2,3,4,5,6,7,8,9,10,J,Q,K,A]as$C)printf(" %'_9s
/%12s| %-8s|%s
|%8s |
\\%'_9s/
",_,'\
',$C,str_repeat('
|         |',5),$C,_);

这利用了printf重复多个字符并很好地格式化所有内容的优势。


旧版本:

并不完全是一件美丽的事,但是很有效!

$L=__________;$S='        ';foreach([2,3,4,5,6,7,8,9,10,J,Q,K,A]as$C)echo" $L
/  $S\
| $C".($P=substr($S,$C>9))."|
",str_repeat("|  $S|
",5),"|$P$C |
\\$L/
";

感谢JörgHülsermann检测到一个错误并让我使用他的代码的一部分,从而减少了4个字节!并寻找致命的错误。


10看起来很奇怪。我相信你必须做额外的工作
约尔格Hülsermann

@JörgHülsermann你是对的。在10被窃听。如果我使用您的阵列可以吗?使用[2,3,4,5,6,7,8,9,10,J,Q,K,A]代替那个拆分可以为我节省4个字节。如果您不授权,我会理解的。
伊斯梅尔·米格尔

拿着。您已经在PHP中找到了更好的方法,并且我支持您所需要的一切。
约尔格Hülsermann

@JörgHülsermann谢谢。我正在寻找您的答案,并且找到了一些可以减少一些字节的地方。
伊斯梅尔·米格尔

相反的$C$S $C".($P=substr($S,$C>9))."处理空间与值10,而不是$S$C你需要再$P$C
约尔格Hülsermann

1

Ruby,115个字节

相当简单的使用printf

([*(?2.."10")]+%w{J Q K A}).map{|e|printf" #{u=?_*10} 
/%11s
| %-9s|
#{(?|+' '*10+"|
")*5}|%9s |
\\#{u}/
",?\\,e,e}

1

拍子327字节

(let*((ms make-string)(p #\space)(e? equal?)(sa string-append)(f(λ(s)(display(sa" "(ms 10 #\_)" \n""/"(ms 10 p)"\\\n""| "s
(ms(if(e? s"10")7 8)p)"|\n"(apply sa(for/list((i 6))"|          |\n"))"| "(ms(if(e? s"10")6 7)p)s" |\n"
"\\"(ms 10 #\_)"/\n")))))(for((i(range 2 11)))(f(number->string i)))(for((i'("J""Q""K""A")))(f i)))

取消高尔夫:

(define (main)
(let* ((ms make-string)
       (e? equal?)
       (sa string-append)
      (f(lambda(s)
  (display
   (sa
    " "
    (ms 10 #\_)
    " \n"
    "/"
    (ms 10 #\space)
    "\\\n"
    "| " s   (ms (if(e? s "10") 7 8) #\space)   "|\n"
    (apply sa (for/list ((i 6)) "|          |\n"))
    "| "  (ms (if(e? s "10") 6 7) #\space)  s " |\n"
    "\\" (ms 10 #\_) "/\n")
   ))))
(for ((i(range 2 11)))
  (f (number->string i)))
(for ((i '("J" "Q" "K" "A")))
  (f i))
))

测试:

(main)

输出:

 __________ 
/          \
| 2        |
|          |
|          |
|          |
|          |
|          |
|          |
|        2 |
\__________/
 __________ 
/          \
| 3        |
|          |
|          |
|          |
|          |
|          |
|          |
|        3 |
\__________/
 __________ 
/          \
| 4        |
|          |
|          |
|          |
|          |
|          |
|          |
|        4 |
\__________/
 __________ 
/          \
| 5        |
|          |
|          |
|          |
|          |
|          |
|          |
|        5 |
\__________/
 __________ 
/          \
| 6        |
|          |
|          |
|          |
|          |
|          |
|          |
|        6 |
\__________/
 __________ 
/          \
| 7        |
|          |
|          |
|          |
|          |
|          |
|          |
|        7 |
\__________/
 __________ 
/          \
| 8        |
|          |
|          |
|          |
|          |
|          |
|          |
|        8 |
\__________/
 __________ 
/          \
| 9        |
|          |
|          |
|          |
|          |
|          |
|          |
|        9 |
\__________/
 __________ 
/          \
| 10       |
|          |
|          |
|          |
|          |
|          |
|          |
|       10 |
\__________/
 __________ 
/          \
| J        |
|          |
|          |
|          |
|          |
|          |
|          |
|        J |
\__________/
 __________ 
/          \
| Q        |
|          |
|          |
|          |
|          |
|          |
|          |
|        Q |
\__________/
 __________ 
/          \
| K        |
|          |
|          |
|          |
|          |
|          |
|          |
|        K |
\__________/
 __________ 
/          \
| A        |
|          |
|          |
|          |
|          |
|          |
|          |
|        A |
\__________/

1

Java 7,287字节

String c(){String r="",l="__________",c=(" "+l+" \n/s\\\n| z       |\nxxxxxx|       y|\n\\"+l+"/\n").replace("x","|s|\n").replace("s","          ");for(int i=0;i++<13;r+=c.replace("z",i==10?"10":(l=i<2?"A ":i>12?"K ":i>11?"Q ":i>10?"J ":i+" ")).replace("y",i==10?"10 ":" "+l));return r;}

好的,这很丑陋,但效率不高,但是可以。. 10作为特殊情况,在顶部和底部之间留有一定的空间,这确实使每个人感到困惑。

取消测试代码:

在这里尝试。

class M{
  static String c(){
    String r = "",
           l = "__________",
           c = (" " + l + " \n/s\\\n| z       |\nxxxxxx|       y|\n\\" + l + "/\n")
                 .replace("x", "|s|\n")
                 .replace("s", "          ");
    for(int i = 0; i++ < 13; r += c
        .replace("z", i == 10
                       ? "10"
                       : (l = i < 2
                               ? "A "
                               : i > 12
                                  ? "K "
                                  : i > 11
                                     ? "Q "
                                     : i > 10
                                        ? "J "
                                        : i+" "))
        .replace("y", i == 10
                       ? "10 "
                       : " "+l));
    return r;
  }

  public static void main(String[] a){
    System.out.println(c());
  }
}

输出:

 __________ 
/          \
| A        |
|          |
|          |
|          |
|          |
|          |
|          |
|        A |
\__________/
 __________ 
/          \
| 2        |
|          |
|          |
|          |
|          |
|          |
|          |
|        2 |
\__________/
 __________ 
/          \
| 3        |
|          |
|          |
|          |
|          |
|          |
|          |
|        3 |
\__________/
 __________ 
/          \
| 4        |
|          |
|          |
|          |
|          |
|          |
|          |
|        4 |
\__________/
 __________ 
/          \
| 5        |
|          |
|          |
|          |
|          |
|          |
|          |
|        5 |
\__________/
 __________ 
/          \
| 6        |
|          |
|          |
|          |
|          |
|          |
|          |
|        6 |
\__________/
 __________ 
/          \
| 7        |
|          |
|          |
|          |
|          |
|          |
|          |
|        7 |
\__________/
 __________ 
/          \
| 8        |
|          |
|          |
|          |
|          |
|          |
|          |
|        8 |
\__________/
 __________ 
/          \
| 9        |
|          |
|          |
|          |
|          |
|          |
|          |
|        9 |
\__________/
 __________ 
/          \
| 10       |
|          |
|          |
|          |
|          |
|          |
|          |
|       10 |
\__________/
 __________ 
/          \
| J        |
|          |
|          |
|          |
|          |
|          |
|          |
|        J |
\__________/
 __________ 
/          \
| Q        |
|          |
|          |
|          |
|          |
|          |
|          |
|        Q |
\__________/
 __________ 
/          \
| K        |
|          |
|          |
|          |
|          |
|          |
|          |
|        K |
\__________/

1

R,175个字节

for(x in c(2:10,"J","Q","K","A")){r=c("|"," ",x,rep(" ",9-nchar(x)),"|");cat(" __________ \n/          \\\n",r,"\n",rep("|          |\n",5),rev(r),"\n\\__________/\n",sep="")}

这次在R中提出的颇具竞争力的答案是对acii艺术挑战,并且绝对可以打高尔夫球。

在R小提琴上尝试

脱节和解释

for(x in c(2:10,"J","Q","K","A")){          # For each card in vector 1,...,10,J,Q,K,A
    r=c("|"," ",x,rep(" ",9-nchar(x)),"|")  # Create variable for 3rd row called "r".
    ;cat(" __________ \n/          \\\n",   # Print: hardcoded top two rows,
    r,"\n",                                 # 3rd row,
    rep("|          |\n",5),                # Repeat middle section 5 times,
    rev(r),                                 # Reversed 3rd row,
    "\n\\__________/\n",                    # Hardcoded bottom row
    sep="")                                 # Set separator to empty string
}

保存几个字节最有趣的方面是第三行的分配:

r=c("|"," ",x,rep(" ",9-nchar(x)),"|")

因为8在表示卡值和末尾的字符之间总共有 空格|(除了10)我们可以重复9空格并减去当前打印卡中的字符数。

通过将3rd行中的每个字符作为其自己的元素存储在字符串向量中,r我们可以反转向量并将其重新用于9th行中。


1

C#,385字节

我的第一个ASCII Art挑战-很有趣!

打高尔夫球:

string D(){var d=new string[15];for(int i=2;i<15;i++){var a=i>10?new Dictionary<int,string>(){{ 11,"J"},{12,"Q"},{13,"K"},{14,"A"},}[i]:i+"";var r="|          |";d[i]=string.Join("\n",new string[]{" __________",@"/          \",a.Length>1?"| "+a+"       |":"| "+a+"        |",r,r,r,r,r,a.Length>1?"|       " + a +" |" : "|        "+a+" |",@"\__________/"});}return string.Join("\n",d);}

取消高尔夫:

public string D()
{
  var d = new string[15];

  for (int i = 2; i < 15; i++)
  {
    var a = i > 10 ? new Dictionary<int, string>() {
    { 11, "J" },
    { 12, "Q" },
    { 13, "K" },
    { 14, "A" },
    }[i] 
      : i+"";

    var r = "|          |";

    d[i] = string.Join("\n", new string[] {
      " __________",
      @"/          \",
      a.Length > 1 ? "| " + a + "       |" : "| " + a + "        |",
      r,
      r,
      r,
      r,
      r,
      a.Length > 1 ? "|       " + a +" |" : "|        " + a +" |",
      @"\__________/"});
  }

  return string.Join("\n", d);
}

1

实际上,是91个字节

"JQKA"#9⌐2x+`;k' ;'_9u*@++'\' 9u*'/++"| {:<9}|"5'|;' 9u*@++n"|{:>9} |"'/'_9u*'\++kp@'
jf`Mi

在线尝试!

说明

第1部分:设置面值列表:

"JQKA"#9⌐2x+`PART 2 CODE`Mi
       9⌐2x                  range(2,11) ([2, 10])
"JQKA"#    +                 extend with ["J", "Q", "K", "A"]
            `PART 2 CODE`M   do Part 2 for each item in list
                          i  flatten resulting list and implicitly print

第2部分:创建卡(\n为了便于阅读,将换行符替换为):

;k' ;'_9u*@++'\' 9u*'/++"| {:<9}|"5'|;' 9u*@++n"|{:>9} |"'/'_9u*'\++kp@'\njf
;k                                                                            duplicate the face value, push both copies to a list
  ' ;'_9u*@++                                                                 construct the top line
             '\' 9u*'/++                                                      construct the second line
                        "| {:<9}|"                                            create a format string to place the value in a left-aligned 9-width field in the top left of the card, one space away from the edge
                                  5'|;' 9u*@++n                               create 5 copies of the blank middle section
                                               "|{:>9} |"                     like before, but right-align the face value
                                                         '/'_9u*'/++          construct the bottom of the card
                                                                    kp@'\nj   push entire stack to a list, pop the list containing the face values out of that list, and join the rest (the card strings) with newlines
                                                                           f  format the card with the face values
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.