상세 컨텐츠

본문 제목

[테트리스] solution-finder 소개

본문

이번에 소개 드릴 테트리스 관련 프로그램은 knewjade가 만든 Solution Finder[github 링크]입니다. 제가 블로그에 퍼펙트 클리어 확률을 올릴 때 사용하는 프로그램입니다.


목차

1. 설치 방법

2. 사용방법

3. 퍼펙트 클리어 확률·방법

3-1. 간단한 예시

3-2. field.txt의 설정

3-3. patterns.txt 설정

3-4. 퍼펙트 클리어 확률 조사

3-5. 퍼펙트 클리어 방법 조사

4. 마무리


관련 글


1. 설치 방법

우선은 설치 방법입니다. 아래 두 링크에 들어가셔서 프로그램을 다운 받으시면 됩니다.

[github 링크]

제작자 사이트입니다. 여기서는 solution-finder-0.700b3-GUI.zip 파일을 다운로드 받아 압축을 풀어 줍니다.


[Java 링크]

실행에 Java가 필요합니다. Oracle 공식 사이트에서 다운 받아서 설치합니다.


위 두 가지를 마치면 프로그램을 사용할 준비는 완료된 것입니다.


2. 사용방법

사용 방법에 관해서는 제작자가 이미 자세한 문서를 작성한 것이 있습니다.

제작자 설명서 (일본어)


따라서 제 글에서는 가장 많이 사용되는 퍼펙트 클리어 확률과 방법을 구하는 과정만 설명 드립니다. 이후에 질문이 올라오면 답변을 드리거나 본문 내용을 추가하겠습니다.


3. 퍼펙트 클리어 확률·방법

가장 흔하게 사용되는 퍼펙트 클리어 확률과 방법입니다. 우선 압축을 잘 풀었다면 파일이 아래와 같이 되어 있을 것입니다.

폴더


여기서 input 폴더에 들어가면 파일이 두 개 있습니다.

field.txt

patterns.txt


각각의 파일을 설정하는 방법과 퍼펙트 클리어 확률, 방법을 구하는 과정을 알아 봅니다.


3-1. 간단한 예시

자세한 정보를 알려 드리기 전에 우선 간단한 예시를 보여 드립니다. 어떤 흐름으로 이어지는지 알려 드리기 위한 것입니다. 가장 쉬운 예시이니 프로그램을 열고 한 번 따라해 보시기 바랍니다.


개막 퍼펙트클리어 빌드를 예로 들겠습니다. 아래와 같은 필드 상황에서 퍼펙트 클리어 확률을 구해 봅니다.

개막 퍼펙트클리어


▶ 1. 우선 input 폴더의 field.txt를 메모장이나 유사 프로그램으로 열어 봅니다.


▶ 2. field.txt 파일의 내용을 아래와 같이 바꾸고 저장합니다.

4

XXXX____XX
XXXX___XXX
XXXX__XXXX
XXXX___XXX


▶ 3. input 폴더의 patterns.txt를 메모장이나 유사 프로그램으로 열어 봅니다.


▶ 4. patterns.txt 파일의 내용을 아래와 같이 바꾸고 저장합니다.

*p4


모든 미노 중 4개의 미노를 뽑아 무작위로 배열한다는 의미입니다. 위 그림에서 퍼펙트 클리어에는 3개의 미노가 필요하고, 하나는 홀드를 할 수 있기 때문입니다. 총 840가지의 경우의 수가 있습니다.


▶ 5. starter 폴더의 run-perfect-percent.bat 파일을 실행합니다. Windows Defender SmartScreen의 경고가 뜰 것입니다. 윈도우10의 경우 '추가정보'를 누른 후 '실행'을 누릅니다.


▶ 6. cmd창이 아래와 같이 뜰 것입니다. 여기에서 스크롤을 올려서 결과물을 살펴 보아도 되고, output 폴더에 있는 last_output.txt 파일을 보아도 됩니다.

cmd 예시


스크롤을 올리거나 output 폴더에 있는 last_output.txt 파일을 열면 아래와 같은 글이 있을 것입니다.

# Setup Field

XXXX____XX

XXXX___XXX

XXXX__XXXX

XXXX___XXX


# Initialize / User-defined

Max clear lines: 4

Using hold: use

Drop: softdrop

Searching patterns:

  *p4


# Initialize / System

Threads = 4

Version = 0.700b3

Necessary Pieces = 3


# Enumerate pieces

Piece pop count = 4

Searching pattern size (duplicate) = 840

Searching pattern size ( no dup. ) = 840


# Search

  -> Stopwatch start

  -> Stopwatch stop : avg.time = 51 ms [1 counts]


# Output

success = 61.19% (514/840)


