문제
숲 한가운데에 오두막에 갇혀 있으며, 오래된 스크래블만으로도 즐겁게 지낼 수 있습니다. 검사 결과 글자 맞추기가 너무 마모되어 각 글자의 점만 표시됩니다.
그럼에도 불구하고 당신은 게임을하기로 결정합니다. 가방에서 7 개의 편지를 꺼내 트레이에 놓으면 해당 편지의 내용을 결정해야합니다.
따라서 일반적으로 점 목록이 있으면 가능한 모든 문자열 또는 문자 목록으로 변환됩니다.
스크 러블 타일 및 배포
- 빈 타일 2 개 (점수 0 점)
- 1 점 : E × 12, A × 9, I × 9, O × 8, N × 6, R × 6, T × 6, L × 4, S × 4, U × 4
- 2 점 : D × 4, G × 3
- 3 점 : B × 2, C × 2, M × 2, P × 2
- 4 점 : F × 2, H × 2, V × 2, W × 2, Y × 2
- 5 점 : K × 1
- 8 점 : J × 1, X × 1
- 10 점 : Q × 1, Z × 1
당신이 지점의 목록이있는 경우 그래서 [10,10,8,5,1,1,1]
다음 "QZJKEEE"
유효 할 것이지만 "QQJKEEE"
(가방 만 1 개 Q 타일 있기 때문에) 유효하지 않을 것이다
문제 별 규칙
- 모든 입력이 유효하고 항상 7 개의 타일이 있다고 가정 할 수 있습니다 (즉, 7 개의 10 포인트 타일 목록이 아니며 9 타일이 아님)
- 가방에서 이전에 타일을 가져 오지 않았다고 가정 할 수 있습니다 (따라서 분포는 위에 정의 된 영어 타일의 표준 분포입니다)
- 유효한 단어를 생성 할 필요는없고 유효한 문자열 만 생성하면됩니다.
- 각 타일마다 해당 문자가있는 한 문자열의 순서는 관련이 없습니다.
- 포인트는 위에 정의 된 표준 영어 글자 맞추기 타일 포인트를 기반으로합니다.
- 빈 타일의 경우 공백 문자 또는 밑줄 ‘_’을 출력 할 수 있습니다. 대문자 또는 소문자로 출력 할 수 있습니다.
- 답은 List, String, Array 또는 Sequence와 같은 타일을 합리적으로 표현할 수 있습니다.
일반적인 규칙:
- 이것은 code-golf 이므로 바이트 단위의 최단 답변이 이깁니다.
코드 골프 언어가 코드 골프 언어 이외의 언어로 답변을 게시하지 못하게하십시오. ‘모든’프로그래밍 언어에 대한 가능한 한 짧은 대답을 생각해보십시오. - 표준 규칙 은 기본 I / O 규칙으로 답변에 적용 되므로 STDIN / STDOUT, 적절한 매개 변수 및 반환 유형의 전체 프로그램과 함께 함수 / 방법을 사용할 수 있습니다. 당신의 전화.
- 기본 허점 은 금지되어 있습니다.
- 가능하면 코드 테스트와 링크를 추가하십시오 (예 : TIO ).
- 또한 답변에 대한 설명을 추가하는 것이 좋습니다.
테스트 사례
가능한 모든 값을 출력 할 수 있기 때문에 엄격한 테스트 사례를 정의하기가 어렵습니다.
유효한 반환 값 이 가능한 경우 :
[10,0,10,5,8,8,0] -> "Q ZKJX "
[1,1,1,1,1,1,1] -> "EEEEEEE"
[1,2,3,4,5,8,0] -> "NDBHKJ "
[2,2,2,2,2,2,2] -> "DGDGDGD"
잘못된 반환 값 이있는 경우 :
[10,0,10,5,8,8,0] -> "Q QKJX " - Too many Qs
[1,1,1,1,1,1,1] -> "EEEEEE " - Space is 0 points not 1
[1,2,3,4,5,8,0] -> "NDBH" - Too short
[1,2,3,4,5,8,0] -> "NDBHKJ I" - Too long
[1,2,3,4,5,8,0] -> "ÉDBHKJ1" - Contains none scrabble characters
[2,2,2,2,2,2,2] -> "GDGDGDG" - Contains too many Gs (case for invalid cycling)
답변
자바 스크립트 (ES6), 72 바이트
@supercat에서 제안한 더 짧은 변형
a=>a.map(o=n=>'?ED?BWQ?_EG?CFZ?_EDJMH?K?EGXPV'[n*9.4+(o[n]=7-~o[n])&31])
자바 스크립트 (ES6), 137 … 84 78 77 76 바이트
Neil의 사이클링 방법 을 사용하여 10 바이트 절약
타일 목록을 반환합니다. _
빈 타일에 사용 합니다.
a=>a.map(o=n=>"____FHVWGDGD_K__BCMPEEEE_ZQ__XJ"[n*20%44%32+(o[n]=-~o[n])%4])
어떻게?
각 포인트 수에 대해 각 그룹 의 두 번째 타일 부터 시작하여 정확히 4 개의 타일 그룹을 순환합니다 (이는 G
vs에 중요합니다 D
).
points | group | max. sequence
--------+-------+---------------
0 | ____ | __
1 | EEEE | EEEEEEE
2 | GDGD | DGDGDGD
3 | BCMP | CMPBCMP
4 | FHVW | HVWFHVW
5 | _K__ | K \
8 | _XJ_ | XJ }--- these letters may only appear once each
10 | _ZQ_ | ZQ /
이 모든 그룹은 31 문자의 단일 문자열로 저장됩니다.
____FHVWGDGD_K__BCMPEEEE_ZQ__XJ
^ ^ ^ ^ ^ ^ ^ ^
0 4 8 12 16 20 24 28
주의 : 결승전 "_"
은 "_XJ_"
에 액세스 할 수 없으므로에 저장하지 않아도됩니다 .
n | *20 | mod 44 | mod 32 | group
----+-----+--------+--------+-------
0 | 0 | 0 | 0 | ____
1 | 20 | 20 | 20 | EEEE
2 | 40 | 40 | 8 | GDGD
3 | 60 | 16 | 16 | BCMP
4 | 80 | 36 | 4 | FHVW
5 | 100 | 12 | 12 | _K__
8 | 160 | 28 | 28 | _XJ_
10 | 200 | 24 | 24 | _ZQ_
각 그룹의 현재 위치는 객체 저장됩니다 .
답변
숯 , 33 바이트
⭆觧⪪”&↖“Vh_z↶∕¡⌈∨₂χ¹‖◨⌊″”¶ι№…θκι
온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. 설명:
θ Input array
⭆ Map over elements and join
”...” Literal string " \nE\nDG\nBCMP\nFHVW\nK\n\n\nJX\n\nQZ"
⪪ ¶ Split on newlines
§ ι Indexed by current element
§ Cyclically indexed by
№…θκι Number of times current element has already appeared
Implcitly print
답변
젤리 , 31 30 27 26 바이트
“ñẒẎYñ(“Nut¦hß’ṃØA;€⁶ɓṢĖœị
문자 목록을 생성하는 정수 목록을 허용하는 모나드 링크.
-나의 이전, 아래의 엉망, 그리고 Nick Kennedy의 개선
출력은 입력과 동일한 순서로 제공되지 않습니다 (허용됨).
대답에 언어에 내 자신의 추가 2 개를 사용하면 자주 발생하지 않습니다! ( ṃ
그리고 ɓ
여기).
어떻게?
“...“...’ṃØA;€⁶ɓṢĖœị - Link: list of integers, V e.g. [10,1,0,3,2,1,10]
“...“...’ - list of base 250 integers [28089224382041, 77611203526272]
ØA - 'ABC...XYZ'
ṃ - base decompress (vectorises) ["EDMFKZZJZQ", "NGPYKZZXZZ"]
;€ - for €ach: concatenate:
⁶ - a space ["EDMFKZZJZQ ", "NGPYKZZXZZ "]
ɓ - start a new dyadic chain with swapped arguments - i.e. f(V,that)
Ṣ - sort [0,1,1,2,3,10,10]
Ė - enumerate [[1,0],[2,1],[3,1],[4,2],[5,3],[6,10],[7,10]]
œị - multi-dimensional index into " NEGMZQ"
(1-based and modular)
이전 @ 30
“²rṛʂṂø5=Ɓṇ^N¥Y»⁾tky;⁶s2ɓṢĖUœị
문자 목록을 생성하는 정수 목록을 허용하는 모나드 링크.
이 출력도 대소 문자가 혼합되어 있습니다 (허용됨).
어떻게?
“...»⁾tky;⁶s2ɓṢĖUœị - Link: list of integers, V e.g. [10,1,0,3,2,1,10]
“...» - compression of dictionary entries:
- "end", "GMP", "fyttes", "adj", and "xci" and the string "qz"
- "endGMPfyttesadjxciqz"
y - translate with:
⁾tk - ['t', 'k'] "endGMPfykkesadjxciqz"
;⁶s2ɓṢĖUœị - ...
- ...then like the above method (except U reverses each pair of indices)
" neGMzq"
답변
Pyth- 92 86 83 81 80 75 60 52 49 42 36 바이트
사용 가능한 문자가 튀어 나와 입력을 반복합니다. 나는 그 점 범주에 대해 7을 제공하는 각 문자 중 하나를 가지고 있습니다. 이제 압축 문자열 인코딩을 사용합니다.
K[M*L7c."B_êº çÑOÒ
7âCkÑ"\Lm.)@K
K Assign to K
[M Map list(for popping). Uses a quirk of M to splat each first
*L7 Map repeating each string by 7
c \L Split on occurrences of 'L'
."..." Packed string encoding of the needed letters
m (Q) Map on input (input is taken implicitly)
.) Pop. This returns the first element after removing it
@K Index into K
(d) The loop variable is given implicitly
Btw, 이것은 인코딩 전의 원래 문자 문자열 "_ E DG BCMP FHVW K JX QZ"
입니다.
답변
답변
05AB1E , 70 52 39 38 29 26 25 바이트
{ε.•3Oû}α›ηö‡.ÝŽ{•2ôÁyèNè?
-18 덕분에 바이트 @ExpiredData . @Maltysen 의 Pyth 응답
에서 크기 7까지 동일하게 사용하여 -13 바이트 . @JonathanAllan 의 Jelly 답변
포트를 생성하여 -9 바이트 이므로 그를 찬성해야합니다. @Emigna
덕분에 -3 바이트 .
문자 목록을 생성하고 소문자와 공백을 공백으로 사용합니다.
온라인으로 시도 하거나 더 많은 테스트 사례를 확인 하십시오 .
설명:
{ # Sort the (implicit) input-list
ε # Map each character `y` in this list to:
.•3Oû}α›ηö‡.ÝŽ{• # Push compressed string "endgmpfykkzzzzjxzzqz "
2ô # Split into parts of size 2
Á # Rotate it once towards the left so the space is leading
yè # Use integer `y` to index into the string-pairs
Nè # Then get the `N`'th character of the string-pair (with automatic
# wraparound), where `N` is the index of the loop
이 05AB1E 광산의 팁을 참조하십시오 (섹션 압축 문자열 사전의 일부에 어떻게? ) 이유를 이해하는 .•3Oû}α›ηö‡.ÝŽ{•
것입니다 "endgmpfykkzzzzjxzzqz "
.
이전 38 바이트 답변 :
.•Mñ&Àû«ì{₆v*Å+µ-•#ðšε7∍}IvDyèн©?ε®õ.;
온라인으로 시도 하거나 더 많은 테스트 사례를 확인 하십시오 .
설명:
.•Mñ&Àû«ì{₆v*Å+µ-• # Push compressed string "e dg bcmp fhvw k jx qz"
# # Split on spaces: ["e","dg","bcmp","fhvw","k","","","jx","","qz"]
ðš # Prepend a space to this list
ε7∍} # Extend each string to size 7:
# [" ","eeeeeee","dgdgdgd","bcmpbcm","fhvwfhv","kkkkkkk","","","jxjxjxj","","qzqzqzq"]
Iv # Loop `y` over the input-list:
Dyè # Get the `y`'th string from a copy of the list
н # Get it's first character
©? # Store it in the register, and print it without trailing newline
ε # Then map each string in the list to:
®õ.; # Remove the first occurrence of the character from the register
이 05AB1E 광산의 팁을 참조하십시오 (섹션 압축 문자열 사전의 일부에 어떻게? ) 이유를 이해하는 .•Mñ&Àû«ì{₆v*Å+µ-•
것입니다 "e dg bcmp fhvw k jx qz"
.
답변
C (gcc) , 110 바이트
_[]={0,7,14,21,0,0,22,0,24};f(char*s){for(;*s+1;s++)*s=*s?*s-1?"DDDDGGGBBCCMMPFFHHVVWKJXQZ"[_[*s-2]++]:69:32;}
용도 _
정적 스트링 인덱스로 배열 "DDDDGGGBBCCMMPFFHHVVWKJXQZ"
동적으로 0과 1에 대한 예외가있다.
인수는 -1
종결 된 점수 배열로, 그 자리에서 종료 된 -1
문자열 로 변환됩니다 .