Цель
Получив строку с последовательностью хэшей, вычислите ее общую длину и разделите на расстояние от начала до конца.
моделирование
Что мы моделируем? Согласно этой статье , отношение длины реки к расстоянию между началом и концом составляет приблизительно Pi! (Возможно, это было опровергнуто эмпирически, но я мог бы найти данные, и для этого вызова мы предположим, что это правда).
Как мы моделируем это?
- Возьмите строку ввода пробела и хэшей
- Каждый хеш будет иметь два других смежных с ним
- За исключением первого и последнего хеша, который будет иметь только 1
- Каждый символ лежит на точке решетки
(x, y)
x
это индекс персонажа в его строке- например,
c
4-й символ в0123c567
- например,
y
номер строки персонажа- Например,
c
находится на 3-й строке:
- Например,
0line
1line
2line
3c...
- Суммируйте расстояния между соседними хешами, назовите это
S
- Возьмите расстояние между первым и последним хешами, назовите его
D
- Возвращение
S/D
Спецификация
- вход
- Гибкость, принимать входные данные любым из стандартных способов (например, параметр функции, STDIN) и в любом стандартном формате (например, String, Binary)
- Выход
- Гибкость, вывод на печать любым из стандартных способов (например, возврат, печать)
- Пробел, конечный и ведущий пробел приемлем
- Точность, укажите не менее 4 знаков после запятой (т.е.
3.1416
)
- счет
- Самый короткий код выигрывает!
Тестовые случаи
Это мои приближения рек. Мои приближения могут быть плохими, или они могут быть плохой выборкой населения реки. Кроме того, я сделал эти вычисления вручную; Я мог бы рассчитать мисс.
### ####
# # #
# # #
# # #
# # #
# # #
## # # #####
## # #
##
1.6519
#
#
#
#
#
#
#
#
# #
# # #
# #
#
##
#
#
#
#
#
#
#
#
# #
# ##
#
#
#
#
#
#
#
#
#
#
#
1.5498
###
# #
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
###
#
#
#
#
#
#
#
#
#
##
#
#
##
##
##
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
####
#
#
1.5257
TL; DR
Эти проблемы представляют собой симуляции алгоритмов, которые требуют только природы и вашего мозга (и, возможно, некоторых ресурсов многократного использования) для приближения Pi. Если вам действительно нужен Пи во время апокалипсиса зомби, эти методы не теряют патронов ! Всего девять задач .
#<tag>
Ответы:
MATL ,
4844423733 байтаСохранено довольно много байтов благодаря идее rahnema1 (октавский ответ) о том, чтобы свести две извилины в одну
Это принимает входные данные в виде двоичной матрицы с
;
разделителем строк.1
соответствует хешу и0
пространству.Попробуйте онлайн! Или проверьте все тестовые случаи .
Вот преобразователь формата, который принимает входные данные в виде двумерных массивов символов (опять же, с
;
разделителем) и создает строковые представления соответствующих двоичных матриц.объяснение
Это было весело! В коде используются
тридве 2D-свертки, каждая из которых предназначена для разных целей:Для обнаружения вертикальных и горизонтальных соседей, которые дают расстояние
1
, требуемая маска будетНо мы хотим, чтобы каждая пара соседей была обнаружена только один раз. Итак, мы берем половину маски (и последний ряд нулей можно удалить):
Точно так же, чтобы обнаружить диагональных соседей, которые вносят расстояние
sqrt(2)
, маска будетно по тем же соображениям, что и выше, становится
Если эту маску умножить
sqrt(2)
и добавить к первой, две свертки можно заменить одной сверткой с комбинированной маскойНачальная и конечная точки по определению являются точками только с одним соседом. Чтобы обнаружить их, мы сворачиваем с
и посмотреть, какие точки дают
1
в результате.Чтобы создать комбинированную маску из предмета 1, короче создать ее квадрат, а затем взять квадратный корень. Маска в пункте 2 является предопределенным литералом.
источник
Октава, 99 байт
почти тот же метод, что и ответ MATL, но здесь ядро сверток
это
sqrt(2) =1.41
для диагональных соседей и1
для прямых соседей, поэтому, когда мы суммируем значения результата по реке, мы получаем двойное реальное расстояние.версия без золота :
Попробуйте (вставьте) это в Octave Online
источник
{[x y]=find(c<2&c>0),pdist([x y])}{2}
чертовски умный !!!JavaScript (ES6), 178
Ввод в виде строки с символами новой строки в прямоугольной форме : каждая строка дополняется пробелами одинаковой длины (как в примерах)
Меньше гольфа
Тестовое задание
источник