สร้างสำรับไพ่


32

นี่คืออาร์เรย์ที่แสดงถึงสำรับไพ่มาตรฐานรวมถึง Jokers สองอัน

[
  "AS", "2S", "3S", "4S", "5S", "6S", "7S", "8S", "9S", "10S", "JS", "QS", "KS", 
  "AD", "2D", "3D", "4D", "5D", "6D", "7D", "8D", "9D", "10D", "JD", "QD", "KD", 
  "AH", "2H", "3H", "4H", "5H", "6H", "7H", "8H", "9H", "10H", "JH", "QH", "KH", 
  "AC", "2C", "3C", "4C", "5C", "6C", "7C", "8C", "9C", "10C", "JC", "QC", "KC", 
  "J", "J"
]

มันประกอบในลักษณะนี้:

  • มีสี่ชุด หัวใจโพดำเพชรและคลับ (H, S, D, C)
  • แต่ละชุดมีไพ่หนึ่งใบสำหรับตัวเลข 2 ถึง 10 รวมถึงไพ่ 'รูปภาพ' 4 ใบ, Ace, Jack, Queen และ King (A, J, Q, K)
  • สำหรับการรวมกันของชุดสูทและค่าควรมีหนึ่งรายการในอาเรย์ซึ่งเป็นสตริงและประกอบด้วยค่าตามด้วยชุดสูท (อนุญาตให้เว้นวรรคระหว่างสิ่งเหล่านี้)
  • นอกเหนือจากนั้นยังมีไพ่โจ๊กเกอร์สองใบ ('J')
  • กรุณาเขียนเป็นภาษาใดก็ได้
  • ตีกอล์ฟขึ้น! พยายามสร้างเอาต์พุตนี้ในจำนวนไบต์ที่น้อยที่สุด
  • ไม่สำคัญว่าจะเรียงลำดับผลลัพธ์ใด

2
@KevinCruijssen ถูกต้องแล้ว คำถามเริ่มต้นระบุหมายเลข 2 ถึง 10 และอาเรย์ของสตริงเป็นเอาต์พุต
AJFaraday

15
ฉันแค่สงสัยว่าคุณจะได้ 23456789 โดยการคูณจำนวนที่น้อยกว่า 2 ตัว ... เพื่อค้นพบว่ามันยอดเยี่ยม!
จับคู่

4
@ การจับคู่เนื่องจากลำดับของเอาต์พุตไม่สำคัญคุณอาจยังสามารถสร้างมันด้วยตัวเลขที่น้อยลงด้วยการสิ้นสุดด้วย2หรือ4หรืออย่างอื่นดังนั้นจึงไม่ได้เป็นไพรเมอร์อีกต่อไป
Kevin Cruijssen

5
กฎในความคิดเห็นจะไม่ถูกนับ หากเราไม่สามารถพิมพ์ผลการ STDOUT (และที่เป็นใหญ่ถ้าเป็นมันแทนที่ค่าเริ่มต้นของเราสำหรับ I / O และป้องกันไม่ให้ภาษาโดยไม่ต้องฟังก์ชั่นและอาร์เรย์สตริงจากการเข้าร่วม) กฎที่จะต้องมีการระบุไว้อย่างชัดเจนในข้อมูลจำเพาะท้าทาย
Dennis

7
แต่นั่นไม่ได้ตัดการแทนค่าสตริงของอาร์เรย์ดังกล่าวซึ่งสามารถพิมพ์ไปยัง STDOUT หากไม่ใช่สำหรับส่วนความคิดเห็นฉันไม่เคยคิดเลยว่าจะไม่ได้รับอนุญาต
Dennis

คำตอบ:



24

Bash 43 34 ไบต์

d=({A,J,Q,K,{2..10}}{H,S,D,C} J J)

ลองออนไลน์!



ฉันไม่คิดว่าเครื่องมือจัดฟันจะซ้อนได้ ขอบคุณ
เกล็นแจ็คแมน

และที่นี่ฉันกำลังคิดว่า "ฉันรู้ได้ว่าภาษาอะไรที่สะดวกผลิตภัณฑ์โดยตรงในรายการของสตริง" ฉันไม่ได้คิดเกี่ยวกับ glob เก่าที่ดี!
aschepler

1
เทคนิคการขยายปีกกาไม่ใช่รูปแบบ glob มันเป็นรูปแบบพิเศษของมันเอง
glenn jackman

13

brainfuck , 200 197 ไบต์

+[[<+>->++<]>]+<++++<<+++[->+++>+++++>+>+<<<<]>+.<<.>>.--<<<[->>+++<<]>>+>[<<.>.-.+>.<<.<<[>>>+.>.<<.<+<-]>[-<+>>>+<<]>>.>.<<.>+++++++++.>.<<.>+.>.<<.>++++++.>.,++++[-<-------->]>[[-<+>]>]<<[<]>>>]

ลองออนไลน์!

ใช้เซลล์เชิงลบหนึ่งเซลล์ (+1 ไบต์เพื่อแก้ไข), การห่อเซลล์ (ไบต์จำนวนมากเพื่อแก้ไข) และ 0 ใน EOF (+2 ไบต์เพื่อลบการพึ่งพา)

เอาท์พุท

J J 10H 2H 3H 4H 5H 6H 7H 8H 9H AH JH KH QH 10S 2S 3S 4S 5S 6S 7S 8S 9S AS JS KS QS 10D 2D 3D 4D 5D 6D 7D 8D 9D AD JD KD QD 10C 2C 3C 4C 5C 6C 7C 8C 9C AC JC KC QC

คำอธิบาย:

+[[<+>->++<]>]  Sets the tape to powers of 2 
          TAPE: 1 2 4 8 16 32 64 128 0 0'
