บัตรใบไหน


30

บทนำ

นานมาแล้วเมื่อฉันใช้รหัสเกมไพ่ที่มีการเล่นไพ่ตามปกติฉันใช้เพื่อระบุหมายเลขสำหรับการ์ดแต่ละใบและเรียกใช้ฟังก์ชันที่มีหมายเลขบางหมายเลขเพื่อรับการ์ด นี่เป็นแรงบันดาลใจให้ฉันทำสิ่งนี้

ดังนั้นสำหรับคนที่ไม่รู้จักไพ่ไพ่สำรับไพ่ประกอบด้วยไพ่ 52 ใบ (13 ใบในแต่ละชุดทั้งสี่คือ Hearts, Diamonds, Spades, Clubs) ในแต่ละชุดมีไพ่ 13 ใบ - อันดับแรกไพ่ที่มีหมายเลขตั้งแต่ 2-10 จากนั้นแจ็ค (J), ราชินี (Q), คิง (K) และเอซ (A) นี่คือคำสั่ง

ท้าทาย

ความท้าทายคือการใช้จำนวนเต็มระหว่าง 1-52 เป็นอินพุตและแสดงการ์ดที่ตำแหน่งนั้น แต่ผลลัพธ์ของคุณจะต้องเป็นคำพูด นอกจากนี้ยังต้องรักษาลำดับเช่นไพ่ 13 ใบแรกจะเป็นของ Hearts จากนั้น Diamonds จากนั้น Spades และสุดท้าย Clubs

ตัวอย่างเช่นหากมีคนเลือกหมายเลข30บัตรนั้นจะเป็นของชุดที่สามคือ Spades มันจะเป็นไพ่ใบที่สี่ในชุดสูทซึ่งหมายถึงหมายเลข 5 ดังนั้นผลลัพธ์ของคุณในคำจะต้องเป็น: five of spadesและควรเป็นไปตามรูปแบบนี้เช่นการ์ดใบแรกตามด้วยofและชื่อชุดที่ ท้ายที่สุดมีช่องว่างที่จำเป็นในระหว่าง

อินพุตและเอาต์พุต

อินพุตจะ เป็นจำนวนเต็มระหว่าง 1-52 (รวมทั้งสองอย่าง) โปรดทราบว่านี่นับเริ่มต้นจาก 1. คุณอาจเลือกที่จะเริ่มต้นจาก 0 อย่างไรก็ตามคุณต้องรักษาลำดับของไพ่ที่กล่าวไว้ข้างต้น ผลลัพธ์ของคุณควรเป็นการ์ดในตำแหน่งที่เขียนด้วยคำพูด คุณไม่จำเป็นต้องจัดการอินพุตที่ไม่ถูกต้อง นอกจากนี้ผลลัพธ์ของคุณอาจเป็นตัวพิมพ์เล็กหรือตัวพิมพ์ใหญ่

รับด้านล่างเป็นรายการของปัจจัยการผลิตที่เป็นไปได้และผลผลิตของพวกเขา:

1 -> two of hearts
2 -> three of hearts
3 -> four of hearts
4 -> five of hearts
5 -> six of hearts
6 -> seven of hearts
7 -> eight of hearts
8 -> nine of hearts
9 -> ten of hearts
10 -> jack of hearts
11 -> queen of hearts
12 -> king of hearts
13 -> ace of hearts
14 -> two of diamonds
15 -> three of diamonds
16 -> four of diamonds
17 -> five of diamonds
18 -> six of diamonds
19 -> seven of diamonds
20 -> eight of diamonds
21 -> nine of diamonds
22 -> ten of diamonds
23 -> jack of diamonds
24 -> queen of diamonds
25 -> king of diamonds
26 -> ace of diamonds
27 -> two of spades
28 -> three of spades
29 -> four of spades
30 -> five of spades
31 -> six of spades
32 -> seven of spades
33 -> eight of spades
34 -> nine of spades
35 -> ten of spades
36 -> jack of spades
37 -> queen of spades
38 -> king of spades
39 -> ace of spades
40 -> two of clubs
41 -> three of clubs
42 -> four of clubs
43 -> five of clubs
44 -> six of clubs
45 -> seven of clubs
46 -> eight of clubs
47 -> nine of clubs
48 -> ten of clubs
49 -> jack of clubs
50 -> queen of clubs
51 -> king of clubs
52 -> ace of clubs

เกณฑ์การให้คะแนน

นี่คือดังนั้นรหัสที่สั้นที่สุดชนะ


1
ไม่ใช่ลำดับเริ่มต้นของชุดสูทโดยปกติแล้วหัวใจ, ช่องว่าง, เพชร, ไม้กอล์ฟ (แดง, ดำ, แดง, ดำ) ไม่ว่ามันจะสำคัญสำหรับการท้าทายเพียงแค่สงสัยว่าทำไมมันถึงอยู่ในลำดับนี้
Kevin Cruijssen

