множество
Этот раздел будет заполнен по мере поступления заявок.
Обычный
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 - Карел Дж. Робот (я использую это сам). Робот взаимодействует с сеткой улиц (положительные целые y-координаты) и проспектов (положительные целые x-координаты), а также звуковыми сигналами, которые можно размещать и хранить в сетке (обратите внимание, что Karel и любые звуковые сигналы могут существовать только на решетке точки). Карел (робот) должен выполнять только пять действий: продвинуться на 1, повернуть налево на место, поставить звуковой сигнал, взять звуковой сигнал и выключиться.
На моем уроке информатики одним из наших первых заданий было запрограммировать Карела, чтобы он научился поворачивать направо, поворачиваться и выполнять комбинированное действие: двигаться вперед на 1 и нажимать бипер. Задание несколько дней спустя состояло в том, чтобы использовать эти методы и написать новые методы для производства букв алфавита.
Естественно, когда я закончил это задание, я написал больше методов, чтобы сделать каждую букву алфавита, а также десять числовых цифр, и я планирую выяснить, как сделать своего рода текстовый процессор из робота, где строка будет введен в 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 минимальной области, в которой будет нарисована буква.
- Робот рисует письмо.
- Робот перемещается в правый нижний угол прямоугольника.
- Робот перемещается на два пробела вправо и должен быть направлен на север / вверх
Давайте работать через пример. Предположим, мы хотим нарисовать 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
Это код гольф, ребята. Применяются стандартные правила компьютерной графики. Самый короткий код в байтах побеждает.
Бонус Раунд
правила
Если вы хотите принять участие в бонусном раунде, убедитесь, что ваши коды эффективны! Ниже приведена библиотека всех 5х5 букв, которые моя программа создает при запуске. Цель бонусного раунда - написать программу, которая печатает последовательность, в 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
Необходимо следовать той же процедуре, что и в оригинальном задании: буквы должны быть нарисованы по одной с пробелом между буквами.
Применяются стандартные правила компьютерной графики. Вход с наименьшим количеством ходов побеждает.
Подводя итог, оба кода по сути будут делать то же самое. Первый код должен иметь минимальное количество байтов в коде, а второй код должен использовать наименьшее количество ходов.