+<++++<<+++[->+++>+++++>+>+<<<<]   Uses the 64 and the 128 to generate the suit letters
          TAPE: 1 2 4 8 16 32 0' 73 83 68 67
                                 I  S  D  C
>+.<<.>>.--<<     Prints the Jokers
<[->>+++<<]>>+>   Uses the 16 to create 49
          TAPE: 1 2 4 8 0 32 49 72' 83 68 67
                                 H   S  D  C
[  Loop over the suits
   <<.>.-.+>.<<.<<      Print the 10 card with a leading space
          TAPE: 1 2 4 8' 0 32 49 Suit
   [>>>+.>.<<.<+<-]  Use the 8 to print the other 8 number cards
          TAPE: 1 2 4 0' 8 32 57 Suit
   >[-<+>>>+<<]      Move the 8 back into place while also adding it to the 57
          TAPE: 1 2 4 8 0' 32 65 Suit

   >>.>.<<.         Print the Ace
   >+++++++++.>.<<. Print the Jack
   >+.>.<<.         Print the King
   >++++++.>.<<.    Print the Queen
          TAPE: 1 2 4 8 0 32 81' Suit
   >>,    Clear the current suit
   ++++[-<-------->]    Subtract 32 to get back to 49 (reusing the space is longer than just subtracting 32)
          TAPE: 1 2 4 8 0 32 49 0' MoreSuits?
   >[[-<+>]>]<<[<]>>>   Shift all the remaining suits over one
          TAPE: 1 2 4 8 0 32 49 Suit?'
] End on the character of the next suit and repeat

นั้นสั้นกว่าโซลูชันของฉันมากกว่า 2.5 เท่า ทำได้ดี.
ผู้ชายที่สุ่ม

11

05AB1E , 28 27 25 24 23 ไบต์

2TŸ.•-Ÿ•S«.•ôì•âJ„jjS«u

ลองออนไลน์

-1 ขอบคุณไบต์@EmignaลบSหลังจาก"HSDC"เพราะâไม่นี้โดยปริยาย

คำอธิบาย:

2TŸ           # Push list in the range [2,10]: [2,3,4,5,6,7,8,9,10]
   .•-Ÿ•      # Push compressed string "ajqk"
        S     # Convert it to a list of characters: ["a","j","q","k"]
         «    # Merge the two lists together: [2,3,4,5,6,7,8,9,10,"a","j","q","k"]
.•ôì•         # Push compressed string "cdhs"
â             # Cartesian product of each (pair each character of both lists):
              #  [[2,"a"],[2,"d"],[2,"h"],...,["k","d"],["k","h"],["k","s"]]
J             # Join each pair together to a single string:
              #  ["2a","2d","2h",...,"kd","kh","ks"]
jjS          # Push string "jj", and convert it to a list of characters: ["j","j"]
    «         # Merge both lists together:
              #  ["2a","2d","2h",...,"kd","kh","ks","j","j"]
     u        # Convert everything to uppercase:
              #  ["2A","2D","2H",...,"KD","KH","KS","J","J"]
              # (and output the result implicitly)

ดู 05AB1E นี้เคล็ดลับของฉัน (ส่วนวิธีการบีบอัดสตริงไม่ใช่ส่วนหนึ่งของพจนานุกรม? )จะเข้าใจว่าทำไม.•-Ÿ•เป็น"ajqk"และเป็น.•ôì•"cdhs"


9

brainfuck , 550 504 ไบต์

++++++++++[>+++>+++++>+++++++<<<-]>++>->[>+>+>+>+<<<<-]>----->++++.<<<<.>>>>.<<<<.>>>>>--->+++++++++++++<<<<<.-.+>>>>.<<<<<.>.-.+>>>>+.<<<<<.>.-.+>>>>++++.-----<<<<<.>.-.+>>>>>.<<<<<<.>>++++++++[-<+.>>>>.<<<<<.>.>>>>+.<<<<<.>.>>>>++++.-----<<<<<.>.>>>>>.<<<<<<.>>]>.>>.<<<<<.>>>>.>.<<<<<.>>>>+.>.<<<<<.>>>>++++++.>.<<<<<.>>>.>>+.<<<<<.>>>>.>.<<<<<.>>>>------.>.<<<<<.>>>>-.>.<<<<<.>>>.>>++++.<<<<<.>>>>.>.<<<<<.>>>>+.>.<<<<<.>>>>++++++.>.<<<<<.>>>.>>>.<<<<<<.>>>>.>>.<<<<<<.>>>>------.>>.<<<<<<.>>>>-.>>.

ลองออนไลน์!

คำตอบเก่ายังออนไลน์!


8

Java 10, 153 151 125 77 75 ไบต์

v->("AJQK2345678910".replaceAll("1?.","$0H,$0S,$0D,$0C,")+"J,J").split(",")

-28 ไบต์ขอบคุณที่@ OlivierGrégoire
-50 ไบต์ขอบคุณที่@mazzy

ลองออนไลน์

คำอธิบาย:

v->                      // Method with empty unused parameter and String-array return-type
  "AJQK2345678910"
   .replaceAll("1?.",    //  Replace every loose character (or "10" as single char)
     "$0H,$0S,$0D,$0C,") //  with "cH,cS,cD,cC,", where c is the character
   +"J,J")               //  Append "J,J"
  .split(",")            //  And split everything by commas


3
ลอง"AJQK2345678910".replace("1?.","$0H,$0S,$0D,$0C,")+"J,J"และแยกมัน
mazzy

1
Smart @mazzy ขอบคุณ และแก้ไขแล้ว Olivier :)
Kevin Cruijssen

