обзор
Учитывая количество шестиугольников, расположите их в соединенную форму в пределах изображения 50 на 50 ASCII. Форма, которую вы выбираете, может быть произвольной - что бы вы ни находили наиболее подходящей для игры в гольф - при условии, что она подключена. В нем могут быть отверстия при условии, что они больше одного шестиугольника (в противном случае количество шестиугольников будет неоднозначным).
раскладка
Все шестиугольники должны быть в следующей форме (действительны только этот размер и ориентация):
__
/ \
\__/ Note there are 2 underscores per horizontal edge.
Два шестиугольника напрямую связаны, если они имеют общее ребро:
__ __
/ \__ / \
\__/ \ \__/
\__/ or / \
\__/
Два шестиугольника не связаны, если они только разделяют вершину:
__ __
/ \/ \
\__/\__/
Совместное использование половины ребра также не считается подключенным:
__
/ \
\__/
/ \
\__/
Коллекция шестиугольников связана, если существует путь от любого шестиугольника до любого другого, использующего только непосредственно связанные шестиугольники.
Отверстия
Отверстие размером с шестиугольник в соединенном наборе шестиугольников считается шестиугольником, так что любое заданное произведение искусства ASCII имеет однозначное число шестиугольников.
Это не считается дырой, поскольку предполагаемая дыра представляет собой один шестиугольник:
__
__/ \__
/ \__/ \
\__/ \__/
/ \__/ \
\__/ \__/
\__/ 7 hexagons (not 6 with a hole)
Это делает подсчет как отверстие , так как он не соответствует одному шестиугольника:
__
__/ \__
/ \__/ \__
\__/ \__/ \
/ \__ \__/
\__/ \__/ \
\__/ \__/
\__/ 8 hexagons with a hole
Вход и выход
вход
Целое число от 1 до 255.
Выход
Художественная строка ASCII, представляющая количество входных шестиугольников, как описано выше.
- Число строк (подстроки, разделенные символом новой строки) не более 50, плюс дополнительный необязательный завершающий символ новой строки.
- Строки не обязательно должны быть одинаковой длины, но каждая из них должна иметь длину не более 50.
- Строки нулевой длины могут существовать выше или ниже соединенной формы при условии, что общее количество строк не превышает 50.
- Строки, содержащие только пробелы, могут существовать над или под соединенной формой, если общее количество строк не превышает 50.
- Пробелы могут появиться слева от фигуры, если длина строк не превышает 50 (фигуру не нужно выравнивать по левому краю).
- Пробелы могут появляться справа от фигуры, если длина строк не превышает 50.
- Любые символы, которые не являются частью соединенной фигуры, должны быть либо пробелами, либо переводом строки.
При условии, что выходные данные верны, не требуется быть последовательным от одного прогона к следующему.
Примеры
Входные данные: 6
Действительные выходы:
__ __ __
/ \__/ \__/ \__
\__/ \__/ \__/ \
\__/ \__/ \__/
__ __
/ \__/ \
\__/ \__/
/ \__/ \
\__/ \__/
\__/
__
__ / \
/ \__ \__/
\__/ \__/ \
\__/ \__/
\__/
/ \
\__/
Неверные выходы:
__
__/ \__
/ \__/ \
\__/ \__/
/ \__/ \
\__/ \__/
\__/ Invalid for 6 as the centre hole counts as a 7th hexagon.
__ __ __ __
/ \__/ \__/ \ / \
\__/ \__/ \__/ \__/
\__/ \__/ Invalid as the 6 hexagons are not connected.
__ __ __ __
/ \__/ \__/ \/ \
\__/ \__/ \__/\__/
\__/ \__/ Invalid as vertex touching does not count as connected.
__ __ __
/ \__/ \ / \
\__/ \__/ \__/
/ \__/ \
\__/ \__/
\__/ Invalid as the 6 connected hexagons are not the only visible characters.
выигрыш
Самый короткий действительный ответ в байтах побеждает.
Leaderboard
(используя фрагмент списка лидеров Мартина )
источник
6
. Для ввода255
горизонтального ряда шестиугольников не вписывается в 50 на 50 ASCII-арт.Ответы:
CJam,
645755 байтПроверьте это здесь.
Это сгенерирует следующий шаблон по столбцам :
объяснение
Это основано на превосходном наконечнике Денниса , использующем
.e>
для того , чтобы собрать художественную продукцию ASCII из нескольких частей. По его словам, для.e>
каждого элемента берется максимум двух массивов (или строк), и поскольку пробелы имеют наименьший код символа, мы можем использовать это для наложения любых других символов в сетке строк. Кроме того, если два массива не имеют одинаковую длину, посторонние элементы более длинного массива просто копируются без изменений. Это означает, что разные шаблоны даже не должны быть одинакового размера. Чтобы применить это к двумерным массивам (потому что мы не хотим вставлять новые строки до самого конца), мы применяем.e>
попарно к строкам, что дает..e>
.Основная идея кода заключается в создании
N
копий одного шестиугольника, перемещенного в правильное положение. Мы «перемещаем» шестиугольник по вертикали, добавляя пустые строки, и по горизонтали, добавляя пробелы. Как только мы закончим, мы сложим все копии вместе, используя красивый:..e>
(вероятно, самый длинный оператор, который я когда-либо использовал в программе CJam).Вот код:
источник
Python 2,
219207 символовПринимает вход на стандартный ввод.
Практически просто создает сетку из 50х50 пространств и вставляет шестиугольники там, где это необходимо. После 16 - го шестиугольника, мне не нужен первый ряд
h
(шестиугольник в качестве 2D массива) , так что я использоватьi>15
для запуска диапазона на 1 вместо 0.c=i*3%48+1;r=(i*3+1)/48*2+i%2
вычисляет с olumn и г вл мне нужно начать с.n
является логическим значением, но используется как целое число для исправления границ (такh[0]
как всего 3 символа, чтобы избежать перезаписи).Я очень доволен этим, я срезал около 50 байтов с начальной версии, особенно когда я вспомнил
a[x:y]=b
синтаксис.Выход (n = 30):
Поскольку задние строки пробелов разрешены, я изменил создание так,
g
чтобы оно просто создавало 50bytearray
с вместо3+(x>1)+x/16*2
точного количества строк, сокращая 12 байт.источник
Swift 2.0,
601591 байтБежать:
swift hexagons.swift 21
Выход:
Свифт
substringToIndex
иstringByReplacingOccurencesOfString
взять столько персонажей ...источник
stringByPaddingToLength
, однако в этом случае это будет на 11 символов длиннее, чем ввод полной строки.stringByAppendingString
в Objective-C, но все же ...C 238 байт
Для подсчета символов учитываются только необходимые пробелы и символы новой строки.
Он просто создает матрицу символов, заполняет их в обратном порядке, а затем печатает все это.
источник
JavaScript (ES6), 265 байт
Тесселяция шестиугольников в ряд, слева направо, чередование вверх и вниз - как соты - до конца ряда.
Развернутый с описанием (работает в Firefox):
источник
Рубин, 120
создает массив из 50 строк по 50 пробелов, затем подставляет 4 символа в 3 строки, чтобы добавить шестиугольники:
Поскольку первая строка содержит пробелы, после того, как шестиугольник был нанесен, мы не можем построить еще один под ним, потому что пробелы будут перезаписывать предыдущие шестиугольники.
Поэтому шестиугольники добавляются в виде ромба 16x16 (искаженный прямоугольник) снизу вверх и наклоняются снизу слева направо вверх.
Затем строка
" __ "
будет перезаписана дополнительными\
и,/
где необходимо.Неуправляемый в тестовой программе
Типичный выход (n = 250)
Здесь должно быть еще несколько строк пробелов в верхней части, чтобы получить в общей сложности 50, но я не знаю, есть ли способ заставить Stackexchange отформатировать, чтобы включить их.
источник