Es un juego de tres jugadores, juega con una mano.
Al mismo tiempo, cada jugador muestra su mano con 0 a 5 dedos extendidos.
Si todos los jugadores muestran el mismo tipo de número (par o impar), no hay ganador. Pero, de lo contrario, el jugador que muestra diferentes tipos gana los otros dos.
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
La herramienta solicitada podría usar argumentos (3 argumentos como numéricos entre 0 y 5) o STDIN (3 valores por línea, separados por espacios).
No es necesario verificar la entrada: la entrada irregular puede producir una salida inesperada.
Argumentos o valores en línea se da de izquierda a derecha, desde el jugador A al jugador C .
La salida solo debe contener A
, B
o C
(en mayúscula) o la cadena no one
(en minúsculas, con un espacio regular).
La herramienta puede funcionar solo una vez o como filtro en todas las líneas de entrada.
El código más corto gana.
Respuestas:
APL (
3430)Explicación:
2|⎕
: lee una línea de entrada, toma el mod-2 de cada número (dando una lista, es decir1 0 1
)∘.=⍨
: compara cada elemento en el vector con cada elemento en el vector, dando una matriz+/
: suma las filas de la matriz, dando para cada elemento a cuántos elementos era igual. Si hubiera dos iguales y uno diferente, ahora tenemos un vector como2 1 2
donde1
denota quién era diferente. Si fueran todos iguales, obtenemos3 3 3
.1⍳⍨
: encuentra la posición de la1
. Si no hay1
, esto devuelve uno más que la longitud del vector, en este caso4
.⊃'ABC',⊂'no one'
: muestra la cadena en el índice dado.fuente
Mathematica,
45 43 4241 caracteresEjemplo:
Otra solución con
4342 caracteres:fuente
Powershell, 65
fuente
Befunge-98,
61 5045 caracteresUtiliza la expresión inteligente de Fors para eliminar algunos personajes más. ¡Ahora de una sola línea (es decir, compatible con Unefunge)! Lee hasta que se gana un juego; añadir
@
al final para un programa de una sola vez.Trata el mod de entrada 2 como un número binario, como con mi respuesta JS, luego se basa en la búsqueda de AC y vuelve a 'nadie' si está fuera de los límites (probando si el carácter es ≥'A ', lo que me permite para usar el código cercano como datos: D).Variación que lee una línea de entrada, produce salida, lee una nueva línea de entrada, etc. hasta que se decide un juego (es decir, no 'nadie'):
fuente
APL, 30
Si se me permite cambiar las variables del sistema por configuración, se pueden eliminar 2 caracteres. (Específicamente, cambiar el origen del índice
⎕IO
a 0)La parte crucial
Si representamos todas las probabilidades de la misma manera y todas las igualaciones de la misma manera, entonces una operación de igualdad por pares puede distinguir los 4 casos:
0 0
para B gana,0 1
para A gana, etc.Explicación
2|⎕
Toma entrada y mod 22=/
Igualdad por pares1+
Agregue 1 para indexación (las matrices APL se basan en 1 de forma predeterminada)'BA'('C',⊂'no one')
Matriz anidada⊃
Selecciona el elemento correcto de la matriz anidadafuente
C: 88 caracteres
Desafortunadamente, C, como siempre, requiere bastante basura innecesaria. Pero aún así, ¿en qué otro idioma se puede escribir
=**++b+**(++
y realmente significa algo? Simplemente sublime.Simplemente pase tres números como argumentos, ¡y listo!
fuente
*b[1]
etc. sin diferencia de tamaño (aunque con cierta pérdida de elegancia ... :()s = "=**++b+**(++"
P con toda seriedad, wow, ¿cómo funciona eso ... cómo funciona eso? : Ob
, e imprimes bastante la condición, deberías poder resolverlo. : D (lápiz y papel también ayudan, para la tabla de verdad resultante)GolfScript (31 caracteres)
Lógica muy simple: reduce el módulo de entrada 2, luego ordena una copia. El elemento central de la matriz ordenada está en la mayoría, así que busque un índice que sea diferente (y, por lo tanto, en la minoría).
fuente
Ruby (cuerpo de la función), 42 caracteres
Suponiendo 3 argumentos numéricos
a
,b
yc
:Ruby (herramienta de línea de comando), 61 caracteres
La versión 1 viene con 62 caracteres:
Pero, aprovechando la respuesta de Darren Stone , la Versión 2 se reduce a 61 caracteres:
fuente
Ruby, 61 caracteres
fuente
['no one',?C,?B,?A]
==%w(no\ one C B A)
(2 caracteres guardados).JavaScript (nodo), 87 caracteres
Para que la pelota ruede ... espera la entrada como tres argumentos adicionales. Utiliza el siguiente patrón para entrada / salida (
/
representa "nadie"):fuente
GolfScript,
363533 caracteresToma la entrada como se describe desde STDIN. También puede probar el código en línea .
fuente
Perl, 84 caracteres.
<>=~/(\d)/g
analiza la línea de entrada en dígitos distintosmap{$_%2
toma esta lista y calcula el valor mod 2 (par o impar)oct"0b".join"",
toma esta lista de valores mod, los une en una cadena, agrega un especificador octal y convierte la cadena en un número.Básicamente, lo que hice fue crear una tabla de verdad, y luego la reordené cuidadosamente para que tuviera una operación de inversión
$x == 4
. Entonces$x >=4
, si hicimos la inversión[$x>=4?7-$x:$x]
que usamos para indexar en la matriz('no one','C','B','A')
No es el código más corto posible, pero en realidad no es ruido de línea ... lo cual es notable en sí mismo.
Perl: 74 caracteres + 3 banderas = 77, corre con
perl -anE '(code)'
Esta es una mejora, al aprovechar la división automática (la -a), digamos (la -E), y finalmente descubrir qué estaba mal en la comparación.
fuente
>=4
lugar de simplemente>3
? +1 por los consejos'0b'.
que no conocía antesCommon Lisp,
114 10670 caracteresA partir de los tres valores, cree un par que represente la diferencia de paridad entre elementos adyacentes. Trátelo como un número binario para indexar en la lista de resultados.
Algoritmo anterior:
fuente
Pitón 2, 54
fuente
Mathematica
100 9489Pruebas
fuente
Haskell, 97
fuente
R 67
fuente
/usr/bin/R
) y luego ingresar el código anterior.scan()
es lo que le pedirá la entrada: un ejemplo sería escribir1[space]3[space]5[space][enter][enter]
y verá la salida correspondiente (aquíno one
) impresa en la pantalla. Puede descargar R aquí: cran.r-project.org/mirrors.htmlC, 85 caracteres
No es tan breve como mi respuesta de Ruby, pero estoy contento con eso, teniendo en cuenta el
main
rudo.fuente
Pescado - 41
Robó la respuesta anterior de FireFly y la portó para pescar porque el uso de registros en peces nos permite eliminar algunos caracteres. Sin embargo, perdí algunos caracteres al no tener el operador horizontal si.
Esto toma parámetros a través de argumentos.
fuente
#@...<
al final para guardar un personaje. Ah, y su código actual me parece 42 caracteres, así que disminuya ese recuento de caracteres suyo. :)Smalltalk, 128 caracteres
enviar
value:
con una colecciónfuente
JavaScript (ES6) / CoffeeScript, 50 bytes
Utiliza la tabla de verdad según la respuesta de Firefly pero adopta un enfoque más directo en el acceso a los personajes:
Manifestación
fuente
Pitón 3, 115
fuente
Pitón 3, 114
fuente
Dos métodos diferentes en dos idiomas diferentes + variaciones -> 6 respuestas
Básicamente, hay 2 formas para esta operación:
array
basado: Construyó un número binario de 3 dígitos, que toma la respuesta de una matrizcount
basado: Cuenta pares e impares, y mira si hay uncount == 1
Perl 71 (basado en matriz + variación)
Uno de mis perl más cortos:
s/(.)\s*/$1&1/eg;
transformar una cadena como1 2 3
en101
$==oct"0b".$_;
transformar binario a oct (igual que dec, debajo de 8)$==$=>3?7-$=:$=;
si> 3
oper7-
. (Desde allíno one
== 0)say$=?chr 68-$=:"no one"
si no0
, imprime char desde el valor, de lo contrario imprimeno one
.Perl 71 (basado en matriz)
ligeramente diferente en el paso de impresión: la salida se basa en un 'matriz' .
Perl 81 (basado en conteo)
Significado diferente:
$c=A
Inicializar un contador c conA
.map{$a[$_%2]=$c++;$b[$_%2]++}split
Contador b cuenta par e impar, a única tienda cuálsay$b[0]==1?$a[0]:
si incluso contador == 1? También imprimir incluso jugador.$b[0]==2?$a[1]:
si incluso contador == 2? También imprimir jugador impar .:"no one"
De lo contrario imprimirno one
.Bash 85 (basado en matriz)
Esto se basa en mi segunda versión de Perl:
c=$((($1%2)<<2|($2&1)*2+($3%2)))
hacer el índice pos.mod
and
*4
<<1
.((c>3))&&c=$((7-c))
si c> = 4 entonces c = 7-c.o=()
declarar una matrizecho ${o[c]}
basado en la matrizBash 133 (basado en conteo)
a[$1&1]=A;a[$2&1]=B;a[$3&1]=C
almacenar jugador en la variable a [par] y a [impar]((b[$1&1]++));((b[$2&1]++));((b[$3&1]++))
contar par / impar en b.case $b in 1) echo ${a[0]}
en caso de que incluso el contador == 1 imprimir incluso jugador2)echo ${a[1]};;
caso incluso contador == 2 imprimir jugador impar*)echo no one;esac
De lo contrario imprimirno one
.Bash 133 (basado en conteo)
Misma versión, usando la condición de bash y el grupo de comandos en lugar de
case ... esac
fuente
Game Maker Language, 116
Mi nueva respuesta se basa en gran medida en la fórmula de FireFly:
El antiguo código compilado con variables no inicializadas como 0, 183 caracteres:
Edición n. ° 1 : código completamente diferente
fuente
Clojure, 116
fuente
vba, 116
llame
?z(1,2,3)
o asigne a una variable conq=z(1,2,3)
, o incluso use como UDF dentro de Excel, y use=z(1,2,3)
en su fórmula de Excelfuente
Python 3, 80 caracteres
Nota: la entrada debe ser '1' [impar] o '0' [par]. Por ejemplo:
fuente
split
yjoin
así pueda seguir usando suint(...input...)
idea (muy inteligente) . ?'0b'+
, creo, al menos me parece redundante yint(input(),2)
parece funcionar en un REPL.Java, 226 caracteres
fuente
C
10196C, probablemente el ejemplo más trivial (algunas operaciones ternarias):
fuente