2
เย็น! ฉันเชื่อว่าเป็นไปได้ที่จะลบ 2 ไบต์ขึ้นไป - วงเล็บเหลี่ยมในรูปแบบ ดูregex101.com/r/aDbz9C/1
mazzy

1
@mazzy โอ้ไม่รู้ด้วยซ้ำว่า$0เป็นไปได้ใน Java ขอบคุณ :)
Kevin Cruijssen

7

APL (Dyalog Unicode) , 29 ไบต์

บันทึก 1 ไบต์ขอบคุณ Probie โดยใช้1+⍳9แทน1↓⍳10

'JJ',,'HCDS'∘.,⍨'AKJQ',⍕¨1+⍳9

ลองออนไลน์!

นี่เป็นโปรแกรมเต็ม ในลิงก์ TIO ฉันได้เปิดใช้งานการชกมวยเพื่อให้สามารถแยกองค์ประกอบแต่ละส่วนของอาร์เรย์ได้

นี่คือเอาต์พุตแบบกล่อง

┌─┬─┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬───┬───┬───┬───┐
JJAHACADASKHKCKDKSJHJCJDJSQHQCQDQS2H2C2D2S3H3C3D3S4H4C4D4S5H5C5D5S6H6C6D6S7H7C7D7S8H8C8D8S9H9C9D9S10H10C10D10S
└─┴─┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴───┴───┴───┴───┘

'JJ', 2 jokers ต่อกันกับ

, รูปแบบ raveled ของ

∘.,⍨ เมทริกซ์ที่สร้างขึ้นโดยการต่อกันทุก ๆ

  • 'HCDS' สายนี้เทียบกับ

  • 'AKJQ', สายนี้ด้วย

    • ⍕¨ รูปแบบที่ถูกทำให้เป็นสตริงของแต่ละส่วน

      • 1+⍳9 ตัวเลข 2..10 (1 บวกช่วง 1..9)

ฉันได้เปลี่ยนการเยื้องของรายการของคุณในคำอธิบาย มันดูแปลก ๆ กับจุดสองหรือสามจุด .. ถ้านั่นมีเหตุผลด้วยเหตุผลบางอย่างรู้สึกอิสระที่จะย้อนกลับ
Kevin Cruijssen

@KevinCruijssen ขอบคุณฉันไม่สามารถหาวิธีที่จะทำดังนั้นฉันจึงใช้กระสุนหลายจุดฮ่า ๆ
Kritixi Lithos

ใช่ฉันคิดอย่างนั้นนั่นคือเหตุผลที่ฉันเปลี่ยนมัน :) คุณต้องมีช่องว่างนำหน้าสี่รายการก่อนที่-จะเยื้อง
Kevin Cruijssen

7

Befunge-98 (FBBI) , 75 ไบต์

j4d*1-2k:d%4+1g:'0-!#v_>,d/1g,' ,!#v_3
CHSDA234567890JQK@;1'< ^,;,k2"J J" <

ลองออนไลน์!

โครงสร้างโปรแกรม

ป้อนคำอธิบายรูปภาพที่นี่

ในตอนแรกสแต็กจะเต็มไปด้วย0's และjไม่กระโดดข้ามการเริ่มต้น การเริ่มต้นผลัก4 * 13 = 52ซึ่งเป็นเคาน์เตอร์โปรแกรม ในการวนซ้ำต่อไปนี้การตามมา3จะทำให้ตัวชี้กระโดดข้ามส่วนนี้

1-2k:d%4+1g,d/1g,' ,!#v_  Main loop

1-                        decrement counter
  2k:                     duplicate counter three times
     d%                   counter mod 13 ...
       4+                 ... + 4 is the position of the card in the Data section
         1g,              get the card from row 1 and print it
            d/            counter / 13 is the position of the suit in the Data section
              1g,         get the suit from row 1 and print it
                 ' ,      print a space as seperator
                    !     negate the counter (0 for non-zero, 1 for 0)
                       _  If the counter is 0, move West ...
                     #v   ... and move to the termination
                          otherwise, continue with the next iteration

รหัสที่พิมพ์ 10:

'0-!#v_>    Checks if Card is '0'

'0-         subtract the '0' from the card
   !        negate (1 for '0', 0 for all other cards)
      _     If card was '0', move West
    #v        and go South to print '10'
            Else continue to go East

  ;1'< ^,;  Prints '10'

     <      Go West
   1'       Push '1'
  ;         Jump to ...
         ;  ... the next semicolon
        ,   Print '1'
       ^    Go back to the main loop
            The '0' will be printed by the main loop

สิ้นสุด:

@; ... ;,k2"J J" <

                 <  Go West
           "J J"    Push "J J"
        ,k2         Print it
       ;            Jump to ...
 ;                  ... the next semicolon
@                   terminate the program

7

R , 65 ไบต์

c(outer(c('A',2:10,J<-'J','Q','K'),c('S','D','H','C'),paste),J,J)

ลองออนไลน์!

-2 Bytes ขอบคุณ @Giuseppe และคำแนะนำ @JayCe


1
นี่คือคำตอบที่แน่นอนของฉันแม้ว่าฉันคิดว่าฉันใช้อัญประกาศแทนคำพูดเดียว
Giuseppe

ขออภัยฉันได้โพสต์คำตอบของคุณเป็นสองเท่าหรือไม่? ฉันจะตรวจสอบ แต่ฉันไม่สามารถหาคำตอบใด ๆ ... R
digEmAll

โอ้ไม่ฉันเพิ่งพิมพ์มันทั้งหมดใน TIO ก่อนที่จะเห็นคุณ :-)
Giuseppe

