터치 화면이 널리 쓰이면서 컴퓨터를 다루는 방식이 달라졌다. 터치 인터페이스에서 자주 쓰는 착상 하나는 화면 위의 물체가 물리 법칙을 따르는 것처럼 움직이게 만드는 것이다. 이 문제에서 그 예를 구현한다.
휴대폰 윈도 매니저 시뮬레이터를 만들어야 한다. 화면은 직사각형이고 직사각형 윈도를 0개 이상 완전히 담는다. 어떤 윈도도 화면 경계를 넘지 않고, 두 윈도가 서로 겹치지도 않는다. 시뮬레이터는 명령 네 가지를 지원한다.
OPEN x y w h: 왼쪽 위 모서리가 (x,y)이고 너비가 w 픽셀, 높이가 h 픽셀인 윈도를 새로 연다.CLOSE x y: 픽셀 (x,y)를 포함하는 윈도를 닫는다. 사용자는 윈도의 아무 곳이나 두드려서 닫을 수 있다.RESIZE x y w h: 픽셀 (x,y)를 포함하는 윈도의 크기를 너비 w, 높이 h로 바꾼다. 왼쪽 위 모서리는 움직이지 않는다.MOVE x y dx dy: 픽셀 (x,y)를 포함하는 윈도를 가로로 dx 픽셀 또는 세로로 dy 픽셀 옮긴다. dx와 dy 중 0이 아닌 값은 많아야 하나다.OPEN과 RESIZE는 결과로 생기는 윈도가 다른 윈도와 겹치지 않고 화면 안에 그대로 들어갈 때만 성공한다. MOVE는 요청한 픽셀 수만큼 최대한 옮긴다. dx가 30인데 오른쪽으로 15픽셀만 갈 수 있다면 15픽셀만 간다.
옮기는 윈도가 다른 윈도에 부딪히면 그 윈도를 같은 방향으로 필요한 만큼 밀어낸다. 실제 물체가 부딪히는 것과 같다. 밀린 윈도가 또 다른 윈도를 만나면 그 윈도도 함께 밀린다. 그림 1은 윈도가 세 개 있는 상황에서 윈도 A를 오른쪽으로 옮겨 나머지 둘을 함께 미는 모습이다.

그림 1: 윈도를 두 개 미는 MOVE
첫째 줄에 화면의 가로 크기 xmax와 세로 크기 ymax가 픽셀 단위 양의 정수로 주어진다. 둘 다 109 이하다. 화면의 왼쪽 위 픽셀 좌표는 (0,0)이다.
다음 줄부터 위에서 설명한 명령이 한 줄에 하나씩 주어진다. 명령 이름과 인자는 공백 하나 이상으로 구분한다. 인자는 모두 정수이고 0≤x<xmax, 0≤y<ymax, 1≤w,h≤109, ∣dx∣,∣dy∣≤109을 만족한다. 명령은 많아야 256개다.
명령을 입력에 나온 순서대로 시뮬레이션한다. 명령 번호는 1부터 센다. 명령을 시뮬레이션하다가 오류가 생기면 명령 번호와 명령 이름, 그리고 아래 목록에서 처음으로 들어맞는 메시지를 한 줄에 출력하고, MOVE의 예외를 빼면 그 명령의 결과는 반영하지 않는다. 형식은 다음과 같다.
Command N: NAME - message
no window at given position: CLOSE, RESIZE, MOVE에서 주어진 위치를 포함하는 윈도가 없을 때.window does not fit: OPEN, RESIZE에서 결과로 생기는 윈도가 다른 윈도와 겹치거나 화면 경계를 넘을 때.moved d' instead of d: MOVE에서 윈도를 d 픽셀 옮기라고 했지만, 어떤 윈도가 화면 경계를 넘어야 하는 상황이 되기 전까지 d′ 픽셀만 옮길 수 있었을 때. d와 d′은 각각 요청한 거리와 실제로 옮긴 거리의 절댓값이다. 이때도 윈도는 더 짧은 거리만큼 실제로 움직인다.명령을 모두 시뮬레이션하고 오류 메시지를 모두 출력한 뒤, 아직 열려 있는 윈도의 개수 k를 다음 형식으로 출력한다.
k window(s):
그 다음 열린 순서대로 윈도마다 한 줄씩, 왼쪽 위 모서리의 좌표 x와 y, 너비, 높이를 공백 하나로 구분해 출력한다.