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-spaceseparados)
- 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 oddoeven, 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 -> 222-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 oddtodos serán contados correctamente como 5, pero10-20 oddserá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ñé esolccambió el caso de$'. Prependinglca$'hubiera sido un poco más corto. Eso debería funcionar para cualquier enfoque:lc$'!~(T^lc$_%2)o($_%2x9^lc$')!~T!~Tes 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 evencomo 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$1fuente
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+1Este 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