1
ใช่ด้านนอกเป็นวิธีที่จะไปที่นี่อย่างแน่นอน! pasteแม้ว่าช่องว่างจะอนุญาตให้ใช้ได้ตามสเป็คเพื่อให้คุณสามารถบันทึกหนึ่งไบต์โดยใช้ @Giuseppe ด้วย
JayCe

ฉันชี้ให้เห็นถึงคำตอบของ JayCe แต่คุณสามารถตั้งค่าx<-'J'ภายในouterแล้วใช้xเป็นตัวแปรในc()คำสั่งนอกสุดเพื่อกำจัดไบต์: ลองออนไลน์!
Giuseppe

6

Powershell, 63 61 59 56 ไบต์

-3 ไบต์: ขอบคุณConnorLSW

2..10+'AJQK'[0..3]|%{"$_`H";"$_`S";"$_`D";"$_`C"};,'J'*2

1
-3 ใช้ string to array สำหรับส่วนแรก:2..10+'AJQK'[0..4]|%{"$_`H";"$_`S";"$_`D";"$_`C"};,'J'*2
colsw

1
เย็น! ความคิดใด ๆ วิธีการลบ `` ``?
mazzy

1
เท่าที่ฉันรู้ว่าเป็นวิธีที่ถูกที่สุดในการแยกตัวแปรในสตริงฉันลองดูที่ลูป แต่มันมีราคาแพงกว่าด้วย 2 ตัวอักษรเพื่อทำเช่นนั้น
colsw


5

Python 3 , 67 64 ไบต์

print(*[a+b for a in['10',*'A23456789JQK']for b in'CHSD'],*'JJ')

ลองออนไลน์!


Python 2 , 78 76 74 68 ไบต์

print['1'*(a<'1')+a+b for a in'A234567890JQK'for b in'CHSD']+['J']*2

ลองออนไลน์!

สำรอง:

Python 2 , 68 ไบต์

print[a+b for a in['10']+list('A23456789JQK')for b in'CHSD']+['J']*2

print['1'[a>'0':]+a+b for a in'A234567890JQK'for b in'CHSD']+['J']*2

ที่บันทึกไว้

  • -3 ไบต์ขอบคุณ ovs

นั่นเป็นคำตอบที่ค่อนข้างละเอียด ...
AJFaraday


หากเราไม่จำเป็นต้องใช้printเราไม่สามารถทำได้[*[a+b for a in['10',*'A23456789JQK']for b in'CHSD'],*'JJ']ใน 59 ไบต์ โซลูชัน Haskell ไม่จำเป็นต้องส่งออกไปยัง stdout ทำไม Python จะต้อง
Enrico Borba

5

K (ngn / k) , 30 ไบต์

"JJ",/("AKQJ",$2+!9),'/:"SHDC"

ลองออนไลน์!

!9 เป็นรายการ 0 1 ... 8

2+!9 เป็นรายการ 2 3 ... 10

$ เพื่อสตริง

, concatenate

,'/:เชื่อมต่อกันด้วยสิทธิ์แต่ละชิ้นเช่นผลิตภัณฑ์คาร์ทีเซียน ปกติแล้วจะเป็น,/:\:หรือ,\:/:แต่ทางด้านขวาเรามีสเกลาร์ ( "SHDC") เท่านั้นดังนั้นเราจึงสามารถใช้'แทน\:

"JJ",/เข้าร่วม (ลดการเชื่อมต่อ) รายการด้านขวาโดยใช้"JJ"เป็นค่าเริ่มต้นสำหรับการลด


5

MS-SQL, 137 ไบต์

SELECT v.value+s.value
FROM STRING_SPLIT('A-2-3-4-5-6-7-8-9-10-J-Q-K','-')v,STRING_SPLIT('H-S-D-C--','-')s
WHERE s.value>''OR v.value='J'

อาร์เรย์ของค่าใน SQL จะถูกส่งกลับเป็นแถวคิวรีแยกต่างหาก ใช้STRING_SPLITฟังก์ชั่นแนะนำใน SQL 2016

มันรวมตัวโจ๊กเกอร์ด้วยการเพิ่มชุด "สตริงว่าง" สองชุดเพื่อใช้ประโยชน์จาก "J" ที่มีอยู่สำหรับแจ็คจากนั้นกรองแถวที่เราไม่ต้องการ สั้นกว่าการใช้UNION ALLคำสั่งเพื่อเพิ่ม jokers


จะเกิดอะไรขึ้นถ้าคุณสร้างอาร์กิวเมนต์ที่สองสำหรับ STRING_SPLIT สตริงที่ว่างเปล่า ฉันไม่ได้ใช้ MS-SQL แต่ในหลาย ๆ ภาษามันจะให้ตัวละครทั้งหมดในอาร์เรย์
AJFaraday

@AJFaraday ที่จะมีประโยชน์ Procedure expects parameter 'separator' of type 'nchar(1)/nvarchar(1)'แต่ก็ไม่ได้ทำงานที่คุณได้รับ มันจะมีประโยชน์สำหรับการเล่นกอล์ฟถ้ามันผิดนัดเป็นเครื่องหมายจุลภาคหากคุณปล่อยพารามิเตอร์ที่สอง แต่มันก็ไม่สนับสนุนเช่นกัน รายการอื่นสำหรับGolfSQLภาษาที่ผมอาจจะไม่เคยได้รับไปรอบ ๆ เพื่อเขียน :)
BradC

4

Ruby , 61 ไบต์

->{[*0..52,52].map{|x|['JAKQ'[w=x%13]||w-2,'SDHC'[x/13]]*''}}

ลองออนไลน์!


นั่นเป็นความสามารถในการใช้ J สำหรับทั้งแจ็คและโจ๊กเกอร์ :-)
Marty Neal

