Учитывая вид сбоку на поле для мини-гольфа и силу удара, определите, попадет ли мяч в лунку.
Курс будет в следующем формате:
____ ____ _
__/ \ / U \
__/ \ / \_
\_/
Мяч начинается непосредственно перед первым участком земли слева и следует по контуру поля, пока не достигнет отверстия (верхний регистр U
ниже текущего уровня земли). Если оно достигает дыры, выведите истинное значение. Сила размаха будет начальной скоростью мяча. Мяч перемещается к следующему символу справа на каждой итерации, затем скорость изменяется в зависимости от символа, на котором он сейчас находится. Если скорость достигает 0
или меньше перед отверстием, выведите значение фальси.
_
уменьшает скорость на1
/
уменьшает скорость на5
\
увеличивает скорость на4
Курсы могут быть дополнены пробелами. Сила свинга всегда будет положительным целым числом.
Вам не нужно беспокоиться о том, что мяч будет слишком быстрым, чтобы попасть в лунку, катиться назад или прыгать / отскакивать от холмов.
Тестовые случаи
Input: 27
____ ____ _
__/ \ / U \
__/ \ / \_
\_/
Output: true
----------
Input: 26
____ ____ _
__/ \ / U \
__/ \ / \_
\_/
Output: false
----------
Input: 1
U
Output: true
----------
Input: 1
_
U
Output: false
----------
Input: 22
/U
/
/
/
\/
Output: true
----------
Input: 999
_ _
\ /
\ /
\ /
U
Output: true
----------
Input: 5
/
/U
Output: false
----------
Input: 9
/\/\/\/\/U
Output: false
----------
Input: 16
_/\ _
\ __ /\/\/\ /
\ / \ / \ /
\__/ \ / \____________ _/
\_/ U
Output: true
Это код мини-гольфа, самый короткий ответ в байтах выигрывает!
источник
\_/
), выполнив следующие шаги: разбить на массив строк, повернуть, сгладить, разделить пробелами.\/\/\/\/\/
это более эффективный курс, чем__________
.Ответы:
Pyth, 27 байт
демонстрация
Этот код делает что-то очень умное и совсем не безопасное для типов
X
. Проверьте это ниже.Объяснение:
источник
Q
? Т.е. последний пример может вызвать некоторые проблемы?< ... Q
Работает как числовое сравнение вверх до отверстия, а не срез. После дыры важно только то, что результат правдив.Haskell,
111109 байтПример использования:
Как это устроено:
Редактировать: @ user81655 нашел 2 байта для сохранения. Спасибо!
источник
Ruby,
10487 символовОбразец прогона:
источник
Japt, 38 байт
Try it here!
Бить CJam!
объяснение
В основном принимает строковый ввод, вращает его на 90 градусов по часовой стрелке, удаляет пробелы и символы новой строки, удаляет отверстие и все, что за ним, и разделяется по символам. Затем проверяет, достигает ли шарик нуля или ниже, используя
every
функцию.источник
%
и>0
может быть заменена¬
, так как sqrt неположительного числа всегда ложно (0 -> 0
,-1 -> NaN
).CJam,
4039 байтВход имеет мощность в первой строке, а курс начинается со второй строки. Вывод
0
или1
.Проверьте это здесь.
объяснение
источник
Retina,
82817774686768 байтПопробуйте онлайн
>
s - например, 4 есть>>>>\n
. (это законно?)+`(?<=(.)*) (?=.*¶(?<-1>.)*(.))
$2
- Выровняйте курс - замените пробелы на символы под ними.После этого этапа данные будут выглядеть так:
Мы можем просто игнорировать все после первого
U
, мы все равно не достигнем этого.>
представляют собой шаг, который нам позволено сделать, или оставшуюся энергию.\
на четыре>
- уклон дает нам дополнительную энергию.>_
или>>>>>/
пока не останется ни одного._
s и/
s потребляют энергию.^>*U
- проверьте, можем ли мы достичьU
с положительной энергией (или без энергии).Это выведет
0
или1
.Другой закрытый вариант с
9179 байтами:Попробуйте онлайн
Это тот же подход, но с балансирующей группой вместо спорного заменить.
Я уверен, что оба они могут быть в гольфе дальше, поэтому любой из них может оказаться короче.
источник
0
или1
в качестве цифры, если это не повлечет за собой никаких дополнительных байтов.ES6, 117 байт
Ungolfed:
Изменить: Сохранено 4 байта благодаря ՊՓԼՃՐՊՃՈԲՍԼ.
источник
JavaScript (ES6),
108107106 байтЭто решение, которое я придумал, когда создал задачу.
объяснение
Принимает силу как число, а курс как строку. Возвращает
1
дляtrue
или0
дляfalse
. Курс должен быть дополнен пробелами.Контрольная работа
источник
Python (3,5)
169160 байтРекурсивное решение без функции транспонирования (zip)
Ungolfed
c для курса, p для мощности, v для скорости, h для высоты
использование
источник
Pyth, 35 байтов
объяснение
источник
Рубин, 85 знаков
Адаптированный ответ @ manatwork
источник
JavaScript,
266263244 байтаUngolfed
использование
источник
Java, 219 байт
Выровняйте курс, потому что координата y не имеет значения, к сожалению, в Java нет вертикальной обрезки. Он также не имеет транспонирования строк.
Итерируйте по сплющенному курсу и следите за скоростью мяча.
источник
Октава,
111110 байтОбъяснение:
max
для каждого столбца'_/\'
с[1, 5, -4]
(все другие символы меньше, чем'_'
сопоставлены0
)True
если все кумулятивные суммы от начала курса до кубка меньше начальной скорости (вFalse
противном случае).Вот тестовый пример, который я уже разработал, похожий на второй, предложенный @Erwan, и несколько результатов:
И вот первый тестовый пример:
источник
"//_U\\\\\\\_
на результат неправильный, так как вы не удаляете персонажа после техU
же вещей, если у вас есть курс с локальным максимумом, как_//\\\\\U
U
. Это то, что(1:find(m==85))
делает; это берет подрешетку от первого индекса до местоположенияU
. Я проверю ваш тестовый пример с парой начальных скоростей и вернусь к вам.cumsum
промежуточной переменной, а затем использовать его для окончательного сравненияall(v>tmp(1:find(m==85)))
.C 629 байт
Ungolfed:
По сути, я просто делаю один проход для преобразования входной строки, чтобы уместить все в одну строку, затем
источник
if
/else
напримерx+=*n==' ')?1:*n=='\n'?-x:(olc[x]=*n,1
. Другой совет: в Cunsigned int
можно записатьunsigned
, сохраняя сразу 4 байта.Python,
212201188143 байтаБольшая часть заслуг в этой итерации этого сценария принадлежит @Erwan, который дал мне совершенно другой подход и несколько советов, которые в итоге сэкономили мне 55 байт.
Не рекурсивный, поэтому должен существенно отличаться от другого решения на python.
Немного разгулялся:
источник
o=[''.join(x).split()[0] for x in zip(*c.split('\n'))]
выигрывает 40 байтов, я думаюbreak
наreturn p>0
и удалитьif p...
if"U"==v or p<1
если есть локальный максимум, например_//\\\\\U