낡은 타일 글자 맞추기 : B × 2, C × 2,

문제

숲 한가운데에 오두막에 갇혀 있으며, 오래된 스크래블만으로도 즐겁게 지낼 수 있습니다. 검사 결과 글자 맞추기가 너무 마모되어 각 글자의 점만 표시됩니다.

그럼에도 불구하고 당신은 게임을하기로 결정합니다. 가방에서 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와 같은 타일을 합리적으로 표현할 수 있습니다.

일반적인 규칙:

  • 이것은 이므로 바이트 단위의 최단 답변이 이깁니다.
    코드 골프 언어가 코드 골프 언어 이외의 언어로 답변을 게시하지 못하게하십시오. ‘모든’프로그래밍 언어에 대한 가능한 한 짧은 대답을 생각해보십시오.
  • 표준 규칙기본 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 개의 타일 그룹을 순환합니다 (이는 Gvs에 중요합니다 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

in

in=((20×n)mod44)mod32

  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_

각 그룹의 현재 위치는 객체 저장됩니다 .

o


답변

, 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"입니다.

온라인으로 사용해보십시오 .


답변

펄 5 , 71 바이트

@a=(__,'E'x7,DDDDGGG,BBCCMMP,FFHHVVW,K,1,1,JX,1,QZ);say chop$a[$_]for<>

온라인으로 사용해보십시오!


답변

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문자열 로 변환됩니다 .