Любой обычный шестиугольник может быть облицован бриллиантами, например, так:
______
/_/_/\_\
/_/\_\/\_\
/\_\/_/\/_/\
\/_/\_\/_/\/
\_\/_/\_\/
\_\_\/_/
Мы рассмотрим вышеупомянутое значение размера 1
(так как стороны алмазов сделаны из одного /
или \
каждого). Такой же размер 2
будет выглядеть так:
____________
/ / /\ \
/___/___/ \___\
/ /\ \ /\ \
/___/ \___\/ \___\
/\ \ / /\ / /\
/ \___\/___/ \/___/ \
\ / /\ \ / /\ /
\/___/ \___\/___/ \/
\ \ / /\ \ /
\___\/___/ \___\/
\ \ \ / /
\___\___\/___/
Ваша задача - получить в 1
качестве входных данных такую мозаику ASCII (размером ), а также положительное целое число N
(в десятичной или одинарной форме ), указывающее размер требуемого вывода. Затем вы должны вывести уменьшенную версию той же самой плитки.
Обратите внимание, что шестиугольник может быть любого размера и размером до 1x1x1 (содержит три бриллианта).
Ни входные данные, ни выходные не должны содержать никаких завершающих пробелов, ни больше начальных пробелов, чем необходимо для выравнивания формы шестиугольника. И ввод, и вывод могут опционально содержать один завершающий символ новой строки (этот выбор не должен быть одинаковым для ввода и вывода).
Вы можете написать программу или функцию, принимая ввод через STDIN (или ближайшую альтернативу), аргумент командной строки или аргумент функции и выводя результат через STDOUT (или ближайшую альтернативу), возвращаемое значение функции или параметр функции (out).
Это код гольф, поэтому самый короткий ответ (в байтах) в выигрыше.
Пример Tilings
Вот несколько вариантов ввода, которые вы можете использовать для проверки вашего представления.
__
/_/\
\_\/
____
/_/\_\
/\_\/_/\
\/_/\_\/
\_\/_/
______
/_/_/\_\
/_/\_\/\_\
/\_\/_/\/_/\
\/_/\_\/_/\/
\_\/_/\_\/
\_\_\/_/
________
/_/\_\_\_\
/\_\/\_\_\_\
/\/_/\/_/_/\_\
/\/\_\/_/_/\/\_\
\/\/_/\_\_\/\/_/
\/\_\/_/\_\/_/
\/\_\_\/_/_/
\/_/_/_/_/
Следующий фрагмент содержит соответствующие выходы для входов N = 1
через N = 6
.
__
/_/\
\_\/
____
/ /\
/___/ \
\ \ /
\___\/
______
/ /\
/ / \
/_____/ \
\ \ /
\ \ /
\_____\/
________
/ /\
/ / \
/ / \
/_______/ \
\ \ /
\ \ /
\ \ /
\_______\/
__________
/ /\
/ / \
/ / \
/ / \
/_________/ \
\ \ /
\ \ /
\ \ /
\ \ /
\_________\/
____________
/ /\
/ / \
/ / \
/ / \
/ / \
/___________/ \
\ \ /
\ \ /
\ \ /
\ \ /
\ \ /
\___________\/
____
/_/\_\
/\_\/_/\
\/_/\_\/
\_\/_/
________
/ /\ \
/___/ \___\
/\ \ / /\
/ \___\/___/ \
\ / /\ \ /
\/___/ \___\/
\ \ / /
\___\/___/
____________
/ /\ \
/ / \ \
/_____/ \_____\
/\ \ / /\
/ \ \ / / \
/ \_____\/_____/ \
\ / /\ \ /
\ / / \ \ /
\/_____/ \_____\/
\ \ / /
\ \ / /
\_____\/_____/
________________
/ /\ \
/ / \ \
/ / \ \
/_______/ \_______\
/\ \ / /\
/ \ \ / / \
/ \ \ / / \
/ \_______\/_______/ \
\ / /\ \ /
\ / / \ \ /
\ / / \ \ /
\/_______/ \_______\/
\ \ / /
\ \ / /
\ \ / /
\_______\/_______/
____________________
/ /\ \
/ / \ \
/ / \ \
/ / \ \
/_________/ \_________\
/\ \ / /\
/ \ \ / / \
/ \ \ / / \
/ \ \ / / \
/ \_________\/_________/ \
\ / /\ \ /
\ / / \ \ /
\ / / \ \ /
\ / / \ \ /
\/_________/ \_________\/
\ \ / /
\ \ / /
\ \ / /
\ \ / /
\_________\/_________/
________________________
/ /\ \
/ / \ \
/ / \ \
/ / \ \
/ / \ \
/___________/ \___________\
/\ \ / /\
/ \ \ / / \
/ \ \ / / \
/ \ \ / / \
/ \ \ / / \
/ \___________\/___________/ \
\ / /\ \ /
\ / / \ \ /
\ / / \ \ /
\ / / \ \ /
\ / / \ \ /
\/___________/ \___________\/
\ \ / /
\ \ / /
\ \ / /
\ \ / /
\ \ / /
\___________\/___________/
______
/_/_/\_\
/_/\_\/\_\
/\_\/_/\/_/\
\/_/\_\/_/\/
\_\/_/\_\/
\_\_\/_/
____________
/ / /\ \
/___/___/ \___\
/ /\ \ /\ \
/___/ \___\/ \___\
/\ \ / /\ / /\
/ \___\/___/ \/___/ \
\ / /\ \ / /\ /
\/___/ \___\/___/ \/
\ \ / /\ \ /
\___\/___/ \___\/
\ \ \ / /
\___\___\/___/
__________________
/ / /\ \
/ / / \ \
/_____/_____/ \_____\
/ /\ \ /\ \
/ / \ \ / \ \
/_____/ \_____\/ \_____\
/\ \ / /\ / /\
/ \ \ / / \ / / \
/ \_____\/_____/ \/_____/ \
\ / /\ \ / /\ /
\ / / \ \ / / \ /
\/_____/ \_____\/_____/ \/
\ \ / /\ \ /
\ \ / / \ \ /
\_____\/_____/ \_____\/
\ \ \ / /
\ \ \ / /
\_____\_____\/_____/
________________________
/ / /\ \
/ / / \ \
/ / / \ \
/_______/_______/ \_______\
/ /\ \ /\ \
/ / \ \ / \ \
/ / \ \ / \ \
/_______/ \_______\/ \_______\
/\ \ / /\ / /\
/ \ \ / / \ / / \
/ \ \ / / \ / / \
/ \_______\/_______/ \/_______/ \
\ / /\ \ / /\ /
\ / / \ \ / / \ /
\ / / \ \ / / \ /
\/_______/ \_______\/_______/ \/
\ \ / /\ \ /
\ \ / / \ \ /
\ \ / / \ \ /
\_______\/_______/ \_______\/
\ \ \ / /
\ \ \ / /
\ \ \ / /
\_______\_______\/_______/
______________________________
/ / /\ \
/ / / \ \
/ / / \ \
/ / / \ \
/_________/_________/ \_________\
/ /\ \ /\ \
/ / \ \ / \ \
/ / \ \ / \ \
/ / \ \ / \ \
/_________/ \_________\/ \_________\
/\ \ / /\ / /\
/ \ \ / / \ / / \
/ \ \ / / \ / / \
/ \ \ / / \ / / \
/ \_________\/_________/ \/_________/ \
\ / /\ \ / /\ /
\ / / \ \ / / \ /
\ / / \ \ / / \ /
\ / / \ \ / / \ /
\/_________/ \_________\/_________/ \/
\ \ / /\ \ /
\ \ / / \ \ /
\ \ / / \ \ /
\ \ / / \ \ /
\_________\/_________/ \_________\/
\ \ \ / /
\ \ \ / /
\ \ \ / /
\ \ \ / /
\_________\_________\/_________/
____________________________________
/ / /\ \
/ / / \ \
/ / / \ \
/ / / \ \
/ / / \ \
/___________/___________/ \___________\
/ /\ \ /\ \
/ / \ \ / \ \
/ / \ \ / \ \
/ / \ \ / \ \
/ / \ \ / \ \
/___________/ \___________\/ \___________\
/\ \ / /\ / /\
/ \ \ / / \ / / \
/ \ \ / / \ / / \
/ \ \ / / \ / / \
/ \ \ / / \ / / \
/ \___________\/___________/ \/___________/ \
\ / /\ \ / /\ /
\ / / \ \ / / \ /
\ / / \ \ / / \ /
\ / / \ \ / / \ /
\ / / \ \ / / \ /
\/___________/ \___________\/___________/ \/
\ \ / /\ \ /
\ \ / / \ \ /
\ \ / / \ \ /
\ \ / / \ \ /
\ \ / / \ \ /
\___________\/___________/ \___________\/
\ \ \ / /
\ \ \ / /
\ \ \ / /
\ \ \ / /
\ \ \ / /
\___________\___________\/___________/
________
/_/\_\_\_\
/\_\/\_\_\_\
/\/_/\/_/_/\_\
/\/\_\/_/_/\/\_\
\/\/_/\_\_\/\/_/
\/\_\/_/\_\/_/
\/\_\_\/_/_/
\/_/_/_/_/
________________
/ /\ \ \ \
/___/ \___\___\___\
/\ \ /\ \ \ \
/ \___\/ \___\___\___\
/\ / /\ / / /\ \
/ \/___/ \/___/___/ \___\
/\ /\ \ / / /\ /\ \
/ \/ \___\/___/___/ \/ \___\
\ /\ / /\ \ \ /\ / /
\/ \/___/ \___\___\/ \/___/
\ /\ \ / /\ \ / /
\/ \___\/___/ \___\/___/
\ /\ \ \ / / /
\/ \___\___\/___/___/
\ / / / / /
\/___/___/___/___/
________________________
/ /\ \ \ \
/ / \ \ \ \
/_____/ \_____\_____\_____\
/\ \ /\ \ \ \
/ \ \ / \ \ \ \
/ \_____\/ \_____\_____\_____\
/\ / /\ / / /\ \
/ \ / / \ / / / \ \
/ \/_____/ \/_____/_____/ \_____\
/\ /\ \ / / /\ /\ \
/ \ / \ \ / / / \ / \ \
/ \/ \_____\/_____/_____/ \/ \_____\
\ /\ / /\ \ \ /\ / /
\ / \ / / \ \ \ / \ / /
\/ \/_____/ \_____\_____\/ \/_____/
\ /\ \ / /\ \ / /
\ / \ \ / / \ \ / /
\/ \_____\/_____/ \_____\/_____/
\ /\ \ \ / / /
\ / \ \ \ / / /
\/ \_____\_____\/_____/_____/
\ / / / / /
\ / / / / /
\/_____/_____/_____/_____/
________________________________
/ /\ \ \ \
/ / \ \ \ \
/ / \ \ \ \
/_______/ \_______\_______\_______\
/\ \ /\ \ \ \
/ \ \ / \ \ \ \
/ \ \ / \ \ \ \
/ \_______\/ \_______\_______\_______\
/\ / /\ / / /\ \
/ \ / / \ / / / \ \
/ \ / / \ / / / \ \
/ \/_______/ \/_______/_______/ \_______\
/\ /\ \ / / /\ /\ \
/ \ / \ \ / / / \ / \ \
/ \ / \ \ / / / \ / \ \
/ \/ \_______\/_______/_______/ \/ \_______\
\ /\ / /\ \ \ /\ / /
\ / \ / / \ \ \ / \ / /
\ / \ / / \ \ \ / \ / /
\/ \/_______/ \_______\_______\/ \/_______/
\ /\ \ / /\ \ / /
\ / \ \ / / \ \ / /
\ / \ \ / / \ \ / /
\/ \_______\/_______/ \_______\/_______/
\ /\ \ \ / / /
\ / \ \ \ / / /
\ / \ \ \ / / /
\/ \_______\_______\/_______/_______/
\ / / / / /
\ / / / / /
\ / / / / /
\/_______/_______/_______/_______/
________________________________________
/ /\ \ \ \
/ / \ \ \ \
/ / \ \ \ \
/ / \ \ \ \
/_________/ \_________\_________\_________\
/\ \ /\ \ \ \
/ \ \ / \ \ \ \
/ \ \ / \ \ \ \
/ \ \ / \ \ \ \
/ \_________\/ \_________\_________\_________\
/\ / /\ / / /\ \
/ \ / / \ / / / \ \
/ \ / / \ / / / \ \
/ \ / / \ / / / \ \
/ \/_________/ \/_________/_________/ \_________\
/\ /\ \ / / /\ /\ \
/ \ / \ \ / / / \ / \ \
/ \ / \ \ / / / \ / \ \
/ \ / \ \ / / / \ / \ \
/ \/ \_________\/_________/_________/ \/ \_________\
\ /\ / /\ \ \ /\ / /
\ / \ / / \ \ \ / \ / /
\ / \ / / \ \ \ / \ / /
\ / \ / / \ \ \ / \ / /
\/ \/_________/ \_________\_________\/ \/_________/
\ /\ \ / /\ \ / /
\ / \ \ / / \ \ / /
\ / \ \ / / \ \ / /
\ / \ \ / / \ \ / /
\/ \_________\/_________/ \_________\/_________/
\ /\ \ \ / / /
\ / \ \ \ / / /
\ / \ \ \ / / /
\ / \ \ \ / / /
\/ \_________\_________\/_________/_________/
\ / / / / /
\ / / / / /
\ / / / / /
\ / / / / /
\/_________/_________/_________/_________/
________________________________________________
/ /\ \ \ \
/ / \ \ \ \
/ / \ \ \ \
/ / \ \ \ \
/ / \ \ \ \
/___________/ \___________\___________\___________\
/\ \ /\ \ \ \
/ \ \ / \ \ \ \
/ \ \ / \ \ \ \
/ \ \ / \ \ \ \
/ \ \ / \ \ \ \
/ \___________\/ \___________\___________\___________\
/\ / /\ / / /\ \
/ \ / / \ / / / \ \
/ \ / / \ / / / \ \
/ \ / / \ / / / \ \
/ \ / / \ / / / \ \
/ \/___________/ \/___________/___________/ \___________\
/\ /\ \ / / /\ /\ \
/ \ / \ \ / / / \ / \ \
/ \ / \ \ / / / \ / \ \
/ \ / \ \ / / / \ / \ \
/ \ / \ \ / / / \ / \ \
/ \/ \___________\/___________/___________/ \/ \___________\
\ /\ / /\ \ \ /\ / /
\ / \ / / \ \ \ / \ / /
\ / \ / / \ \ \ / \ / /
\ / \ / / \ \ \ / \ / /
\ / \ / / \ \ \ / \ / /
\/ \/___________/ \___________\___________\/ \/___________/
\ /\ \ / /\ \ / /
\ / \ \ / / \ \ / /
\ / \ \ / / \ \ / /
\ / \ \ / / \ \ / /
\ / \ \ / / \ \ / /
\/ \___________\/___________/ \___________\/___________/
\ /\ \ \ / / /
\ / \ \ \ / / /
\ / \ \ \ / / /
\ / \ \ \ / / /
\ / \ \ \ / / /
\/ \___________\___________\/___________/___________/
\ / / / / /
\ / / / / /
\ / / / / /
\ / / / / /
\ / / / / /
\/___________/___________/___________/___________/
N-1
ведущие пустые строки. :(Ответы:
CJam,
85797672 байтаРазмер должен быть на первой строке. И алмаз следует.
Не в гольф очень хорошо ... И половина персонажей пришла от деталей.
Пояснения (предыдущей версии)
источник
Python 2, 164
Вывод на тестовые случаи.
Итак, что здесь происходит?
Основная идея заключается в том, что каждый персонаж в оригинале взрывается в
n*n
блок. Например, для n = 4/
может статьОригинальный символ появляется один раз в каждой строке, и там есть отступы с любой стороны. Здесь
слева
и
_
справа. Только нижний ряд может быть дополнен'_'
; остальное всегда' '
.Основная сложность заключается в том, что отступ справа может зависеть от предстоящего символа. В частности,
'/ '
имеет разные отступы'/_'
, поэтому нам нужно немного заглянуть в будущее. Кроме того, чтобы избежать пробелов, мы должны отметить, что мы находимся на последнем символе и воздерживаться от заполнения справа.Мы преодолеваем обе эти проблемы, только добавляя слева от текущего символа. Когда мы делаем это, мы также выполняем дополнение справа от предыдущего символа, используя текущий символ заполнения. Таким образом, мы печатаем правый отступ от предыдущего символа, левый отступ от текущего символа, затем текущий символ. Мы также храним сумму отступа "долг", которую должен заплатить следующий символ.
Теперь давайте пройдемся по коду.
Входная строка
s
и масштабный коэффициентn
. Мы идем построчно, печатаяn
строки для каждой строки вводаW
с индексированными копиямиj=n,n-1,...,2,1
. Первая строка копируется только один раз, и мы достигаем этого, инициализируяj
значение 1, но изменяя его дляn
каждого цикла.Мы перебираем строку ввода, собирая строку для печати
O
. Сначала мы выясняем соответствующий символ заполненияq
, который является подчеркиванием, если мы находимся в нижней строке, а текущий или предыдущий символ является подчеркиванием, а в противном случае пробелом.Затем мы определяем количество отступов слева (
e
). Для/
, этоj-1
(уменьшается с уменьшением числа копий строк), и дополнительныйn-j
для\
. Мы относимся к другим персонажам так же. Например, хотя_
кажется, что он дает рядn
подчеркиваний, он на самом деле дает одно подчеркивание, дополненное подчеркиванием слева и справа. Это кажется неэффективным, но позволяет нам работать с_
ив тех же рамках, что
/
и\
Положение «центрального» подчеркивания не имеет значения, поэтому мы смешиваем это ис
\
; этот выбор также заставляет верхний ряд работать без специального кожуха.Далее добавляем к выходной строке. Мы выяснили символ заполнения
q
и текущую сумму заполненияe
, но нам также нужно запомнить долгd
по предыдущему символу. Итак, добавимq*(e+d)
. Затем мы добавляем текущий символc
, за исключением того, что нам нужно избегать подчеркивания в не нижней строке, что мы исправляем путем преобразования подчеркивания в символ заполнения.Наконец, мы записываем сумму долга заполнения, которая является дополнением
n+~d
к текущей сумме левого отступа. Мы также записываем текущий символ вp
, так что мы позже узнаем, был ли предыдущий символ_
.источник
JavaScript ( ES6 ) 274
281 289 338источник
Python 2,
2172111951941906 байтов благодаря Sp3000.
Вызовите
m
с первым аргументом, являющимся ромбом как строку, а вторым аргументом номер повторения.Это основано на последовательности замены шага 3 шагов:
/\
с/ \
, с числом промежуточных пространств , идущей от 2 до 2 * (п-1) по линиям.\/
с\ /
, с числом промежуточных пространств , идущей от 2 * (п-1) до 2 по линиям.Кроме того, существует множество способов получить правильные начальные пробелы и получить правильную первую строку.
Обратите внимание, что в последней строке программы должна быть вкладка, а не 4 пробела. Уценка не поддерживает вкладки.
источник
(i+(n-i+~i)*(d[-1]>f)) --> [i,n+~i][d[-1]>f]
и вы используете только'_'
один раз, так что вы тратите байт, определяя его.Python,
272238228243 байтаОбновленная версия, теперь принимает в качестве входных данных одну строку вместо последовательности строк. Также удаляет завершающие пробелы, которые присутствовали в более ранней версии. К сожалению, эти изменения увеличивают размер.
Версия с пробелами и операторами, разбитыми на более мелкие единицы для удобства чтения:
Основной подход здесь:
N
, создавая выходную строку в каждой итерации цикла. Для первой строки существует особый случай, когда генерируется только последняя строка вывода, чтобы избежать генерации пустых строк в начале вывода.N
символами, где:N
пробелами.N
пробелами для первойN -1
итерации цикла иN
подчеркиванием для последней итерации цикла.N - 1
пробелами или подчеркиванием.Самая хитрая часть здесь заключается в том, что для заполнения слэша / обратной косой черты используются пробелы или подчеркивания в зависимости от следующего (для косой черты) или предыдущего (для обратной косой черты) входного символа. Это, похоже, не вписывается в стратегию подстановки строк.
Чтобы решить эту проблему, я сначала заменил некоторые двухсимвольные комбинации разными символами, чтобы можно было по-разному относиться к ним во время фактической замены. Например,
/_
заменяется на(_
. После этого,(
это «косая черта с последующим подчеркиванием», которая затем может быть заменена соответствующим образом.Основная программа, используемая для тестирования функции:
источник
n-1-k
этоn+~k
.rstrip()
9 символов. Я надеюсь, что я могу сделать лучше, а также нашел способ вырезать 5 символов.sys.stdin
не является допустимым входным параметром - вам нужно манипулировать самой строкой.sys.stdin
и ,int(sys.argv[1])
но ты не собираешься получить их бесплатно, ожидая от них будет принят в качестве переменных (если это была честная игра, то вы могли бы также ожидать , псевдонимыrange
и replace` и все , что еще нужно , чтобы быть предопределить) ,stdin
и список строк являются последовательностями строк.Perl, 132
Комбинированный ввод STDIN и ARGV. Пример:
источник
Рубин 236
237Онлайн тест: http://ideone.com/e6XakQ
Это код перед игрой в гольф:
источник