TAS 골프
코드 골프 트위스트 가 포함 된 툴 지원 스피드 런 스타일 에서이 과제의 목표는 선택한 프로그래밍 언어로 NES를위한 오리지널 Super Mario Bros 게임 의 세계 1-1 을 가능한 한 적은 바이트로 완료하는 것입니다. 아래에서 설명 할 형식으로 게임 내 컨트롤러 입력 만 사용합니다. 프로그램은 다음과 같은 문제를 위해 특별히 작성된이 형식의 행 목록으로 출력해야합니다 .stdout
up down left right start select A B
첫 번째 프레임부터 각 줄 바꿈은 특정 프레임에 대한 컨트롤러 1의 입력을 나타냅니다. 프레임 당 단추의 순서는 중요하지 않으며 줄 바꿈이 아닌 공백으로 분리 할 수 있습니다. 한 줄에 모두 또는 전혀 또는 일부 단추 이름을 포함 할 수 있습니다. 예를 들어, D- 패드를 3 프레임 동안 오른쪽으로 누른 다음 A를 누르는 간단한 Python 프로그램은 다음과 같습니다.
for _ in range(3): print('right')
print('A')
그리고 출력 (확인하기 위해 에뮬레이터에 공급할 것임)은 다음과 같습니다.
right
right
right
A
여기서 우리는 '성공'을 위의 세계 1-1 끝에서 깃발에 도달하는 것으로 정의합니다. 이 예제의 파이썬 제출에 대한 점수 (성공하지 않은 경우)는 44 바이트 또는 원래 길이의 Python 프로그램입니다.
현재 가장 빠른 TAS 기반으로 생성 한 작업 입력 파일의 예는 다음 Github Gist를 참조하십시오. https://gist.github.com/anonymous/6f1a73cbff3cd46c9e1cf8d5c2ff58e1 이 파일은 전체 게임을 완료합니다.
서브 프레임 입력 을 입력 할 방법이 없습니다 . Player 2의 컨트롤러에는 입력을 입력 할 수있는 방법이 없지만 레벨이나 게임을 완료하는 데 필요하거나 유용하지 않아야합니다.
사용되는 SMB의 버전은 원래 USA / Japan iNES ROM (md5sum 811b027eaf99c2def7b933c5208636de)입니다. USA 버전은 일본어 버전과 동일하므로 작동합니다. ROM은 일반적으로 레이블이 붙어 Super Mario Bros (JU) (PRG 0)
있거나 비슷합니다.
제출물을 테스트하기 위해 프로그램을 실행하고 stdout
input.txt 파일로 파이프 한 mario.lua
다음이 과제에 대해 작성한 이 Lua 스크립트를 사용하여 FCEUX에로드합니다 .
for line in io.lines('input.txt') do
local t = {}
for w in line:gmatch("%S+") do
t[w] = true;
end;
joypad.set(1, t);
emu.frameadvance();
end;
while (true) do
emu.frameadvance();
end;
사용할 특정 명령은 fceux mario.nes --loadlua mario.lua
입니다. 결국에는 종료해야하지만 프로그램에는 시간 제한이 없습니다.
이것은 도움이된다면 FCEUX 영화 (.fm2) 파일을 스크립트의 input.txt로 변환하기 위해 만든 작은 Bash 원 라이너입니다.
cat movie.fm2 | cut -d'|' -f 3 | sed 's/\.//g' | sed 's/R/right /g' | sed 's/L/left /g' | sed 's/D/down /g' | sed 's/U/up /g' | sed 's/T/start /g' | sed 's/S/select /g' | sed 's/B/B /g' | sed 's/A/A /g' | tail -n +13 > input.txt
참고로, 다음은 세계 1-1의 고해상도지도입니다 (전체 해상도를 위해 새 탭에서 이미지 열기) : (source : mariouniverse.com )
참고 : 언뜻보기에 이것은 주어진 input.txt 파일에서 Kolmogorov 복잡성 문제처럼 보일 수 있습니다. 그러나 실제로 문제는 (a) 내가 제공 한 input.txt가 가장 짧지 않고 (b)이 형식으로 SMB에 대해 가장 짧은 키 누르기를 만들려는 시도가 없었기 때문에 그 문제보다 더 복잡합니다. . TAS로 알려진 '가장 작은 버튼'은 버튼을 오랫동안 누르고 있기 때문에이 도전에서 원하는 출력에 길이를 더할 수 있기 때문에 다릅니다.