X 윈도우 시스템과 함께 제공되는 데모 프로그램 인 Xeyes를 기억하거나 기억하지 못할 수도 있습니다. 그 목적은 마우스 커서를 따라 한 쌍의 눈을 그리는 것입니다.
당신의 도전은 ASCII 아트로 Xeyes를 재현하는 것입니다. 사용자가 클릭 할 때마다 두 개의 ASCII 아트 아이 (아래에 지정된)를 그리는 프로그램 또는 함수를 작성하고 커서 방향을 가리 키도록 동공을 이동하십시오.
위의 GIF는 이 골퍼가 아닌 Ruby 구현에 대한 기록이며 , 최신 Ruby 버전에서 실행할 수 있습니다. Xterm 제어 시퀀스에 대한 참조로 유용 할 수도 있습니다.
사양
이것은 code-golf 이므로 가장 적은 바이트를 가진 솔루션이 승리합니다.
이것이입니다 아스키 - 예술 프로그램이-특히 문자 ASCII를 사용하여 그릴 수 있어야하므로, 도전, 문자 -
, .
, |
, '
, 0
, 공간, 줄 바꿈. 1 2
이는 대화식 문제이므로 프로그램에서 입력을 수락하고 출력을 실시간으로 그려야합니다. 삼
프로그램이 입력을 수락하기 전에 최소 20 행과 20 열의 빈 캔버스를 초기화해야합니다. 사용자가 캔버스를 클릭 할 때까지 아무것도 그리면 안됩니다.
사용자 가 캔버스에서 4 를 클릭 할 때마다 프로그램은 이전 출력을 지우고 마우스 커서 위치에서 가장 가까운 문자를 중심으로 이러한 ASCII 눈을 캔버스에 그려야합니다. 5 6 (아래, ✧
마우스 커서를 나타내며 그려서는 안됩니다.)
.---. .---.
| | | |
| 0|✧|0 |
| | | |
'---' '---'
동공이 커서를 어떻게 가리키는 지 확인하십시오.
언제든지 캔버스에 마우스 커서 이동, 그들이 커서를 향해 가리키는 계속되도록 학생들을 다시 그려야 프로그램, 7 예 :
✧
.---. .---.
| 0| | 0|
| | | |
| | | |
'---' '---'
학생을 가리키는
각 눈의 안쪽 9 자 위치를 다음과 같이 열거했다고 가정합니다.
.---.
|678|
|591|
|432|
'---'
동공은 위치 중 하나에 그려집니다 1
- 9
. 어느 쪽을 결정하려면 문자가 정사각형이고 척수가 문자의 중심이 9
(0, 0), 중심이 1
(1, 0) 등인 데카르트 그리드 인 척합니다 . 프로그램이 입력 또는 클릭 또는 이동을 수신하면 입력 위치를 가장 가까운 그리드 좌표 𝑀에 매핑해야합니다. 𝑀가 (0, 0)이면, 동공은 (0, 0), 즉 9
위 의 위치에 그려 져야합니다 . 그렇지 않으면 아래에 설명 된대로 그려야합니다.
그리드에 중첩 된 직교 평면을 상상해 1 – 8의 숫자로 나눈다 고 상상해보십시오 .
팔분 𝑀 내에 놓이는 경우 1 , 그 동공의 위치로 연신한다 1
(1, 0)에서 위, 즉. 만약 𝑀이 2 번 에 있다면, 그다음에 그려 져야합니다 2
. 예를 들어, 아래 이미지는 마우스 커서가 특정 위치에있을 때 동공을 그려야하는 위치에 따라 색으로 구분 된 그리드의 일부를 보여줍니다. 예를 들어, 커서가 녹색 좌표 중 하나에있을 때 (그리드 좌표는 모서리가 아닌 정사각형 중심에 있음을 명심하십시오) 동공은에서 그려야 4
합니다.
두 눈의 동공은 독립적으로 움직이므로 각 눈마다 눈의 중심을 기준으로 𝑀로 과정을 반복합니다.
노트
이것은 그래픽 출력 문제 가 아닙니다 . 출력은 문자 그리드 여야합니다. 물론 그래픽 루틴을 사용하여 문자 그리드를 그릴 수도 있습니다.
공백이 그려 질 수도 있지만 오히려 그려지지 않을 수도 있습니다. 격자의 빈 자리는 공백 문자와 동일하게 보이며 동등한 것으로 간주됩니다.
여기서 "실시간"은 입력과 해당 출력 사이의 200ms 미만으로 정의됩니다.
입력 할 마우스 버튼과 프레스 또는 릴리스가 "클릭"을 구성하는지 여부는 사용자의 판단에 달려 있습니다.
캔버스를 비우거나 시각적으로 동등한 것을 달성해야합니다. 예를 들어, 터미널 기반 솔루션의 경우 이전 캔버스 아래에 새 캔버스를 인쇄하는 것은 동등한 것으로 간주되지 않습니다.
사용자가 캔버스의 가장자리 근처를 클릭하여 일부 눈 캐릭터가 가장자리를 넘어서 그려 질 때 동작은 정의되지 않습니다. 그러나 후속 클릭시 프로그램은 계속 정상적으로 실행되어야합니다.
마우스 커서가 "캔버스"를 벗어나면 동작이 정의되지 않지만 커서가 캔버스에 다시 입력 될 때 프로그램이 계속 정상적으로 실행되어야합니다.
출력을 가리지 않는 한 텍스트 커서가 캔버스에 나타날 수 있습니다.
표준 허점은 금지되어 있습니다.
<pre>
또는 font-family:monospace
).