Это игра для трех игроков, играйте одной рукой.
В то же время каждый игрок показывает свою руку с вытянутыми от 0 до 5 пальцами.
Если все игроки показывают одинаковый (четный или нечетный) номер, победителя нет. Но в остальном, игрок показывает другой вид двух других побед.
P l a y e r s
A B C Winner
Even Even Even No winner
Odd Odd Odd No winner
Even Odd Odd Player A
Odd Even Even Player A
Even Odd Even Player B
Odd Even Odd Player B
Odd Odd Even Player C
Even Even Odd Player C
Запрашиваемый инструмент может использовать аргументы (3 аргумента в виде чисел от 0 до 5) или STDIN (3 значения через строку, разделенные пробелами).
Нет необходимости проверять ввод: неправильный ввод может привести к неожиданному выводу.
Аргументы или значения по линии дается слева направо, от игрока А до игрока C .
Выход должен содержать только A
, B
или C
(капитализируются) или строка no one
(в нижнем регистре, с регулярным пространством).
Инструмент может работать только один раз или в качестве фильтра на всех входных строках.
Самый короткий код выигрыша.
Ответы:
APL (
3430)Объяснение:
2|⎕
: прочитать строку ввода, взять mod-2 каждого числа (дать список, т.е.1 0 1
)∘.=⍨
: сравнить каждый элемент в векторе с каждым элементом в векторе, давая матрицу+/
: суммировать строки матрицы, давая каждому элементу количество элементов, которым он был равен. Если было два одинаковых и один разных, теперь у нас есть вектор, например,2 1 2
где1
обозначает, кто был другим. Если бы они были все одинаковыми, мы получили3 3 3
.1⍳⍨
: найти позицию1
. Если нет1
, это возвращает на единицу больше, чем длина вектора, в этом случае4
.⊃'ABC',⊂'no one'
: отобразить строку с указанным индексом.источник
Mathematica,
45 43 4241 символовПример:
Другое решение с
4342 символами:источник
Powershell, 65
источник
Befunge-98,
61 5045 персонажейИспользует умное выражение Форса, чтобы сбрить еще несколько персонажей. Теперь однострочный (т.е. Unefunge-совместимый)! Читает, пока игра не выиграна; добавить
@
в конце для одноразовой программы.Обрабатывает входной мод 2 как двоичное число, как и в моем ответе JS, затем полагается на поиск AC и возвращается к «никому», если выходит за пределы (проверяя, является ли символ ≥'A ', что позволяет мне использовать соседний код в качестве данных: D).Вариация, которая читает строку ввода, производит вывод, читает новую строку ввода и т. Д. До тех пор, пока не будет решена игра (то есть не «никто»):
источник
APL, 30
Если мне разрешено изменять системные переменные по конфигурации, можно сбрить 2 символа. (В частности, изменение источника индекса
⎕IO
на 0)Решающий бит
Если мы представим все шансы одинаковым образом и все четные одинаково, то операция парного равенства может различить все 4 случая:
0 0
для побед B, побед0 1
A и т. Д.объяснение
2|⎕
Принимает ввод и мод 2.2=/
Попарное равенство.1+
Добавить 1 для индексации (массивы APL по умолчанию основаны на 1).'BA'('C',⊂'no one')
Вложенный массив⊃
Выбирает правильный элемент из вложенного массива.источник
C: 88 символов
К сожалению, C, как всегда, требует довольно много ненужного мусора. Но все же, на каком другом языке можно писать,
=**++b+**(++
и это действительно что-то значит? Все просто возвышенно.Просто передайте три числа в качестве аргументов и вуаля!
источник
*b[1]
т.д. без разницы в размерах (хотя некоторые потери в элегантности .. :()s = "=**++b+**(++"
P со всей серьезностью, вау, как это ... как это вообще работает? : Ob
и довольно просто напечатать условие, то вы сможете это выяснить. : D (ручка и бумага также помогают, для итоговой таблицы истинности)GolfScript (31 символ)
Очень простая логика: уменьшить вход по модулю 2, затем отсортировать копию. Средний элемент отсортированного массива находится в большинстве, поэтому ищите индекс, который отличается (и, следовательно, от меньшинства).
источник
Рубин (функциональное тело), 42 символа
Предполагая , 3 числовые аргументы
a
,b
иc
:Ruby (инструмент командной строки), 61 символ
Версия 1 входит в 62 символа:
Но, опираясь на ответ Даррена Стоуна , версия 2 получает 61 символ:
источник
Рубин, 61 символ
источник
['no one',?C,?B,?A]
==%w(no\ one C B A)
(2 символа сохранены).JavaScript (узел), 87 символов
Чтобы заставить мяч катиться ... ожидает ввода в качестве трех дополнительных аргументов. Использует следующий шаблон для ввода / вывода (
/
представляет «никто»):источник
GolfScript,
363533 символаПринимает ввод, как описано в STDIN. Вы также можете проверить код онлайн .
источник
Perl, 84 символа.
<>=~/(\d)/g
разбирает строку ввода на отдельные цифрыmap{$_%2
берет этот список и вычисляет значение mod 2 (четное или нечетное)oct"0b".join"",
берет этот список значений мода, соединяет их в строку, добавляет восьмеричный спецификатор и преобразует строку в число.По сути, я создал таблицу истинности, а затем тщательно переупорядочил ее, чтобы у меня была операция инверсии
$x == 4
. Так что, если$x >=4
мы сделали инверсию[$x>=4?7-$x:$x]
которую мы использовали для индексации в массиве('no one','C','B','A')
Это не самый короткий код, но на самом деле это не линейный шум ... что примечательно само по себе.
Perl: 74 символа + 3 флага = 77, запустить с
perl -anE '(code)'
Это улучшение за счет использования автоматического разделения (-a), скажем (-E) и, наконец, выяснения того, что не так в сравнении.
источник
>=4
вместо просто>3
? +1 за советы, которых'0b'.
я не знал раньшеCommon Lisp,
114 10670 символовИз трех значений создайте пару, представляющую разницу в четности между соседними элементами. Считайте это двоичным числом для индексации в списке результатов.
Более старый алгоритм:
источник
Python 2, 54
источник
Mathematica
100 9489тестирование
источник
Хаскелл, 97
источник
R 67
источник
/usr/bin/R
), а затем ввести код выше.scan()
это то, что вам будет предложено для ввода: пример будет набирать,1[space]3[space]5[space][enter][enter]
и вы увидите соответствующий вывод (здесьno one
), напечатанный на экране. Вы можете скачать R здесь: cran.r-project.org/mirrors.htmlС, 85 символов
Не так коротко, как мой ответ Руби, но я доволен им, учитывая
main
затею.источник
Рыба - 41
Украл ответ befunge от FireFly и портировал его на рыбу, потому что использование регистров в рыбе позволяет нам сбрить некоторых персонажей. Потерял несколько символов из-за отсутствия горизонтального оператора if.
Это принимает параметры через аргументы.
источник
#@...<
в конце, чтобы сохранить символ. О, и ваш текущий код выглядит для меня как 42 символа, так что уменьшите это количество ваших символов. :)Smalltalk, 128 символов
отправить
value:
с коллекциейисточник
JavaScript (ES6) / CoffeeScript, 50 байтов
Использует таблицу правды в соответствии с ответом Firefly но использует более прямой подход к доступу к персонажу:
демонстрация
источник
Питон 3, 115
источник
Питон 3, 114
источник
Два разных метода на двух разных языках + варианты -> 6 ответов
По сути, есть 2 способа для этой операции:
array
на основании: построено двоичное число из 3 цифр, чем беру ответ из массиваcount
на основе: считать четные и нечетные, и посмотреть, если естьcount == 1
Perl 71 (на основе массива + вариация)
Один из моих самых коротких Perl:
s/(.)\s*/$1&1/eg;
преобразовать строку как1 2 3
в101
$==oct"0b".$_;
преобразовать двоичный код в октаву (так же, как dec, до 8)$==$=>3?7-$=:$=;
если> 3
опер7-
. (Оттудаno one
== 0)say$=?chr 68-$=:"no one"
если нет0
, выведите char из значения, иначе напечатайтеno one
.Perl 71 (на основе массива)
немного отличается в шаге печати: вывод основан на «массиве» .
Perl 81 (на основе подсчета)
Разное значение:
$c=A
Инициализировать счетчик c сA
.map{$a[$_%2]=$c++;$b[$_%2]++}split
Счетчик б счетчик четный и нечетный, только один магазин , которыйsay$b[0]==1?$a[0]:
если даже счетчик == 1? также распечатать даже плеер.$b[0]==2?$a[1]:
если даже счетчик == 2? также печатать нечетный плеер.:"no one"
еще печатьno one
.Bash 85 (на основе массива)
Это основано на моей второй версии Perl:
c=$((($1%2)<<2|($2&1)*2+($3%2)))
сделать указатель поз.mod
and
*4
<<1
.((c>3))&&c=$((7-c))
если с> = 4, то с = 7-с.o=()
объявить массивecho ${o[c]}
на основе массиваБаш 133 (на основе подсчета)
a[$1&1]=A;a[$2&1]=B;a[$3&1]=C
сохранить плеер в переменную a [четное] и [нечетное]((b[$1&1]++));((b[$2&1]++));((b[$3&1]++))
считать четным / нечетным в б.case $b in 1) echo ${a[0]}
в случае четного счетчика == 1 распечатать четный плеер2)echo ${a[1]};;
счетчик четных регистров == 2 печать нечетного игрока*)echo no one;esac
еще печатьno one
.Баш 133 (на основе подсчета)
Та же версия, используя условие и группу команд bash вместо
case ... esac
источник
Game Maker Language, 116
Мой новый ответ сильно зависит от формулы FireFly:
Старый код скомпилирован с неинициализированными переменными , как 0, 183 символов:
Правка № 1 - Весь другой код
источник
Clojure, 116
источник
VBA, 116
вызывать
?z(1,2,3)
или назначать переменнуюq=z(1,2,3)
, или даже использовать в качестве UDF в Excel, и использовать=z(1,2,3)
в формуле Excelисточник
Python 3, 80 символов
Примечание: ввод должен быть '1' [нечетный] или '0' [четный]. Например:
источник
split
иjoin
вы все равно можете использовать свою (очень умную)int(...input...)
идею. ?'0b'+
я думаю, по крайней мере, это выглядит избыточным для меня, и,int(input(),2)
кажется, просто работает в REPL.Ява, 226 символов
источник
C
10196C, пожалуй, самый тривиальный пример (некоторые троичные операции):
источник