ช่วยเจ้ามือสร้างดาดฟ้าใหม่


19

ดีลเลอร์เลอะเทอะและหลงทางว่ามีการ์ดในเด็คของเขาอยู่และการ์ดใดหายไปคุณสามารถช่วยเขา / เธอได้หรือไม่?


สำรับสมบูรณ์ประกอบด้วยไพ่ 52 ใบ ได้แก่ :

แต่ละสีในเด็ค (หัวใจ, เพชร, โพดำ, คลับ) ประกอบด้วย:

  • ตัวเลข [2 - 10]
  • แจ็ค
  • ราชินี
  • กษัตริย์
  • เอซ

งาน

โปรแกรมของคุณจะอ่านเนื้อหาของสำรับจาก STDIN จนกว่าจะมีการอ่านบรรทัดใหม่ คุณสามารถสันนิษฐานได้ว่าอินพุตจะอยู่ในรูปของ "nX nX nX nX" ฯลฯ โดยที่:

  • n - ตัวเลขใด ๆ ระหว่าง [2 - 10] หรือ 'J', 'Q', 'K' หรือ 'A' (คุณสามารถใช้ตัวอักษรพิมพ์ใหญ่สำหรับอักขระที่ไม่ใช่ตัวเลขเท่านั้น)
  • X - ใด ๆ ต่อไปนี้: 'H', 'D', 'S', 'C' (คุณสามารถใช้ตัวพิมพ์ใหญ่เท่านั้น)

ที่ไหน:

  • 'J' = แจ็ค
  • 'Q' = ราชินี
  • 'K' = ราชา
  • 'A' = Ace

และ

  • 'H' = หัวใจ
  • 'D' = เพชร
  • 'S' = Spades
  • 'C' = สโมสร

คุณสามารถสันนิษฐานได้ว่าจะไม่มีการซ้ำซ้อนในอินพุต

โปรแกรมของคุณจะต้องพิมพ์ไพ่ที่หายไปในสำรับไปที่ STDOUT ในแบบเดียวกับอินพุท ("nX nX nX") หรือพิมพ์ 'ไม่มีบัตรหายไป' ถ้ามีการ์ดทั้งหมด 52 ใบ ไม่มีข้อ จำกัด ในลำดับของเอาต์พุตของการ์ด

อินพุตตัวอย่าง:

9H AH 7C 3S 10S KD JS 9C 2H 8H 8C AC AS AD 7D 4D 2C JD 6S

เอาท์พุท:

3H 4H 5H 6H 7H 10H JH QH KH 2D 3D 5D 6D 8D 9D 10D QD 2S 4S 5S 7S 8S 9S QS KS 3C 4C 5C 6C 10C JC QC HC

มีความสุขในการเล่นกอล์ฟ!


3
เราสามารถใช้Tแทนได้10หรือไม่
Arnauld

@Arnauld ฉันกลัวว่านี่คือข้อมูลทั้งหมดที่ตัวแทนจำหน่ายให้ฉันดังนั้นคุณจะต้องติดกับ '10' ไม่เช่นนั้นเขาจะอารมณ์เสีย
Sombrero Chicken

@GillBates ไม่ได้Jเป็นตัวแทน10ใช่มั้ย
Okx

2 3 4 5 6 7 8 9 10 J Q K A@Okx หมายถึงJ 11
HyperNeutrino

@Okx Jเป็นตัวอักษรตัวที่ 10 แต่นั่นไม่ใช่สิ่งที่เกี่ยวข้อง :)
mbomb007

คำตอบ:


8

Windows Batch (CMD), 205 204 ไบต์

@set/pc=
@set d=
@for %%s in (H D S C)do @for %%r in (2 3 4 5 6 7 8 9 10 J Q K A)do @call set d=%%d%% %%r%%s
@for %%c in (%c%)do @call set d=%%d: %%c=%%
@if "%d%"=="" set d= No missing cards
@echo%d%

