В этом испытании вы подсчитаете, насколько велика ваша земля.
Напишите программу или функцию, которая рассчитывает размер вашей земли с учетом стены, которую вы построили. Вам дана непустая входная строка, содержащая набор из 4 различных символов на ваш выбор, которые представляют четыре направления «вверх», «вниз», «влево» и «вправо» (я буду использовать ^ v < >
в этом испытании). Невозможно сделать поворот на 180 градусов ( <>
или ^v
), но вы можете пересечь стену.
То, как вы «захватываете» землю, окружает ее стеной. Сама стена также считается частью вашей земли. Несколько примеров сделают это более понятным. Я буду использовать o
для земли, которая была окружена стеной, x
для самой стены, иS
для начальной точки стены, просто чтобы проиллюстрировать, как строится стена. Выход должен быть общий размер вашей земли (число o
, x
и S
в случаях испытания ниже).
Input: >>>>
Land: Sxxxx
Output: 5
Input: <<<^^^>>>vv
Land:
xxxx
xoox
xoox
xxxS
Output: 16
Input: <<<^^^>>>v
Land:
xxxx
x x
x
xxxS
Output: 11
Input: <
Land: xS
Output: 2
Input: >>>>>>vvvvvvvvv<<<<<^^^^>>>>>>>>vvvvvvvvvv<<<<<<<<<<<<<<<^^^^^^^^^>>>vvvvvv<<<<<
Land:
Sxxxxxx
x
x
x
x
xxxxxxxxx
xxxx xoooox x
xoox xoooox x
xoox xoooox x
xoox xxxxxx x
xoox x
xoox x
xxxxxx x
x x
x x
xxxxxxxxxxxxxxxx
Output: 101
Input: >>vvvv>>^^<<<<^
Land:
Sxx
xox
xxxxx
xox
xxx
Output: 17
Input: <<^^^>>>vv
Land:
xxxx
x x
x x
xxS
Output: 11 <- Note, diagonal edges do not close the "loop"
Разъяснения:
- Вам не нужно рисовать стену, вывод должен быть только целым числом
- Формат ввода не является обязательным. Вы можете взять строку с
<>^v
, список цифр,(1, -1, i, -i)
список символовABCD
и т. Д.
Это код-гольф, поэтому самый короткий код на каждом языке выигрывает . Помните, что объяснения важны даже на «обычных» языках!
Ответы:
Python 2 ,
385345332 байтаПопробуйте онлайн! или попробуйте все тестовые случаи
Ввод числовой, 0 ~ 3, 0-индекс символов здесь:
>v<^
Это результирующая матрица:
источник
Октава,
83858379 байтовПопробуйте это на Octave Online!
Функция, которая принимает в качестве входных данных вектор-столбец, содержащий
(1, -1, i, -i)
Используя подход Mathematica @ lanlock4, ответьте добавлением длины ввода к координатам, чтобы избежать неположительных координат, вместо того, чтобы вычитать из них минимум координат. Сохранено 4 байта.
Предыдущий ответ:
Попробуйте это на Octave Online!
Изменено для лучшей визуализации.
Объяснение:
источник
Haskell,
579530 байтm
является главной функцией, которая принимает строкуv^<>
и возвращает соответствующее целое число.Ungolfed:
источник
Mathematica, 124 байта
Вы, вероятно, не удивитесь, узнав, что Mathematica имеет встроенную функцию для измерения площади, окруженной стеной. К сожалению, это довольно байтей
ComponentMeasurements[..., "FilledCount", CornerNeighbors -> False]
.Имея это в виду, вот мой полный ответ. Это функция, которая принимает список из 1, i, -1 или -i:
Объяснение:
FoldList[#+#2&,2(1+I)Length@#,#]
строит стену, начиная с координаты 2 (1 + i) (длина стены) и последовательно добавляя элементы списка ввода. (Мы должны начать с смехотворно большой координаты 2 (1 + i) (длина стены), чтобы гарантировать, что координаты стены остаются положительными, в противном случае все сломается.)SparseArray[{Re@#,Im@#}&/@...->1]
превращает эти координаты из комплексных чисел в пары целых чисел и создает массив с единицами, где стена, и нулями в других местах.1/.ComponentMeasurements[...,"FilledCount",CornerNeighbors->1<0]&
использует встроенную магию Mathematica для измерения площади, окруженной стеной.источник
PHP> = 5.6.2, 888 байт
Онлайн версия
источник