- 22, Oct 2024
- #1
Рассмотрите возможность изображения простой, открыть, двумерная кривая на текстовой сетке шириной W и высотой H, где
represents part of the curve andXXX. ...X ..X. 2 + 2*√2 = 4.828427... ....X.... .X.X.X.X. X..X..X.X .XX.....X 3 + 8*√2 = 14.313708... .... .... ..X. 0 + 0*√2 = 0 .X.. X..X .XX. 1 + 3*√2 = 5.242640... .... ..X. .X.. 0 + 1*√2 = 1.414213... .... XX.. .... 1 + 0*√2 = 1 .X.X X.X. .... 0 + 3*√2 = 4.242640... .... .... .... .... -1 .XX. X..X .XX. -1 ...X ..XX .X.. -1 .... .X.X ...X -1 X.X. .X.. X.X. -1
length = A + B*√2
представляет собой пустое пространство, и никакие другие символы не используются.
Каждое пространство сетки имеет 8 соседних ячеек сетки. Район Мур. Пространства сетки за пределами границ считаются пустыми.
Сетка содержит изгиб если он имеет ровно один .
ИЛИ если у него более одного X
where:
- Ровно два
Null
s have only one neighboring-1
. Это конечные точки кривой. - Каждый
.
besides the endpoints neighbors exactly twoX
с. Они составляют основную часть кривой.
Например, эта сетка, где W = 9 и H = 4, содержит кривую:
X
Аналогично, эти сетки (W = 4, H = 3) имеют кривые:
XXX. ...X ..X.
Однако эти сетки не содержат кривой:
.X X.
Длину кривой можно найти, просуммировав расстояния между всеми соседними парами X.
.X
s:
Расстояние между двумя ортогонально соседними
X
s is 1 unit.X X
XX
Расстояние между двумя соседними по диагонали
X
s is √2 единицы.X
.... .XX. ...X XX.. .... X.X. .... X..X ..XX XX.. .X.X .X.. .... .XX. .X.. .... ...X X.X.
Например, длина кривой в сетке
.... .X.. .... .... .X.X .... X..X ..X. XX.. X.X. ..X. .XX. .X.. .... ....
можно визуализировать как
Итак, мы видим, что это 1 + 1 + √2 + √2 = 4,828427...
Длина кривой только с одним ....X....
.X.X.X.X.
X..X..X.X
.XX.....X
is zero.
Если сетка не образует кривую, ее длина не определена четко.
Испытание
Учитывая сетку текста X
s and X
s, выведите длину содержащейся в ней кривой или же выведите что-то вроде X
or X
чтобы указать, что сетка не имеет кривой.
Для ввода вы можете использовать другие символы, кроме X
and X
при желании, а H и W могут быть приняты в качестве входных данных, если необходимо. Ввод в виде вложенного списка или матрицы, заполненной единицами и нулями вместо строки, также подойдет.
Вы можете вывести число с плавающей запятой для длины кривой или, альтернативно, два целых числа A и B, где .
.
Выигрывает самый короткий код в байтах.
Тестовые случаи
X
#код-гольф #арифметика #геометрия #сетка #теория графов