태그 보관물: sliding-puzzle

sliding-puzzle

좋은 2048 보드입니까? 설명 될 수있는 경우

이것은 나의 첫 번째 질문이므로 의견에 대한 제안은 감사하겠습니다! 감사 😉

소개

2048 게임 의 가장 일반적인 전략 중 하나 는 결코 스 와이프하지 않는 것입니다 . 이렇게하면 모든 큰 숫자가 맨 위에 배치되고 아래쪽에있는 큰 숫자가 배치됩니다. 따라서이 전략을 올바르게 적용하면 보드는 항상 다음 패턴과 일치합니다.

확인할 패턴 / 작업

제출물은 전체 프로그램 또는 보드가 다음과 같이 설명 될 수있는 경우 진실한 값을 반환하는 함수 여야합니다. 보드의 각 열을 내려 가면 첫 번째 숫자가 열의 가장 높고 두 번째 숫자는 더 작아야합니다. 제 개수와 같거나, 등 좋은 2048 보드 최고 숫자 위에 모두되는 기판으로 정의된다. 이것은 code-golf 이므로 언어 ​​당 가장 짧은 코드 (바이트)가 이깁니다.

I / O

입력은 적절한 방법으로 수행 할 수 있습니다 (예 : 각각 4 개의 숫자를 포함하는 4 개의 배열 배열 또는 16 개의 숫자 배열). 4×4 보드를 나타내는 전체 숫자는 항상 16 개의 숫자입니다
. 출력은 입력의 실제 값이 “좋은 2048 보드”여야하고 그렇지 않은 경우 잘못된 값이어야합니다.

진실한 :

|-------------------|
| 16 |    | 64 |  8 |
|-------------------|
|  8 |    | 32 |  8 |
|-------------------|
|  4 |    | 32 |  2 |
|-------------------|
|  2 |    |    |    |
|-------------------|


|-------------------|
| 16 | 128| 64 | 32 |
|-------------------|
|  8 | 128| 32 |  8 |
|-------------------|
|  4 | 16 |  8 |  2 |
|-------------------|
|  4 |    |    |    |
|-------------------|

거짓 :

|-------------------|
| 16 |    | 64 |  8 |
|-------------------|
|  8 |    | 32 | 16 |
|-------------------|
| 32 |    | 128|  2 |
|-------------------|
|  2 |    |    |    |
|-------------------|


|-------------------|
| 16 | 128| 64 | 32 |
|-------------------|
|  8 |  32|    |  8 |
|-------------------|
|  4 | 16 |  8 |  2 |
|-------------------|
|  4 |    |    |    |
|-------------------|

노트

두 번째 거짓 테스트 사례를 살펴보십시오. 어딘가에 빈 값 (또는 0)이 있고 그 뒤에 0이 아닌 마지막 숫자보다 높은 값이 오는 경우에도 다음 값이 잘못되므로 거짓이어야합니다. 0은 0보다 높으므로 유효하지 않습니다.

행운을 빕니다!



답변

하스켈 , 21 바이트

all$scanr1 max>>=(==)

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

공백이 0 인 열 목록을 가져옵니다.


답변

05AB1E , 4 바이트

€{íQ

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

다른 두 가지 대답과 같습니다. 나는 이것이 다른 사람들이 대답 할 때까지 이것이 나의 마지막 것이라고 약속한다. 🙂


답변

APL (Dyalog) , 7 4 바이트

공백으로 0을 사용하여 4×4 행렬을 인수로 사용합니다.

⊢≡⌊⍀

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

⌊⍀ 수직 누적 최소값입니다

 와 동일

 수정되지 않은 논쟁?


답변

젤리 , 4 바이트

Ṣ€U⁼

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

열 배열로 입력하십시오. 임의 크기의 격자와 함께 작동합니다.


답변

R (+ pryr), 23 바이트

pryr::f(all(diff(x))<1)

어떤 기능으로 평가

function (x)
all(diff(x)) < 1

행렬을 입력으로 사용합니다.

     [,1] [,2] [,3] [,4]
[1,]   16    0   64    8
[2,]    8    0   32    8
[3,]    4    0   32    2
[4,]    2    0    0    0

매트릭스가 주어지면 diff행 내 차이를 자동으로 계산합니다 (놀랍게도이 도전에 대해 시도 할 때 까지이 기능을 알지 못했습니다).

     [,1] [,2] [,3] [,4]
[1,]   -8    0  -32    0
[2,]   -4    0    0   -6
[3,]   -2    0  -32   -2

좋은 보드에서는 이러한 값 중 어느 것도 1 이상이 될 수 없으므로 행렬 값이 적합한 지 테스트 <1하고 확인합니다 all.

     [,1] [,2] [,3] [,4]
[1,] TRUE TRUE TRUE TRUE
[2,] TRUE TRUE TRUE TRUE
[3,] TRUE TRUE TRUE TRUE

[1] TRUE


답변

자바 스크립트, 37 바이트

x=>''+x==x.map(v=>v.sort((x,y)=>y-x))

다음과 같이 호출하십시오.

|-------------------|
| 16 |    | 64 |  8 |
|-------------------|
|  8 |    | 32 |  8 |
|-------------------|
|  4 |    | 32 |  2 |
|-------------------|
|  2 |    |    |    |
|-------------------|

f([[8,8,2,0],[64,32,32,0],[0,0,0,0],[16,8,4,2]])

Firefox, Chrome, JavaScript Shell 및 Node.js에서 테스트되었습니다.


답변

파이썬 3 , 42 바이트

lambda l:all(x==sorted(x)[::-1]for x in l)

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

내 젤리 답변과 같은 알고리즘