คุณไม่สามารถบันทึก 4 ไบต์ได้โดยไม่ต้อง->{... }มันทำงานด้วยตัวเองและไม่ต้องการพารามิเตอร์ดังนั้นจึงไม่จำเป็นต้องเป็นแลมบ์ดา
Piccolo

4

C # .NET, 114 ไบต์

o=>(new System.Text.RegularExpressions.Regex("1?.").Replace("AJQK2345678910","$0H,$0S,$0D,$0C,")+"J,J").Split(',')

ท่าเรือคำตอบ Java ของฉัน (เครดิตกับ@mazzy )

ลองออนไลน์


ทางเลือกที่น่าสนใจของ119 ไบต์โดย @Corak

using System.Linq;o=>new[]{"J","J"}.Concat(from s in"SDCH"from n in"A234567890JQK"select(n=='0'?"10":n+"")+s).ToArray()

ลองออนไลน์

หากผู้System.Collections.Generic.IEnumerable<string>แทนstring[]เป็นผู้ส่งออกที่ยอมรับต่อท้าย.ToArray()สามารถลดลงดังนั้นมันจะกลายเป็น109 ไบต์

คำอธิบาย:

using System.Linq;       // Required import for the `from .. in ..` and `select` parts
o=>                      // Method with empty unused parameter and string-array return-type
  new[]{"J","J"}         //  Return a string-array containing two times "J"
   .Concat(              //  And add:
     from s in"SDCH"     //   Loop over the suits
       from n in"A234567890JQK"
                         //    Inner loop over the cards
         select(n=='0'?  //     If the current card item is '0'
                 "10"    //      Use 10 instead
                :        //     Else:
                 n+"")   //      Simply use the card item as is
                      +s)//     And append the suit
   .ToArray()            //  Convert the IEnumerable to an array

4

PHP, 108 99 97 ไบต์

ลองออนไลน์!

ลองออนไลน์! (แก้ไข 1)

รหัส

<?php $r=[J,J];foreach([A,J,Q,K,2,3,4,5,6,7,8,9,10]as$t)
$r=array_merge($r,[H.$t,S.$t,D.$t,C.$t]);

พยายามที่จะใช้ฟังก์ชั่น php ล้วนๆ แต่จำนวนไบต์ต่ำกว่าด้วยลูป :(

เอาท์พุท (โดยใช้print_r)

Array
(
[0] => J
[1] => J
[2] => HA
[3] => SA
[4] => DA
[5] => CA
[6] => HJ
[7] => SJ
[8] => DJ
[9] => CJ
[10] => HQ
[11] => SQ
[12] => DQ
[13] => CQ
[14] => HK
[15] => SK
[16] => DK
[17] => CK
[18] => H2
[19] => S2
[20] => D2
[21] => C2
[22] => H3
[23] => S3
[24] => D3
[25] => C3
[26] => H4
[27] => S4
[28] => D4
[29] => C4
[30] => H5
[31] => S5
[32] => D5
[33] => C5
[34] => H6
[35] => S6
[36] => D6
[37] => C6
[38] => H7
[39] => S7
[40] => D7
[41] => C7
[42] => H8
[43] => S8
[44] => D8
[45] => C8
[46] => H9
[47] => S9
[48] => D9
[49] => C9
[50] => H10
[51] => S10
[52] => D10
[53] => C10
)

แก้ไข

ขอขอบคุณที่ @JoKing ด้วยการแนะนำการเปลี่ยนแปลงexplode(" ","H$t S$t D$t C$t")สำหรับ[H.$t,S.$t,D.$t,C.$t]


จะไม่[H.$t,S.$t,D.$t,C.$t]สั้นกว่าระเบิดหรือไม่
Jo King

คุณพูดถูกต้องคุณจะต้องใช้คำแนะนำของคุณขอบคุณ
ฟรานซิสโกฮาห์น


2
@ ฟรานซิสโกฮาห์นขอโทษฉันไม่ได้สังเกตว่า! นี่คือรุ่น 87 ไบต์แล้วลองออนไลน์!
Night2

1
@ Nigth2 ฉันไม่ทราบว่าคุณสามารถใช้array_push($arr, $item1,$item2,$item3...$itemN)แบบนั้นคนดี
Francisco Hahn

4

SMBFขนาด 169 ไบต์

\x00แสดงให้เห็นถึงไบต์ NUL อักษร

<[.<]␀J J HA HK HQ HJ H01 H9 H8 H7 H6 H5 H4 H3 H2 SA SK SQ SJ S01 S9 S8 S7 S6 S5 S4 S3 S2 DA DK DQ DJ D01 D9 D8 D7 D6 D5 D4 D3 D2 CA CK CQ CJ C01 C9 C8 C7 C6 C5 C4 C3 C2

นี่คือทางออกที่ไร้เดียงสา

เนื่องจากโปรแกรมนี้มี NUL ไบต์จึงไม่มีวิธีง่ายๆในการใช้ TIO รันสิ่งนี้ในPython interpreterโดยใช้

data = bytearray(b'<[.<]\x00J J HA HK HQ HJ H01 H9 H8 H7 H6 H5 H4 H3 H2 SA SK SQ SJ S01 S9 S8 S7 S6 S5 S4 S3 S2 DA DK DQ DJ D01 D9 D8 D7 D6 D5 D4 D3 D2 CA CK CQ CJ C01 C9 C8 C7 C6 C5 C4 C3 C2')


@EriktheOutgolfer คุณสร้างมันขึ้นมาได้อย่างไร?
mbomb007

1
ผมเปิดเครื่องมือสำหรับนักพัฒนา F12 $0.value+='\0'ที่เลือกกล่องข้อความโดยโฉบไปคอนโซลและหลังจากที่ผมคัดลอกและวางส่วนก่อนไบต์โมฆะการพิมพ์
Erik the Outgolfer

4

Japt, 32 30 26 ไบต์

'J²¬c"JQKA"¬c9õÄ)ï+"CHSD"q

ทดสอบมัน

'J²¬c"JQKA"¬c9õÄ)ï+"CHSD"q
'J                             :Literal "J"
  ²                            :Repeat twice
   ¬                           :Split
    c                          :Concatenate
     "JQKA"¬                   :  Split "JQKA"
            c                  :  Concatenate
             9õ                :    Range [1,9]
               Ä               :    Add 1 to each
                )              :  End concatenation
                 ï             :  Cartesian Product
                   "CHSD"q     :    Split "CHSD"
                  +            :  Join each pair to a string


