Disfruto participando en concursos de matemáticas organizados por Mu Alpha Theta, una sociedad de honor de matemáticas en los Estados Unidos. En las competiciones, tomo un examen de opción múltiple de 30 preguntas. Hay cinco opciones por pregunta, etiquetadas de la A a la E.
Mi puntaje en un examen es de cuatro puntos por cada respuesta correcta, cero puntos por una pregunta en blanco y uno negativo por cada respuesta incorrecta.
Escriba un programa que califique una prueba de acuerdo con el sistema de puntuación anterior. Debe haber dos componentes en la entrada: una clave de respuesta seguida de respuestas. Las preguntas que se dejan en blanco deben ingresarse como espacios en blanco. La primera entrada debe contener solo las letras AE (o ae, a su elección), y se puede suponer que no hay espacios en blanco en la entrada. La segunda entrada solo debe contener espacios en blanco y las letras AE (o ae). Las entradas que no implementan pruebas de 30 preguntas deben imprimirse Invalid test
como salida.
El resultado debe ser el grado o Invalid test
.
Prima
Si su programa imprime el número correcto, el número dejado en blanco y el número incorrecto después de la puntuación final (aR bB cW)
, retire 20 bytes.
Entrada de muestra
CABBDCABECDBACDBEAACADDBBBEDDA //answer key
CABEDDABDC BACDBBAADE CBBEDDA //responses
Salida de muestra
Sin bonificación
73
Prima
73 (20R 3B 7W)
Aplican reglas estándar. El código más corto en bytes gana.
Invalid test
.Respuestas:
Pyth,
5351Pruébalo en línea
Las comprobaciones se realizan al ver si toda la entrada contiene caracteres cuando
a-e
se eliminan todos los espacios y , y al verificar si ambas cadenas tienen longitud30
.El cálculo de la puntuación se realiza por comprimir las dos líneas juntas, a continuación, mediante la asignación de cada par a:
(letters are equal) ? 4 : -1
. Luego, simplemente sume los valores y agregue el número de espacios en la segunda línea de nuevo al puntaje.fuente
En serio , 86 bytes
Toma entrada como
"CABBDCABECDBACDBEAACADDBBBEDDA", "CABEDDABDC BACDBBAADE CBBEDDA"
Pruébelo en línea (deberá ingresar manualmente la entrada porque a los enlaces permanentes no les gustan las comillas)
Trabajando en el bono ahora.No, agregar el bono costaría más de 20 bytes.Sabía que estaba olvidando algo ...
Invalid Test
no se imprimía en caso de error. Ahí van mis esperanzas de superar a Dennis.fuente
JavaScript (ES6), 134 bytes
Editar: los requisitos de la pregunta cambiaron. Esta respuesta es de cuando el programa necesitaba asegurarse de que cada carácter de respuesta sea AE, cada carácter de respuesta sea AE o espacio y ambos tengan longitudes de 30, de lo contrario regrese
Invalid test
.Explicación
Prueba
fuente
CJam, 60 bytes
Pruébelo en línea en el intérprete de CJam .
fuente
JavaScript (Firefox 31+), 86 bytes
Utiliza la comprensión de matriz que se propone para ES7. Por lo tanto, el soporte se limita a Firefox por el momento.
Con bonificación, 106 bytes (126-20)
Editar: Anteriormente, mi solución solo verificaba la respuesta o la longitud de la pregunta, ahora verifica ambas.
Mostrar fragmento de código
fuente
f=
al principio y decir que esto genera una función lambda.(x,y)=>(r=i=0,[for(l of y)x[i++]==l?r+=4:r-=l!=' '],i!=30|i-x.length?'Invalid test':r)
Japt , 71 bytes
Japt es una versión abreviada de Ja vaScri pt . Interprete
Los dos
.
s al final deben ser los caracteres Unicode no imprimibles U + 0017 y U + 0099, respectivamente.Cómo funciona
Espero que haya una forma más corta de asegurarse de que ambas longitudes sean iguales a 30. ¡Se aceptan sugerencias!
fuente
Haskell,
144138 bytesSería alrededor de 50 sin la validación. sniff .
Uso:
"ABCDEABCDEABCDEABCDEABCDEABCDE" % "AAAAABBBBBCCCCCDDDDDEEEEEAAAAA"
fuente
!
se puede definir comoall(`elem`l)s
, guardar 6 bytes.g=all.flip elem
.C #,
162154148134 bytesUso
Prueba
http://csharppad.com/gist/15f7c9c3c8cfce471ff2
fuente
int s=0,i=0;for(;...
para guardar 3 bytes.Ruby, 81 caracteres
Ejecución de muestra:
fuente
Java,
183169 bytesEsta fue una buena práctica de Java 8:
fuente
String.valueOf
simplemente agregando el int a una cadena vacía (""+IntStream....
). También creo que Java permite el no cortocircuito y, por lo tanto, puedes eliminar uno de los&
y guardar un byte .brainfuck, 354 bytes
Requiere un intérprete que le permita ir a la izquierda desde la celda 0. La salida es un byte firmado. Por ejemplo, el byte
0x49
se imprime para la entrada de ejemplo, y0xFF
se imprime para la entrada con la misma primera línea pero la segunda línea reemplazada por "C" y 29 espacios.El puntaje comienza en 0 y, a medida que se lee la segunda línea de entrada, se le realizan estos cambios:
Finalmente, se agrega 120. Esto es funcionalmente lo mismo que asumir un puntaje perfecto y aplicar penalizaciones, en lugar de comenzar en 0.
Con comentarios:
fuente
Pitón 3,
187 179 175 165 155151fuente
JavaScript ES7, 102
Como de costumbre, el bono no vale la pena.
Comprobación de espacios no válidos en la primera entrada (ya que esto tiene sentido para mí) 112
fuente
(k,r,s=0)=>/^[A-E]{30}$/.test(k)&&/^[ A-E]{30}$/.test(r)?Object.keys(k).map(i=>k[i]==r[i]?s+=4:s-=r[i]!=' ').pop():'Invalid Test'
es 129 bytes.Python 2.7,
131, 116, 109, 139Traté de hacer una solución "corta" de Python ... Bueno, aquí está, las sugerencias son más que bienvenidas
Agregar algunos caracteres más lo hace mucho más legible ...
fuente
Prólogo, 165 bytes
Más de la mitad de los bytes son para la comprobación de pruebas no válidas.
Código:
Explicado:
Ejemplo:
Pruébelo en línea aquí
fuente
MATLAB,
9290 bytes¡Gracias a Tom Carpenter por ayudarme a reducir mi respuesta en 2 bytes!
Se puede llamar a la función asignando la hoja de respuestas a q y las respuestas enviadas a a . p.ej:
La respuesta simplemente se imprime en la pantalla. Se pueden guardar 8 bytes si se permite imprimir ans = 73
fuente
numel(q)
connnz(q)
.C # 6.0 ->
(270-20 = 250)246-20 = 226 bytesVersión legible y sin golf:
Realmente quería obtener la bonificación: D
fuente
i
junto cons
fuera del bucle for. Puede usarvar
para declarara
, ahorrando 1 byte (¡hurra!). No necesita muchas de las llaves{}
en su código, que siempre es una buena forma de recortar bytes, y siempre vale la pena mirar una tabla ASCII al comparar caracteres (puede eliminar un byte dec[i]==' '
alguna manera usando una desigualdad). También debe considerar contar a través de las cadenas hacia atrás; en este caso, puede guardar al menos 1 byte volviendo a ajustar el bucle for.Groovy 2.4.5, 107 bytes
Solo una traducción simple de la respuesta anterior de Java .
fuente
C, 273 - 20 = 253 bytes
He tomado el bono, aunque me costó 23 bytes solo para imprimirlo. :-(
Explicación
Hay dos veces más código para verificar la entrada no válida que para contar las respuestas: la verdadera esencia del desafío está en el
for
ciclo cerca del final. De hecho, aquí hay una versión que asume que la entrada siempre es válida, en 163-20 = 143 bytes:Y uno que asume lo mismo e imprime solo la puntuación, en 133 bytes:
fuente
SAS 9.4, 291-20 = 271 bytes (con bonificación) o 231 bytes (sin bonificación)
Con bonificación:
Sin bonificación:
Sas realmente no tiene una entrada / salida, por lo que necesitaría reemplazar k = '..' con la clave y r = '..' con la respuesta. La salida se imprime en el registro.
fuente