Success pattern tree [Head 3 pieces]:

* -> 61.19 %

∟ T -> 85.83 %

(이하 생략)


→ 퍼펙트 클리어에 필요한 미노는 3개이며(Necessary Pieces = 3)

→ 계산에 고려한 미노의 수는 4개이며(Piece pop count = 4)

→ 퍼펙트 클리어 확률은 61.19% (514/840)라는 결과입니다 (success = 61.19% (514/840)).


그리고 아래에는 처음에 어떤 미노가 나올 때 각각의 퍼펙트 클리어 확률은 얼마인지 나옵니다. 예를 들어 위 글에서 "∟ T -> 85.83 %"라고 되어 있는 것은, T가 처음 미노로 나온다면 퍼펙트 클리어 확률이 85.83퍼센트라는 것입니다.


▶ 7. 퍼펙트 클리어 확률을 알았으니 퍼펙트 클리어 방법을 알아 봅니다.

starter 폴더에 있는 run-path-link.bat 파일을 실행합니다.


▶ 8. 그러면 cmd창이 열릴 것입니다. 아래와 같은 내용이 보일 텐데 ⓐ퍼펙트 클리어 방법이 18가지 있으며, ⓑ중복을 제외하면 16가지 방법으로 퍼펙트클리어를 할 수 있다는 것입니다.

# Output file

Found path [unique] = 18

Found path [minimal] = 16


▶ 9. 구체적인 방법은 output폴더에 path_unique.html 파일과 path_minimal.html 파일을 통해 볼 수 있습니다. path_minimal.html 파일을 열면 아래와 같이 되어 있을 것입니다.

path_minimal 예시


각각의 해법을 눌러 보아도 좋고, 위의 All solutions를 통해 보셔도 좋습니다. All solutions를 누르면 아래 링크로 연결될 것입니다.


위 링크를 열면 아래와 같은 그림이 나올 것입니다. ▼次(다음) 버튼을 눌러 다음 방법을 볼 수 있고, ▲前(이전) 버튼을 눌러 이전 방법을 볼 수 있습니다.

fumen 예시


이 그림은 Fumen이라는 프로그램 기반으로 나오는데, Mihys라는 유저가 만든 테트리스 도면 프로그램입니다. 위 그림의 "11.4%"처럼 간단한 설명도 붙일 수 있습니다. solution-finder는 이 Fumen 프로그램을 기반으로 퍼펙트 클리어 방법을 안내합니다.


▶ 10. 이렇게 퍼펙트 클리어 확률과 방법을 알아 봤습니다. 이제 아래 글을 참고하여 자신이 궁금한 상황의 퍼펙트 클리어 확률과 방법을 알아 봅시다.


3-2. field.txt의 설정

먼저 field.txt를 메모장이나 유사 프로그램으로 열어 봅니다. 그러면 아래와 같이 되어 있을 것입니다.

4

XXXX______

XXXX______

XXXX______

XXXX______


위의 4는 없앨 줄의 수를 의미하고, 아래는 필드 형태를 나타냅니다. X는 차 있는 칸, _(underscore)는 비어 있는 칸입니다. 이 필드 파일을 자신이 원하는 형태로 수정합니다.


예를 들어 보겠습니다.


▶ 예시1

6줄 퍼펙트 클리어

퍼펙트 클리어 예시


위와 같은 필드에서 6줄 퍼펙트 클리어를 하려고 합니다. 이런 상황을 field.txt파일에 표현하면 아래와 같이 될 것입니다. X는 차 있는 칸, _는 비어 있는 칸입니다.

6

__________
______XXXX

______XXXX

XX__XXXXXX
X___XXXXXX
XX_XXXXXXX


▶ 예시2

흔히 사용하는 개막 퍼펙트 클리어의 경우 아래와 같은 모양이 됩니다.

개막 퍼펙트클리어


위 상황을 field.txt 파일에 표현하면 아래와 같이 될 것입니다.

4

XXXX____XX
XXXX___XXX
XXXX__XXXX
XXXX___XXX


만약 각 미노의 형태를 살리고 싶다면 아래와 같이 입력할 수도 있습니다. 확률이나 방법을 알아낼 때에는 도움이 안 되고, 나중에 결과물을 다른 사람에게 보여줄 때 도움이 될 수는 있습니다.

4

LLLI____SS

LOOI___SST

JOOI__ZZTT
JJJI___ZZT


field.txt을 원하는 대로 설정하였다면 저장합니다. 그리고 patterns.txt 파일로 넘어갑니다.


3-3. patterns.txt 설정