3

J , 41 ไบต์

'J';^:2,'HCDS',&.>/~(":&.>2+i.9),;/'AJQK'

ลองออนไลน์!


1
'J';^:2,;&.>{_13<\'10';;/'23456789AJKQHCDS'เรียบง่ายขึ้นเล็กน้อย แต่สำหรับ 43 ฉันรู้สึกเหมือนมีโกนมากกว่าที่นี่ ... แต่ฉันก็ไม่สามารถเห็นได้
Jonah

@Jonah ใช่ฉันยังลองสิ่งที่คล้ายกันและฉันมั่นใจว่าทางออกของฉันจะสามารถเล่นกอล์ฟต่อไปได้ แต่มีปัญหาใหม่ที่จะต้องแก้ไขเสมอ :)
Galen Ivanov

3

R , 67 66 ไบต์

c(paste(rep(c('A',2:10,J<-'J','Q','K'),4),c('S','D','H','C')),J,J)

ลองออนไลน์!

เพียงหนึ่งไบต์มากกว่าการแก้ปัญหาของ golfier digEmAll แรงบันดาลใจจากการแก้ปัญหาของจูเซปเป้เพื่อความท้าทายที่เกี่ยวข้องนี้ - เดียวกันจูเซปเป้ที่แข็งแรงเล่นกอล์ฟหนึ่งไบต์ปิดโดยคำตอบ!

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


โอ้ฮ่าฮ่าฉันไม่ได้สังเกตเห็นสิ่งนี้ฉันให้ความเห็นวิธีแก้ปัญหานี้ในอีกทางหนึ่ง
จูเซปเป้

@Giuseppe ฉันสนิทสนมกับการแสดงความคิดเห็นแทนการโพสต์ตัวเอง ฉันเดาว่าฉัน
อดกลั้น

iiiit เป็นคำตอบที่ดีเหมือนกอล์ฟที่: -) ลองออนไลน์
Giuseppe

@I เป็นเพียงการทดลองกับที่ :) ดังนั้นทั้ง digemall และฉันสามารถขอบคุณกอล์ฟหนึ่งไบต์เพื่อคุณ :)
Jayce

3

C (gcc) , 126 137 133 ไบต์

#define S(X)"A"X,"2"X,"3"X,"4"X,"5"X,"6"X,"7"X,"8"X,"9"X,"10"X,"J"X,"Q"X,"K"X,
#define c (char*[54]){S("S")S("D")S("H")S("C")"J","J"}

ลองออนไลน์!

จะเพิ่มขึ้น +11 ไบต์ที่สมบูรณ์โดย Jakob

-4 ไบต์ขอบคุณ Zachary

การเหยียดหยามของ preprocessor ส่วนใหญ่จะบีบอัดชุด อาจจะออกไปเล่นกอล์ฟ แต่ค่อนข้างมีประสิทธิภาพทุกสิ่งที่พิจารณา


1
ฉันจะยืนยันว่าcไม่ใช่ "[... ] แปลก 'function' [... ]" แต่เป็นการประกาศอาร์เรย์ที่เก็บไว้ในแมโคร รูปแบบของผลลัพธ์คือความรู้ของฉันที่ไม่ได้รับอนุญาตโดยค่าเริ่มต้น
Jonathan Frech

1
ยกเว้น c ไม่ใช่อาร์เรย์มันจะเป็นตัวอักษรในตำแหน่ง 'การเรียกใช้' แต่ละรายการcในแหล่งที่มาจะสร้างสำเนาใหม่ของอาร์เรย์ในการเรียกใช้งานผลลัพธ์ (ยกเว้นการเพิ่มประสิทธิภาพ) ดังนั้นรหัสจึงchar *a[] = c; char *b[] = c;สร้างสำเนาลึกสองชุดของ c พฤติกรรมนี้เป็นสิ่งที่คุณคาดหวังจากฟังก์ชั่นเช่นกัน
LambdaBeta

1
หากมีความท้าทายในการแสดงผลจำนวนเต็มเป็นศูนย์คุณจะถือว่าการc=0;ส่งรหัสที่ถูกต้องโดยใช้รหัส C ดูcเป็นฟังก์ชันหรือไม่
Jonathan Frech

1
ไม่ แต่ฉันจะถือว่า#define z 0ถูกต้อง เหตุผลก็คือว่าc=0; c++; x=c;ผลลัพธ์ในx == 1จึงcไม่ได้ทำหน้าที่เหมือนฟังก์ชั่น ในขณะเดียวกัน#define z 0 c=z; c++; x=z;ก็ส่งผลx == 0ให้zทำหน้าที่เหมือนฟังก์ชัน
LambdaBeta

1
ฉันไม่คิดว่าเป็นการเปรียบเทียบที่ยุติธรรมเมื่อคุณเปลี่ยนฟังก์ชั่นที่คาดไว้จากนั้นเปลี่ยนเฉพาะค่าที่ส่งคืนของฟังก์ชัน z=0;/**/c=z;c++;x=z;ผลลัพธ์x==0จึงzทำหน้าที่เหมือนฟังก์ชัน
Jonathan Frech