วนซ้ำชุดสูทและจัดอันดับการสร้างเด็คที่สมบูรณ์จากนั้นลบการ์ดอินพุต บันทึก 1 ไบต์ถ้าได้รับอนุญาตแทนT 10บันทึก 11 ไบต์หากอาร์กิวเมนต์บรรทัดรับคำสั่งเป็นอินพุตที่ยอมรับได้ แก้ไข: บันทึก 1 ไบต์ต้องขอบคุณ @ user202729


ฉันนับ 200 ไบต์
HyperNeutrino

@HyperNeutrino ขณะที่ฉันใช้ Windows ฉันใช้ Notepad เพื่อบันทึกไฟล์ซึ่งหมายความว่าการขึ้นบรรทัดใหม่มีค่าใช้จ่ายฉัน 2 ไบต์แทนหนึ่ง ฉันขี้เกียจเกินไปที่จะใช้เครื่องมือแก้ไขอื่นเพื่อบันทึกไบต์
Neil

โอ้ไม่เป็นไร ฉันได้ 200 ไบต์โดยใช้ Sublime Text
HyperNeutrino

@Neil บน Windows คุณสามารถใช้ LF แทน CR LF ได้บันทึก 5 ไบต์ (ความคิดเห็น HyperNeutrino ด้านบน) และยังคงใช้งานได้
user202729

นอกจากนี้คุณยังสามารถส่ง/vต่อไปยัง CMD (+3 byte?) เพื่อEnableDelayedExpansionกำจัดcallในลูป / ดูเหมือนว่าคุณมีช่องว่างพิเศษระหว่าง(%c%)และdo?
user202729

8

Python, 147 146 145 138 131 129 127 125 120 ไบต์

print(' '.join(set(`x`+y for x in range(2,11)+list('JQKA')for y in'HDSC')-set(raw_input().split()))or'No missing cards')

รับการ์ดที่เป็นไปได้ทั้งหมดตามชุดและลบการ์ดอินพุต

-1 ไบต์ขอบคุณ mbomb007 ชี้ให้เห็นช่องว่างเพิ่มเติมในรหัสของฉัน
-1 ไบต์ขอบคุณ mbomb007 สำหรับการชี้ให้เห็นการเล่นกอล์ฟที่สามารถทำได้ด้วย Python 2 (-5 ไบต์และ +4 ไบต์สำหรับraw_ในraw_input)
-7 ไบต์โดยสลับไปใช้การตั้งค่าและการลบการแทนรายการ comprehensions
-7 ไบต์ขอบคุณ ValueInk สำหรับการชี้ให้เห็นว่าฉันไม่จำเป็นต้องไปlistที่ห้องสวีท
-2 ไบต์ต้องขอบคุณ Datastream สำหรับการชี้ให้เห็นว่าการเขียนค่าทั้งหมดนั้นมีประสิทธิภาพมากกว่าไบต์กว่าสิ่งแปลก ๆ ที่ฉันมีก่อนหน้านี้
-2 ไบต์ขอบคุณ ValueInk สำหรับการชี้ให้เห็น ชุดนั้นสามารถรับกำเนิดได้ดังนั้นฉันไม่จำเป็นต้องใส่มันลงในรายการความเข้าใจ
ขอบคุณ 2 bytes สำหรับสตรีมที่ชี้ให้เห็นว่าฉันสามารถเล่นกอล์ฟได้มากขึ้นถ้าฉันเปลี่ยนไปใช้ Python 3 อีกครั้ง ... (+2 สำหรับ parens หลังจากการพิมพ์, -4 สำหรับraw_)
-5 ไบต์ขอบคุณ Lulhum และตัวฉันสำหรับการชี้ โดยการเปลี่ยนกลับเป็น Python 2 (!!!) สามารถช่วยฉันบันทึกไบต์ (ใช้ช่วงอีกครั้งใช้ backticks แทนstr(และ +4 เนื่องจากraw_)


1
คุณมีพื้นที่พิเศษที่คุณสามารถลบ, และคุณสามารถใช้`d`แทนstr(d)ถ้าคุณใช้งูหลาม 2 นอกเหนือไปจากการลบ parens printสำหรับ
mbomb007

@ mbomb007 ขอบคุณ!
HyperNeutrino

for y in 'HDSC'ยังใช้ได้กับการรับตัวละครทั้งหมดในนั้นด้วย (คุณยังต้องการlist('JQKA')ส่วนอื่นอยู่)
หมึกมูลค่า

1
'1 2 3 4 5 6 7 8 9 10 J Q K A'.split()อาจบันทึกไม่กี่ไบต์แทนการจัดการ[d ที่for d in range(2,11)]+list('JQKA')คุณเกิดขึ้น
Datastream

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

7

05AB1E , 39 ไบต์

ðIð¡YTŸ"JQKA"S«"CDHS"SâJsKðýDg>i“Noœ¶‡¶

ลองออนไลน์!

คำอธิบาย

ðI                                       # push space and input
  ð¡                                     # split on spaces
    YTŸ                                  # push the range [2 ... 10]
       "JQKA"S«                          # append ['J','Q','K','A']
               "CDHS"Sâ                  # cartesian product with suits
                       J                 # join each card with its suit
                        sK               # remove any cards in input from the list of all cards
                          ðýDg>i         # if the length of the resulting list is 0
                                “Noœ¶‡¶  # push the string "No missing cards"
                                         # output top of stack

5

CJam , 49 47 ไบต์

B,2>"JQKA"+"HDSC"m*:slS/-S*"No missing cards"e|

ลองออนไลน์!

คำอธิบาย

B,                    e# The range from 0 to 10
2>                    e# Slice after the first two elements, giving the range from 2 to 10
"JQKA"+               e# Concatenate with "JQKA", giving the array containing all ranks
"HDSC"                e# The string containing all suits
m*                    e# Take the Cartesian product
:s                    e# And cast each pair to a string. Now a full deck has been constructed
l                     e# Read a line of input
S/                    e# Split it on spaces
-                     e# Remove all cards from the deck that were in the input
S*                    e# Join the result with spaces
"No missing cards"    e# Push the string "No missing cards"
e|                    e# Take the logical OR of the result and the string, returning the
                      e#   first truthy value between the two. (empty arrays are falsy)

5

เยลลี่ขนาด 39 ไบต์

9R‘Ṿ€;“JQKA”p“CDHS”F€œ-ɠḲ¤Kȯ“¡¢ıḍĖ9ṭƥw»

ลองออนไลน์!

อย่างไร?

9R‘Ṿ€;“JQKA”p“CDHS”F€œ-ɠḲ¤Kȯ“¡¢ıḍĖ9ṭƥw» - Main link: no arguments
9R                                      - range(1,9)    [1,2,3,4,5,6,7,8,9]
  ‘                                     - increment     [2,3,4,5,6,7,8,9,10]
   Ṿ€                                   - uneval each  [['2'],['3'],['4'],['5'],['6'],['7'],['8'],['9'],['10']]
     ;“JQKA”                            - concatenate with char-list "JQKA" [['2'],['3'],['4'],['5'],['6'],['7'],['8'],['9'],['10'],['J'],['Q'],['K'],['A']]
            p“CDHS”                     - Cartesian product with char-list "CDHS" [[['2'],['C']],[['2'],['D']],...]
                   F€                   - flatten each [['2','C'],['2','S'],...]
                         ¤              - nilad followed by link(s) as a nilad
                       ɠ                -     read a line from STDIN
                        Ḳ               -     split on spaces
                     œ-                 - multi-set difference
                          K             - join with spaces
                            “¡¢ıḍĖ9ṭƥw» - compressed string "No missing cards"
                           ȯ            - logical or
                                        - implicit print

5

C #, 343 ไบต์

ครั้งแรกที่โพสต์หนึ่งในสนามกอล์ฟของฉันไม่ใช่คู่แข่งที่ดีมาก ฉันแน่ใจว่าฉันสามารถลดสิ่งนี้ได้อีก

แนวคิดเบื้องหลังคือการจัดเก็บข้อมูลแบบกระจัดกระจายซึ่งมีดัชนีที่คำนวณโดยค่า ASCII ของค่าที่แตกต่างกันและเหมาะสมกับการคูณซึ่งกันและกัน (เช่น Ace of Spades (AS) จะถูกเก็บไว้ในพื้นที่ที่ดัชนี (65 * 83 = 5395)) วิธีนี้การ์ดแต่ละประเภทจะได้รับดัชนีที่ไม่ซ้ำกันซึ่งสามารถตรวจสอบได้ในภายหลังเพื่ออยู่ในอาร์เรย์ "แผนที่"

void M(string[]a){var c=new int[]
{50,51,52,53,54,55,56,57,49,74,81,75,65,72,68,83,67};var e=new 
int[9999];int i=0;int j=0;foreach(var s in a) e[s[0]*s[s.Length-
1]]++;int f=0;for(i=0;i<13;i++)for(j=13;j<17;j++)if(e[c[i]*c[j]]==0)
{f=1;Console.Write(((i<9)?(i+2)+"":(char)c[i]+"")+(char)c[j]+" 
");}if(f==0) Console.WriteLine("No missing cards");}

4

PowerShell , 114 111 110 ไบต์

param($n)('No missing cards',($a=(2..10+'JQKA'[0..3]|%{$i=$_;"CSHD"[0..3]|%{"$i$_"}}|?{$n-notmatch$_})))[!!$a]

ลองออนไลน์!

รับอินพุต$nเป็นสตริงที่คั่นด้วยช่องว่างหรือขึ้นบรรทัดใหม่ สร้างอาร์เรย์จากช่วงที่2..10ต่อกับJQKA(ทำดัชนีด้วย[0..3]เพื่อให้เป็นcharอาร์เรย์) อาร์เรย์ที่จะถูกป้อนเข้าห่วง|%{}ว่าชุด Helper $iแล้ว loops กว่าชุดเพื่อ concatenate $i$_ผลร่วมกับ ("2C", "2S", "2H", ... "AH", "AD")ในตอนท้ายของวงนี้เรามีอาร์เรย์ของสตริงเช่น อาร์เรย์ที่ถูกป้อนเข้าWhere-Object( |?{}) ที่มีตัวกรองเป็นองค์ประกอบเหล่านั้น$_ว่า regex การป้อนข้อมูล-notmatch ผลของการกรองที่จะถูกเก็บไว้ใน$n$a

จากนั้นเราจะใช้หลอก ternary ( , )[]เพื่อเลือกว่าเราจะส่งออก'No missing cards'หรือ$aขึ้นอยู่กับว่าจะ!!$aหันไปบูลีนหรือ$false $trueถ้า$aเป็นที่ว่างเปล่า (หมายถึงบัตรทุกในสำรับเป็นในการป้อนข้อมูล) แล้ว!!$aคือ0เพื่อให้"No missing cards"มีการเลือก ในทางกลับกันสำหรับ$aการเลือก ไม่ว่าในกรณีใดก็ตามที่เหลืออยู่บนไพพ์ไลน์และเอาต์พุตนั้นเป็นนัย


4

Bash + coreutils, 89

sort|comm -3 <(printf %s\\n {10,{2..9},A,J,K,Q}{C,D,H,S}) -|grep .||echo No missing cards

I / O เป็นรายการที่คั่นด้วย newline

คำอธิบาย

  • sort อ่านอินพุตที่คั่นด้วย newline จาก STDIN และเรียงลำดับ
  • สิ่งนี้ถูกส่งไปยัง comm
  • printf %s\\n {10,{2..9},A,J,K,Q}{C,D,H,S}เป็นการขยายแบบรั้งเพื่อสร้างไพ่เต็มใบ printfพิมพ์บัตรในบรรทัดของตัวเองในแต่ละ คำสั่งซื้อจะได้รับเช่นเดียวกับการส่งออกเช่นเดียวกับถ้ามันได้ถูกส่งไปยังsort
  • commเปรียบเทียบเด็คเต็มรูปแบบกับอินพุตที่เรียงลำดับแล้วเอาความแตกต่างออกมา -3ไม่แสดงเอาต์พุตของคอลัมน์ 3 (รายการทั่วไป)
  • การส่งออกทั้งหมดจากการมีประปาcomm grep .หากไม่มีเอาต์พุตจากcomm(เช่นการ์ดทั้งหมดอยู่ในอินพุต) ดังนั้น||ประโยค "หรือ" จะแสดงข้อความที่ต้องการ มิฉะนั้นตรงกับทุกสายออกจากgrep .comm

ลองมันออนไลน์


4

Python 2 , 104,93,130 , 114 ไบต์

r=input()
print' '.join(n+x for n in list('23456789JQKA')+['10']for x in'HDSC'if n+x not in r)or'No missing cards'

ลองออนไลน์!

  • -10 ไบต์ด้วย hardcoding รายการแทนที่จะใช้ range!
  • +37 ไบต์ - การพิมพ์ที่ไม่ได้รับ 'ไม่มีบัตรหายไป' หากการ์ดทั้งหมดมีอยู่ในอินพุต!
  • -16 ไบต์โดยการแก้ไขโค้ดให้เป็นรายการความเข้าใจ!

1
ไม่พิมพ์ "ไม่มีบัตรที่หายไป"
L3viathan

1
@ L3viathan ขอบคุณที่ชี้ให้เห็น ฉันแก้ไขคำตอบแล้ว!
กีรนาถประภาการัน

list('23456789JQKA')+['10']เป็นคนฉลาด ฉันกำลังทำลายสมองของฉันเพื่อหาวิธีที่ดีกว่าในการแยก10รายชื่อตัวอักษรเดี่ยวออกจากคำตอบของงูหลาม แต่มันก็ใช้ได้ดี
Datastream



2

sed , 157 + 1 ( -rตั้งค่าสถานะ) = 170 158 bytes

x
s/$/;A2345678910JQK/
s/.+/&H&D&S&C;No missing cards/
:
s/(10|\w)(\w+)(.);/\1\3 \2\3;/
t
G
:s
s/(10.|[^ ;1]{2})(.*\n.*)\1/\2/
ts
s/[ ;]+/ /g
s/^ //
s/ N.+//

ลองออนไลน์!

สิ่งนี้จะสร้างการ์ดที่เป็นไปได้ทั้งหมดแล้วนำการ์ดแต่ละอันออกจากอินพุตจากการ์ดที่สร้างขึ้น


ไม่พิมพ์ "ไม่มีบัตรที่หายไป"
L3viathan

@ L3viathan Fixed
Kritixi Lithos

2

C # , 282 ไบต์


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

i=>{var o=new System.Collections.Generic.List<string>();string[] S={"H","D","S","C"},N="A 2 3 4 5 6 7 8 9 10 J Q K".Split(' ');foreach(var s in S){foreach(var n in N){if(!System.Linq.Enumerable.Contains(i,n+s)){o.Add(n+s);}}}return o.Count>0?string.Join(" ",o):"No missing cards";};

Ungolfed

i => {
    var o = new System.Collections.Generic.List<string>();
    string[] S = { "H", "D", "S", "C" }, N = "A 2 3 4 5 6 7 8 9 10 J Q K".Split(' ');

    foreach( var s in S ) {
        foreach( var n in N ) {
            if( !System.Linq.Enumerable.Contains( i, n + s ) ) {
                o.Add( n + s );
            }
        }
    }

    return o.Count > 0
        ? string.Join( " ", o )
        : "No missing cards";
};

อ่านได้ไม่ดี

i => {
    // Initialize a list to contain the list of cards missing
    var o = new System.Collections.Generic.List<string>();

    // Initialize the list of suits and numbers of cards
    string[] S = { "H", "D", "S", "C" }, N = "A 2 3 4 5 6 7 8 9 10 J Q K".Split(' ');

    // Cycle through the suits...
    foreach( var s in S ) {
        // ... and the numbers ...
        foreach( var n in N ) {
            // ... and check it the combo number + suite is missing
            if( !System.Linq.Enumerable.Contains( i, n + s ) ) {
                // If it's missing, add it to the list of missing cards
                o.Add( n + s );
            }
        }
    }

    // If the count of missing cards is greater than 0...
    return o.Count > 0
        // Build a 'space' separated string with the missing cards
        ? string.Join( " ", o )
        // Or output the missing cards string
        : "No missing cards";
};

รหัสเต็ม

using System;
using System.Collections.Generic;
using System.Linq;

namespace Namespace {
   class Program {
      static void Main( String[] args ) {
         Func<String, Int32> f = i => {
            var o = new List<string>();
            string[] S = { "H", "D", "S", "C" }, N = "A 2 3 4 5 6 7 8 9 10 J Q K".Split(' ');

            foreach( var s in S ) {
               foreach( var n in N ) {
                  if( !i.Contains( n + s ) ) {
                     o.Add( n + s );
                  }
               }
            }

            return o.Count > 0
               ? string.Join( " ", o )
               : "No missing cards";
         };

         List<String>
            testCases = new List<String>() {
                "9H AH 7C 3S 10S KD JS 9C 2H 8H 8C AC AS AD 7D 4D 2C JD 6S"
            };

         foreach( String testCase in testCases ) {
            Console.WriteLine( $"{test}\n{f( test.Split( ' ' ) )}" );
         }

         Console.ReadLine();
      }
   }
}

ข่าว

  • v1.0 - 282 bytes- โซลูชั่นเริ่มต้น

หมายเหตุ

ไม่มีอะไรให้เพิ่ม


1
นี่เป็นรูปแบบที่ดีมากสำหรับคำตอบของคุณ +1
Rɪᴋᴇʀ

2

JavaScript (ES6), 117 114 111 ไบต์

s=>[...Array(52)].map((_,i)=>~s.search(c=('JQKA'[v=i>>2]||v-2)+'CDHS'[i&3])?_:c+' ').join``||'No missing cards'

สิ่งนี้ใช้ประโยชน์จากข้อเท็จจริงที่ว่ารายการที่ไม่ได้กำหนดในอาเรย์ที่สร้างโดยmap()ถูกบังคับให้เป็นสตริงว่างเมื่อjoin() 'd

การสาธิต


2

เรติน่า 76 ไบต์

^
A2345678910JQK¶ 
\G(10|.)
 $&H $&D $&S $&C
Dr` \S+
G1`
^$
No missing cards

อินพุต / เอาต์พุตเป็นรายการของการ์ดที่คั่นด้วยช่องว่าง ผลผลิตมีพื้นที่ชั้นนำ

ลองออนไลน์!

คำอธิบาย

รหัสส่วนใหญ่เกี่ยวข้องกับการสร้างรายชื่อการ์ดทั้งหมดที่ควรอยู่ในสำรับ:

^
A2345678910JQK¶ 
\G(10|.)
 $&H $&D $&S $&C

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

Dr` \S+

นี่คือขั้นตอนการลดความซ้ำซ้อนมันแยกสตริงออกเป็นชิ้น ๆ ซึ่งประกอบด้วยช่องว่างบวกกับช่องว่างที่ไม่ใช่ช่องว่าง ตัวดัดแปลงrทำให้สิ่งนี้ทำงานจากขวาไปซ้ายทำให้เกิดเหตุการณ์สุดท้ายของแต่ละอัน

G1`

เราเก็บเฉพาะบรรทัดแรกเท่านั้นซึ่งขณะนี้มีบัตรหายไป

^$
No missing cards

หากผลลัพธ์ว่างเปล่าเราจะแทนที่ด้วย "ไม่มีบัตรหาย"


1

Python 3, 106 ไบต์

การรวมกันของคำตอบหลามสองตัวก่อนหน้านี้ผสมกับสายอักขระที่ไม่มีการบรรจุ

print(' '.join({x+y for x in[*'23456789JQKA','10']for y in'HDSC'}-{*input().split()})or'No missing cards')

1

Julia , 116 ไบต์

print(join(setdiff(["$x$y"for x=∪(2:10,"JQKA")for y="HDSC"],readline()|>split),' ')|>s->s>""?s:"No missing cards")

ลองออนไลน์!

คล้ายกับโซลูชัน Python ของ Kyle Gullions มาก Setdiff แทน - และแลมบ์ดาเพื่อทดสอบสตริงว่างทำให้มันแย่ลง



1

Tcl , 270 228 ตัวอักษร

(ย่อด้วยความช่วยเหลือจากWît Wisarhd)

foreach s {H D S C} {foreach c {2 3 4 5 6 7 8 9 J Q K A} {dict set d $c$s 0}}
gets stdin l
foreach c $l {dict set d $c 1}
set m {}
dict for {c h} $d {if {!$h} {lappend m $c}}
if {![llength $m]} {set m "No missing cards"}
puts $m

ลองออนไลน์!

คำอธิบาย:

การใช้งานนี้สร้างพจนานุกรมที่ประกอบด้วยธงบูลีนสำหรับการ์ดแต่ละใบที่แสดงโดยผลิตภัณฑ์คาร์ทีเซียนของ HDSC และ 2-through-A มันอ่านบรรทัดจาก stdin ซึ่งถ้าให้เป็นข้อมูลจำเพาะที่เรียกว่าเป็นจริงรายการ Tcl ที่มีรูปแบบที่ดี เมื่ออ่านการ์ดแต่ละใบบูลีนจริงจะถูกป้อนเข้าในพจนานุกรมสำหรับการ์ดนั้น

ในตอนท้ายตัวแยกวิเคราะห์วนรอบพจนานุกรมและเพิ่มการ์ดใด ๆ ที่ไม่มีจริงในพจนานุกรมลงในรายการการ์ดที่หายไป หากความยาวของรายการบัตรที่หายไปเป็นศูนย์เอาท์พุท "ไม่มีบัตรหายไป" มิฉะนั้นส่งออกรายการบัตรที่ขาดหายไป



1

PHP , 138 ไบต์

วิ่งไปด้วย -nและ-d error_reporting=0

ฉันใช้รหัสซ้ำจาก เก่าฉันทำซึ่งขอให้สร้างการ์ด

รหัส

<?$r=[];foreach([A,J,Q,K,2,3,4,5,6,7,8,9,10]as$t)array_push($r,$t.H,$t.S,$t.D,$t.C);
echo join(" ", array_diff($r,explode(" ",$argv[1])));

ลองออนไลน์!

คำอธิบาย

<?$r=[];   # Declare the array that will contain the full deck
# the next line will generate the arry with the full deck  
foreach([A,J,Q,K,2,3,4,5,6,7,8,9,10]as$t)array_push($r,$t.H,$t.S,$t.D,$t.C);
# explode the input string on each blank space and using array_diff to get the
# different elements withing both arrays. (and "echo" of course) 
echo join(" ", array_diff($r,explode(" ",$argv[1])));

คุณสามารถลดระดับลงได้ถึง 120 ด้วยการปรับแต่งเล็กน้อย 1) จบบรรทัดแรกด้วย?> แทนที่ 'echo' ด้วย <? = 2) การป้อนไพ่ในบรรทัดคำสั่งปกติที่มีช่องว่างจะเติม $ argv เป็นอาร์เรย์ที่มีแต่ละองค์ประกอบเป็นองค์ประกอบเพื่อให้คุณสามารถลบการระเบิด ( ) ทั้งหมด ลอง
640KB

ฉันไม่มีเงื่อนงำที่$argvสามารถทำงานเช่นนั้นได้ขอบคุณ @gwaugh
Francisco Hahn

โอ้ btw @gwaugh คำถามที่ว่าอาร์กิวเมนต์เป็นสตริงคั่นด้วยช่องว่างสามารถตั้งค่าอาร์กิวเมนต์หนึ่งโดยหนึ่ง
Francisco Hahn

หากคุณเรียกใช้บนบรรทัดคำสั่งเช่น: 'php deck.php 2S 5H JC' มันใช้งานได้เหมือนกับที่คุณคิดว่ามันเป็นสตริงที่คั่นด้วยช่องว่าง คุณแค่ปล่อยให้ PHP แยกวิเคราะห์ให้คุณ มันเป็นเพียง UI ของ TIO ที่ทำให้คุณแยกมันออกจากกัน
640KB

อ้อเข้าใจแล้ว. จะแก้ไขขอบคุณสำหรับ -bytes: D
Francisco Hahn



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