브레인퍽 인터프리터
명령 여덟 개짜리 언어 브레인퍽을 브라우저에서 실행하고 테이프와 포인터가 어떻게 변하는지 보여줍니다. 칸 크기·입력 끝 처리·테이프 길이처럼 구현마다 갈리는 설정을 직접 바꿔 볼 수 있고, 무한 루프는 명령 수 상한에서 안전하게 멈춥니다.
> < + - . , [ ] 여덟 글자만 명령이고 나머지는 모두 주석입니다. 20,000자까지.
, 가 여기서 한 바이트씩 읽습니다. UTF-8 바이트로 바뀌어 들어가므로 한글 한 글자는 세 바이트입니다.
구현마다 다른 자리입니다. 남의 프로그램이 안 돌면 여기를 먼저 바꿔 보세요.
고전적으로 30,000칸입니다. 이보다 오른쪽으로 나가려 하면 멈춥니다.
출력
Hello World!
끝까지 실행했습니다. 명령 906개를 실행했습니다.
끝났을 때의 테이프 앞부분
파란 칸이 포인터가 멈춘 자리입니다. 테이프는 모두 30,000칸이고 여기에는 앞쪽만 보입니다.
사용 방법
- 1프로그램을 붙여 넣습니다. 여덟 명령 밖의 글자는 모두 주석입니다.
- 2, 로 읽을 입력이 있으면 입력란에 적습니다.
- 3출력과 실행한 명령 수를 확인합니다.
- 4테이프 앞부분에서 각 칸이 어떤 값으로 끝났는지 봅니다.
- 5칸 크기나 입력 끝 처리를 바꿔 결과가 달라지는지 확인합니다.
자주 묻는 질문
명령이 여덟 개뿐인 난해 언어(esoteric language)입니다. 테이프라 부르는 바이트 배열 하나와 그 위를 가리키는 포인터 하나만 있고, 포인터를 옮기는 > <, 값을 늘리고 줄이는 + -, 입출력을 하는 . ,, 반복문을 만드는 [ ]가 전부입니다. 1993년 우르반 뮐러가 만들었습니다.
있습니다. 브레인퍽은 튜링 완전이라, 원리적으로는 어떤 프로그램이든 브레인퍽으로 옮겨 적을 수 있습니다. 계산에 정말로 필요한 것이 얼마나 적은지 보여주는 예라서 계속 인용됩니다. 물론 「할 수 있다」와 「할 만하다」는 다른 이야기입니다.
구현마다 다른 세 자리 중 하나일 가능성이 큽니다. 칸의 크기(8비트면 255 다음이 0), 입력이 끝났을 때 , 가 하는 일(0을 넣거나 255를 넣거나 그대로 두거나), 테이프의 길이와 왼쪽 끝 처리입니다. 이 도구는 셋 다 바꿀 수 있게 해 두었으니 하나씩 옮겨 보세요.
칸 하나가 1바이트라 0~255만 담기고, 넘치면 한 바퀴 돌기 때문입니다. 이 순환을 일부러 쓰는 프로그램이 많습니다. [-] 로 칸을 0으로 만드는 관용구가 대표적이고, 값이 어떻든 1씩 줄이다 보면 반드시 0을 지나간다는 점을 이용합니다.
실행한 명령 수가 상한에 닿으면 멈추고 그 이유를 알려줍니다. 프로그램이 멈추는지 미리 알아내는 일은 정지 문제라 원리적으로 불가능하므로, 상한을 두는 것 말고는 방법이 없습니다. 상한이 없으면 +[] 한 줄로도 브라우저 탭이 굳습니다.
실행 전에 한 번 훑어 짝 표를 만들어 둡니다. ] 를 만날 때마다 앞으로 되짚어 짝을 찾으면 깊은 반복문에서 크게 느려지기 때문입니다. 짝이 맞는지 검사하는 일도 이때 함께 끝나서, 짝이 안 맞으면 한 명령도 실행하지 않고 어느 자리가 문제인지 알려줍니다.
있습니다. 출력한 바이트를 UTF-8로 읽으므로, 한글 한 글자에 해당하는 세 바이트를 차례로 찍으면 한글이 나옵니다. 입력도 UTF-8 바이트로 바뀌어 들어가므로 「가」 한 글자를 넣으면 , 가 세 번 필요합니다.
전송되지 않습니다. 프로그램 실행은 모두 브라우저 안에서 이뤄지고, 입력한 코드와 입력값은 이 기기에만 남습니다.
알아두면 좋은 점
- 널리 인용되는 Hello World 두 판을 검산값으로 고정했습니다. 중첩 반복문으로 값을 만드는 방식과 한 겹 반복문으로 만드는 방식인데, 둘 다 정확히 「Hello World!」와 줄바꿈 13바이트를 내야 합니다.
- 되뱉기(cat), 뒤집기, 두 수 더하기, 5×7 곱셈 판을 함께 검사합니다. 명령 하나하나가 아니라 프로그램 단위로 맞는지 보는 편이 회귀를 잘 잡습니다.
- 8비트에서 0−1이 255가 되는 것, 16비트·32비트에서는 각각 65,535와 4,294,967,295가 되는 것을 검사합니다. 같은 프로그램이 칸 크기에 따라 멈추기도 하고 안 멈추기도 한다는 것도 함께 확인합니다.
- 짝이 맞지 않는 대괄호는 한 명령도 실행하기 전에 잡고, 주석을 걷어낸 뒤의 위치가 아니라 원본에서 몇 번째 글자인지를 알려줍니다.
- 명령 수 상한은 200만, 출력 상한은 2만 바이트, 프로그램 길이는 2만 자입니다. 테이프는 기본 30,000칸이며 10만 칸까지 늘릴 수 있습니다.
- 테이프 왼쪽 끝에서 <를 하는 것은 고전적으로 정의되지 않은 동작입니다. 이 도구는 그 자리에서 멈추고 이유를 알려줍니다 — 조용히 넘어가면 그 뒤의 결과가 모두 의미를 잃기 때문입니다.
- 출력 바이트를 UTF-8로 읽어 글로 보여주지만, 원래 바이트 값도 함께 보여줍니다. 16비트 이상 칸에서 255를 넘는 값을 출력하면 낮은 한 바이트만 글자로 셉니다.
함께 보면 좋은 도구
마지막 검증: 2026년 9월 1일 · 결과는 참고용 추정치입니다.