3

Javascript (ES6) 77 74 72 ไบต์

นี่เป็นโปรแกรมที่สมบูรณ์

`J,J,${[..."A23456789JQK",10].map(c=>[..."SDHC"].map(s=>c+s))}`.split`,`

1
ดี คุณสามารถบันทึกไม่กี่ไบต์โดยแยกคอมม่าแทนการต่อกัน: BTJ,J,${[..."A23456789JQK","10"].map(c=>[..."SDHC"].map(s=>c+s))}BT.splitBT,BT (โดยที่BTเป็น backtick)
Rick Hitchcock

ข้อเสนอแนะที่ยอดเยี่ยม! ขอบคุณ
MattH

3

C (gcc, เสียงดังกราว), 138 ไบต์

#define p(c)putchar(c)
int main(){for(char*q,*r="CDHS";*r;r++)for(q="A234567890JQK";*q;q++)(48==*q)&&p(49),p(*q),p(*r),p(32);puts("J J");}

วิธีการคือการเข้ารหัสลำดับในอาร์เรย์ตัวละคร

ตัวอย่างผลลัพธ์

AC AD AH AS 2C 2D 2H 2S 3C 3D 3H 3S 4C 4D 4H 4S 5C 5D 5H 5S 6C 6D 6H 6S 7C 7D 7H 7S 8C 8D 8H 8S 9C 9D 9H 9S 10C 10D 10H 10S JC JD JH JS QC QD QH QS KC KD KH KS J J

ลองออนไลน์!


คำแนะนำ: คุณสามารถใช้ซิงเกิ้ลprintfเพื่อกำจัดทั้งหมดputcharได้
Dennis

1
127 ไบต์
Jonathan Frech

1
เกี่ยวกับวิธีการของคุณออกสหกรณ์ไม่อนุญาตให้มีการพิมพ์
Jonathan Frech

อาคารของ Jonathan Frech และ Dennis 113 ไบต์
บนเพดาน

3

Oracle SQL ขนาด 164 ไบต์

ไม่ใช่ภาษากอล์ฟ แต่ ...

SELECT CASE WHEN LEVEL>52THEN'J'ELSE DECODE(MOD(LEVEL,13),1,'A',11,'J',12,'Q',0,'K',MOD(LEVEL,13))||SUBSTR('HDSC',CEIL(LEVEL/13),1)END FROM DUAL CONNECT BY LEVEL<55

ลองใช้ออนไลน์ - SQL Fiddle


2
ฉันรักที่มีคนตอบคำถามนี้ด้วย Oracle SQL
AJFaraday

postgres เกือบเต้นสิ่งนี้ด้วยสตริง 172 ไบต์ 'เลือก' AS, 2S, 3S, 4S, 5S, 6S, 7S, 8S, 9S, 10S, JS, QS, KS, AD, 2D, 3D, 4D, 5D, 6D, 7D, 8D, 9, 10, JD, QD, KD, AH, 2H, 3H, 4H, 5H, 6H, 7H, 8H, 9H, 10H, จงฮยอน, QH, KH, AC, 2C, 3C, 4C, 5C, 6C, 7C, 8C, 9C, 10C, JC, QC, KC, J, J ''
dwana

@dwana นั่นไม่ใช่อาร์เรย์ของสตริง (หรือเนื่องจากเป็น SQL, ชุดของแถว) คุณจะต้องแยกสตริงออกเป็นแถว (หรือคอลัมน์) เพื่อให้ตรงตามข้อกำหนดของคำถาม หากคุณต้องการทำเช่นนั้นเป็นวิธีการแก้ปัญหา PostgreSQL แยกต่างหากจากนั้นฉันอยากจะเห็นว่า
MT0

ขออภัยไม่เห็นข้อกำหนดของอาเรย์
dwana

3

Lua ,156 127 138 129 ไบต์

loadstring'r={"J","J"}for x=1,52 do p=x%4+1r[#r+1]=({"A",2,3,4,5,6,7,8,9,10,"J","Q","K"})[x%13+1]..("SDHC"):sub(p,p)end return r'

ลองออนไลน์!

ตามรหัสของโจคิง ในขณะที่เขาแนะนำในความคิดเห็นคำตอบเดิมของฉันไม่ถูกต้อง (ฉันยังคงเรียนรู้วิธีการทำงานของรหัสกอล์ฟ😬) และเชื่อมโยงคำตอบที่ดีกว่าและถูกต้อง จากนั้นฉันก็ทำให้มันเล็กลง


โซลูชันดั้งเดิม (156 ไบต์):

r = {} s = "SDHC" c = {"J", "Q", "K"} t = table.insert สำหรับ x ใน s: gmatch "." ทำเพื่อ y = 1,13 do t (r, (y == 1 และ "A" หรือ y> 10 และ c [y-10] หรือ y) .. x) end end สำหรับ _ = 1,2 do t (r, "J")
r={} -- initializes the result table
s="SDHC" -- initializes the suits' string, it's better to be a string because we're just looping through it
c={"J","Q","K"} -- initializes some of the special cards

t=table.insert -- stores the table.insert call inside the 't' variable

for x in s:gmatch"."do -- loops through the suits, calling each one 'x'
  for y=1,13 do -- 'y' is the current card

    t(r,(y==1 and"A"or y>10 and c[y-10]or y)..x) -- adds the card accompanied by the suit to the result ('r') table
      -- y==1 and"A"or y>10 and c[y-10]or y  means if we're at the first card, it's an "A", else if we're past the 10th card, it's a special card, else, it's the number itself

  end
