Este es un desafío en el que dos personas, 1 y 2, se postulan para un cargo. La gente vota de manera determinista de ciertas maneras en el mundo de 1 y 2, lo que puede permitir que los candidatos descubran los resultados antes de las elecciones.
NOTA: esto no pretende referirse a elecciones externas u otros eventos políticos.
Dos personas se postulan para un cargo. Llamaremos a estas personas 1 y 2. Como ambos quieren saber si ganarán las elecciones, deciden usar su conocimiento de las personas y algún código para determinar cuál será el resultado. Debido al deseo de minimizar el gasto del gobierno, el código debe ser lo más breve posible.
Su tarea: dada una serie de personas en función de cómo están votando, salida que gana las elecciones.
Hay cinco tipos de personas en el divertido y emocionante mundo de 1 y 2:
A
: personas que definitivamente votarán por 1.B
: personas que definitivamente votarán por 2.X
: las personas que votarán por quien votará la persona a su izquierda. Si no hay una persona a su izquierda, entonces votan por quien votará la persona a su derecha. Si no está claro por quién vota la persona a su derecha, entonces no votan.Y
: la gente votará lo contrario de la persona a su izquierda. Si no hay una persona a su izquierda, entonces votan lo contrario de quien está a su derecha. Si no está claro por quién vota la persona a su derecha, entonces no votan.N
: personas que no votan.
Esto se evalúa de izquierda a derecha.
Ejemplo:
Quien está siendo "evaluado" está en minúsculas, para mayor claridad.
Input: `XXAYAN`
xX Votes for whoever their friend is voting for. Their friend has not decided yet, so it is unclear, so they do not vote.
Xx Person to left is voting "none" so votes "none."
a Votes for 1
Ay Since person on left is voting for 1, votes for 2.
a Votes for 1
n Does not vote
Encuesta final:
2 personas votaron por 1
1 personas votaron por 2
3 personas no votaron
¡1 tiene la mayoría de los votos, entonces 1 gana!
Casos de prueba:
Puede usar otros caracteres o valores como entrada y salida, siempre que sean distintos. (Por ejemplo: números en lugar de letras, letras diferentes, letras minúsculas, verdadero / falso o positivo / negativo (para salida), etc.)
Input -> Output
"AAAA" -> 1
"BBBB" -> 2
"BBAXY" -> 2
"BAXYBNXBAYXBN" -> 2
"XXAYAN" -> 1
"AAAABXXXX" -> 2
"AXNXXXXAYB" -> 1
"NANNY" -> 1
"XA" -> 1
"YAB" -> 2
"XY" -> anything (do not need to handle test cases with no victor)
"AB" -> anything (do not need to handle test cases with no victor)
fuente
none
es lo contrario denone
, si el comportamiento deNY
los comentarios es correcto.XA
,XB
,YA
yYB
.Respuestas:
Perl 5,
5680726553 bytes+26 bytes para manejar el caso X o Y en la primera posición y A o B en la segunda. la salida es
1
si 1 gana vacío (valor falso en perl) de lo contrario.TIO
utilizando
P
y enS
lugar deX
yY
permitiendo usar la operación xor en caracteres, ahorraría algunos bytes másutiliza un grupo de reposición rama
(?|
..|
..)
, de modo que$1
$2
refiriéndose al grupo correspondiente en la rama. Utilizando\0
y en\3
lugar deX
yY
72 bytes
65 bytes
53 bytes
fuente
X
yY
al comienzo de la cadena. PruebeXBA
yYAB
.Java 8,
153141135131129 bytesUtiliza una matriz de enteros como entrada
A=1, B=2, N=3, X=4, Y=5
y genera un entero positivo (>= 1
) si A gana, un entero negativo (<= -1
) si B gana o0
si es un empate.-18 bytes gracias a @ OlivierGrégoire .
Pruébalo en línea.
Explicación:
fuente
i=0;for(int n:a)i+=n<2?1:n<3?-1:0;return i>0;
Guarda algunos bytes bytes.i=0;for(int n:a)i+=n>2?0:3-n*2;return i>0;
es aún más corto.System.out.println(java.util.Arrays.toString(a));
después del ciclo, puede verlo cambiado como es de esperar (imo). ¿Qué tipo de caso de prueba crees que da como resultado un resultado incorrecto y debido a qué parte del código?Haskell,
60504859 bytesUsos
1
paraA
,-1
paraB
,0
paraN
,2
paraX
y4
paraY
. DevuelveTrue
siA
gana, de lo contrarioFalse
.Pruébalo en línea!
En el camino recursivo hacia abajo de la lista de entrada, agregamos
1
por cada voto a favorA
,-1
por cada voto a favorB
y0
para "no votar".l
Es la última votación,v
la siguiente. Siv=1
,-1
o0
(ov<2
) simplemente lo agregamos a la suma. Siv
es "votar igual" (X
en el desafío,2
para mi solución) guardamos y agregamosl
((3-2)*l
=l
). Siv
es "voto opuesto" (Y
en el desafío,4
para mi solución) primero negamosl
((3-4)*l
=-l
) y luego lo agregamos. El caso base es la lista vacía con la que comienza la suma,0
. La recursión se inicia conl
set torem s 2
wheres
es el segundo elemento de la lista de entrada (x!!1
).rem s 2
mapas1
y-1
a sí mismo, todos los demás valores a0
. Ignorar los votos fijos del
todos modos [*] y /X
oY
obtener el vecino correcto si es un voto fijo. Si la suma total es positiva,A
gana.[*] esto hace listas singleton con votos fijos como
[1]
trabajo, porque debido a la pereza de Haskell, el acceso al segundo elemento nunca se evalúa. Las entradas como[2]
falla con error, pero no tienen que ser consideradas.fuente
JavaScript (ES6),
78 7573 bytesPruébalo en línea!
fuente
05AB1E ,
34333230 bytesUtiliza una matriz de enteros como entrada
A=-1, B=1, N=0, X=2, Y=3
y genera un entero negativo (<= -1
) si A gana, un entero positivo (>= 1
) si B gana o0
si es un empate.Pruébelo en línea o verifique todos los casos de prueba .
Explicación:
fuente
Retina 0.8.2 , 70 bytes
Pruébalo en línea! El enlace incluye casos de prueba. Salidas
0
para un empate. Explicación:Manejar a los
Y
votantes a la derecha de las personas con votos decididosManeje a los
X
votantes a la derecha de las personas con votos decididos, y luego regrese hasta que sea posibleY
yX
se puedan decidir los votos.Maneje un
X
votante inicial junto a un voto decidido, y también unY
votante inicial junto a un voto decidido. Como este votante votará en oposición al voto decidido, simplemente podemos eliminar ambos votos en este caso.Elimine cualquier voto restante sin voto o indeciso, y cancele todos los pares de votos decididos opuestos. Repita hasta que se cancelen todos los votos posibles. En caso de empate, no quedará nada; de lo contrario, todos los votos restantes serán del mismo tipo.
Salida
1
si hay votos, pero2
si sonB
votos.fuente
JavaScript (Node.js) , 42 bytes
Pruébalo en línea!
Ahorre 1 bytes, gracias a Shaggy.
fuente
0
,1
y en3
lugar de1
y2
?3
es verdad en JS. Siempre pienso en0
/1
como falsey / verdad. Y como ya no necesitamos resultados distintos,0
= 1 gana y>= 1
= 2 gana también está bien. Entonces +1 de mi parte.Pitón
32,125121117 bytes(Gracias a Jonathan Frech)
Usar sangría de pestañas
Entrada: lista de
int
s donde 'A' = 1, 'B' = 0, 'X' = 4, 'N' = 3, 'Y' = - 1, entonces "AAAA" es[1, 1, 1, 1]
y "XXAYAN" es[4, 4, 1, -1, 1, 3]
.[{'A': 1, 'B': 0, 'X': 4, 'N': 3, 'Y': -1}[c] for c in s]
convertirá las cadenas al formato de entrada necesario.¡Puedes probarlo en línea! (Gracias a Jonathan Frech por la sugerencia)
fuente
(i, i-1)[i>0]
debe ser equivalente ai-(i>0)
.if
s probablemente podría convertirsex[i]+=(v>3)*n+abs(n-1)*(v<0)
. Luego puede ahorrar en la sangría moviendo la declaración ahora no compuesta (usando;
) en la misma línea quefor
.Perl 5, 54 bytes
Pruébalo en línea!
Utiliza
A
paraA
,B
paraB
,N
paraN
,\0
paraX
y\3
para Y (los dos últimos son caracteres de control literal). El truco es queA
bitwise-xor\3
es igualB
, y viceversa.fuente
Javascript (ES6) - 133 bytes
Toma una cadena con el formato dado en el OP y devuelve 1 si el candidato 1 ganó y 2 de lo contrario (lo admito, soy parcial).
fuente
Python 2 ,
9573 bytesPruébalo en línea!
Se requirió la corrección de errores que agregaba bytes adicionales, pero la conversión a lambda gracias a @Stephen lo redujo nuevamente a 95
fuente