Создайте функцию, которая будет принимать две строки в качестве входных данных и возвращать один результат для результата. Самый популярный ответ выигрывает.
Правила Рок-бумага-ножницы-ящерица-Спок:
- Ножницы режут бумагу
- Бумажные обложки рок
- Скала давит ящерицу
- Ящерица отравляет Спока
- Спок разбивает ножницы
- Ножницы обезглавить ящерицу
- Ящерица ест бумагу
- Бумага опровергает Спока
- Спок испаряет камень
- Ножницы от камней
Выход для каждого возможного входного случая:
winner('Scissors', 'Paper') -> 'Scissors cut Paper'
winner('Scissors', 'Rock') -> 'Rock breaks Scissors'
winner('Scissors', 'Spock') -> 'Spock smashes Scissors'
winner('Scissors', 'Lizard') -> 'Scissors decapitate Lizard'
winner('Scissors', 'Scissors') -> 'Scissors tie Scissors'
winner('Paper', 'Rock') -> 'Paper covers Rock'
winner('Paper', 'Spock') -> 'Paper disproves Spock'
winner('Paper', 'Lizard') -> 'Lizard eats Paper'
winner('Paper', 'Scissors') -> 'Scissors cut Paper'
winner('Paper', 'Paper') -> 'Paper ties Paper'
winner('Rock', 'Spock') -> 'Spock vaporizes Rock'
winner('Rock', 'Lizard') -> 'Rock crushes Lizard'
winner('Rock', 'Scissors') -> 'Rock breaks Scissors'
winner('Rock', 'Paper') -> 'Paper covers Rock'
winner('Rock', 'Rock') -> 'Rock ties Rock'
winner('Lizard', 'Rock') -> 'Rock crushes Lizard'
winner('Lizard', 'Spock') -> 'Lizard poisons Spock'
winner('Lizard', 'Scissors') -> 'Scissors decapitate Lizard'
winner('Lizard', 'Paper') -> 'Lizard eats Paper'
winner('Lizard', 'Lizard') -> 'Lizard ties Lizard'
winner('Spock', 'Rock') -> 'Spock vaporizes Rock'
winner('Spock', 'Lizard') -> 'Lizard poisons Spock'
winner('Spock', 'Scissors') -> 'Spock smashes Scissors'
winner('Spock', 'Paper') -> 'Paper disproves Spock'
winner('Spock', 'Spock') -> 'Spock ties Spock'
Дополнительная задача, предложенная @Sean Cheshire: Разрешить настраиваемые списки, например, с этого сайта. Со списком n-элементов, элемент проигрывает предыдущему (n-1) / 2 и выигрывает после (n-1) / 2
popularity-contest
dansalmo
источник
источник
Ответы:
APL
Вывести точно так, как требуется во всех случаях, включая галстук / галстуки. Нет таблицы поиска, за исключением фактических слов.
Вы можете попробовать это на http://ngn.github.io/apl/web/
APL просто знает!
источник
SED
источник
Вот общее решение, основанное на строке правила любого размера. Он выполняет правильное использование заглавных букв для правильного имени «Спок», а также разрешает правила для указания «связи» вместо «связей» для множественных объектов.
Результаты:
источник
rules
вы можете использовать многострочную строку вместо конкатенации букв. Это позволит вам удалить лишние скобки.питон
источник
питон
источник
Рубин, арифметический подход
Актеры могут быть расположены в массиве таким образом, что каждый актер
a[i]
выигрывает у актеров,a[i+1]
иa[i+2]
, по модулю 5, например:Затем для актера
A
с индексомi
мы можем увидеть, как он сопоставляет актераB
с индексомj
, выполнивresult = (j-i)%5
: Результат1
и2
означает, что актер А выиграл у актера на 1 или 2 места перед ним соответственно;3
и4
аналогично означает, что он проиграл против актера позади него в массиве.0
означает галстук. (Обратите внимание, что это может зависеть от языка; в Ruby(j-i)%5 == (5+j-i)%5
также, когдаj>i
.)Наиболее интересной частью моего кода является использование этого свойства для поиска функции сортировки индексов двух акторов. Возвращаемое значение будет равно -1, 0 или 1, как и должно быть :
Вот и все:
источник
питон
Используя хитрый словарь.
источник
return(' '.join([p,'tie' + 's'*(p[1]!='c'),q]))
получит правильное время глагола.C #
Предположения
Противники расположены в массиве из n предметов, где игроки побеждают (n-1) / 2 игроков впереди себя и проигрывают (n-1) / 2 игрокам позади них. (Со списками четной длины игрок проигрывает ((n-1) / 2 + 1) игрокам позади них)
Действия игрока расположены в массиве, где действия в диапазоне от [(indexOfPlayer * (n-1) / 2)] до [(indexOfPlayer * (n-1) / 2)) + (n-2) / 2 - 1 ].
Дополнительная информация
CircularBuffer<T>
является оберткой вокруг массива для создания «бесконечно» адресуемого массиваIndexOf
Функция возвращает индекс элемента в пределах фактических границ массива.Класс
пример
источник
Python, однострочный
источник
.split(', ')
и не заедать, правила, вместе.Просто маленькая вещь, которую я придумал:
Здесь rules - это файл, содержащий все заданные правила.
источник
питон
Вдохновленный кодом APL @ Tobia.
Результаты:
источник
C ++
Немного теста
источник
Javascript
источник
Javascript
Я вижу, что это не соревнование по гольфу, но я некоторое время возился с этой загадкой, прежде чем нашел эту тему, так что дальше.
Вот (стандартная) версия js в 278 символов:
Или один, использующий функции E6 (вероятно, работает только в Firefox) из 259 символов:
источник