Как болельщик команды « BE » с относительно умеренным успехом , к концу сезона я часто задаюсь вопросом, есть ли у моей любимой команды еще теоретический шанс стать чемпионом. Ваша задача в этом вызове - ответить на этот вопрос для меня.
вход
Вы получите три входа: текущую таблицу, список оставшихся матчей и текущую позицию команды, которая нас интересует.
Input 1: текущая таблица , последовательность чисел , были я -й числом являются точками , полученной командой я до сих пор. Например, вход
[93, 86, 78, 76, 75]
кодирует следующую таблицу (важен только последний столбец):
Вход 2 : оставшиеся совпадения , последовательность кортежей, где каждый кортеж ( i , j ) обозначает оставшееся совпадение между командами i и j . В приведенном выше примере второй ввод [(1,2), (4,3), (2,3), (3,2), (1,2)]
будет означать, что остальные совпадения:
Chelsea vs Tottenham, Liverpool vs Man. City, Tottenham vs Man. City, Man. City vs Tottenham, Chelsea vs Tottenham
Input 3: текущее положение . Команды мы заинтересованы в том, например, ввод 2
для приведенного выше примера будет означать, что мы хотели бы знать , может ли Тоттенхэм еще стать чемпионом.
Вывод
Для каждого оставшегося совпадения формы ( i , j ) возможны три результата:
- Команда i выигрывает: команда i получает 3 очка , команда j получает 0 очков
- Команда j выигрывает: команда i получает 0 очков , команда j получает 3 очка
- Ничья: команда i и j оба получают 1 очко
Вы должны вывести истинное значение, если для всех оставшихся игр есть какой-то результат, такой, что в конце ни одна другая команда не наберет больше очков, чем команда, указанная в третьем входе. В противном случае выведите ложное значение.
Пример : рассмотрим примерный ввод из приведенного выше раздела:
Вход 1 = [93, 86, 78, 76, 75]
, Вход 2 = [(1,2), (4,3), (2,3), (3,2), (1,2)]
, Вход 3 =2
Если команда 2
выигрывает все оставшиеся матчи (то есть (1,2), (2,3), (3,2), (1,2)
), она получает 4 * 3 = 12 дополнительных очков; ни одна из других команд не получает очков в этих матчах. Допустим, другой оставшийся матч (то есть (4,3)
) - ничья. Тогда итоговые результаты будут такими:
Team 1: 93, Team 2: 86 + 12 = 98, Team 3: 78 + 1 = 79, Team 4: 76 + 1 = 77, Team 5: 75
Это означает, что мы уже нашли какой-то результат для оставшихся матчей, так что ни одна другая команда не набрала больше очков, чем команда 2
, поэтому результаты этого ввода должны быть достоверными.
подробности
- Можно считать , первый вход будет упорядоченная последовательность, т.е. для я < J , то я -й запись равна или больше , чем J -го вход. Первый ввод может быть взят в виде списка, строки или тому подобного.
- Вы можете взять второй вход как строку, список кортежей или тому подобное. В качестве альтернативы вы можете взять его в виде двумерного массива,
a
гдеa[i][j]
указано количество записей формы(i,j)
в списке оставшихся совпадений. Например,a[1][2] = 2, a[2][3] = 1, a[3][2] = 1, a[4][3] = 1
соответствует[(1,2), (4,3), (2,3), (3,2), (1,2)]
. - Для второго и третьего ввода вы можете принять 0-индексацию вместо 1-индексации.
- Вы можете взять три входа в любом порядке.
Пожалуйста, укажите точный формат ввода, который вы выбрали в своем ответе.
Побочный узел : было показано, что проблема, лежащая в основе этого задания, является NP-полной в « Уничтожении футбола трудно решить в соответствии с правилом из трех пунктов ». Интересно, что если за победу присуждаются только два очка, проблема становится разрешимой за полиномиальное время.
Тестовые случаи
Все тестовые случаи в формате Input1
, Input2
, Input3
.
Truthy:
[93, 86, 78, 76, 75]
,[(1,2), (4,3), (2,3), (3,2), (1,2)]
,2
[50]
,[]
,1
[10, 10, 10]
,[]
,3
[15, 10, 8]
,[(2,3), (1,3), (1,3), (3,1), (2,1)]
,2
Falsy:
[10, 9, 8]
,[]
,2
[10, 9, 9]
,[(2,3), (3,2)]
,1
[21, 12, 11]
,[(2,1), (1,2), (2,3), (1,3), (1,3), (3,1), (3,1)]
,2
победитель
Это код-гольф , поэтому выигрывает самый короткий правильный ответ (в байтах). Победитель будет выбран через неделю после публикации первого правильного ответа.
Ответы:
Haskell (Lambdabot) , 84 байта
Спасибо @bartavelle за спасение мне байта.
Без Lambdabot добавьте 20 байтов для
import Control.Lens
плюс символ новой строки.Функция принимает свои аргументы в том же порядке, как описано в OP, с 0 индексами. Его второй аргумент (список оставшихся совпадений) представляет собой плоский список индексов (например,
[1,2,4,1]
соответствует[(Team 1 vs Team 2), (Team 4 vs Team 1)]
).Правила немного расплывчаты относительно того, разрешено это или нет. Если это не разрешено, функция может принимать входные данные в формате, представленном в примерах - список кортежей. В этом случае добавьте 2 байта к оценке этого решения, заменив их
a:b:r
на(a,b):r
.Объяснение:
Первая строка определяет инфиксную функцию
!
трех переменных типа(!) :: Int -> Int -> [Int] -> [Int]
, которая увеличивает значение по указанному индексу в списке. Поскольку часто код легче понять, чем слова (а синтаксис на Haskell может быть странным), вот перевод на Python:Вторая строка определяет другую инфиксную функцию
?
, также из трех переменных (входной вызов). Я перепишу это более читабельно здесь:Это рекурсивная реализация исчерпывающего поиска. Он повторяется по списку оставшихся игр, разветвляясь на три возможных результата, а затем, когда список пуст, проверяет, набрала ли наша команда максимальное количество очков. Опять же в (не идиоматическом) Python это:
Попробуйте онлайн!
* К сожалению, TiO не поддерживает Lens, поэтому эта ссылка на самом деле не работает.
источник
[]
на_
.Microsoft SQL Server, 792 байта
Функция возвращает 0 для ложного результата и больше 0 для истинного.
Весь фрагмент:
Проверьте это онлайн!
источник
Python 2,
242221 байтПопробуйте онлайн!
После первого прохода с базовым мышлением в гольф. Принимает ввод с индексированием на основе 0 ; тестовые случаи в TIO отрегулируйте для этого через функцию
F
.product([0,1,2],repeat=len(m))
Итерация оценивает возможные результаты над галстуком / выигрыш / проигрышем для каждой игры , если в команде представляющего интереса (TOI) является частью матча (в котором, то TOI всегда предполагаются выиграть).источник
JavaScript (ES6), 145 байт
Принимает результаты счета в виде array (
[93,86,78,76,75]
), предстоящие игры в виде массива массивов из 2 значений ([[0,1],[3,2],[1,2],[2,1],[0,1]]
), а индекс команды в виде целого числа (1
). Все 0 проиндексировано.Тестовый фрагмент
Показать фрагмент кода
источник