end
for _=1,2 do t(r, "J")end -- loop 2 times, adding a "J" to the result table

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

หากคุณมีข้อเสนอแนะในการลดรหัสของฉันคุณสามารถพูดได้เช่นกัน :)


1
ยินดีต้อนรับสู่เว็บไซต์!
ข้าวสาลี Wizard

@WW ขอบคุณ! Hahah: D
Visckmart

จะเกิดอะไรขึ้นกับตารางr? ไม่ว่าคุณจะต้องพิมพ์เป็น STDOUT หรือเปลี่ยนเป็นฟังก์ชั่นและกลับมาr
Jo King

ฉันไม่เชี่ยวชาญกับ Lua แต่นี่เป็นฟังก์ชั่นนิรนาม 142 ไบต์ที่
Jo King


3

Perl 6 ,  43  42 ไบต์

{|(|(2..10),|<A J Q K>X~ <S D H C>),|<J J>}

ลองมัน

{|(|(^9+2),|<A J Q K>X~ <S D H C>),|<J J>}

ลอง จากโจคิง

ขยาย:

{  # bare block lambda

    |(  # flatten into outer list

        |(  # flatten into left-side list for X~
          ^9 + 2
          # 0+2 ..^ 9+2
          #   2 ..^ 11
          #   2 ..  10
        ),
        |   # flatten into left-side list for X~

          < A J Q K >

      X~    # cross using &infix:« ~ » (string concatenation)

        <S D H C>

    ),
    |< J J > # flatten two `J`s into outer list
}


3

QBasic 4.5, 114 142 127 ไบต์

dim r$(54)
FOR i=1TO 52
m=i MOD 13
r$(i)=MID$("JQKA2345678910",1+m,1-(m=12))+MID$("CDHS",(i-1)\13+1,1)
NEXT
r$(53)="J
r$(54)="J

หมายเหตุการวางจำหน่าย:

  • V1.0 เริ่มต้นใช้งาน
  • V1.1 r$ผิดข้อกำหนดที่ท้าทายจึงเปลี่ยนไปอาร์เรย์ที่มีราคาแพงกว่า รหัสที่เหลือทั้งหมดเหมือนกันมาก
  • V1.2 คำแนะนำจาก @TaylorScott นำไปสู่การเขียนที่สมบูรณ์แบบประหยัด 15 ไบต์!

ตัวอย่างผลลัพธ์

หากเราเพิ่มตัวอย่างนี้ในรหัสของเราเราจะเห็นสิ่งที่ใส่ลงไปr$:

for i = 1 to ubound(r$)
?r$(i)
next

QC
KC
AC
2C
3C
4C
5C
6C
7C
8C
9C
10C
JC
QD
KD
AD
[... snip ...]
6S
7S
8S
9S
10S
JS
J
J

แต่อย่างไร ให้ฉันบอกคุณ:

dim r$(54)          ' create a 54-slot array for our results
FOR i=1TO 52        ' Loop through the numbers 1-52 in var i
m=i MOD 13          ' Take i mod 13 to select a value (saved as m)
                    ' , and (not saved) i intdiv 13 to get a suit
r$(i)=              ' assigns to slot i in the result array
  MID$("JQKA2345678910"  ' a substring from the string with all the values
  ,1+m                   ' from position 1-13 (13 % 13 = 0, but QBasic strings are 1-based.
                         ' Hence the + 1)
  ,1-(m=12))             ' taking 1 char by default, and 2 for the Ten
                         ' Note that m=12 evaluates to 0 for 0-11, and to -1 for 12
  + MID$("CDHS",(i-1)\13+1,1)  ' and take 1 char from the suits-string
NEXT
r$(53)="J           ' Then append 2 jokers
r$(54)="J           ' These strings are auto-closed by the QBasic compiler.

สิ่งนี้ไม่เป็นไปตามข้อกำหนดของ Array of strings และการพิมพ์ไปSTDOUTเป็นสิ่งต้องห้ามอย่างชัดเจน
Taylor Scott

@TaylorScott ขอบคุณที่สังเกต แก้ไขแล้วตอนนี้เหลืออีก @ 30 ไบต์
steenbergh

1
ฉันคิดว่าคุณควรจะสามารถลดจำนวน bytec ได้โดยการทิ้งa$และb$vars และใช้สายบางอย่างเช่นr$(i)=MID$("JQKA2345678910",1+m,1-(m=12))+MID$("CDHS",(i-1)\13+1,1)
Taylor Scott

1
@TaylorScott ขอบคุณ! reshuffling นั้นในสตริงค่านั้นฉลาดเป็นพิเศษ ดี!
steenbergh

สิ่งนี้ยาวกว่าเพียงแค่PRINT "<output>"
Tornado547

3

Pyth, 26 25 ไบต์

+ B\JsM*+tSTc"JQKA"1"CDHS

บันทึกเป็นไบต์ด้วย hakr14
ลองที่นี่

คำอธิบาย

+ B\JsM*+tSTc"JQKA"1"CDHS
         tST                Get the range from 2 to 10...
        +   c"JQKA"1        ... plus the list ['J', 'Q', 'K', 'A'].
       *            "CDHS   Take the Cartesian product with the suits.
     sM                     Stick the ranks and suits together.
+ B\J                       Add the jokers.

+\J+\Jและ+*2]\Jเทียบเท่าและทั้ง 6 ไบต์ แต่หลังถือว่าเป็นรูปแบบที่ดีกว่าเนื่องจากอนุญาตให้เพิ่มได้ถึง 10 สำเนาก่อนที่จะมีไบต์เพิ่มเติมใด ๆ
hakr14

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

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