Вызов
Учитывая художественную форму ASCII, вы должны выяснить, является ли форма правильным шестиугольником или нет.
Шестигранники
Правильный шестиугольник определяется по двум правилам:
- Имеет шесть сторон
- Каждая сторона имеет одинаковое количество символов
Например, следующая форма является правильной, но не имеет шести сторон и поэтому не является правильным шестиугольником :
B a a h
s a i d
y o u r
g a o t
Аналогично, следующая форма имеет шесть сторон, но имеет стороны разной длины и поэтому не является правильным шестиугольником:
* *
* * *
* * * *
* * *
* *
Однако следующая форма имеет шесть сторон, и все стороны имеют одинаковое количество символов, поэтому это обычный шестиугольник:
T h e
h e x a
g o n s a
r e c o
m i n
правила
Вывод должен быть истинным или ложным значением (правдивым, если форма представляет собой правильный шестиугольник, ложным, если нет).
Формы будут содержать только печатные символы ASCII.
Граница фигуры никогда не будет содержать пробелов. Если это произойдет, вы можете вернуть фальси.
Может быть произвольное количество пробелов до и / или после фигуры.
Все углы в форме могут быть не равны, например, следующая форма является допустимым вводом:
. . .
. . .
. . . . .
. . . .
. . .
Это возвратит фальшивое значение.
Все входные данные формы будут находиться в сетке, разделенной пробелами. Гексагональный вход будет находиться в шахматном порядке (каждая строка смещена относительно следующей).
Примеры
Truthy
Следующие формы должны возвращать истинные значения:
# _
+ + +
9 :
5 6 7
8 9 0 1
2 3 4 5 6
7 8 9 0
1 2 3
t h i s
i s
a h
e x
a g
o n
! ! ! !
5 6 7
8 9 0 1
2 3 4 5 6
7 8 9 0
1 2 3
Falsey
Следующее должно возвращать значения Falsey
r e c t a
n g l e s
h e l l o
w o r l d s
t h i s i s b
e t a d e c
a y n o w
*
* *
* * *
.....
.......
.........
.......
.....
Эта форма не находится на сетке, разделенной пробелами, и не находится в шахматном порядке.
* * * *
---------
* * * * * *
-------------
* * * * * *
---------
* * * *
5 6 7
8 9 0 1
2 3 4 5 6
7 8 9 0
1 2 3
Для односимвольных вводов ваша программа может выводить truey или falsey:
&
выигрыш
Самая короткая программа в байтах побеждает.
источник
5 6 7\n8 9 0 1\n2 3 4 5 6\n7 8 9 0\n1 2 3
и один с дополнительным пробелом, ведущим для одной из строк:ss5 6 7\nss8 9 0 1\n2 3 4 5 6\ns7 8 9 0\nss1 2 3
(начальные пробелы заменены на,s
чтобы сделать его немного более понятным в этой неформатированной форме) , Все 10 ваших тестов в настоящее время корректно проверяются с помощью моего кода, но эти два случая потерпят неудачу с подходом, который я использовал.Ответы:
R 184 байта
Гольф, вероятно, может быть в гольф на несколько байтов
Ungolfed, очень грязный, больше похоже на полпути
Поскольку формат ввода не указан, Input необходимо указывать в формате R-массива, примерно так.
Вот функция генератора, которая генерирует ввод. Генератор генерирует не объект, который подается в функцию проверки шестиугольника, а код, определяющий массив (фактически то же самое). Так что это не должно рассматриваться как разбор текста. Помните, что я не вводю текст, а скорее структуру массива.
Например, сгенерированный код будет:
structure(c(" ", " ", "2", " ", " ", " ", "8", " ", "7", " ", "5", " ", "3", " ", "1", " ", "9", " ", "8", " ", "6", " ", "4", " ", "2", " ", "0", " ", "9", " ", "7", " ", "5", " ", "3", " ", "1", " ", "0", " ", " ", " ", "6", " ", " "), .Dim = c(5L, 9L ))
который идентиченarray(c(" ", " ", "2", " ", " ", " ", "8", " ", "7", " ", "5", " ", "3", " ", "1", " ", "9", " ", "8", " ", "6", " ", "4", " ", "2", " ", "0", " ", "9", " ", "7", " ", "5", " ", "3", " ", "1", " ", "0", " ", " ", " ", "6", " ", " "), dim = c(5, 9))
Надеемся, что этот метод ввода соответствует правилам.
Вот тестовые случаи
Генерация входных массивов
Тест на шестиугольник
источник
f(array(c(" ", " ", "2", " ", " ", " ", "8", " ", "7", " ", "5", " ", "3", " ", "1", " ", "9", " ", "8", " ", "6", " ", "4", " ", "2", " ", "0", " ", "9", " ", "7", " ", "5", " ", "3", " ", "1", " ", "0", " ", " ", " ", "6", " ", " "), dim = c(5, 9)))
JavaScript (ES6), 214 байт
Где
\n
представляет буквальный символ новой строки. Ungolfed:источник
" x\n g g\ng g g\n g g"
должен давать ложь, но дает истину.x
?SnakeEx , 200 байт
Правильный язык для работы ... вроде.
SnakeEx - это язык из задачи 2-D Pattern Matching . Это должно быть действительно хорошо в этой задаче, но, к сожалению, все угловые случаи действительно раздутый код. Я также обнаружил пару ошибок переводчика. Тем не менее, это было забавное испытание.
m
это главная змея, которая призывает всех остальных выполнять реальную работу. Это соответствует началу в верхнем правом углу шестиугольника и по часовой стрелке. Нумерованные группы используются для проверки того, что все стороны диагональной стороны равны и что длина горизонтальной стороны соответствует высоте всей фигуры. Я мог бы написать более подробное объяснение, но я провел последние два дня, занимаясь угловыми делами, так что попробуйте сами здесь . : ^)источник
Perl,
127125124121 байтВключает +4 для
-0p
Внести вклад в STDIN
источник