question du jour 2 - le retour
|
30-05-2014, 16h24
Message : #1
|
|
gruik
gouteur de savon Messages : 757 Sujets : 44 Points: 482 Inscription : Oct 2012 |
question du jour 2 - le retour
une réédition d'un problème classique, juste histoire de...
j'ai un fichier qui contient plusieurs paragraphes, chaque paragraphe étant composé de plusieurs lignes avec sur chacune un nombre Code : 456 le but est de trier numériquement les lignes de chaque paragraphe indépendamment des autres : Code : 2 c'est vite torché, à vos éditeurs !
Avant donc que d'écrire, apprenez à penser.
Selon que notre idée est plus ou moins obscure, l'expression la suit, ou moins nette, ou plus pure. Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau, L'Art poétique) |
|
30-05-2014, 16h42
(Modification du message : 30-05-2014, 17h16 par notfound.)
Message : #2
|
|
notfound
#!/usr/bin/env bash Messages : 687 Sujets : 47 Points: 271 Inscription : Sep 2012 |
RE: question du jour 2 - le retour
Voici ma solution :
Code AWK :
Voilou |
|
30-05-2014, 16h47
Message : #3
|
|
eax64
Newbie Messages : 8 Sujets : 0 Points: 13 Inscription : Nov 2012 |
RE: question du jour 2 - le retour
Salut,
Code : python -c 'print((lambda f:"\n\n".join((["\n".join(sorted(d.split("\n"), key=int)) for d in open(f).read().split("\n\n")])))("file_data"))' bonne journée ! |
|
30-05-2014, 16h55
Message : #4
|
|
fr0g
NTEuNDI2MzcsLTEuNzc4NDg4 Messages : 348 Sujets : 22 Points: 56 Inscription : Aug 2011 |
RE: question du jour 2 - le retour
Je ne la joue pas optim :p
Code PYTHON :
|
|
30-05-2014, 17h09
(Modification du message : 30-05-2014, 17h09 par Dobry.)
Message : #5
|
|
Dobry
Tueur de lamouz Messages : 206 Sujets : 25 Points: 73 Inscription : Aug 2011 |
RE: question du jour 2 - le retour
Bon pour changer un peu (je doute que ce soit optimisé)
Code RUBY :
Aestuārium Erudītiōnis
There are only two hard things in Computer Science: cache invalidation, naming things, and off-by-one errors.
|
|
30-05-2014, 17h13
(Modification du message : 30-05-2014, 19h11 par gruik.)
Message : #6
|
|
gruik
gouteur de savon Messages : 757 Sujets : 44 Points: 482 Inscription : Oct 2012 |
RE: question du jour 2 - le retour
(30-05-2014, 16h47)eax64 a écrit : yep, j'avais quasiment la même : Code PYTHON :
print '\n\n'.join(['\n'.join(sorted(i.split('\n'), key=int)) for i in open('fichier').read().split('\n\n') if i != '']) sinon en awk, un peu plus tricky : Code AWK :
awk '/^$/ {close("sort -n"); print; next} {print | "sort -n"}' fichier Edit: Code PERL :
perl -lne 'if (/^$/) {print join("\n", sort { $a <=> $b } @tab); print} else {push(@tab, $_)}' fichier
Avant donc que d'écrire, apprenez à penser.
Selon que notre idée est plus ou moins obscure, l'expression la suit, ou moins nette, ou plus pure. Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau, L'Art poétique) |
|
30-05-2014, 18h17
Message : #7
|
|
b0fh
Membre actif Messages : 210 Sujets : 17 Points: 309 Inscription : Jul 2012 |
RE: question du jour 2 - le retour
Code HASKELL :
|
|
30-05-2014, 18h56
(Modification du message : 30-05-2014, 20h08 par octarin.)
Message : #8
|
|
octarin
Apprenti sorcier Messages : 68 Sujets : 11 Points: 47 Inscription : May 2013 |
RE: question du jour 2 - le retour
Je propose deux solutions:
Voici la solution en python: Code PYTHON :
Et celle en bash: Code BASH :
Faire des mathématiques c’est donner le même nom à des choses différentes. -- Henri Poincaré
|
|
30-05-2014, 21h16
Message : #9
|
|
skii
Newbie Messages : 19 Sujets : 4 Points: 3 Inscription : Sep 2012 |
RE: question du jour 2 - le retour
Code : croissant = [] Python pour ma pars, merci gruik et aryas pour l'aide ! |
|
30-05-2014, 22h31
(Modification du message : 30-05-2014, 22h32 par Atlas.)
Message : #10
|
|
Atlas
Membre actif Messages : 69 Sujets : 7 Points: 3 Inscription : Aug 2012 |
RE: question du jour 2 - le retour
|
|
31-05-2014, 12h23
(Modification du message : 31-05-2014, 12h34 par notfound.)
Message : #11
|
|
notfound
#!/usr/bin/env bash Messages : 687 Sujets : 47 Points: 271 Inscription : Sep 2012 |
RE: question du jour 2 - le retour
Bon comme persone s'est décidé à le faire, je le fais.
Et on va jouer un peu avec la mise en cache du fichier pour voir comment chaque programme se démerde. (Désolé b0fh mais j'ai pas ghc et l'install des 388 Mo me donne pas envie :p, et atlas mais ma version de java n'aime pas [javac 1.6.0_26] ) Code BASH :
Bon c'est parti : Code BASH :
Code BASH :
Code BASH :
Code BASH :
Code BASH :
Code BASH :
J'ai eu quelques soucis avec les codes py, je mettrais à jour. De plus, tous les programmes testés mettent en cache tout le fichier. A voir avec haskell qui visiblement ne le fait pas. |
|
31-05-2014, 16h50
Message : #12
|
|
gruik
gouteur de savon Messages : 757 Sujets : 44 Points: 482 Inscription : Oct 2012 |
RE: question du jour 2 - le retour
Avant donc que d'écrire, apprenez à penser.
Selon que notre idée est plus ou moins obscure, l'expression la suit, ou moins nette, ou plus pure. Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau, L'Art poétique) |
|
31-05-2014, 17h16
(Modification du message : 31-05-2014, 20h04 par Booster2ooo.)
Message : #13
|
|
Booster2ooo
Contributeur Messages : 165 Sujets : 14 Points: 63 Inscription : Aug 2011 |
RE: question du jour 2 - le retour
Aller, pour le fun,
C# Code CSHARP :
|
|
31-05-2014, 17h58
Message : #14
|
|
eax64
Newbie Messages : 8 Sujets : 0 Points: 13 Inscription : Nov 2012 |
RE: question du jour 2 - le retour
(31-05-2014, 16h50)gruik a écrit : - les oneliners Python (le miens et celui de eax64) vautrent lamentablement : Ha ouais mais faut pas mettre de \n la fin du fichier de data, sinon ça casse tout. Suffit de rajouter un filter(None, ..) Pour le miens: Code PYTHON :
print((lambda f:"\n\n".join((["\n".join(sorted(filter(None, d.split("\n")), key=int)) for d in open(f).read().split("\n\n")])))("data")) Qui avait un lambda inutile d'ailleur: Code PYTHON :
print("\n\n".join((["\n".join(sorted(filter(None, d.split("\n")), key=int)) for d in open("data").read().split("\n\n")]))) Et pour celui de gruik: Code PYTHON :
print '\n\n'.join(['\n'.join(sorted(filter(None, i.split('\n')), key=int)) for i in open('data').read().split('\n\n') if i != '']) Quelques ressemblances entres les deux codes. |
|
31-05-2014, 18h14
(Modification du message : 31-05-2014, 18h44 par gruik.)
Message : #15
|
|
gruik
gouteur de savon Messages : 757 Sujets : 44 Points: 482 Inscription : Oct 2012 |
RE: question du jour 2 - le retour
ah ben voilà, bien vu le filter(None, ...), du coup au résultat on est mieux :
Code : 5.40s, 886368Ko, python -c print("\n\n".join((["\n".join(sorted(filter(None, d.split("\n")), key=int)) for d in open("fichier").read().split("\n\n")]))) mais celui qui remporte la palme, pour peu qu'on commente le Console.ReadLine(); à la fin, c'est le code C# de Booster2000 : Code : 1.16s, 1077472Ko, mono booster2000.exe même meilleur que le code C, ça prend aussi plus de mémoire Edit: c'est un tri alphabétique en fait, ça ne fait pas le job comme attendu :> re-Edit: après modif les résultats pour le code C# sont ceux là : Code : 10.75s, 3987872Ko, mono booster2000.exe
Avant donc que d'écrire, apprenez à penser.
Selon que notre idée est plus ou moins obscure, l'expression la suit, ou moins nette, ou plus pure. Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau, L'Art poétique) |
|
« Sujet précédent | Sujet suivant »
|
Sujets apparemment similaires… | |||||
Sujet | Auteur | Réponses | Affichages | Dernier message | |
question du jour | gruik | 9 | 435 |
12-11-2013, 16h10 Dernier message: gruik |
|
Question pour la création de mon site... | Wabouz | 10 | 491 |
05-03-2013, 21h14 Dernier message: Wabouz |
Utilisateur(s) parcourant ce sujet : 4 visiteur(s)