Mon professeur me donne toujours les problèmes de mathématiques les plus compliqués à faire à la maison. Comme:pg. 546: 17-19, 22, 26, pg. 548: 35-67 odd, 79, 80-86 even
. Et je veux savoir à l'avance combien de temps il me reste à consacrer à mes devoirs, mais je ne veux pas avoir à comprendre tout cela. C'est pourquoi c'est à vous de le programmer pour moi.
Caractéristiques
- Vous obtiendrez une chaîne détaillant les problèmes que je dois résoudre comme arguments, stdio, etc.
- Ils seront séparés par une virgule (éventuellement
comma-space
séparés) - Cela inclura des problèmes simples sous la forme d’un nombre (par exemple
79
) - Et va dans la forme
17-18
(encore une fois, vous devez traiter des espaces optionnels) - Les gammes incluent les deux extrémités
- Les gammes seront éventuellement complétées par
odd
oueven
, à prendre en compte. - Un ensemble de plages / pages sera précédé d’un numéro de page sous la forme
pg. 545:
, devant à nouveau traiter d'espaces facultatifs. Vous pouvez les ignorer en toute sécurité, car vous devez résoudre les problèmes sur toutes les pages. - Le texte peut être en majuscule ou en minuscule, mais ne sera pas les deux.
- Retour, stdout, etc. le nombre de problèmes que je dois faire pour faire mes devoirs.
- Puisqu'il s'agit de code-golf , le code le plus court en octets gagne!
Cas de test
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
la source
la source
2-4 odd
? Cela semble poser quelques problèmes pour des approches plus simples.pg.492: 2-4 odd,7-9 even -> 2
22-26,25-30
?Réponses:
CJam,
6158514846434138 octetsVérifiez les cas de test dans l' interpréteur CJam .
Comment ça marche
la source
Perl - 47 octets
Modifié pour réussir le nouveau test.
Original
Perl - 36 octets
En comptant le shebang comme 4, l'entrée est prise de stdin.
Exemple d'utilisation
Mises en garde
Pour les plages paires / impaires, au moins un des points d'extrémité doit correspondre à la parité de la plage. Par exemple,
11-19 odd
,11-20 odd
et10-19 odd
seront tous correctement comptés comme 5, mais10-20 odd
sera plus compté comme 6.la source
pg. 20: 13-15 even
? oupg. 20: 13-14 even
?*
est un caractère plus court que&&
pour une amélioration facile:$\+=/\d+ ?-/*($'-$&>>/o|e/i)+1for@F}{
lc=~
.T^
partie, mais quelque part a manqué cela alc
changé le cas de$'
. Préfixerlc
à$'
aurait été légèrement plus courte. Cela devrait toujours fonctionner pour l'unelc$'!~(T^lc$_%2)
ou l' autre approche: ou($_%2x9^lc$')!~T
!~T
C'est génial, merci!Python 2,
259253249239 octetsEssayez-le ici
Cela peut probablement encore être joué au golf plus.
Edit: Correction d'un bug qui faisait que le mien ne fonctionnait pas
2-4 even
comme prévu. Puis effectué un ajustement pour ce correctif. Ce correctif m'a sauvé quatre octets!Edit: Now utilise
input()
et +2 octets pour les deux guillemets , l'utilisateur doit entourer l' entrée avec.Moins joué au golf (avec commentaires!: D):
J'espère que ces commentaires aident certains. Je ne suis toujours pas sûr d'avoir expliqué correctement ou non cette dernière ligne complexe.
la source
s=raw_input()
and removing some indentation.Pyth,
43424442 bytesTry it online: Demonstration or Test harness
I think I can still chop one or two bytes.
Explanation
la source
JavaScript (Spidermonkey console) - 139
It's just easier to test on the command line.
Ungolfed:
la source
[,from,to]
just simply be[from,to]
?r.exec
, which contains the entire matched string.Factor - 488 bytes:
la source
Bash
344 315 306 294 262 252 242240I don't think I've golfed this as much as is possible but not bad for a first submission. Commented version below.
Run the test cases:
Depending on how I read the rules it could be possible to save another 4 bytes. If even/odd is always lowercase
${1,,}
can be changed to$1
la source
JavaScript (ES6), 149
Run snippet in Firefox to test
la source
C++
226224222I know I'm kinda late for the party, but this seemed like a fun problem and lack of entries using C-family languages bothered me.
So here's a C++ function using no regexp or string substitution, just some simple math:
Ungolfed:
I didn't say it would be readable, now did I? :) Ternary operators are hell. I tried my best to (sort of) format it, though, so I hope it helps at least a little bit.
Usage:
la source
Python 2 - 163 bytes:
Try it here
Input must be given inside quotes
Explanation:
The general approach is to convert the existing input into valid python, then evaluate this. Each comma separated value is converted to an array, which are then all appended together and the length gives the final result.
For example, with the input
12-15 odd,19
, before evaluation the regex substitution will produce:To break this down further:
15+1 if 15.0 else 12+1
This bit will make sure the second argument of range() is correct depending if there is a range or a single value given (if \3 is empty, \3.0 will evaluate to false).if x%2!="oe".find("o")
Depending on the value found two characters away from the final digit in the range ((?=.(.))
in the regex - lookahead two characters without consuming them), there are three possible outcomes:x%2!="oe".find("o")
evaluates tox % 2 != 0
(only odd matched)x%2!="oe".find("e")
evaluates tox % 2 != 1
(only even matched)x%2!="oe".find("[")
evaluates tox % 2 != -1
(this character could be multiple things as it's just two characters away from the last digit, but will only be o or e if odd/even is intended)la source