На основе коренастых против гладких струн .
Squiggles /\_/\/\__/\/\/\/\_/\_/\
весело делать на клавиатуре, когда вам действительно скучно. Но не все загогулины созданы равными. Некоторые загогулины гладкие, \___/
а некоторые коренастые, как /\/\/\/\
. Другие просто сломаны, как////_\\\
Внутри каждого загадочного N
персонажа есть N-1
перекрестные узлы. Каждый соединительный кран классифицируется на один из трех типов:
Гладкая (угол> «90 градусов»):
\_ __ _/
Коренастый (угол = "90 градусов")
/\ \/
Сломан (все, что не соединяется)
// \\ /_ _\
Давайте определим гладкость быть доля соединений , которые являются гладкими, с chunkiness и разбитости , определенной аналогично. Каждое значение колеблется между 0
и 1
. Сумма гладкости, короткости и ломкости закорючка всегда равна 1.
Например, в squiggle /\/\\_//\_
есть 3 гладких соединения, 4 коротких соединения и 2 сломанных соединения. Таким образом, он 0.3333
гладкий, 0.4444
коренастый и 0.2222
сломанный.
Пустые строки и строки только с одним символом имеют неопределенные значения, весь ввод будет не менее 2 символов.
Вызов
Напишите программу, которая принимает волнистую произвольную длину и выдает любые два значения: гладкости, краткости и ломкости.
- Вы можете написать программу или функцию, используя ввод через STDIN, командную строку или строковый аргумент.
- Вы можете предположить, что ввод имеет по крайней мере длину> = 2 и состоит только из символов
/\_
с необязательным завершающим переводом строки. - Выведите (или верните, если функция), два числа с плавающей запятой с точностью не менее 4 десятичных знаков, округленных или усеченных. Если истинное значение равно
2/3
, допустимые значения включают любое значение между0.6666
и0.6667
даже такими вещами0.666637104
. Если точное значение равно1/3
, любой содержащий ответ0.3333
является действительным. Вы можете не указывать конечные нули или ведущий ноль, если значение меньше единицы. - Выведите любую пару из трех значений по своему усмотрению, просто обязательно укажите, какие два и в каком порядке.
Самый короткий код в байтах побеждает.
Примеры
/\/\\/\//\\
→ Гладкость 0
, короткость 0.7
, разбитость0.3
_/\\_/\\/__/\\\//_
→ Гладкость 0.29411764705
, короткость 0.29411764705
, разбитость0.41176470588
//\\__/_\/
→ Гладкость 0.3333333
, короткость 0.2222222
, разбитость0.4444444
Бонусный вопрос: что вы предпочитаете: гладкие или короткие или ломаные загогулины?
источник
Ответы:
Pyth, 25 байт
Тестирование
Выводы гладкость, короткость. По сути, он берет жестко закодированную строку и разрезает ее пополам. Каждая половина разбита на свои 2 символьные подстроки, и то же самое делается для ввода. Возьмем перекресток, в результате чего получится южная и коренастая пары. Затем мы берем длину, делим на количество пар и печатаем.
источник
Japt, 42 байта
Выходы ломаная, коренастая. Попробуйте онлайн!
Как это устроено
Неконкурентная версия, 36 байт
Работает в основном так же, как и другие, с небольшими изменениями:
ä
сейчас работает на струнах. Символы передаются в функцию по порядку(X, Y, X+Y)
.è
подсчитывает количество вхождений аргумента в строку / массив.источник
Python 3, 149 байт
Это выводит гладкость и коренастость.
Ungolfed:
источник
Руби, 71
Выводы гладкость, короткость.
Берет минимальные гладкие и короткие строки и ищет их для каждой двухсимвольной строки в исходной строке.
Спасибо Кевину Лау за ВОСЕМЬ байтов!
источник
(0..x.size-2).count{|i|t[x[i,2]]}
экономит 5 байтовx.chars.each_cons(2).count{|i|t[i*'']}
. И теперь, когда выx.size
дважды используете функцию, присваиваете ее переменной и используете ее, чтобы сохранить дополнительный байт.