Here is a PlainLang program that solves Sudoku puzzles:
```
A right is a number.
A bottom is a number.

A cell is a thing with a box, a number and a given flag.

The puzzle is some cells.

To run:
Start up.
Clear the screen using the tan color.
Create the puzzle.
Fill the puzzle with "004103800708000601030080040390050062005030900280090073010060080803000104007908300".
Draw the puzzle. Display message "Press ENTER to solve". Wait for the enter key.
Solve the puzzle.
Draw the puzzle. Display message "Solved!".
Wait for the escape key.
Destroy the puzzle.
Shut down.

\ THE SOLVER

To solve the puzzle:
Get a blank cell. If the blank cell is nil, exit.
Loop.
Add 1 to a number. If the number is greater than 9, exit.
If the number is not valid in the blank, repeat.
Put the number into the blank.
\ Draw the puzzle. \ include to watch backtracking
Solve the puzzle. If the puzzle is solved, break.
Erase the blank cell.
Repeat.

\ THE CREATE AND FILL ROUTINES

To create the puzzle:
Make a big box 6-3/4 inches by 6-3/4 inches.
Center the big box on the screen.
Make a box 3/4 inch by 3/4 inch.
Move the box to the big box's left-top.
Loop.
Allocate memory for a cell. Append the cell to the puzzle.
Put the box into the cell's box.
Move the box right 3/4 inch. If the box is still in the big box, repeat.
Move the box to the left side of the big box.
Move the box down 3/4 inch. If the box is still in the big box, repeat.

To fill the puzzle from a string:
Privatize the string.
Loop.
If the string is blank, break.
Get a cell from the puzzle.
Get a byte from the string.
If the byte minus 48 is not between 1 and 9, repeat.
If the cell is nil, break.
Put the byte minus 48 into the cell's number.
Set the cell's given flag.
Repeat.

\ THE COLUMN, ROW, BLOCK AND PUZZLE BOX MAKERS

To put the puzzle's box into a box:
Put the largest number into a left.
Put the largest number into a top.
Put the smallest number into a right.
Put the smallest number into a bottom.
Loop.
Get a cell from the puzzle. If the cell is nil, break.
If the cell's left is less than the left, put the cell's left into the left.
If the cell's top is less than the top, put the cell's top into the top.
If the cell's right is greater than the right, put the cell's right into the right.
If the cell's bottom is greater than the bottom, put the cell's bottom into the bottom.
Repeat.
Make the box with the left and the top and the right and the bottom.

To put a cell's row into a box:
Put the cell's box into the box.
Put the puzzle's box's left into the box's left.
Put the puzzle's box's right into the box's right.

To put a cell's column into a box:
Put the cell's box into the box.
Put the puzzle's box's top into the box's top.
Put the puzzle's box's bottom into the box's bottom.

To put a cell's block into a box:
Put the puzzle's box into the box.
Put the cell's left minus the box's left divided by 2-1/4 inches into an offset.
Multiply the offset by 2-1/4 inches.
Add the offset into the box's left.
Put the cell's top minus the box's top divided by 2-1/4 inches into the offset.
Multiply the offset by 2-1/4 inches.
Add the offset into the box's top.
Put the box's left plus 2-1/4 inches into the box's right.
Put the box's top plus 2-1/4 inches into the box's bottom.

\ THE DECIDERS

To decide if a number is valid in a cell:
If the number is already in the cell's row, say no.
If the number is already in the cell's column, say no.
If the number is already in the cell's block, say no.
Say yes.

To decide if a number is already in a box:
Get a cell from the puzzle.
If the cell is nil, say no.
If the cell's box is not in the box, repeat.
If the cell's number is the number, say yes.
Repeat.

To decide if the puzzle is solved:
Get a cell from the puzzle.
If the cell is nil, say yes.
If the cell's number is not between 1 and 9, say no.
Repeat.

\THE HELPERS

To erase a cell:
Put 0 into the cell's number.

To get a blank cell:
Get a cell from the puzzle. If the cell is nil, break.
If the cell's given flag is set, repeat.
If the cell's number is not 0, repeat.
Put the cell into the blank cell.

To put a number into a cell:
Put the number into the cell's number.

\ THE DRAWING ROUTINES

To draw the puzzle:
Use the fat pen.
Loop.
Get a cell from the puzzle. If the cell is nil, break.
Draw the cell.
Draw the cell's block with the dark brown pen.
Repeat.
Refresh the screen.

To draw a cell:
Draw the cell's box with the lighter orange pen and the tan pen.
If the cell's number is 0, exit.
Put "osmosian" and 5/8 inch into a font.
If the cell's given flag is set, put "arial bold" and 5/8 inch into the font.
Convert the cell's number to a string.
Draw the string in the cell's box with the brown pen and the font and "center".

\ NOODLE STUFF

To clear the screen with a color:
Draw the screen's box with the color and the color.
Refresh the screen.

To display message a string:
Write the string under the puzzle's box.
Refresh the screen.

To write a string under a box;
To write a string below a box:
Privatize the box.
Put the box's bottom plus 1/8 inch into the box's top.
Put the box's top plus 1/4 inch into the box's bottom.
Draw the box with the tan pen and the tan pen.
Draw the string in the box with the brown pen and "center".
```
스도쿠 퍼즐을 푸는 플레인랭 프로그램이 있습니다:```오른쪽은 숫자입니다.아래쪽은 숫자입니다.셀은 상자, 숫자, 주어진 깃발이 있는 사물입니다.퍼즐은 몇 개의 셀입니다.실행합니다:시작하세요.황갈색을 사용하여 화면을 지웁니다.퍼즐을 만듭니다.퍼즐을 "004103800708000601030080040390050062005030900280090073010060080803000104007908300"으로 채웁니다.퍼즐을 그립니다. "풀려면 엔터 키를 누르세요"라는 메시지가 표시됩니다. 엔터 키를 누를 때까지 기다립니다.퍼즐을 풀어보세요.퍼즐을 그립니다. "해결됨!"이라는 메시지가 표시됩니다.탈출 키를 기다립니다.퍼즐을 파괴합니다.종료합니다.\ 해결사퍼즐을 풀려면:빈 셀을 가져옵니다. 빈 셀이 0이면 종료합니다.루프.숫자에 1을 더합니다. 숫자가 9보다 크면 종료합니다.빈칸에 숫자가 유효하지 않으면 반복합니다.빈칸에 숫자를 입력합니다.\ 퍼즐을 그립니다. \ 역추적을 보려면 포함퍼즐을 풀어보세요. 퍼즐이 풀리면 중단합니다.빈 칸을 지웁니다.반복합니다.\ 만들기 및 채우기 루틴퍼즐을 만들려면:6-3/4인치 x 6-3/4인치의 큰 상자를 만듭니다.큰 상자를 화면 중앙에 배치합니다.3/4인치 x 3/4인치 상자를 만듭니다.상자를 큰 상자의 왼쪽 상단으로 이동합니다.루프.셀에 메모리를 할당합니다. 셀을 퍼즐에 추가합니다.상자를 셀의 상자에 넣습니다.상자를 오른쪽으로 3/4인치 이동합니다. 상자가 여전히 큰 상자 안에 있으면 반복합니다.상자를 큰 상자의 왼쪽으로 이동합니다.상자를 3/4인치 아래로 이동합니다. 상자가 여전히 큰 상자 안에 있으면 반복합니다.문자열에서 퍼즐을 채우려면:문자열을 개인화합니다.반복합니다.문자열이 비어 있으면 끊습니다.퍼즐에서 셀을 가져옵니다.문자열에서 바이트 가져 오기.바이트에서 48을 뺀 값이 1에서 9 사이가 아니면 반복합니다.셀이 0이면 중단합니다.바이트에서 48을 뺀 값을 셀의 번호에 넣습니다.셀의 주어진 플래그를 설정합니다.반복합니다.\ 열, 행, 블록 및 퍼즐 상자 만들기퍼즐 상자를 상자에 넣으려면:가장 큰 숫자를 왼쪽에 넣습니다.가장 큰 숫자를 상단에 넣습니다.가장 작은 숫자를 오른쪽에 넣습니다.가장 작은 숫자를 하단에 넣습니다.루프.퍼즐에서 셀을 가져옵니다. 셀이 0이면 중단합니다.셀의 왼쪽이 왼쪽보다 작으면 셀의 왼쪽을 왼쪽에 넣습니다.셀의 윗부분이 아랫부분보다 작으면 셀의 윗부분을 아랫부분에 넣습니다.셀의 오른쪽이 오른쪽보다 크면 셀의 오른쪽을 오른쪽에 넣습니다.셀의 아래쪽이 아래쪽보다 크면 셀의 아래쪽을 아래쪽에 배치합니다.반복합니다.왼쪽과 위쪽, 오른쪽과 아래쪽이 있는 상자를 만듭니다.셀의 행을 상자에 넣으려면 다음과 같이 하세요:셀의 상자를 상자에 넣습니다.퍼즐의 왼쪽 상자를 상자의 왼쪽에 넣습니다.퍼즐의 오른쪽 상자를 상자의 오른쪽에 넣습니다.셀의 열을 상자에 넣으려면:셀의 상자를 상자에 넣습니다.퍼즐 상자의 윗부분을 상자의 윗부분에 넣습니다.퍼즐의 상자의 하단을 상자의 하단에 넣습니다.셀의 블록을 상자에 넣으려면:퍼즐의 상자를 상자에 넣습니다.셀의 왼쪽에서 상자의 왼쪽을 2-1/4인치로 나눈 값을 오프셋에 넣습니다.오프셋에 2-1/4인치를 곱합니다.상자의 왼쪽에 오프셋을 더합니다.셀의 상단에서 상자의 상단을 2-1/4인치로 나눈 값을 오프셋에 넣습니다.오프셋에 2-1/4인치를 곱합니다.상자의 상단에 오프셋을 더합니다.상자의 왼쪽에서 2-1/4인치를 더한 값을 상자의 오른쪽에 넣습니다.상자의 상단에서 2-1/4인치를 더한 값을 상자의 하단에 넣습니다.\ 결정자셀에 숫자가 유효한지 여부를 결정합니다:숫자가 이미 셀의 행에 있으면 '아니요'라고 말합니다.숫자가 이미 셀의 열에 있으면 '아니요'라고 말합니다.숫자가 이미 셀의 블록에 있으면 아니요라고 말합니다.예라고 말합니다.숫자가 이미 상자에 있는지 확인하려면:퍼즐에서 셀을 가져옵니다.셀이 0이면 '아니오'라고 말합니다.셀의 상자가 상자에 없으면 반복합니다.셀의 숫자가 숫자이면 '예'라고 말합니다.반복합니다.퍼즐이 풀렸는지 결정하기:퍼즐에서 셀을 가져옵니다.셀이 0이면 '예'라고 말합니다.셀의 숫자가 1에서 9 사이가 아니면 아니오라고 말합니다.반복합니다.\도움말셀을 지우려면:셀 번호에 0을 입력합니다.빈 셀을 얻으려면:퍼즐에서 셀을 가져옵니다. 셀이 0이면 중단합니다.셀의 주어진 플래그가 설정되어 있으면 반복합니다.셀의 번호가 0이 아닌 경우 반복합니다.빈 칸에 셀을 넣습니다.셀에 숫자를 입력하려면 다음과 같이 하세요:셀의 번호에 숫자를 입력합니다.\ 그림 그리기 루틴퍼즐을 그리려면:팻 펜을 사용합니다.루프.퍼즐에서 셀을 가져옵니다. 셀이 0이면 중단합니다.셀을 그립니다.짙은 갈색 펜으로 셀의 블록을 그립니다.반복합니다.화면을 새로 고칩니다.셀을 그립니다:연한 주황색 펜과 황갈색 펜으로 셀의 상자를 그립니다.셀의 번호가 0이면 종료합니다.글꼴에 "osmosian"과 5/8인치를 입력합니다.셀의 지정된 플래그가 설정된 경우 글꼴에 "돋움 굵게"와 5/8인치를 입력합니다.셀의 번호를 문자열로 변환합니다.갈색 펜과 글꼴 및 "가운데"를 사용하여 셀의 상자에 문자열을 그립니다.\ 국수 재료색으로 화면을 지우려면:색과 색으로 화면의 상자를 그립니다.화면을 새로 고칩니다.메시지를 문자열로 표시하려면:퍼즐의 상자 아래에 문자열을 씁니다.화면을 새로 고칩니다.상자 아래에 문자열을 작성하려면 다음과 같이 하세요;상자 아래에 문자열을 쓰려면 