El campeonato de fútbol americano, Super Bowl 50 , se lleva a cabo hoy a las 11:30 pm UTC (y puedes verlo en vivo en línea ). Este desafío fue hecho para celebrarlo.
En un juego de fútbol americano, dos equipos compiten para obtener la mayor cantidad de puntos y hay seis formas de anotar estos puntos. Le daremos a cada uno una abreviatura:
- Gol de campo -
FG
: 3 puntos - Touchdown -
TD
: 6 puntos - Punto extra -
XP
: 1 punto - Sólo se puede conseguir directamente después de una toma de contacto. - Conversión de dos puntos :
XD
(como un punto extra pero más feliz): 2 puntos: solo se puede puntuar directamente después de un touchdown. - Seguridad -
S
: 2 puntos - Feria saque de captura -
FCK
: 3 puntos (un juego muy raro)
Escriba un programa o función que tome una sola cadena de línea que contenga solo estas seis abreviaturas, tanto en mayúsculas como en minúsculas.
Esta cadena representa todos los eventos de puntuación en un juego (o parte de un juego) de fútbol, con los términos en mayúsculas pertenecientes a un equipo y las minúsculas pertenecientes al otro.
Su trabajo es informar los puntajes finales del juego e indicar quién ganó con la salida del formulario
[score 1] [to] [score 2]
dónde:
[score 1]
es siempre el mayor de los dos puntajes (si no es igual), independientemente de si ganó mayúscula o minúscula.[score 2]
es la menor de las dos puntuaciones (si no es igual).[to]
esTO
si ganó el equipo en mayúsculas,to
si ganó el equipo en minúsculas yTo
si es un empate.
Ejemplo: todos los eventos de puntuación en el Super Bowl XLIX podrían resumirse por la cadena
TDXPtdxpTDXPtdxpfgtdxpTDXPTDXP
donde mayúsculas son los New England Patriots y minúsculas los Seattle Seahawks . Los Patriots anotaron 28 y los Hawks 24, por lo que el resultado sería:
28 TO 24
Notas
- Su programa / función debe admitir cualquier entrada arbitraria, incluida la cadena vacía.
XP
yXD
solo ocurrirá justo despuésTD
.xp
yxd
solo ocurrirá justo despuéstd
.- No puede suponer que la cadena de entrada comienza o termina en un caso determinado.
- Opcionalmente se permite una nueva línea final tanto en la entrada como en la salida
Puntuación
El código más corto en bytes gana. Las respuestas que se publican antes del inicio (¡ demasiado tarde ahora! ) Del Super Bowl 50 pueden predecir el equipo ganador (ya sea Panthers o Broncos ), y si son correctas, ¡obtenga un bono de -10%!
(Comprobaré el historial de revisiones para asegurarme de que las predicciones no hayan cambiado y que realmente se hayan realizado antes del inicio).
Casos de prueba
[empty string] -> 0 To 0
TDXPtdxpTDXPtdxpfgtdxpTDXPTDXP -> 28 TO 24
FG -> 3 TO 0
fg -> 3 to 0
TD -> 6 TO 0
td -> 6 to 0
TDXP -> 7 TO 0
tdxp -> 7 to 0
TDXD -> 8 TO 0
tdxd -> 8 to 0
S -> 2 TO 0
s -> 2 to 0
FCK -> 3 TO 0
fck -> 3 to 0
TDTDXDSssFCKfgfckFGtd -> 22 TO 16
fcksFCKS -> 5 To 5
tdtdtdtdxp -> 25 to 0
SSSSSSSTD -> 20 TO 0
fgSfckFGfgtdxptdxdTDs -> 26 to 11
FGTDXPtdxdtdsStdxpfgTDfckTDXDFCK -> 29 To 29
fuente
Respuestas:
Pyth,
49464342 bytes (37.8 bytes con bonificación)¡Gracias a @Maltysen por ayudarme a ahorrar 4 bytes!
Pruébalo en el compilador Pyth .
Me gusta cubrir todas las bases, así que apostaré por los Broncos.
Cómo funciona
‡
r
es una familia de funciones que funcionan en cadenas.Si la primera puntuación en
J
(correspondiente a mayúsculasz
y minúsculas , es decir, las letras minúsculas originales) es inferior a la segunda puntuación, la función de signo volverá-1
,(-1 + 1) ^ 2 == 2
yr" to "2
esswapcase
, así que vuelve" TO "
.Si el primer puntaje es más alto que el segundo, la función de signo regresará
1
,(1 + 1) ^ 2 == 0
yr" to "0
eslowercase
, entonces regresa" to "
.Si los puntajes son iguales, la función de signo regresará
0
,(0 + 1) ^ 2 == 3
yr" to "3
estitle
, entonces regresa" To "
.fuente
to
valores sean diferentes ar
MATL , 51 * 0.9 = 45.9
54575863bytes¡Gracias a Dennis por eliminar 3 bytes!
Una cadena de entrada vacía se representa en el compilador en línea como un único carácter de nueva línea.
EDITAR (8 de junio de 2016): el siguiente enlace incluye una modificación según la versión 18.1.0 del idioma (mover primero
3
derecha antesXc
)Pruébalo en línea!
Apuesto a los Broncos.
Explicación
Los puntajes se detectan usando una sola letra, ya sea mayúscula o minúscula (en mayúscula se muestra a continuación):
P
para XP (1 punto)D
para XD (2 puntos)F
para FG (3 puntos) y para FCK (3 puntos)T
para TD (6 puntos)S
para S (2 puntos)Cada una de estas cinco letras corresponde únicamente a un evento de puntuación, excepto que
F
se reutiliza paraFG
yFCK
, que tienen la misma puntuación. ¡Gracias a @Dennis por esto !D
detectará tanto TD como XD. EntoncesT
se le asignarán 4 puntos en lugar de 6 para compensar.El pedido
PDFTS
, ahorra unos cuantos bytes en la definición de la matriz número que especifica los puntos:[1,2,3,4,2]
.Cada evento se detecta por la presencia de una de las letras anteriores en mayúsculas o minúsculas. La comparación se realiza en tres dimensiones: longitud de la cadena de entrada ( N ) × número de equipos (2) × número de eventos de puntuación detectados (5). Se hace un uso extensivo de la transmisión , que es la expansión automática de una matriz a lo largo de una dimensión singleton para que coincida con el tamaño de una matriz más grande.
fuente
F
inFG
yFCK
debería guardar tres bytes.CJam,
575554535049 bytesPruébalo en línea!
No tengo idea de qué es un Bronco, así que apostaré por los Panthers.
Cómo funciona
fuente
:-g
nunca he visto ese emoticón antesJavaScript (ES6), 128
130bytesEdite 2 bytes guardados aplicando la sugerencia de @ Neil
PRUEBA
fuente
parseInt
es realmente inteligente! Usar la punta de @ Neill>u?l+" to "+u:u+(u>l?" TO ":" To ")+l
para la salida también ahorraría 2 bytes.JavaScript (ES6),
165156151149 bytes9 bytes guardados gracias a @ dev-null , 5 gracias a @Not que Charles y 2 gracias a @Neil !
Explicación
fuente
/s|fck|../gi
y enmap(..),a>b
lugar demap(..)&&a>b
...:u=="T"?6:u>"R"?2:3...
b+(b>a?" TO ":" To ")+a
Perl,
144140 + 2 = 142 bytesRequiere la
-n
bandera y-E
:Editar: Olvidé apoyar
to
,To
yTO
.fuente
%a=qw(fg 3 td 6 xp 1 xd 2 s 2 fck 3)
es más breve como%a=(fg,3,td,6,xp,1,xd,2,s,2,fck,3)
. Y" "
(en su definición de$,
) es más breve como$"
. Pero no he probado ninguno de esos.$"
y puedo eliminarqw
en lato To TO
matriz, ¡gracias!Lua,
231200 bytesFue muy divertido, incluso si realmente no conozco las reglas del fútbol americano (Tenemos Rugby aquí :)). Tuve que probar muchas cosas para hacerlo lo más corto posible, no creo que haya muchas cosas que mejorar, tal vez no.
Editar: Soy un retardado total. La primera solución en la que trabajé giraba en torno al uso de la expansión de la matriz, luego la cambié y la matriz que contenía los puntajes para el equipo en minúsculas y mayúsculas ya no era útil. Eliminarlo y usar una variable simple hace que sea hermoso -31 bytes.
Sin golfos y explicaciones
fuente
Python, 167 bytes
El búho excelente ya pasó hace mucho tiempo, pero como todavía no hay una solución de Python:
Funciona en Python 2 o 3.
fuente