Mi maestra siempre me da el conjunto de problemas matemáticos más complicado para la tarea. Al igual que: pg. 546: 17-19, 22, 26, pg. 548: 35-67 odd, 79, 80-86 even
. Y quiero saber de antemano cuánto tiempo reservar para mi tarea, pero no quiero tener que resolver todo eso. Por eso es tu tarea programarlo para mí.
Presupuesto
- Obtendrá una cadena que detalla los problemas que tengo que completar como args, stdio, etc.
- Estarán separados por comas (posiblemente
comma-space
separados) - Incluirá problemas individuales en forma de solo un número (por ejemplo
79
) - Y rangos en la forma
17-18
(de nuevo, tienes que lidiar con espacios opcionales) - Los rangos incluyen ambos extremos.
- Los rangos estarán opcionalmente con el sufijo
odd
oeven
, que debe tener en cuenta. - Un conjunto de rangos / páginas estará antepuesto por un número de página en el formulario
pg. 545:
, nuevamente teniendo que ocuparse de espacios opcionales. Puede ignorarlos con seguridad, ya que necesita solucionar los problemas en todas las páginas - El texto puede estar en mayúsculas o minúsculas, pero no será en ambos.
- Devuelve, stdout, etc. la cantidad de problemas que tengo que hacer para la tarea.
- Como se trata de código de golf , ¡el código más corto en bytes gana!
Casos de prueba
pg. 546: 17-19, 22, 26, pg. 548: 35-67 odd, 79, 80-86 even -> 27
pg. 34: 1 -> 1
PG. 565: 2-5,PG.345:7 -> 5
pg. 343: 5,8,13 - 56 even,pg. 345: 34 - 78,80 -> 70
pg.492: 2-4 odd,7-9 even -> 2
code-golf
natural-language
Maltysen
fuente
fuente
2-4 odd
? Parece causar algunos problemas para enfoques más simples.pg.492: 2-4 odd,7-9 even -> 2
22-26,25-30
?Respuestas:
CJam,
6158514846434138 bytesVerifique los casos de prueba en el intérprete de CJam .
Cómo funciona
fuente
Perl - 47 bytes
Modificado para pasar el nuevo caso de prueba.
Original
Perl - 36 bytes
Contando el shebang como 4, la entrada se toma de stdin.
Uso de muestra
Advertencias
Para rangos pares / impares, se espera que al menos uno de los puntos finales coincida con la paridad del rango. Por ejemplo,
11-19 odd
,11-20 odd
, y10-19 odd
todos serán contados correctamente como 5, pero10-20 odd
serán contados sobre-como 6.fuente
pg. 20: 13-15 even
? opg. 20: 13-14 even
?*
es un personaje más corto que&&
, lo que facilita la mejora:$\+=/\d+ ?-/*($'-$&>>/o|e/i)+1for@F}{
lc=~
.T^
parte, pero de alguna manera extrañé esolc
cambió el caso de$'
. Prependinglc
a$'
hubiera sido un poco más corto. Eso debería funcionar para cualquier enfoque:lc$'!~(T^lc$_%2)
o($_%2x9^lc$')!~T
!~T
es genial, gracias!Python 2,
259253249239 bytesPruébalo aquí
Esto probablemente todavía se puede jugar más al golf.
Editar: se corrigió un error que causaba que el mío no funcionara
2-4 even
como esperaba. Luego hizo un ajuste para esa solución. ¡Esa solución me ahorró cuatro bytes!Editar: ahora usa
input()
y +2 bytes para las dos comillas con las que el usuario debe rodear la entrada.Menos golf (con comentarios!: D):
Espero que estos comentarios ayuden un poco. Todavía no estoy muy seguro si le expliqué esa última línea compleja correctamente o no.
fuente
s=raw_input()
y quitando alguna sangría.Pyth,
43424442 bytesPruébelo en línea: demostración o prueba de arnés
Creo que todavía puedo cortar uno o dos bytes.
Explicación
fuente
JavaScript (consola de Spidermonkey) - 139
Es más fácil probar en la línea de comando.
Sin golf:
fuente
[,from,to]
Simplemente puede ser[from,to]
?r.exec
, que contiene toda la cadena coincidente.Factor - 488 bytes:
fuente
Bash
344 315 306 294 262 252 242240No creo que haya jugado al golf tanto como sea posible, pero no está mal para una primera presentación. Versión comentada a continuación.
Ejecute los casos de prueba:
Dependiendo de cómo lea las reglas, podría ser posible guardar otros 4 bytes. Si par / impar siempre es minúscula
${1,,}
se puede cambiar a$1
fuente
JavaScript ( ES6 ), 149
Ejecute el fragmento en Firefox para probar
fuente
C ++
226224222Sé que llego un poco tarde a la fiesta, pero esto parecía un problema divertido y la falta de entradas que usaban lenguajes C-family me molestó.
Entonces, aquí hay una función de C ++ que no utiliza expresiones regulares o sustitución de cadenas, solo algunas matemáticas simples:
Sin golf :
No dije que sería legible, ¿verdad? :) Los operadores ternarios son un infierno. Sin embargo, hice mi mejor esfuerzo para (forma de) formatearlo, así que espero que ayude al menos un poco.
Uso :
fuente
Python 2 - 163 bytes:
Pruébalo aquí
La entrada debe ser entre comillas
Explicación:
El enfoque general es convertir la entrada existente en python válida, luego evaluar esto. Cada valor separado por comas se convierte en una matriz, que luego se agregan todas juntas y la longitud da el resultado final.
Por ejemplo, con la entrada
12-15 odd,19
, antes de la evaluación, la sustitución de expresiones regulares producirá:Para desglosar esto aún más:
15+1 if 15.0 else 12+1
Este bit se asegurará de que el segundo argumento de range () sea correcto dependiendo de si hay un rango o un valor dado (si \ 3 está vacío, \ 3.0 se evaluará como falso).if x%2!="oe".find("o")
Dependiendo del valor que se encuentre a dos caracteres del último dígito en el rango ((?=.(.))
en la expresión regular - mirar hacia adelante dos caracteres sin consumirlos), hay tres resultados posibles:x%2!="oe".find("o")
evalúa ax % 2 != 0
(solo coincidencia impar)x%2!="oe".find("e")
evalúa ax % 2 != 1
(solo emparejado)x%2!="oe".find("[")
se evalúa enx % 2 != -1
(este carácter podría ser varias cosas, ya que está a solo dos caracteres del último dígito, pero solo estará o o e si se pretende impar / par)fuente