Здесь, в Калифорнии, мы находимся в засухе, поэтому нам нужно знать, сколько воды у нас осталось, чтобы сохранить как можно больше воды.
Поскольку запас воды ограничен, ваш код должен быть максимально коротким.
Примеры
| |
| |
|~~~|
|___|
Output: 0.5
|~~~~~|
| |
| |
|_____|
Output: 1
| |
|__|
Output: 0 (or bonus)
Спецификация
Ввод будет состоять только из: |_ ~
и новых строк. Все вышеупомянутые ~
считаются воздушными; _
Пустое пространство ~
, а ~
само по себе считается водой. Процент оставшейся воды - компьютер water / (air + water)
. Ваш вывод должен быть точным с точностью до 4 знаков после запятой (если только вы не выберете процентный бонус). Вход всегда будет прямоугольным. ~
Будет только на одной линии, если на какой - либо. При желании вход также может иметь перевод строки в конце.
бонус
Если вы используете оба бонуса, бонус -15% применяется до бонуса -35
-35 байт Бонус: Если ваш код печатает «Эта засуха коза из рук», а не 0 , если выход 0
Бонус -15%: если вы выводите проценты.
Чтобы сделать это, вы должны сдвинуть десятичную запятую в двух местах влево, обрезать ведущие нули и добавить %
в конец. Конечные нули (макс. 2) допускаются, если они не влияют на значение. 0.5
-> любой из:50.00% 50% 50.0%
|~~~|
(без подчеркивания) допустимый ввод?Ответы:
Pyth -
17464552 * .85 - 35 = 9,2 байтаФильтрует входные данные (с
#
метаоперацией нового фильтра!) Для строки, содержащей~
в нем, затем индексирует это для входных данных, а затем делит их на длину входных данных. Если его нет~
, он выдает ошибку и запускает предложение кроме.x
и печатает строку.Попробуйте это онлайн здесь .
источник
Python 3, 37 байт
Нет бонусов. Принимает входную строку с символами новой строки, включая завершающий символ новой строки.
Давайте посмотрим, почему формула работает. Фракция воды является дополнением к фракции воздуха, которую мы получим.
Нумерация строк
0, 1, 2, ...
у насТо же самое верно, если оба умножаются на ширину каждой строки, считая новые строки, которые упрощаются до выражений в количестве символов.
Запуска воды найдена строка путем поиска строки ввода
x
для|~
, а число символов просто длина.Наконец, чтобы заставить входы без воды работать, мы добавляем начало вымышленного водного ряда
|~
до конца поиска, что делает его равным 0 уровня воды.Бонусы показались не стоящими. Лучшее, что я получил на первой строке, это 73-35 = 38:
источник
CJam,
19171658 * 0,85 - 35 = 14,3 байтаПопробуйте онлайн
Эта версия получает оба бонуса. Ввод должен иметь завершающий перевод строки, чтобы это решение работало.
Спасибо @Martin Büttner за сохранение 2 байта.
Объяснение:
источник
JavaScript (ES6), 45 (94 -15% -35)
Как анонимная функция. Используя строки шаблона, есть новая строка, которая является существенной и включена в число байтов
Правка 1 байта сохранена thx @ user81655
Меньше гольфа
Тестовый фрагмент
источник
p=~i
сp=i
,&&-p
с&&p-q
и1+~p
до ,1+p
чтобы сохранить 1 байт.Par , 57 * 85% - 35 = 13,45 байта
объяснение
источник
Perl 70 - 15% - 35 = 24,5 байта
включает +1 для
-p
С комментариями:
26 + 1 байтовая версия, без бонуса: 27
34 + 1 байтная версия с бонусом 15%: 29,75
61 + 1 байтовая версия, с бонусом -35: 27
Версия 69 + 1 байт, оба бонуса: 24.50
источник
Javascript, 59,3
Я надеюсь, что с дополнительными десятичными знаками все в порядке. Предполагается, что нет новой строки.
источник
Haskell, 56 байт
Пример использования:
f "| |\n|~~|\n| |\n|__|"
->0.75
.l
это пользовательская функция длины, которая необходима, потому что сборкаlength
возвращает целочисленные значения, но нам нужны значения с плавающей запятой для деления (естьgenericLength
функция, которая также предоставляет эту функцию, но она длиннее, не говоря уже о требуемойimport Data.List
).f
разбивает входные данныеi
на строки (->s
), а затем на пару, где первый элемент представляет собой список со всеми строками, вплоть до (и исключая), первого из них, содержащего a~
. Второй элемент - это список с остальными строками. В результате длина второго элемента делится на длинуs
.Бонусы не окупаются.
источник
Python многословен!
Python: 98,45 байт
(157 * 0,85) - 35 = 98,45 байт
Эта версия читает со стандартного ввода и собирает оба бонуса:
источник
import sys;r=[x[1]for x in sys.stdin];print(1-r.index('~')/len(r))
print
как функцию, поэтому я предположил, что вы используете Python 3.Awk, 72 символа - 15% - 35 = 26,2
Образец прогона:
(Начальная буква
1;
используется только в этих пробах, чтобы отобразить «читаемый человеком» резервуар.)источник
PHP, 92 символа - 15% - 35 = 43,2
(88 символов в двух блоках кода + 4 символа параметров командной строки.)
Предполагается, что
error_reporting
по умолчанию.(Ничего страшного, просто хотел использовать
-R
и-E
один раз. Теперь только-B
ушел.)Образец прогона:
(Начальная буква
echo"$argn\n";
используется только в этих пробах, чтобы отобразить «читаемый человеком» резервуар.)источник
QBIC - 116 - 15% = 98,6 байта
Я создал QBIC, чтобы сделать QBasic более конкурентоспособным, но он все еще нуждается в нескольких улучшениях. На данный момент нет ярлыков для перехвата ошибок
THEN
(что является довольно большим упущением с моей стороны) иinput$
. Они будут добавлены в ближайшее время.Я не мог набрать 0 бонусов, слишком дорого ... Мне удалось напечатать проценты.
Образец в / вывод:
Программа читает ввод в интерактивном режиме. Когда он обнаруживает дно озера (
_
), он печатает процент и выходит. Проверено на полные и пустые контейнеры.Изменить: чтобы показать, как QBIC был расширен за последний год, вот та же программа, написанная для текущего переводчика:
87 байт, проценты печати, это результат 74.
источник