다음은 미노의 등장 패턴입니다. 퍼펙트 클리어 확률이나 방법이 궁금한데 특정 제약을 걸고 싶을 때가 있습니다. "I미노를 홀드한 상황에서의 퍼펙트 클리어 확률", "T미노가 없을 때의 퍼펙트 클리어 확률" 등입니다.


우선 patterns.txt를 메모장이나 유사 프로그램으로 열면 아래와 같이 되어 있습니다.

*p7


*p7의 의미는 "모든 미노를 한 개씩 사용함"입니다. 고등학교 수학시간에 순열(permutation)을 배우셨을 텐데, permutation과 마찬가지로 각 구성 성분을 순서대로 나열합니다.


여기에서 모든 미노란 IOTLJSZ 7종의 미노를 말합니다. 따라서 *p7의 경우 IOTLJSZ를 나열하는

7p7=7!=7*6*5*4*3*2*1=5040가지

경우의 수에 대하여 퍼펙트 클리어 확률을 조사합니다.


만약 7종의 미노가 가방으로 묶여 나온다는 사실을 모르시는 분이라면 아래 글을 먼저 읽어 보시기 바랍니다.


이제 몇 가지 예시를 들어 봅니다.


▶ 예시1

SZTIOLJ 순서로 나왔을 때 퍼펙트 클리어가 가능한지 궁금하다.

SZTIOLJ

1가지


▶ 예시2

IOTLJSZ 7종의 미노 중 하나만 선택하고 싶다.

[IOTLJSZ]

[IOTLJSZ]p1

*


셋의 결과값은 같습니다.

7가지


▶ 예시3

SZLJ에서 하나만 선택

[szlj]

[szlj]p1


둘의 결과값은 같습니다.

4가지


▶ 예시4

IOTLJ 중에 4개만 뽑아서 무작위로 배열하고 싶다.

[IOTLJ]p4

5C1*4p4=5*4*3*2*1=120가지


▶ 예시5

I를 홀드한 상황에서 IOTLJSZ 중에 4개를 배열하고 싶다. 개막 퍼펙트클리어 빌드에서 자주 나오는 상황입니다.

i,*p4

i, [iotljsz]p4


둘의 결과값은 같습니다.

1*7p4=7*6*5*4=840가지


▶ 예시6

SZTIOLJ에서 뒤의 OLJ는 고정하고 앞의 SZTI는 무작위로 배열하고 싶다.

[SZTI]!, OLJ

4p4*1=24가지


▶ 예시7

앞에 IOTL을 묶음으로 배열하고, 뒤에 JSZ를 묶음으로 배열하고 싶다.

[IOTL]!,[JSZ]!

4p4*3p3=4*3*2*3*2=144가지


▶ 예시8

이번 가방의 OJZSL, 다음 가방 전체, 다다음 가방 4개의 미노를 배열하고 싶다.

[OJZSL]!,*p7,*p4

이렇게 입력하여 16개 미노를 고려할 수도 있습니다. 하지만 이러면 경우의 수가 14,515,200개로 지나치게 많아져서 계산 시간이 너무 오래 걸립니다. 그리고 이렇게 계산하여 얻는 실익도 별로 없습니다.


이렇게 patterns.txt 파일을 원하는 대로 설정하였다면 저장하고 다음 단계로 넘어갑니다.


3-4. 퍼펙트 클리어 확률 조사

3-1에서 예시를 들었던 것을 다시 보겠습니다. solution-finder 폴더로 돌아갑니다. 아래와 같이 되어 있을 것입니다.

폴더


이제 결과물을 얻기 위해 starter 폴더로 들어갑니다. 그러면 아래와 같이 6개의 파일이 있습니다.

run-path-csv-pattern.bat

run-path-link.bat

run-perfect-percent.bat

run-perfect-percent-avoid-hold.bat

run-ren.bat

run-setup.bat


이 글에서 다룰 것은 퍼펙트 클리어 확률과 방법입니다. 


퍼펙트 클리어 확률이 궁금하다면 run-perfect-percent.bat 파일을 실행합니다. 그러면 cmd창이 뜨면서 글씨가 계속 나올 것입니다.


※ Windows Defender SmartScreen의 경고가 뜰 것입니다. 윈도우10의 경우 '추가정보'를 누른 후 '실행'을 누르면 됩니다. 해당 프로그램을 신뢰할 수 없다면 실행하지 않는 편이 좋을 것입니다.


※ 참고로 "run-perfect-percent-avoid-hold.bat" 파일은 홀드를 안 하는 상태에서의 퍼펙트 클리어 확률을 구하는 파일입니다. 하지만 최근의 테트리스는 거의 다 홀드 기능을 지원하기 때문에 사용할 일은 별로 없을 것입니다.


