점수
이 섹션은 제출이 입력되면 채워집니다.
표준
1. bopjesvla Perl 54
2. edc65 Javascript (ES6) 91
3. name language score
4. name language score
5. name language score
보너스 라운드
1. name language score
2. name language score
3. name language score
4. name language score
5. name language score
카렐 제이 알파 봇
배경
Java에 대한 인기있는 입문 과정은 Karel J. Robot입니다 (직접 사용하고 있습니다). 로봇은 거리 그리드 (양의 정수 y 좌표) 및 도로 (양의 정수 x 좌표)와 그리드에 배치하고 저장할 수있는 신호음과 상호 작용합니다 (Karel 및 모든 신호음은 격자에만 존재할 수 있음에 유의하십시오) 포인트들). Karel (로봇)은 5 가지 동작 만 수행합니다. 앞으로 1만큼 이동하고, 왼쪽으로 돌리고, 신호음을 내고, 신호음을 내고, 끄십시오.
내 컴퓨터 과학 수업에서 우리의 첫 번째 임무 중 하나는 Karel이 우회전, 돌고, 1 씩 앞으로 나아가고 신호음을 내리는 결합 된 행동을 수행하는 방법을 배우도록 프로그램하는 것이 었습니다. 며칠 후 과제는 이러한 방법을 사용하고 알파벳 문자를 생성하는 새로운 방법을 작성하는 것이 었습니다.
당연히이 과제를 마치면 알파벳의 모든 문자와 10 자리 숫자를 만드는 더 많은 방법을 작성했으며 로봇에서 일종의 워드 프로세서를 만드는 방법을 알아낼 계획입니다. STDIN에 입력되고 로봇은 문자와 유사한 방식으로 신호음을 그리드에 놓습니다.
private void draw#
각 문자에 대해 쓸 때마다 #
필요한 명령 순서의 약어를 알려주는 주석을 추가했습니다.
나는 다음과 같은 명령 (의사 코드로 작성 됨)을 가지고 있습니다 (설명-유일 하게 유용한 명령입니다).
Turn Left
Rotate the robot 90˚ counterclockwise
Abbreviated as "l"
Turn Right
Rotate the robot 90˚ clockwise
Abbreviated as "r"
Move
Move one space forwards
Abbreviated as "m"
Put Beeper
Put a beeper on the spot that Karel is on
Abbreviated as "p"
Drop Beeper
Move, then Put Beeper
Abbreviated as "d"
Turn Around
Turn Left, then Turn Left
Abbreviated as "a"
정황
로봇은 다음 순서로 진행해야합니다.
- 로봇은 글자가 그려지는 최소 영역의 5xN 직사각형 왼쪽 하단에서 시작합니다.
- 로봇이 편지를 그립니다.
- 로봇이 직사각형의 오른쪽 하단으로 이동합니다.
- 로봇은 오른쪽으로 2 칸 이동 하며 북쪽 / 위를 향해야합니다
예를 들어 봅시다. 우리가 그리기를 원한다고 가정하자 A
. 로봇의 위치는 방향 (북쪽, 남쪽, 동쪽, 서쪽)을 나타내는 문자입니다. 로봇이 신호음이없는 지점에 있으면 문자가 대문자로 표시되고 로봇이 신호음이없는 위치에 있으면 소문자로 표시됩니다. o
신호음이있는 반점과 신호음 .
이없는 반점을 나타냅니다.
나중에 볼 수 있듯이 A
이것입니다.
.ooo.
o...o
ooooo
o...o
o...o
가능한 해결책은 다음과 같습니다.
Grids ..... ..... ..... ..... ..... ..... ..... ..... .....
..... ..... ..... ..... ..... ..... ..... ..... .....
..... ..... ..... N.... E.... oE... ooE.. oooE. oooW.
..... ..... N.... o.... o.... o.... o.... o.... o....
n.... N.... o.... o.... o.... o.... o.... o.... o....
Letters p d d r d d d a
..... ..... ..... ..... ..... n.... e.... .E... .oE..
..... ..... ..... ..... N.... o.... o.... o.... o....
ooWo. oWoo. Wooo. Nooo. oooo. oooo. oooo. oooo. oooo.
o.... o.... o.... o.... o.... o.... o.... o.... o....
o.... o.... o.... o.... o.... o.... o.... o.... o....
m m m r d m r d d
.ooE. .oooe .ooos .ooo. .ooo. .ooo. .ooo. .ooo.
o.... o.... o.... o...S o...o o...o o...o o...o
oooo. oooo. oooo. oooo. ooooS ooooo ooooo ooooo
o.... o.... o.... o.... o.... o...S o...o o...o
o.... o.... o.... o.... o.... o.... o...S o...E
d m r d d d d l
mml
네 번째 글 머리 기호를 완성하는 마지막 글은 모든 문자에 나타나고 위에서 제안한 솔루션의 모든 항목에 다시 두 개의 열을 추가하고 싶지 않기 때문에 암시 적입니다.
따라서 한 가지 해결책 A
은 pddrdddammmrdmrdddmrddddlmml
입니다.
이것이 귀하의 솔루션 일 필요는 없습니다. 알고리즘은 모든 열을 통과하여 신호음을 적절한 위치에 배치하고 다른 신호음이 배치되거나 배치되는 위치에 의존하지 않습니다. 알고리즘이 무엇이든 로봇은 그리드의 공간 당 하나의 신호음을 배치 할 수 있습니다.
프로그램
프로그램은 문자의 그리드가 무엇인지 5xN 그리드로 입력합니다. 입력에는 로봇이 없습니다. 로봇은 북쪽을 향한 왼쪽 하단 (남서쪽) 모서리에있는 것으로 가정합니다.
출력은 시퀀스의 속기 문자 시퀀스입니다.
샘플 입력
.ooo.
o...o
ooooo
o...o
o...o
o...o.ooooo
o...o...o..
ooooo...o..
o...o...o..
o...o.ooooo
샘플 출력
pddrdddammmrdmrdddmrddddlmml
prmmmlmlmmdrdrdddlmlmmdrdrmmmdrddddlmmlprdddlmldmmrmrmdmlmldmmrdrddddrmmmdlmml
이것은 코드 골프입니다. 표준 CG 규칙이 적용됩니다. 바이트 단위의 최단 코드가 이깁니다.
보너스 라운드
규칙
보너스 라운드에 참여하려면 코드를 효율적으로 이동하십시오! 아래는 내 프로그램이 실행될 때 만드는 5x5 글자 모두의 라이브러리입니다. 보너스 라운드의 목표는 ABCDEFGHIJKLMNOPQRSTUVWXYZ
가능한 적은 움직임을 포함 하는 시퀀스를 인쇄하는 프로그램을 작성하는 것 입니다. STDIN에 입력이 없습니다. 코드 채점 것 없는 코드의 길이에 그러나 그것의 "이동 점수." 이동 점수는 사각형의 모든 지점을 방문하는 스위퍼 알고리즘을 사용하지 않도록 설계되었습니다.
d: 1
l: 1
m: 4
p: 1
r: 1
편지
.ooo. oooo. ooooo oooo. ooooo ooooo .oooo o...o
o...o o...o o.... o...o o.... o.... o.... o...o
ooooo oooo. o.... o...o oooo oooo. o.ooo ooooo
o...o o...o o.... o...o o.... o.... o...o o...o
o...o oooo. ooooo oooo. ooooo o.... oooo. o...o
ooooo ....o o...o o.... ooooo o...o ooooo oooo.
..o.. ....o o..o. o.... o.o.o oo..o o...o o...o
..o.. ....o oo... o.... o.o.o o.o.o o...o oooo.
..o.. o...o o..o. o.... o...o o..oo o...o o....
ooooo .ooo. o...o ooooo o...o o...o ooooo o....
oooo. oooo. ooooo ooooo o...o o...o o...o o...o
o..o. o...o o.... ..o.. o...o o...o o...o .o.o.
o..o. oooo. ooooo ..o.. o...o .o.o. o.o.o ..o..
oooo. o..o. ....o ..o.. o...o .o.o. o.o.o .o.o.
....o o...o ooooo ..o.. ooooo ..o.. ooooo o...o
o...o ooooo
.o.o. ...o.
..o.. ..o..
.o... .o...
o.... ooooo
원래의 도전과 동일한 절차를 따라야합니다. 각 문자 사이에 공백을두고 한 번에 하나씩 문자를 그려야합니다.
표준 CG 규칙이 적용됩니다. 이동 점수가 가장 낮은 항목이 이깁니다.
요약하면 두 코드 모두 본질적으로 동일한 작업을 수행합니다. 첫 번째 코드는 코드에서 최소 바이트 수를 가져야하고 두 번째 코드는 가장 적은 수의 이동을 사용해야합니다.