3
มันแตกต่างกันไปในแต่ละเกม เกมที่แตกต่างทำตามคำสั่งที่แตกต่างกัน นอกจากนี้ยังมีการพูดคุยเกี่ยวกับการ์ดบางเกมยังมีเอซเป็นการ์ดที่ต่ำที่สุดในชุด
Manish Kundu

ฉันสามารถส่งออกtwo\s\s\sof\sheartsซึ่ง\sย่อมาจากพื้นที่? (สังเกตพื้นที่พิเศษสองแห่ง)
มนุษย์โดยรวม

2
@tallyallyhuman ขออภัย แต่จะต้องมี 1 ช่องว่างระหว่าง
Manish Kundu

คำตอบ:


31

Python 3 ,  115  90 ไบต์

from unicodedata import*
lambda n:name(chr(n%13+n%13//11+[6,0,4,2][-n//13]*8+127137))[13:]

ฟังก์ชันที่ไม่มีชื่อส่งคืนสตริงเป็นตัวพิมพ์ใหญ่

ลองออนไลน์!

อย่างไร?

อักขระ Unicode มีชื่อ ชื่อของเหล่านี้คล้ายกับ "PLAYING CARD TWO OF SPADES" ดังนั้นเราสามารถรับตัวละครของตัวละคร Unicode ที่เป็นตัวแทนของการ์ดที่ต้องการและตัดออก 13 ตัวแรกเพื่อให้ได้ผลลัพธ์ของเรา

อักขระ Unicode ที่น่าสนใจอยู่ในบล็อกดังนี้:

            0   1   2   3   4   5   6   7   8   9   A   B   C   D   E   F
U+1F0Ax     x   As  2s  3s  4s  5s  6s  7s  8s  9s  Ts  Js  x   Qs  Ks  x
U+1F0Bx     x   Ah  2h  3h  4h  5h  6h  7h  8h  9h  Th  Jh  x   Qh  Kh  x
U+1F0Cx     x   Ad  2d  3d  4d  5d  6d  7d  8d  9d  Td  Jd  x   Qd  Kd  x
U+1F0Dx     x   Ac  2c  3c  4c  5c  6c  7c  8c  9c  Tc  Jc  x   Qc  Kc  x                           

ในกรณีที่xไม่ใช่ตัวอักษรที่เราเป็น (สี่ในCคอลัมน์คือ "อัศวิน"; สามในFคือ "jokers"; หนึ่งใน0เป็นทั่วไป; ส่วนที่เหลือเป็นตัวละครที่สงวนไว้)

เช่นนี้เราสามารถเพิ่มค่าบางอย่างไปที่ 0x1F0A1 = 127137 (As) เพื่อค้นหาการ์ดที่เราต้องการ

มูลค่าที่จะเพิ่มนั้นซับซ้อนเพียงสามอย่าง:

  1. เราจำเป็นต้องเรียงลำดับชุดใหม่ (จาก s, h, d, c ถึง h, d, s, c)
  2. เราจำเป็นต้องจัดลำดับใหม่จาก (A, 2, ... , K ถึง 2, ... , K, A)
  3. เราต้องหลีกเลี่ยงคอลัมน์ที่ไม่มีการ์ดที่น่าสนใจ

โดยใช้ตัวเลือกหนึ่งในการจัดทำดัชนีที่ช่วยให้การใช้งานของส่วนจำนวนเต็มเชิงลบต่อดัชนีลงในอาร์เรย์ของการชดเชยแถวที่ชาญฉลาดสำหรับชุดใหม่สั่งซื้อที่มี[6,0,4,2][-n//13]*8+(อย่างมีประสิทธิภาพ[48,0,32,16][-n//13]) เราสามารถแล้วยังวางเอซเข้าไปในสถานที่ที่ถูกต้องด้วยn%13+แล้วหลีกเลี่ยง อัศวินในคอลัมน์Cด้วยn%13//11+(อย่างมีประสิทธิภาพ(n%13>10)+)


เช่นเดียวกับที่ฉันเริ่มต้นคำตอบเช่นนี้ (ฉันแน่ใจว่าฉันจะได้อีกต่อไป) ฉันเหลือบมองไปที่และเห็นคำตอบของคุณ ทำได้ดีนี่.
mbomb007

... และยังไบต์อื่นอยู่ที่นั่นเพื่อจะแข็งแรงเล่นกอล์ฟ :)
โจนาธานอัลลัน

13

Perl6 / Rakudo 70 ไบต์

ดัชนี 0

การใช้perl6 -peและไม่มีการบีบอัดพจนานุกรม:

chr('🂱🃁🂡🃑'.ords[$_/13]+($_+1)%13*1.091).uniname.substr(13)

มันแค่มองหาการ์ดใน Unicode (เริ่มจาก Ace) ถามชื่อและใช้มัน นี่เป็นเส้นทางที่คล้ายกัน (แม้ว่าฉันไม่รู้ในขณะนั้น!) ถึงคำตอบ Python ของ Jonathan Aitken - มีเพียงฉันดัชนีจาก 4 เอซทั้งหมดมากกว่า 4 ออฟเซ็ตจาก Ace of Spades และฉันคูณด้วย 1.091 เพื่อสร้างดัชนี ออกจากรายการ Knight ใน Unicode

ดูเอาต์พุตทั้งหมด (สำหรับค่าอินพุต 0 ถึง 51) https://glot.io/snippets/ez5v2gkx83

แก้ไขเพื่อรับมือกับ Knights ในเด็ค Unicode เพราะ Unicode

Perl6 ♥ Unicode


@JanathanAllan: มันกำหนดลำดับโดยใช้ไพ่พื้นฐาน 4 ใบ (อยู่ในลำดับที่ต้องการ) แต่เห็นได้ดีกับเหล่าอัศวิน - ฉันไม่ได้สังเกตเห็น แก้ไขที่ค่าใช้จ่ายของตัวละครอีกสองสามตัว
Phil H

@JanathanAllan: มีความไม่ถูกต้องในการนับคำตอบอื่น ๆ - ทุกคนพูดว่า 'bytes' เมื่อพวกเขาหมายถึงตัวอักษร คนที่มีการบีบอัดเป็นผู้กระทำความผิดที่ร้ายแรงที่สุด
Phil H

3
ฉันคิดว่าคุณจะพบว่าคนที่มีสตริงการบีบอัดที่มีสิ่งที่นำเสนอเป็น Unicode จริงมีหน้ารหัสของตัวเอง (นี้เป็นจริงสำหรับ Jelly, Husk, Charcoal & 05AB1E)
Jonathan Allan

ขอบคุณฉันไม่ได้ชื่นชมที่ทั้งหมด
Phil H

@PhilH หากคุณสงสัยว่าจำนวนไบต์นั้นถูกต้องคุณสามารถขอให้พวกเขาให้ hexdump
user202729

9

05AB1E , 54 ไบต์

0 การจัดทำดัชนี

“»€Å‹¡Šdesž…“#“‚•„í†ìˆÈŒšï¿Ÿ¯¥Š—¿—ÉŸÄ‹ŒÁà“#âí" of "ýsè

ลองออนไลน์!

คำอธิบาย

“»€Å‹¡Šdesž…“#                                          # push list of suits
              “‚•„í†ìˆÈŒšï¿Ÿ¯¥Š—¿—ÉŸÄ‹ŒÁà“#             # push list of ranks
                                           â            # cartesian product
                                            í           # reverse each
                                             " of "ý    # join on " of "
                                                    sè  # index into cardlist with input

@PhilH 05AB1E ใช้codepageเช่นเดียวกับคำตอบส่วนใหญ่ในการเล่นกอล์ฟภาษาที่นี่ใน PPCG
dzaima

ขออภัยไม่ได้ตระหนักว่าเรื่องนี้เป็นเรื่องธรรมดามาก
Phil H

@PhilH เอ๊ะมีหลายคนคิดแบบเดียวกันว่ายูนิโค้ดที่แสดงนั้นเป็นคะแนนส่ง ผมจะชอบ แต่ถ้ามันเป็นมาตรฐานที่นี่มักจะเชื่อมโยงหลายมิติเพจรหัสในชื่อเรื่อง (เช่นในคำตอบ SOGL ของฉัน)
dzaima

@dzaima: ฉันทำอย่างนั้นซักพัก แต่ฉันยังคงได้รับความคิดเห็นดังนั้นฉันจึงหยุด แต่ฉันเห็นด้วยมันคงจะดีถ้ารวมอยู่ในเทมเพลต TIO
Emigna

ฮ่า ๆ ฉันไม่ได้ดูคำตอบนี้ ... “»€Å‹ spadesž…“#"of "ì“‚•„í†ìˆÈŒšï¿Ÿ¯¥Š—¿—ÉŸÄ‹ŒÁà“#âí»- 54 ไบต์เช่นกัน!
Magic Octopus Urn

6

Python 2 , 167 148 bytes

n=input();print 'two three four five six seven eight nine ten jack queen king ace'.split()[n%13]+' of '+['hearts','diamonds','spades','clubs'][n/13]

ศูนย์การจัดทำดัชนี

ลองออนไลน์!

แก้ไข: Bubbler สร้างจุดยอดเยี่ยมโดยใช้วิธีการแยก (และให้คำตอบที่สั้นกว่า) ในบล็อกที่สองโดยใช้ split () ให้ผลนับไบต์เดียวกัน


ยินดีต้อนรับ! โดยค่าเริ่มต้นการส่งจะต้องจัดการกับอินพุตและเอาต์พุต; ดูงูหลามกฎสรุป
xnor

เข้าใจแล้วขอบคุณที่ชี้ให้เห็น!
PHC

1
141 ไบต์กับแลมบ์ดาและแยก พยายามสอดแทรกตัวอักษร[n%13::13]หรืออะไรสักอย่าง แต่ก็ไม่มีโชค
Bubbler

ขอบคุณที่ทำให้ฉันรู้ว่าการแยกจะช่วยประหยัดบางไบต์ ไบต์อื่นหายไปด้วยการแบ่งจำนวนเต็มเริ่มต้นของ Python2
PHC

4
140 ไบต์โดยใช้สัญกรณ์ร้อยละปัจจัยออกs; xnorชี้ให้เห็นในการแชท
Bubbler

6

R , 154 ไบต์

paste(el(strsplit("Two,Three,Four,Five,Six,Seven,Eight,Nine,Ten,Jack,Queen,King,Ace",",")),"of",rep(c("Hearts","Diamonds","Spades","Clubs"),e=13))[scan()]

ลองออนไลน์!

ใช้อินพุต (ทำดัชนี 1 รายการ) จาก STDIN และด้วยsource(...,echo=T)จะพิมพ์ผลลัพธ์ไปยังคอนโซล

มันไม่ได้สวย แต่มาสั้นกว่าทางออกที่ดีที่สุดที่ฉันสามารถใช้outer(นำเสนอด้านล่าง) ได้2 ไบต์ดังนั้นให้สิ่งนี้เป็นเครื่องเตือนใจให้ตรวจสอบแนวทางอื่น!

paste(                          # concatenate together, separating by spaces,
                                # and recycling each arg to match the length of the longest
el(strsplit("Two,...",",")),    # split on commas and take the first element
"of",                           # 
 rep(c("Hearts",...),           # replicate the suits (shorter as a vector than using strsplit
               e=13)            # each 13 times
                    )[scan()]   # and take the input'th index.

R , 156 ไบต์

outer(el(strsplit("Two,Three,Four,Five,Six,Seven,Eight,Nine,Ten,Jack,Queen,King,Ace",",")),c("Hearts","Diamonds","Spades","Clubs"),paste,sep=" of ")[scan()]

ลองออนไลน์!

เป็นหลักเช่นเดียวกับข้างต้น; อย่างไรก็ตามouterจะทำการรีไซเคิลอย่างถูกต้อง แต่ต้องตั้งค่าsep=" of "สำหรับการpasteทำนี้เพียงแค่ผมอีกต่อไป


6

อิโมจิโคเดะ , 202 ไบต์

🍇i🚂😀🍪🍺🐽🔫🔤two.three.four.five.six.seven.eight.nine.ten.jack.queen.king.ace🔤🔤.🔤🚮i 13🔤 of 🔤🍺🐽🔫🔤hearts.diamonds.spades.clubs🔤🔤.🔤➗i 13🍪🍉

0 จัดทำดัชนีแล้ว ลองออนไลน์!

คำอธิบาย :

🍇		start of the closure block
  i🚂		 closure takes an integer argument i
  😀		 print:
    🍪		  concatenate these strings:
      🍺🐽🔫🔤...🔤🔤.🔤🚮i 13  [a]
      🔤 of 🔤
      🍺🐽🔫🔤...🔤🔤.🔤➗i 13  [b]
    🍪
🍉

[a]:
🍺		tell Emojicode to dereference without checking
🐽		 get the nth element of the following array
  🔫		  create an array using the following string and separator
    🔤...🔤
    🔤.🔤
  🚮 i 13	n, i mod 13

[b]
🍺🐽🔫🔤...🔤🔤.🔤➗i 13
same but with ⌊i÷13⌋

10
อย่างใดมันก็ดูเหมือนว่า "dereferencing โดยไม่ต้องตรวจสอบ" เป็นเบียร์หนึ่งแก้ว
maxathousand

6

Excel, 156 ไบต์

=TRIM(MID("two  threefour five six  seveneightnine ten  jack queenking ace",1+MOD(A1,13)*5,5))&" of "&CHOOSE(1+(A1/13),"hearts","diamonds","spades","clubs")

การ์ดจาก 0-51 น่าเสียดายที่ Excel ไม่มีคุณสมบัติที่จะแปลง1เป็น"one"...

การใช้TRIMและMIDสั้นกว่าการใช้CHOOSEสำหรับค่าใบหน้า แต่นานกว่าการใช้CHOOSEสำหรับชุดสูท


ฉลาดด้วยMID()และรวมคำ!
BruceWayne

5

Java 8, 141 ไบต์

n->"two;three;four;five;six;seven;eight;nine;ten;jack;queen;king;ace".split(";")[n%13]+" of "+"hearts;diamonds;spades;clubs".split(";")[n/13]

อินพุตถูกทำดัชนี 0

คำอธิบาย:

ลองออนไลน์

n->         // Method with integer parameter and String return-type
  "two;three;four;five;six;seven;eight;nine;ten;jack;queen;king;ace".split(";")[n%13]
            //  Take `n` modulo-13 as 0-indexed card value
   +" of "  //  append " of "
   +"hearts;diamonds;spades;clubs".split(";")[n/13]
            //  append `n` integer-divided by 13 as 0-indexed suit

4

Kotlin , 154 152 140 ไบต์

i->"two,three,four,five,six,seven,eight,nine,ten,jack,queen,king,ace".split(',')[i%13]+" of ${"heart,diamond,spade,club".split(',')[i/13]}s"

ลองออนไลน์!

อัปเดตเพื่อใช้การแสดงออกแลมบ์ดา


ไม่เป็นไร
Nissa

2
ยินดีต้อนรับสู่ PPCG! ตอนแรกฉันรู้สึกท้อแท้กับภาษากอล์ฟ แต่มีบางคนบอกฉันว่า "มันเป็นคำตอบที่ดีที่สุดในแต่ละภาษาที่ชนะ" และฉันก็รู้ว่ามันเป็นการแข่งขันกับนักกอล์ฟคนอื่น ๆ ติดตามและฉันหวังว่าคุณจะสนุกกับเวลาของคุณที่นี่
Giuseppe

Lambdas ใน Kotlin (ซึ่งแตกต่างจาก Java) มักมีผู้นำ {และส่วนท้าย} เสมอ ดังนั้นบางทีคุณควรรวมและนับไว้ในโซลูชันของคุณ?
Roland Schmitz

3

JavaScript ES6, 124 118 ไบต์, ดัชนี 0

F= x=>(h=btoa`O
?NÞ{ñhº¿Å÷¿J,IëÞñ"6)Þý7§üô.yéÿ*)àüÿÿÿæ«·÷bjj'wû)i׿r[`.split`/`)[x%13]+` of ${h[x/13|16]}s`

console.log (F(51))

เวอร์ชัน Base64

eD0+KGg9YnRvYWBPCj9OGt578Wi6v8WK979KLH9J696f8SKCG382Kd79N6f8lpyT9C556f8qKeD8Bx7///+F5qu392Jqaid3+ylp179yW5tgLnNwbGl0YC9gKVt4JTEzXStgIG9mICR7aFt4LzEzfDE2XX1zYA==

การทดสอบออนไลน์ดูเหมือนขาด
l4m2

ไม่สามารถใช้งานกับ Chrome ได้
Luis felipe De jesus Munoz

ใช้งานได้กับ Firefox @Luis felipe De jesus Munoz
l4m2

รุ่น 118 ไบต์ของคุณวัดได้ 107 ตัวอักษร 136 ไบต์ที่นี่: mothereff.in/byte-counter
Phil H

1
@PhilH หากคุณถอดรหัส base64 ที่กำหนดของรหัสไปยังรายการไบต์ (เช่นใช้สิ่งนี้ ) คุณจะเห็นว่าจริง ๆ แล้วมันส่งผลให้ 118 ไบต์ที่กล่าวถึง
dzaima

3

Stax , 58 57 56 ไบต์

î↑à■?R╢8«E▄¡╔ÿ•L╫<<⌠ï∞∟⌡♪Ös1"TàLα╥▀¢¡◄└%≈δñM;;}'░o=⌡»╬í√

เรียกใช้และแก้ไขข้อบกพร่อง

นี่คือการแสดงความคิดเห็นของโปรแกรมเดียวกันที่ไม่ได้แสดงความคิดเห็น มันใช้ตัวอักษรที่ถูกบีบอัดของ stax อย่างมาก อินพุตถูกทำดัชนี 0 มันเป็นอัลกอริทึม 05AB1E ของ Emigna

`SsUI'S~pTU5T@T^Ez+`j   suits
`fV:l7eTkQtL*L2!CZb6u[&YNO4>cNHn;9(`j   ranks
|*  cross-product
@   index with input
r   reverse pair
`%+(`*  join with " of "

เรียกใช้อันนี้


3

Bash, 133 ไบต์

V=(two three four five six seven eight nine ten jack queen king ace hearts diamonds spades clubs)
echo ${V[$1%13]} of ${V[$1/13+13]}

เลือกที่จะใช้ 0 ตามตัวเลือกที่กำหนดสนับสนุน 0 (สองหัวใจ) ถึง 51 (เอซของสโมสร)


ยินดีต้อนรับสู่ PPCG!
Martin Ender

3

Husk , 52 ไบต์

;↔!Πmw¶¨×‼sÿẋδẎ₆ṡ⁷Ḃ6‰fωθ»&⌈θƒV₆x⁵▼Ëġ`nıEṅ'jĊk⁸"eïkÄc

ลองออนไลน์!

ฉันมีความสุขเสมอที่จะอวดระบบการบีบอัดสตริงของ Husk: D

คำอธิบาย

ส่วนใหญ่ของโปรแกรม (จาก¨เป็นต้นไป) เห็นได้ชัดว่าเป็นสตริงที่บีบอัด เมื่อไม่มีการบีบอัดจะเปลี่ยนเป็น:

hearts diamonds spades clubs
of
two three four five six seven eight nine ten jack queen king ace

โปรแกรมคือ:

;↔!Πmw¶¨…
       ¨…    The previous string
      ¶      Split on lines
    mw       Split each line into words
             - we now have a list of lists of words
   Π         Cartesian product of the three lists
             - with this we obtain all possible combinations of suits and values
               with "of" between the two (e.g. ["spades","of","king"])
  !          Pick the combination at the index corresponding to the input
 ↔           Reverse it, so words are in the correct order
;            Wrap it in a list. Result: [["king","of","spades"]]

มีสองสิ่งที่เหลือเพื่ออธิบาย:

  • เราสร้างไพ่ที่มีค่าก่อนเหมาะสมเนื่องจากวิธีการΠทำงานของผลิตภัณฑ์คาร์ทีเซียน: ถ้าเราทำอย่างอื่นรายการของการ์ดจะเรียงตามค่า (เช่นหัวใจสองดวงเพชรสองดวงจอบสองใบสองใบ สโมสรสามดวง ... ). ดังนั้นเราต้องย้อนกลับผลลัพธ์ของเรา

  • ผลลัพธ์ของโปรแกรมคือเมทริกซ์สองมิติของสตริง นี้จะถูกพิมพ์โดยอัตโนมัติโดย Husk เป็นสายเดียวที่สร้างขึ้นโดยการเข้าร่วมแถวของเมทริกซ์ที่มีการขึ้นบรรทัดใหม่และเซลล์ที่มีช่องว่าง เหตุผลที่เราสร้างเมทริกซ์นี้แทนที่จะใช้คำตรงไปตรงมามากขึ้นw(เข้าร่วมรายการคำที่มีช่องว่าง) ก็คือถ้าใช้wตัวพิมพ์ที่ด้อยกว่าเดาการตีความอีกครั้งสำหรับโปรแกรมทำให้เกิดผลลัพธ์ที่แตกต่างกัน


2

mIRCScript , 157 ไบต์

c echo $token(ace two three four five six seven eight nine ten jack queen king,$calc(1+$1% 13),32) of $token(clubs spades diamonds hearts,$calc(-$1// 13),32)

โหลดเป็นนามแฝงจากนั้นใช้: /c N. mIRC ได้รับการจัดทำดัชนี 1 ดังนั้นการแบ่งพื้น (//) กับค่าลบของอินพุตสร้าง -1 ถึง -4 ตามต้องการ



2

Haskell , 132 ไบต์

(!!)[v++" of "++s|s<-words"hearts diamonds spades clubs",v<-words"two three four five six seven eight nine ten jack queen king ace"]

ลองออนไลน์!

ฟังก์ชั่นที่ไม่ระบุชื่อโดยใช้ list comprehension เพื่อสร้างชุดค่าผสมและค่าทั้งหมดและสร้างดัชนีลงในรายการผลลัพธ์ด้วยอินพุต


2

F #, 174 168 ไบต์

ลบช่องว่างพิเศษออกตามที่ระบุไว้โดย Manish Kundu ขอบคุณ!

let c x=["two";"three";"four";"five";"six";"seven";"eight";"nine";"ten";"jack";"queen";"king";"ace"].[(x-1)%13]+" of "+["hearts";"diamonds";"spades";"clubs"].[(x-1)/13]

ลองออนไลน์!

ฉันจะซื่อสัตย์ - ฉันใหม่ที่โค้ดกอล์ฟดังนั้นฉันไม่รู้ว่าเหมาะสมกว่าที่จะตอบด้วยฟังก์ชั่นที่บริสุทธิ์เช่นนี้ (พร้อมพารามิเตอร์ แต่ไม่มี I / O) หรือบล็อกโค้ดที่ใช้งานได้กับผู้ใช้ I / O


1
-4 ไบต์โดยการลบช่องว่างที่ไม่จำเป็นออกเท่านั้น
Manish Kundu

ช่องว่างที่ผ่านมาฉันอย่างสมบูรณ์ เห็นดี! ขอบคุณมาก ๆ!
Ciaran_McCarthy

2

Octave , 155 153 151 150 bytes

@(x)[strsplit(' of ,s,heart,diamond,spade,club,ace,two,three,four,five,six,seven,eight,nine,ten,jack,queen,king',','){[mod(x,13)+7,1,ceil(2+x/13),2]}]

ลองออนไลน์!

สิ่งนี้สร้างสตริงที่ขึ้นต้นด้วย' of 'และ's'จากนั้นชุดทั้งหมดตามด้วยอันดับทั้งหมด สตริงนี้ถูกแบ่งที่เครื่องหมายจุลภาคเป็นสตริงแยกกัน ชุดสูทอยู่ก่อนอันดับเนื่องจากตั้งแต่นั้นจะบันทึกไบต์เมื่อสร้างดัชนี หลังจากนี้เราจัดทำดัชนีโดยใช้วงเล็บเหลี่ยมพร้อมดัชนีต่อไปนี้:

{[mod(x,13)+7,1,ceil(2+x/13),2]}

ซึ่งเป็นอันดับตามด้วยองค์ประกอบแรก ' of 'ตามด้วยชุดสูทตามด้วย's'ตามด้วยชุดสูทตามด้วย

มี's'ส่วนหนึ่งของชุดสูท (hearts,diamonds,spades,clubs ) แทนที่จะเป็นสตริงแยกต่างหากมีความยาวเท่ากัน แต่สนุกน้อยกว่า

การแยกตัวคั่นเริ่มต้นจะช่วยประหยัด 4 ไบต์ในstrsplit-call แต่ช่องว่างรอบ ๆ' of 'จะถูกลบออกและจะต้องเพิ่มด้วยตนเองทำให้มีต้นทุนเพิ่มขึ้นไบต์


2

V , 154 147 144 142 ไบต์

-7 ไบต์ขอบคุณ DJMcMayhem

13i1heart
2diamond
3spade
4club
ÚGxCtwo
three
four
five
six
seven
eight
nine
ten
jack
queen
king
aceH$A of 012j$d4ñ13jPñÍ «/ 
{ÀjYHVGpAs

ลองออนไลน์!

hexdump:

00000000: 3133 6931 6865 6172 740a 3264 6961 6d6f  13i1heart.2diamo
00000010: 6e64 0a33 7370 6164 650a 3463 6c75 620a  nd.3spade.4club.
00000020: 1bda 1647 7843 7477 6f0a 7468 7265 650a  ...GxCtwo.three.
00000030: 666f 7572 0a66 6976 650a 7369 780a 7365  four.five.six.se
00000040: 7665 6e0a 6569 6768 740a 6e69 6e65 0a74  ven.eight.nine.t
00000050: 656e 0a6a 6163 6b0a 7175 6565 6e0a 6b69  en.jack.queen.ki
00000060: 6e67 0a61 6365 1b16 4824 4120 6f66 201b  ng.ace..H$A of .
00000070: 3016 3132 6a24 6434 f131 336a 50f1 cd20  0.12j$d4.13jP.. 
00000080: ab2f 200a 7bc0 6a59 4856 4770 4173       ./ .{.jYHVGpAs

นี่คือการจัดเรียงทางลัด: ลองออนไลน์! มีความสุขเสมอที่ได้พบกับผู้ใช้ใหม่ V :)
DJMcMayhem

นี่คือเคล็ดลับบางประการ: 1) « == \+2)12dj == 13D
DJMcMayhem

ขอบคุณ! :) และฉันจะใช้òอย่างไร ฉันเหนื่อยò13j0Pòแทน4ñ13j0Pñแต่นั่นก็ไม่ยุติ
oktupol

ฉันก็ลองเช่นกัน ฉันไม่แน่ใจว่าทำไมมันไม่ยุติ อาจเป็นเพราะมันไม่ได้กระแทกที่ด้านล่างเพราะมีการPเพิ่มบรรทัดใหม่หรือไม่ นอกจากนี้คุณแน่ใจหรือว่าคุณต้องการ0ส่วนนั้น? ดูเหมือนว่าฉันจะไม่ทำงาน
DJMcMayhem

โอ้นั่นเป็นเรื่องจริง และคุณพูด0ถูกไม่จำเป็น
oktupol

2

C # , 219 207 202 197 ไบต์ (ดัชนี 0)

static string O(int i){string[]s={"two","three","four","five","six","seven","eight","nine","ten","jack","queen","king","ace","hearts","diamonds","spades","clubs"};return s[i%13]+" of "+s[i/14+13];}

ขอขอบคุณข้อมูลจาก @Ciaran_McCarthy และ @raznagul

รับอินพุตของ int I ลบ 1 เพื่อจับคู่การทำดัชนี 0 ของอาร์เรย์สตริงและส่งออกตัวเลขตาม I mod 13 และชุดตาม i / 14 + 13

ใช้งานได้ดีสำหรับกอล์ฟรหัสที่สองของฉันเพียงแค่สงสัยว่าฉันสามารถทำให้สั้นลงได้โดยใช้ LINQ หรืออย่างอื่น


2
ลงไปที่ 200โดยการลบ i -; และทำ - ฉันในดัชนีอาร์เรย์แรกแทน (ฉันได้ลดลงก่อนโมดูโลและยังคงเป็นเช่นนั้นสำหรับการหารต่อไปนี้) การลบ "ของ" ในอาร์เรย์ (ไม่จำเป็น?) และลบวงเล็บรอบ คำสั่ง return และเพิ่มช่องว่างหนึ่งระหว่าง return และ s [...
Ciaran_McCarthy

1
ความท้าทายช่วยให้อินพุตเป็นดัชนี 0 เพื่อให้i++สามารถลบออกได้อย่างสมบูรณ์ โดยการแปลงฟังก์ชันการแลมบ์ดาฉันได้มันลงไป 178 ไบต์
raznagul

2
ตอนแรกฉันคิดคำตอบ 163 ไบต์ (ดูลิงค์ด้านบน) ฉันตัดสินใจที่จะไม่โพสต์เพราะ 1-1 ท่าเรือ@KevinCruijssen s คำตอบ Javaจะยังคงเป็นที่สั้นกว่า บางทีหลังจากนั้นฉันก็พยายามหาคำตอบของ Linq เพื่อเห็นแก่ แต่ฉันสงสัยว่ามันจะสั้นกว่านี้ โดยเฉพาะอย่างยิ่งเนื่องจาก Linq เริ่มต้นด้วยการขาดดุล 18 ไบต์สำหรับusing-Statement อย่างไรก็ตาม +1 จากฉัน
raznagul

ขอบคุณ Ciaran_McCarthy raznagul สำหรับข้อมูลของคุณลงไปที่ 202 ตอนนี้โปรดแจ้งให้เราทราบหากคุณเห็นสิ่งอื่นใดที่สามารถเล่นกอล์ฟเพิ่มเติมได้
James m

1
คุณยังคงมีความฟุ่มเฟือย"of"ในอาร์เรย์
raznagul

2

PowerShell , 207 192 182 174 165 163 161 157 ไบต์

0 การจัดทำดัชนี

$args|%{(-split'two three four five six seven eight nine ten jack queen king ace')[$_%13]+' of '+('hearts','diamonds','spades','clubs')[$_/13-replace'\..*']}

ลองออนไลน์!

บันทึกได้ 4 ไบต์ขอบคุณ AdmBorkBork ในความคิดเห็น


คุณสามารถเอก-splitในช่องว่างที่จะบันทึก 6 ไบต์-split'two three four five six seven eight nine ten jack queen king ace'และไบต์อื่นโดยใช้แบบอินไลน์แทนที่แทนชั้น $_/13-replace'\..*'
AdmBorkBork

@AdmBorkBork ขอบคุณสำหรับเคล็ดลับ! คุณจะได้รับ 6 ไบต์จากการเปลี่ยน -split อย่างไร ฉันเห็นการออมของ 3 ไบต์เท่านั้น ดูเหมือนว่าจะยังต้องการวงเล็บอยู่ดังนั้นฉันแค่ลบ ',' และสั่งซื้อส่วนที่เหลืออีกครั้ง
Nik Weiss

ฉันไม่แน่ใจว่าฉันมากับ 6 มันเป็นเพียงออมทรัพย์ 3, lol
AdmBorkBork






1

Javascript 149 143 140 ไบต์

a=_=>"two three four five six seven eight nine ten jack queen king ace".split` `[_%13]+' of '+["hearts","diamonds","spades","clubs"][_/13|0]

-3 bits ด้วย@rick hitchcock

a=_=>"two three four five six seven eight nine ten jack queen king ace".split` `[_%13]+' of '+["hearts","diamonds","spades","clubs"][_/13|0]
console.log(a(14))
console.log(a(34))
console.log(a(51))
console.log(a(8))
console.log(a(24))


1
บันทึก 3 ไบต์โดยไม่[_/13|0]แยกแถวที่สองและโดยการจัดทำดัชนีด้วย ตัวอย่างเช่น: ["hearts","diamonds","spades","clubs"][_/13|0]
Rick Hitchcock

ฉันไม่คิดว่าคุณต้องการa=เพราะฟังก์ชั่นของคุณไม่ได้ซ้ำ
Oliver


1

Japt , 91 86 ไบต์

0 การจัดทำดัชนี

ฉันใช้เครื่องมือที่เขียนโดย @Shaggyเพื่อสร้างรายการที่บีบอัด

`{`twodÈ(‚fÆfivÀ£xç P ightdÍÂdȈjackdquÁÈkˆg»­`qd gU}  {`Ê#tsk¹aÚˆäi£kclubs`qk gUzD

ลองออนไลน์!

คำอธิบาย:

dสายแรกที่บีบอัดมีค่าบัตรคั่นด้วย kสตริงบีบอัดที่สองมีการจัดอันดับบัตรคั่นด้วย

ตัวอักษรเหล่านี้ถูกเลือกโดยใช้เครื่องมือของ Shaggy ซึ่งสร้างสตริงที่คั่นด้วยอักขระที่ถูกบีบอัดอย่างเหมาะสมโดยใช้ shoco (การบีบอัดที่ Japt ใช้) สิ่งนี้ทำให้เราสามารถสร้างรายการค่าบัตรและอันดับ

เราใช้ backticks `เพื่อคลายการบีบอัดสตริงเหล่านี้จากนั้นเราแบ่งการใช้สตริงqตามด้วยถ่านเพื่อแยก

เมื่อเรามีรายการเราจะจับคู่ค่าบัตรจากนั้นเราจะได้ดัชนีของอินพุต เป็นสิ่งสำคัญที่จะต้องทราบว่า Japt ล้อมดัชนีของมันดังนั้นเราไม่จำเป็นต้องโมดูโลด้วย 13

ที่แต่ละรายการเราวนรอบอันดับการ์ด เราได้รับดัชนีโดยการหารอินพุทด้วย 13

เมื่อเรามีรายการทั้งสองแล้วเราจะต่อกันเข้าด้วย" of "กันซึ่งจะสร้างสตริงสุดท้าย


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