Многие люди пошли в свой местный боулинг-центр, чтобы поиграть в несколько игр в боулинг, и многие продолжают бороться, чтобы подсчитать свои очки. World Bowling ввел упрощенную систему подсчета очков, чтобы привлечь больше людей к спорту. Эта система начисления очков используется в международных играх.
Система подсчета очков работает следующим образом (из Википедии ):
Система подсчета очков World Bowling, описываемая как «текущий подсчет кадров» [32], предусматривает следующие выводы:
- Удар: 30 (независимо от результатов последующих бросков)
- запасной: 10 плюс штырь на первом броске текущего кадра
- open: общее количество ошибок для текущего кадра
Если вы не знакомы с боулингом с десятью булавками, вот резюме.
В конце дорожки для боулинга есть 10 кеглей, цель которых - сбить их всех шаром для боулинга. Вы получаете 2 броска шара, чтобы попытаться сбить их всех с ног, предпочтительно сбить их всех с первого броска (известный как удар ). Если вы получили удар, то этот кадр завершен, и вам не нужно катать мяч во второй раз. Удар стоит 30.
Если не сбить все десять, вы получите еще один бросок. Если вы сбиваете все оставшиеся булавки, это называется запасным . Счет стоит 10 пинов + количество пинов, сбитых при первом броске. Например, если я сбил 7 пинов, то сумел сбить оставшиеся 3, это стоило бы 17.
Если после второго броска вам не удастся сбить все десять, это называется открытой рамой . Оценка соответствует общему количеству пинов, сбитых за этот кадр.
В игре 10 кадров . Если вы знакомы с традиционным боулингом, вы не получите дополнительный бросок в 10-м кадре с World Bowling Scoring. При традиционном подсчете боулинга для достижения идеального результата в 300 ударов требуется 12 ударов подряд, тогда как для подсчета очков в боулинге мира требуется всего 10 ударов подряд.
Вызов
Ваша задача состоит в том, чтобы вычислить заданные значения баллов из таблицы результатов.
На оценочном листе промах обозначается тире ( - ), ударом с X и запасным с косой чертой ( / ). Если это не применимо, то количество выпадений просто указывается числом (1-9). Фолы и расколы также записываются на листах результатов, но вам не нужно беспокоиться об этом.
вход
Вам будет предоставлена строка, состоящая из баллов за каждый кадр, и в общей сложности будет десять кадров. Каждый кадр будет иметь до двух значений или всего 1 значение, если произошел удар. Ваш ввод может быть строковым параметром для функции, читать из файла или из STDIN.
Например, если я сбил 1 булавку на своем первом броске, а затем сбил 2, рамка будет выглядеть как «12». Это не означает 12 (двенадцать), но означает 1 и 2, всего 3.
Если бы я пропустил каждый штифт с обоими рулонами (желобными шариками), это выглядело бы так: «-» (оценка 0).
Каждый кадр будет разделен пробелом.
Пример ввода
-- 9- -9 X -/ 8/ 71 15 44 X
Чтобы сломать этот пример,
- Кадр 1 (-) - оба рулона пропущены. набрал 0
- Кадр 2 (9-) - сбил 9 на первом броске, пропустил на втором броске. Оценка 9
- Кадр 3 (-9) - пропустил всех на первом, получил 9 на втором. Оценка 9
- Кадр 4 (X) - Ударь, сбил все десять. Оценка 30
- Кадр 5 (- /) - Запасной, пропустил все по первому, сбил все со 2-го броска. Оценка 10 + 0 = 10
- Кадр 6 (8 /) - Запасной, 8 штифтов на первом броске, сбил 2 других с помощью второго броска. Оценка 10 + 8 = 18
- Рама 7 (71) - открытая рама, 7 штифтов на первом рулоне, 1 штифт на втором рулоне. Счет 7 + 1 = 8
- Кадры 8, 9, 10 следуют тем же примерам, что и выше.
Выход
Выводом будет просто значение, которое имеет сумму баллов по всем 10 кадрам. Используя пример ввода, выведите 128. Ваш вывод может быть строковым или числовым типом. Это может быть возвращаемое значение функции или записанное в STDOUT.
правила
- Предположим, что ввод всегда будет действительным. Например, недопустимый кадр будет "/ 8", "XX", "123", "0" и т. Д.
- Вам не нужно беспокоиться о расколах или фолах.
- Ваш код может быть полной программой или функцией, которая принимает строку и возвращает результат.
- Ваш код не должен выдавать никаких исключений.
- Это код гольф, ответ с наименьшим количеством выигранных байтов.
- Языки, которые используют, включают или импортируют, должны включать операторы импорта как часть своего кода и подсчитывать количество байтов.
Тестовые случаи
"-- 9- -9 X -/ 8/ 71 15 44 X" -> 128
"-- -1 2- 12 22 5- 42 61 8- 72" -> 45
"X X X 1/ 2/ 3/ 4/ 5/ -- 9/" -> 174
"X X X X X X X X X X" -> 300
"-- -- -- -- -- -- -- -- -- --" -> 0
Ответы:
05AB1E ,
1211 байтКод
Попробуйте онлайн!
объяснение
источник
JavaScript, 43 байта
Показать фрагмент кода
Как это устроено
Мы конвертируем каждый символ в его точку:
Затем сложите все очки.
Конвертировать
Побитовый оператор ИЛИ
|
преобразует свой операнд в Int32 перед операцией. При преобразовании в Int32 значение сначала преобразуется в формат Number (64-разрядное число с плавающей запятой), а затем транк в Int32 (или преобразуется в 0, если он недействителен).ToInt32({'/':10,X:30}[c])
может быть прочитано как:ToInt32(undefined)
->ToInt32(NaN)
-> 0;ToInt32(c)
может быть:Number(c)
равно 0, результат равен 0;Number(c)
естьNaN
, результат равен 0;сумма
[c,...s] = s
пустьc = s[0]
иs = s.slice(1)
;источник
Stax , 13 байт
Запустите и отладьте его
Распаковано, расклеено и прокомментировано так.
Запустите этот
источник
Python 2 , 55 байт
Попробуйте онлайн!
На основе строкового индекса подход многих решений.
источник
Java 8,
645946 байт-5 байт благодаря @Neil .
-13 байт благодаря @ OlivierGrégoire .
Объяснение:
Попробуйте онлайн.
источник
("123456789//"+1e6+1e6+"X")
кажется, чтобы сохранить 5 байтов.F #,
106103 байтаПопробуйте онлайн!
Я думаю, что эта головоломка (без игры в гольф) была бы отличным вопросом для руководства "Функциональное программирование для начинающих". И я должен знать!
-3 от Кевина Круйссена, за то, что он заметил, что пробел между 'и "тогда" может быть удален. Благодарность!
Stax решение рекурсивного использования строковых индексов очень и очень хорошо. Если вы перенесете его на F #, вы можете получить его за 77 байт :
Попробуйте это онлайн!
источник
'
-3 байтов.Желе , 17 байт
Монадическая ссылка, принимающая список символов и возвращающая целое число
Попробуйте онлайн!
Как?
Также в 17:
Попробуй это
источник
Perl 6 , 30 байт
Попробуйте онлайн!
источник
Сетчатка , 17 байт
Попробуйте онлайн!
Я не совсем в курсе последних изменений Retina. Я буду больше изучать их, когда у меня будет шанс, и посмотреть, есть ли какие-нибудь новые хитрости для игры в гольф. Код превращает все штрихи в три запасных части, все запасные части в десять точек, а затем все указывает на соответствующее число подчеркиваний. Затем он считает количество подчеркиваний.
источник
Perl 5
-pF
,3027 байтов-3 байта благодаря Xcali
Попробуйте онлайн!
источник
/X/
вместо,y/X//
и еще один, используяm%/%
вместоy%/%%
: Попробуйте онлайн!y///
когда я делал их вне петли. Спасибо05AB1E , 14 байтов
Попробуйте онлайн!
объяснение
источник
J , 33 байта
Попробуйте онлайн!
Объяснение:
]
вход('-123456789',20 1#'/X')
добавляет 20/
и одинX
к строке-123456789
i.
находит индексы ввода в приведенной выше строке31|
по модулю 31 - чтобы избавиться от пробелов - они не найдены в строке, поэтомуi.
возвращает 31 для них1#.
находит сумму показателейисточник
Python 2 , 67 байт
-3 байта благодаря @KevinCruijssen
Попробуйте онлайн!
источник
'-123456789'+'/'*20+'X':sum(p.index(i)
на'-123456789/'+'X'*20:sum(p.rfind(i)
Желе , 12 байт
Попробуйте онлайн!
Как это устроено
источник
Python 3.6 , 54 байта
Попробуйте онлайн!
источник
Котлин , 50 байтов
Попробуйте онлайн!
Надеюсь, это не противоречит правилам, чтобы ответить на ваш собственный вопрос, но я хотел присоединиться к веселью.
Math.E
производит значение2.718281828459045
. Я использую его для создания какой-либо строки-заполнителя, чтобы переместить X в положение 30.indexOf
получает позицию (на основе 0) символа в строке «12345 ...». Если он не найден, он возвращает -1. Мы добавляем 1, чтобы сделать эти 0, и это также делает позицию на основе 0 значением строки.источник
PHP
119109 байт-10 байт благодаря @KevinCruijssen
Попробуйте онлайн!
источник
($b=='/'?10+(int)$a:((int)$a+(int)$b))
в(int)$a+($b=='/'?10:(int)$b)
течение -10 байт.Древесный уголь , 23 байта
Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
источник
Красный , 93 байта
Попробуйте онлайн!
источник
C # (.NET Core) , 40 + 18 = 58 байт
Попробуйте онлайн!
источник
C # (интерактивный компилятор Visual C #) , 53 байта
Попробуйте онлайн!
источник
SNOBOL4 (CSNOBOL4) ,
169151147 байтПопробуйте онлайн!
источник
Clojure , 70 байт
Попробуйте онлайн!
Когда
reduce
над строкой, каждый символ фактически превращается в символ - кто бы мог подумать. Но об этом я должен написать,\space
и это ранит больше, чем можно себе представить. Кроме того, при создании фактического числа из символа комбинацияbigint
иstr
представляется единственной полезной комбинацией.Ну, кроме всего этого: анонимная функция, которая возвращает результат в натуральном выражении.
источник
Рубин , 38 байт
Попробуйте онлайн!
источник