สับเปลี่ยนและจัดการ!


14

มันเป็นวันศุกร์และฉันก็เหนื่อยดังนั้นเรามาทำเรื่องด่วนกันเถอะ! ไม่มีการป้อนข้อมูล แต่คุณควรส่งออกบัตรหมายเลขที่แตกต่างกันทั้งหมด 13 ใบในสำรับไพ่มาตรฐาน คุณควรเอาต์พุต 2 ถึง Ace (Suit agnostic)

บัตรแต่ละคนมีด้านบนที่จะแสดงกับพื้นที่ และสิบและพื้นที่อื่น_

แถวที่สองจากด้านบนแสดงด้วย a /และสิบช่องว่าง และ a\

แถวที่สามนั้นเหมือนกับแถวตรงกลางทั้งหมดยกเว้นอักขระที่แสดงถึงค่าของการ์ดปรากฏว่ามีช่องว่างสองช่องทางด้านขวา (ถ้าอยู่ด้านบน) หรือสองช่องทางด้านซ้าย (ถ้าอยู่ด้านล่าง) ของขอบ

แต่ละแถวกลาง ish ง่าย|และสิบช่องว่าง และอีกหนึ่ง|

ในที่สุดบรรทัดสุดท้ายคือ\และสิบ_และในที่สุดก็/

หากค่าเป็นตัวเลขหลายหลักความกว้างโดยรวมตามความสูงของการ์ดไม่ควรเปลี่ยนแปลง (เช่น 10 จะไม่ทำให้ด้านกว้างของการ์ด)

ตัวอย่าง King:

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

9 ตัวอย่าง

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

10 ตัวอย่าง

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

ส่งออกตามลำดับจากน้อยไปหามากที่สุด (เอซสูง!)

นี่คือโค้ดกอล์ฟเพื่อให้โค้ดที่สั้นที่สุดชนะ

ขอให้สนุกและมีความสุขในวันหยุดสุดสัปดาห์!


2
เราขอตัวอย่าง 10 อันเพื่อดูว่า 10 ต่ำกว่าติดขอบขวาหรือไม่?
Sunny Pun

@SunnyPun ทำไมแน่นอน
jacksonecac

1
ควรจัดไพ่ในแนวตั้งแนวนอนหรือไม่เป็นไร?
DLosc

ตัวเลือกผู้เล่นจากซ้ายไปขวาหรือจากบนลงล่าง
jacksonecac

คำตอบ:


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และไม่ concatenation อาร์เรย์กับ-arraychar ฟีดที่เป็นห่วงJQKA |%{...}การวนซ้ำแต่ละครั้งเราตั้งค่า$zเท่ากับจำนวนช่องว่างที่เหมาะสม (ขึ้นอยู่กับว่าเราอยู่ที่การ์ด10หรือไม่) ตั้งค่า$xเป็น10ขีดล่างและตั้ง$yเป็น10ช่องว่าง

จากนั้นเราเริ่มตำแหน่งของเรา เราจะใช้ประโยชน์จากค่าเริ่มต้น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

[เขย่ากำปั้น] คุณจะตีฉันทีละ 3 ไบต์ สามไบต์ !!
Gabriel Benamy

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
Holy Moly นั้นเร็ว
jacksonecac

จำนวนไบต์ของคุณดูเหมือนจะปิด (ฉันนับ 155) อย่างไรก็ตามหากคุณสร้างตัวแปรv="_"*10และแทนที่อินสแตนซ์เหล่านั้นจะช่วยให้คุณประหยัดอีกไบต์!
Kade

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 ขอบคุณฉันลืมมันในคำตอบอื่น ๆ ของฉันด้วย
Neil

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แทบไม่เคยมีประโยชน์ ในสนามกอล์ฟ ใช้ unquote J,Q,K,Aแทน (แม้จะออกไป())
Ton Hospel

ฉันได้รับข้อผิดพลาดของล่ามเมื่อฉันลบเครื่องหมายคำพูดรอบขีดล่าง: 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

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 ในไบต์เหล่านั้นมาจาก newline แต่อีกอันหนึ่งก็เป็นหน้าที่ของฉัน
Ismael Miguel

3

///, 182 180 ไบต์

/+/_____//*/# |
&//&/@@@@@|# //%/ |
\\\\++\\\/
//$/ ++
\\\/!\\\\
| //#/       //!/#   //@/|!|
/$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 _วินาทีแล้วมีสอง+วินาทีที่คุณมี+ตอนนี้เดียว
m-chrzan

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']แกะตัวเลขและตัวอักษรออกเป็นหนึ่งรายการ และ tuple (c,*' '*12,c)ปลดล็อคช่องว่างสิบสองช่องเข้าไปในกึ่งกลาง


2

สกาลา, 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

05AB1E , 71 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.

ลองออนไลน์!

เนื่องจากสิ่งนี้มีบาง unprintables นี่คือ hexdump:

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 คนดูแปลก ๆ ฉันเชื่อว่าคุณต้องทำงานพิเศษ
JörgHülsermann

@ JörgHülsermannคุณพูดถูก 10ถูกดักฟัง ไม่เป็นไรถ้าฉันใช้อาเรย์ของคุณ? การใช้[2,3,4,5,6,7,8,9,10,J,Q,K,A]แทนการแบ่งนั้นจะช่วยฉัน 4 ไบต์ หากคุณไม่อนุญาตฉันจะเข้าใจ
Ismael Miguel

เอาไป. คุณสร้างวิธีที่ดีกว่าใน PHP และฉันสนับสนุนทุกสิ่งที่คุณต้องการ
JörgHülsermann

@ JörgHülsermannขอบคุณ ฉันกำลังดูคำตอบของคุณและฉันกำลังค้นหาสถานที่บางแห่งที่จะตัดออกไบต์
Ismael Miguel

แทนที่จะ$C$S $C".($P=substr($S,$C>9))."จัดการกับช่องว่างด้วยค่า 10 และแทนที่จะ$S$Cต้องการ$P$C
JörgHülsermann


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

Ungolfed:

(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เป็นกรณีพิเศษที่มีช่องว่างก่อนที่ด้านบนและด้านหลังในตำแหน่งด้านล่างจริงๆแล้วสกรูกับทุกคน ..

Ungolfed & รหัสการทดสอบ:

ลองที่นี่

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 ในครั้งนี้สำหรับความท้าทายแบบ ascii-art และแน่นอนว่าสามารถเล่นกอล์ฟได้

ลองใช้กับ R-fiddle

Ungolfed และอธิบาย

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 ครั้งแรกของฉัน - มันสนุก!

แข็งแรงเล่นกอล์ฟ:

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);}

Ungolfed:

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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.