Decidiste organizar un campeonato de piedra, papel o tijera para descubrir quién es el mejor. No debes dejar que la suerte decida el ganador, por lo que todos tienen que darte su táctica por escrito antes de la competencia. También le gustan las cosas simples, por lo que el movimiento de un competidor (que muestra piedra, papel o tijera) debe basarse solo en el turno anterior (RvR, RvP, RvS, PvR, PvP, PvS, SvR, SvP o SvS). En el primer turno, un jugador tiene que mostrar un signo fijo.
Decidiste escribir un programa (o función) para simular el campeonato.
Detalles de la competencia.
- Habrá al menos 2 concursantes.
- Cada jugador juega exactamente un partido con todos los demás.
- Un partido dura 7 rondas.
- En cada ronda, el ganador obtiene 2 puntos y el perdedor ninguno. En caso de empate, ambos jugadores obtienen 1 punto.
- La puntuación de un jugador en un partido es la suma de sus puntos en los turnos del partido.
- La puntuación final de un jugador en el campeonato es la suma de sus puntos en todos los partidos.
Detalles de la entrada:
- tu programa o función recibe
N
10 cadenas largas de caracteres, cada una de ellas corresponde a la estrategia de un jugador. Todos los personajes son (minúsculas)r
p
os
significan que en la situación dada el jugador mostrará papel de piedra o tijeras. - La primera letra codifica el primer turno (en cada partido para ese competidor). El segundo muestra lo que sucede si la última ronda fue rock vs rock. Los siguientes son RvP, RvS, PvR, PvP, PvS, SvR, SvP y SvS donde la primera letra es el signo del jugador y la segunda es el oponente. Por ejemplo,
rrpsrpsrps
significa que el jugador comienza con piedra y luego copia el último movimiento del oponente. - Puede ingresar la lista de cadenas como una lista / matriz o datos similares de su idioma o como una cadena. En este último caso, es imprescindible algún tipo de carácter separador.
Detalles de la salida:
- Su programa o función debe generar los puntajes finales de cada jugador en el mismo orden en que se proporcionó la entrada.
- Las puntuaciones deben estar separadas por espacios o líneas nuevas. Se permite espacio final o nueva línea.
Ejemplos:
Entrada:
['rrpsrpsrps', 'rpppsprrpr']
Salida:
5 9
(los turnos son rvr rvp pvs svp pvr rvp pvs
)
Entrada:
['rrpsrpsrps', 'rpppsprrpr', 'ssssssssss']
Salida:
13 17 12
(los partidos son 5-9
(1 ° vs 2 °), 8-6
(1 ° vs 3 °) y 8-6
(2 ° vs 3 °))
Este es el código de golf, por lo que gana la entrada más corta.
fuente
6-8
y el segundo pierde contra el tercero con6-8
.Respuestas:
Python 2:
201188 caracteresLa lógica del programa: puedo convertir las letras a número (
r=0
,p=1
,s=2
).m
es el número de la primera,n
el número de la segunda persona. Debido a que el juego es cíclico,(m-n)%3
ya determina el resultado. Y, por supuesto, puedo cambiar el resultado por unof=(m+1-n)%3
. Ahoraf=0
significa que el segundo jugadorq
gana,f=1
significa un empate y elf=2
primer jugadorp
gana. También es el puntaje para el jugador 1. Por lo tanto, solo necesito agregar todos los valores(p!=q)*(m+1-n)%3
para cada jugador.Pruébalo con
print f(['rrpsrpsrps', 'rpppsprrpr', 'ssssssssss'])
fuente