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

nonees lo contrario denone, si el comportamiento deNYlos comentarios es correcto.XA,XB,YAyYB.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
1si 1 gana vacío (valor falso en perl) de lo contrario.TIO
utilizando
Py enSlugar deXyYpermitiendo usar la operación xor en caracteres, ahorraría algunos bytes másutiliza un grupo de reposición rama
(?|..|..), de modo que$1$2refiriéndose al grupo correspondiente en la rama. Utilizando\0y en\3lugar deXyY72 bytes
65 bytes
53 bytes
fuente
XyYal comienzo de la cadena. PruebeXBAyYAB.Java 8,
153141135131129 bytesUtiliza una matriz de enteros como entrada
A=1, B=2, N=3, X=4, Y=5y genera un entero positivo (>= 1) si A gana, un entero negativo (<= -1) si B gana o0si 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
1paraA,-1paraB,0paraN,2paraXy4paraY. DevuelveTruesiAgana, de lo contrarioFalse.Pruébalo en línea!
En el camino recursivo hacia abajo de la lista de entrada, agregamos
1por cada voto a favorA,-1por cada voto a favorBy0para "no votar".lEs la última votación,vla siguiente. Siv=1,-1o0(ov<2) simplemente lo agregamos a la suma. Sives "votar igual" (Xen el desafío,2para mi solución) guardamos y agregamosl((3-2)*l=l). Sives "voto opuesto" (Yen el desafío,4para 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 conlset torem s 2whereses el segundo elemento de la lista de entrada (x!!1).rem s 2mapas1y-1a sí mismo, todos los demás valores a0. Ignorar los votos fijos deltodos modos [*] y /XoYobtener el vecino correcto si es un voto fijo. Si la suma total es positiva,Agana.[*] 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=3y genera un entero negativo (<= -1) si A gana, un entero positivo (>= 1) si B gana o0si 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
0para un empate. Explicación:Manejar a los
Yvotantes a la derecha de las personas con votos decididosManeje a los
Xvotantes a la derecha de las personas con votos decididos, y luego regrese hasta que sea posibleYyXse puedan decidir los votos.Maneje un
Xvotante inicial junto a un voto decidido, y también unYvotante 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
1si hay votos, pero2si sonBvotos.fuente
JavaScript (Node.js) , 42 bytes
Pruébalo en línea!
Ahorre 1 bytes, gracias a Shaggy.
fuente
0,1y en3lugar de1y2?3es verdad en JS. Siempre pienso en0/1como 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
ints 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).ifs 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
AparaA,BparaB,NparaN,\0paraXy\3para Y (los dos últimos son caracteres de control literal). El truco es queAbitwise-xor\3es 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