Created
December 20, 2013 21:02
-
-
Save xcombelle/8061475 to your computer and use it in GitHub Desktop.
solving sam et max problem http://sametmax.com/petit-exercice-en-python/
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import re | |
import sys | |
from collections import defaultdict | |
import unicodedata | |
def remove_accents(input_str): | |
nkfd_form = unicodedata.normalize('NFKD', input_str) | |
return "".join([c for c in nkfd_form if not unicodedata.combining(c)]).replace("œ","oe") | |
def magic(text): | |
words = defaultdict(list) | |
for position,match in enumerate(re.finditer(r"[a-z]+", | |
remove_accents(text.lower()) | |
)): | |
words[match.group(0)].append(position) | |
classement = [] | |
for word, positions in words.items(): | |
classement.append((len(positions),positions,word)) | |
classement.sort() | |
return "\n".join("- {word}: {positions}".format(word=word,positions=", ".join(str(position) | |
for position | |
in positions)) | |
for length,positions,word in classement) | |
def main(): | |
print(magic(open(sys.argv[1],encoding="utf8").read())) | |
for s1,s2 in zip(magic( | |
""" | |
« La marche des vertueux est semée d’obstacles qui sont les entreprises égoïstes que fait sans fin surgir l’œuvre du Malin. Béni soit-il l’homme de bonne volonté qui, au nom de la charité, se fait le berger des faibles qu’il guide dans la vallée d’ombre, de la mort et des larmes, car il est le gardien de son frère et la providence des enfants égarés. J’abattrai alors le bras d’une terrible colère, d’une vengeance furieuse et effrayante sur les hordes impies qui pourchassent et réduisent à néant les brebis de Dieu. Et tu connaîtras pourquoi mon nom est l’éternel quand sur toi s’abattra la vengeance du Tout-Puissant ! » | |
Ça fait des années que je répète ça. L’enfoiré qui l’entend, il meurt aussitôt. J’avais jamais cherché à comprendre, je trouvais seulement que ça en jetait de dire ça avant de flinguer un mec. Et puis ce matin, j’ai vu quelque chose qui m’a fait réfléchir. D’un seul coup, je me dis, ça pourrait bien vouloir dire que tu es l’œuvre du malin, et que l’homme vertueux c’est moi, et que mon joli 9 mm ce serait mon protecteur, mon berger dans la vallée de l’angoisse et des larmes. Ou encore mieux, c’est moi le berger et toi l’homme vertueux, et c’est le monde qui est l’œuvre de Lucifer. Qu’est-ce que tu dis de ça ? Mais rien de tout ça n’est juste. Ce qui est vrai, c’est que tu es le faible et que je suis la tyrannie des méchants. Et moi j’essaie, Ringo, au prix d’un effort harassant, de protéger les faibles. | |
""").splitlines(), | |
"""- marche: 1 | |
- semee: 5 | |
- obstacles: 7 | |
- sont: 9 | |
- entreprises: 11 | |
- egoistes: 12 | |
- sans: 15 | |
- fin: 16 | |
- surgir: 17 | |
- beni: 22 | |
- soit: 23 | |
- bonne: 28 | |
- volonte: 29 | |
- charite: 35 | |
- se: 36 | |
- guide: 44 | |
- ombre: 49 | |
- mort: 52 | |
- car: 56 | |
- gardien: 60 | |
- son: 62 | |
- frere: 63 | |
- providence: 66 | |
- enfants: 68 | |
- egares: 69 | |
- abattrai: 71 | |
- alors: 72 | |
- bras: 74 | |
- terrible: 77 | |
- colere: 78 | |
- furieuse: 82 | |
- effrayante: 84 | |
- hordes: 87 | |
- impies: 88 | |
- pourchassent: 90 | |
- reduisent: 92 | |
- neant: 94 | |
- brebis: 96 | |
- dieu: 98 | |
- connaitras: 101 | |
- pourquoi: 102 | |
- eternel: 107 | |
- quand: 108 | |
- s: 111 | |
- abattra: 112 | |
- puissant: 117 | |
- annees: 121 | |
- repete: 124 | |
- enfoire: 127 | |
- entend: 130 | |
- meurt: 132 | |
- aussitot: 133 | |
- avais: 135 | |
- jamais: 136 | |
- cherche: 137 | |
- comprendre: 139 | |
- trouvais: 141 | |
- seulement: 142 | |
- en: 145 | |
- jetait: 146 | |
- avant: 150 | |
- flinguer: 152 | |
- mec: 154 | |
- puis: 156 | |
- matin: 158 | |
- ai: 160 | |
- vu: 161 | |
- quelque: 162 | |
- chose: 163 | |
- m: 165 | |
- reflechir: 168 | |
- seul: 171 | |
- coup: 172 | |
- me: 174 | |
- pourrait: 177 | |
- bien: 178 | |
- vouloir: 179 | |
- joli: 199 | |
- mm: 200 | |
- serait: 202 | |
- protecteur: 204 | |
- angoisse: 212 | |
- ou: 216 | |
- encore: 217 | |
- mieux: 218 | |
- monde: 233 | |
- lucifer: 239 | |
- mais: 248 | |
- rien: 249 | |
- n: 253 | |
- juste: 255 | |
- vrai: 259 | |
- faible: 266 | |
- suis: 270 | |
- tyrannie: 272 | |
- mechants: 274 | |
- essaie: 278 | |
- ringo: 279 | |
- prix: 281 | |
- effort: 284 | |
- harassant: 285 | |
- proteger: 287 | |
- malin: 21, 187 | |
- au: 31, 280 | |
- nom: 32, 104 | |
- faibles: 41, 289 | |
- qu: 42, 240 | |
- dans: 45, 207 | |
- vallee: 47, 209 | |
- larmes: 55, 215 | |
- une: 76, 80 | |
- vengeance: 81, 114 | |
- sur: 85, 109 | |
- toi: 110, 225 | |
- tout: 116, 251 | |
- dire: 148, 180 | |
- dis: 175, 245 | |
- es: 183, 264 | |
- vertueux: 3, 192, 228 | |
- oeuvre: 19, 185, 237 | |
- du: 20, 115, 186 | |
- homme: 26, 191, 227 | |
- berger: 39, 206, 223 | |
- a: 93, 138, 166 | |
- un: 153, 170, 283 | |
- moi: 195, 221, 276 | |
- les: 10, 86, 95, 288 | |
- fait: 14, 37, 119, 167 | |
- il: 24, 43, 57, 131 | |
- j: 70, 134, 159, 277 | |
- tu: 100, 182, 244, 263 | |
- mon: 103, 198, 203, 205 | |
- je: 123, 140, 173, 269 | |
- ce: 157, 201, 242, 256 | |
- c: 193, 219, 230, 260 | |
- d: 6, 48, 75, 79, 169, 282 | |
- le: 38, 59, 73, 222, 232, 265 | |
- des: 2, 40, 54, 67, 120, 214, 273 | |
- qui: 8, 30, 89, 128, 164, 234, 257 | |
- ca: 118, 125, 144, 149, 176, 247, 252 | |
- la: 0, 34, 46, 51, 65, 113, 208, 271 | |
- que: 13, 122, 143, 181, 189, 197, 243, 262, 268 | |
- l: 18, 25, 106, 126, 129, 184, 190, 211, 226, 236 | |
- est: 4, 58, 105, 194, 220, 231, 235, 241, 254, 258, 261 | |
- de: 27, 33, 50, 61, 97, 147, 151, 210, 238, 246, 250, 286 | |
- et: 53, 64, 83, 91, 99, 155, 188, 196, 213, 224, 229, 267, 275""".splitlines()): | |
assert s1==s2,s1+" "+s2 | |
if __name__ == "__main__": | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment