딜러가 느슨하고 자신의 덱에 포함 된 카드와 누락 된 카드를 추적하지 못했습니다. 도와 드릴까요?
완전한 데크는 52 장의 카드로 구성됩니다.
데크의 각 색상 (하트, 다이아몬드, 스페이드, 클럽)에는 다음이 포함됩니다.
- 숫자 [2-10]
- 잭
- 여왕
- 왕
- 에이스
직무
프로그램은 줄 바꾸기를 읽을 때까지 STDIN에서 데크 내용을 읽습니다. 입력이 “nX nX nX nX”등의 형식이라고 가정 할 수 있습니다.
- n-[2-10] 또는 ‘J’, ‘Q’, ‘K’또는 ‘A’ 사이의 숫자 (숫자가 아닌 문자에 대해서만 대문자로 가정 할 수 있음)
- X-다음 중 하나 : ‘H’, ‘D’, ‘S’, ‘C'(대문자 만 사용할 수 있음)
어디:
- ‘J’= 잭
- ‘Q’= 여왕
- ‘K’= 왕
- ‘A’= 에이스
과
- ‘H’= 하트
- ‘D’= 다이아몬드
- ‘S’= 스페이드
- ‘C’= 클럽
입력에 중복이 없다고 가정 할 수 있습니다.
그런 다음 프로그램은 입력 ( “nX nX nX”)과 같은 방식으로 데크에서 누락 된 카드를 STDOUT으로 인쇄하거나 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
행복한 골프!
답변
Windows 배치 (CMD), 205204 바이트
@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%
슈트를 반복하고 완전한 데크를 구축 한 다음 입력 카드를 삭제합니다. T
대신에 1 바이트를 저장하십시오 10
. 명령 행 인수가 허용 가능한 경우 11 바이트를 저장하십시오. 편집 : @ user202729 덕분에 1 바이트가 절약되었습니다.
답변
파이썬 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')
가능한 모든 카드를 세트로 가져 와서 입력 카드를 뺍니다.
내 코드에서 여분의 공간을 가리키는 mbomb007 덕분에 -1 바이트.
파이썬 2로 수행 할 수있는 일부 골프를 지적 해준 mbomb007 덕분에 -1 바이트 (-5 바이트 및 raw_
in에서 +4 바이트 raw_input
)
-7 바이트는 값을 사용하여 목록 이해 대신 세트 및 세트 빼기를 사용하여 -7 바이트로 전환하여
-7 바이트
Datastream 덕분에 list
스위트
-2 바이트 가 필요하지 않다는 것을 지적했기 때문에 모든 값을 쓰는 것이
ValueInk 덕분에 이전 -2 바이트 의 이상한 것보다 바이트 효과가 뛰어납니다. 그 세트는 생성기를 사용할 수 있으므로 목록 이해에 넣을 필요가 없습니다.
파이썬 3으로 다시 전환하면 더 다운 할 수 있다고 Datastream 덕분에 -2 바이트 덕분에 … (인쇄 후 parens의 경우 +2, 인쇄의 경우 -4 raw_
)
-Lulhum 덕분에 -5 바이트 파이썬 2 (!!!)로 다시 전환하면 바이트를 절약 할 수 있습니다 (범위를 다시 사용하고 대신 백틱을 사용 str(
하고으로 인해 +4 raw_
)
답변
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
답변
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)
답변
젤리 , 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
답변
C #, 343 바이트
내 골프 중 하나를 처음 게시하는 것은 좋지 않은 경쟁자가 아닙니다. 나는 이것을 더 줄일 수 있다고 확신한다.
그 뒤에 아이디어는 카드의 발생을 저장하는 희소 배열입니다. 다른 값과 ASCII의 ASCII 값으로 계산 된 인덱스는 서로 곱한 것입니다 (예 : 스페이드 에이스 (AS)는 인덱스 영역에 저장됩니다 (65 * 83 = 5395)). 이런 식으로, 각 유형의 카드는 “map”배열에 존재하는지 나중에 확인할 수있는 고유 인덱스를 얻습니다.
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");}
답변
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
배열). 이 배열은 |%{}
도우미 $i
를 설정 하는 루프에 공급 된 다음 슈트를 반복하여와 결과를 연결합니다 $i$_
. 이 루프의 끝에는 다음과 같은 문자열 배열이 있습니다 ("2C", "2S", "2H", ... "AH", "AD")
. 해당 배열은 입력 을 정규화 하는 요소로 필터와 함께 Where-Object
( |?{}
) 로 공급됩니다 . 해당 필터링 결과는에 저장됩니다 .$_
-notmatch
$n
$a
그런 다음, 우리는 의사 원을 사용하여 ( , )[]
선택 여부를 우리 출력 'No missing cards'
또는 $a
여부에 따라, !!$a
부울에 회전 $false
또는 $true
. $a
비어있는 경우 (갑판의 모든 카드가 입력에 있음을 의미) !!$a
가 0
이므로 "No missing cards"
가 선택됩니다. $a
선택에 대한 반대의 경우도 마찬가지입니다 . 두 경우 모두 파이프 라인에 남아 있으며 출력은 암시 적입니다.