※ 이외에 "run-path-csv-pattern.bat"은 퍼펙트 클리어 방법을 csv파일로 출력하는 파일, "run-ren.bat"은 콤보, "run-setup.bat"은 특정 방식으로 쌓는 방법을 조사하는 파일입니다.


"계속하려면 아무 키나 누르십시오..." 메시지가 뜨면 계산이 완료된 것입니다. 스크롤을 올리거나 output 폴더에 있는 last_output.txt 파일을 열면 아래와 같은 글이 있을 것입니다.

# Setup Field

XXXX____XX

XXXX___XXX

XXXX__XXXX

XXXX___XXX


# Initialize / User-defined

Max clear lines: 4

Using hold: use

Drop: softdrop

Searching patterns:

  *p4


# Initialize / System

Threads = 4

Version = 0.700b3

Necessary Pieces = 3


# Enumerate pieces

Piece pop count = 4

Searching pattern size (duplicate) = 840

Searching pattern size ( no dup. ) = 840


# Search

  -> Stopwatch start

  -> Stopwatch stop : avg.time = 51 ms [1 counts]


# Output

success = 61.19% (514/840)


Success pattern tree [Head 3 pieces]:

* -> 61.19 %

∟ T -> 85.83 %

(이하 생략)


→ 퍼펙트 클리어에 필요한 미노는 3개이며(Necessary Pieces = 3)

→ 계산에 고려한 미노의 수는 4개이며(Piece pop count = 4)

→ 퍼펙트 클리어 확률은 61.19% (514/840)라는 결과입니다 (success = 61.19% (514/840)).


그리고 아래에는 처음에 어떤 미노가 나올 때 각각의 퍼펙트 클리어 확률은 얼마인지 나옵니다. 예를 들어 위 글에서 "∟ T -> 85.83 %"라고 되어 있는 것은, T가 처음 미노로 나온다면 퍼펙트 클리어 확률이 85.83퍼센트라는 것입니다.


3-5. 퍼펙트 클리어 방법 조사

역시 3-1에서 예시를 들었던 것을 다시 보겠습니다. starter 폴더에 있는 run-path-link.bat 파일을 실행합니다. 그러면 cmd창이 열릴 것입니다. "계속하려면 아무 키나 누르십시오..." 메시지가 뜨면 계산이 완료된 것입니다.


※ Windows Defender SmartScreen의 경고가 뜰 것입니다. 윈도우10의 경우 '추가정보'를 누른 후 '실행'을 누르면 됩니다. 해당 프로그램을 신뢰할 수 없다면 실행하지 않는 편이 좋을 것입니다.


아래와 같은 내용이 보일 텐데 ⓐ퍼펙트 클리어 방법이 18가지 있으며, ⓑ중복을 제외하면 16가지 방법으로 퍼펙트클리어를 할 수 있다는 것입니다.

# Output file

Found path [unique] = 18

Found path [minimal] = 16


구체적인 방법은 output폴더에 path_unique.html 파일과 path_minimal.html 파일을 통해 볼 수 있습니다. path_minimal.html 파일을 열면 아래와 같이 되어 있을 것입니다.

path_minimal 예시


각각의 해법을 눌러 보아도 좋고, 위의 All solutions를 통해 보셔도 좋습니다. All solutions를 누르면 아래 링크로 연결될 것입니다.


위 링크를 열면 아래와 같은 그림이 나올 것입니다. ▼次(다음) 버튼을 눌러 다음 방법을 볼 수 있고, ▲前(이전) 버튼을 눌러 이전 방법을 볼 수 있습니다.

fumen 예시


이 그림은 Fumen이라는 프로그램 기반으로 나오는데, Mihys라는 유저가 만든 테트리스 도면 프로그램입니다. 위 그림의 "11.4%"처럼 간단한 설명도 붙일 수 있습니다. solution-finder는 이 Fumen 프로그램을 기반으로 퍼펙트 클리어 방법을 안내합니다.


4. 마무리

이렇게 solution finder 프로그램을 이용해 퍼펙트 클리어 확률과 방법을 조사하는 과정을 알아 보았습니다.


이 프로그램에 관해서는 프로그램 제작자가 굉장히 자세한 설명서를 이미 작성해 두었습니다.

제작자 설명서 (일본어)


저도 프로그램을 사용하다 막히는 부분이 있으면 참고하고 있습니다. 굉장히 다양한 제약 상황에서의 퍼펙트 클리어 방법, 확률을 구할 수 있고, setup.bat 파일로 특정 방식으로 쌓는 방법을 조사할 수도 있습니다.


여러 방향으로 활용해 보셔서 즐거운 테트리스 생활을 누리실 수 있으면 좋겠습니다.


관련 글

반응형

관련글 더보기