Иногда, когда я рисую, я рисую прямоугольник, начинаю с диагонали от одного из углов, а затем просто прослеживаю линию, «отражая» ее всякий раз, когда я сталкиваюсь с стороной прямоугольника. Я продолжаю с этим, пока не достигну другого угла прямоугольника (и надеюсь, что соотношение сторон моего прямоугольника не было иррациональным;)). Это все равно что проследить путь лазерного луча в коробку. Вы должны получить результат этого с помощью ASCII art.
В качестве примера рассмотрим поле ширины 5
и высоты 3
. Мы всегда будем начинать в верхнем левом углу. В #
отмечает границу окна. Обратите внимание, что ширина и высота относятся к внутренним размерам.
####### ####### ####### ####### ####### ####### #######
#\ # #\ # #\ \# #\ /\# #\ /\# #\/ /\# #\/\/\#
# \ # # \ /# # \ /# # \/ /# # \/ /# #/\/ /# #/\/\/#
# \ # # \/ # # \/ # # /\/ # #\/\/ # #\/\/ # #\/\/\#
####### ####### ####### ####### ####### ####### #######
Соревнование
Учитывая (положительную) ширину и высоту коробки, вы должны получить окончательный результат трассировки лазера. Вы можете написать программу или функцию, принимая ввод через STDIN (или ближайшую альтернативу), аргумент командной строки, аргумент функции и выводить результат через STDOUT (или ближайшую альтернативу) или через возвращаемые функцией значения или аргументы.
Вы можете использовать любой удобный список, строковый или числовой формат для ввода. Вывод должен быть одной строкой (если вы не распечатаете ее в STDOUT, что вы, конечно, можете делать постепенно). Это также означает, что вы можете сначала взять высоту, а затем ширину - просто укажите точный формат ввода в своем ответе.
Ни в одной строке вывода не должно быть ни начальных, ни конечных пробелов. При желании вы можете вывести один завершающий символ новой строки.
Вы должны использовать пространство, /
, \
и #
и воспроизводить тестовые случаи точно так , как показано на рисунке.
Тестовые случаи
2 2
####
#\ #
# \#
####
3 2
#####
#\/\#
#/\/#
#####
6 3
########
#\ /#
# \ / #
# \/ #
########
7 1
#########
#\/\/\/\#
#########
1 3
###
#\#
#/#
#\#
###
7 5
#########
#\/\/\/\#
#/\/\/\/#
#\/\/\/\#
#/\/\/\/#
#\/\/\/\#
#########
22 6
########################
#\ /\ /\ /\ /\ /\ #
# \/ \/ \/ \/ \/ \#
# /\ /\ /\ /\ /\ /#
#/ \/ \/ \/ \/ \/ #
#\ /\ /\ /\ /\ /\ #
# \/ \/ \/ \/ \/ \#
########################
X
были бы необходимы для пересечений. Возможно, в следующий раз. ;)Ответы:
Pyth,
434139 байтПопробуйте онлайн: Pyth Compiler / Executor . Введите числа в следующем порядке: высота первой строки, ширина второй строки.
Спасибо isaacg, который помог сэкономить два байта.
Объяснение:
Мое решение не отслеживает лазер, оно использует простой шаблон, который включает в себя gcd. Если
m, n
размеры коробки, пустьd = gcd(m, n)
. Размер рисунка точно2*d x 2*d
.Например, повторяющийся шаблон для
7 5
является
(
gcd(7, 5) = 1
размер рисунка есть2 x 2
)И повторяющийся узор для
22 6
является
(
gcd(22, 6) = 2
размер рисунка есть4 x 4
)Мое решение выполняет следующие действия для каждой из линий: оно просто генерирует одну строку шаблона, повторяет ее несколько раз и обрезает ее в конце так, чтобы она помещалась в поле.
источник
X
поддерживает «назначение» для строк, вы можете изменить ,m\
чтобы*d
и удалитьs
.*\
вместоm\
краткого, но откажусь от него, потому что он имеет тот же размер. Не думал о переменнойd
и ненужнойs
.C, 256 байт
Я, вероятно, могу получить это меньше 200, и я добавлю объяснение позже, но у меня может быть бумага, которая должна быть через несколько часов, которую я должен сделать вместо этого.
источник
J 85 байт
Пусть
g = gcd(w,h)
. Функция заполняет элементыw/g by h/g
матрицыg by g
плитками, имеющими/
's\
' и 's' в их диагонали и анти-диагонали. Получившийся массив 4D выровняется в 2D (внутри коробки), затем окружен символами#
«s». (0 1 2 3
Вместо номеров используются цифры , а[space] / \ #
в конце номера заменяются символами.)Прямое вычисление внутренней координаты на основе позиции может привести к несколько более короткому решению.
Использование:
Попробуйте это онлайн здесь.
источник
Desmos Calculator - неконкурентоспособен, чтобы помочь дальнейшим знаниям
Попробуйте онлайн!
Входы:
полупродукты:
Формула сокращенно:
Выходы:
Как это работает:
Программа не соответствует окончательному критерию - генерирует ASCII-искусство, состоящее из прямоугольников и линий, поэтому я представляю информацию как неконкурентную, чтобы помочь другим выполнить задачу. Обратите внимание, что чтобы заставить Desmos работать, когда c = 0 или c = b, был введен небольшой коэффициент смещения 0,01, так как Desmos, кажется, имеет границы Mod (A, B), равные (0, B) вместо [0, B )
источник