Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1724 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [C++] Concours de code : new test en cours, proposez votre solution !

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

[C++] Concours de code : new test en cours, proposez votre solution !

n°475398
fykman
Errare Humanum Est
Posté le 02-08-2003 à 00:25:42  profilanswer
 

Salut,
 
Il sagit donc d'un petit concours de code.
Par exemple, on defini une petite tache a acomplir (parsing de texte, calcul mathematique...), chaque personne poste son code et on juge le meilleur (meilleure optimisation, elegance du code, ruses de sioux, etc..).
Il ne faut pas que ce ne soit pas trop long (15-20 lignes max).
 
Le juge-correcteur officiel est Taz, bien sur vous pouvez aussi juger/critiquer/corriger.  
 
edit de Taz :  
Pour ceux qui utilise g++ (ou mingw, dev-cpp), votre code doit compiler avec ces paramètres :
 
g++ -Wall -std=c++98 -pedantic
 
 
Test #1  (proposé par SchnapsMann) :
-------------------------------
#1 : "écrire un programme C qui trie lexicalement les arguments de la ligne de commande, dont le source est le plus court possible"
 
Meilleur resultat proposé par Kristoff (adapté du code de Taz)

Code :
  1. #include <iterator>
  2. #include <iostream>
  3. #include <string>
  4. #include <set>
  5.  
  6. using namespace std;
  7.  
  8. int main(int argc, char **argv)
  9. {
  10.     multiset<string> args(argv, argv+argc);
  11.     copy(args.begin(), args.end(), ostream_iterator<string>(cout, "\n" ));
  12. }


   
Test #2 (proposé par Taz):
--------------------------
 
Il sagit de donner les anagrammes de mots a partir du dictionnaire de francais suivant :
http://dejean.benoit.free.fr/tmp/french.zip
 
Essayez de faire un programme sur avant d'être efficace, au niveau de la lecture du fichier aussi. Dans mon programme, on quitte en envoyant EOF (CTRl+D sous *n*x, CTRL+Z sous windows).
Pour ceux qui n'auraient pas saisi, l'idéal serait d'avoir un affichage comme ça
 

Citation :


[benoit@athlon tmp]$ ./a.out /usr/share/dict/french
aimer
aimer : aimer, maire, marie,
nouveau
nouveau : nouveau,


Message édité par fykman le 03-08-2003 à 12:53:57
mood
Publicité
Posté le 02-08-2003 à 00:25:42  profilanswer
 

n°475403
Taz
bisounours-codeur
Posté le 02-08-2003 à 00:27:40  profilanswer
 

je pense que le topic 'trouver les bugs' est mieux. ça va vite être le bordel si tout le monde balance 25lignes... mais on peut essayer si tu veux

n°475409
fykman
Errare Humanum Est
Posté le 02-08-2003 à 00:29:38  profilanswer
 

Taz a écrit :

je pense que le topic 'trouver les bugs' est mieux. ça va vite être le bordel si tout le monde balance 25lignes... mais on peut essayer si tu veux


 
Je connaissait pas le topic "trouvez les bugs"...
 
Sinon, on choisi quoi comme theme de depart ?

n°475412
Taz
bisounours-codeur
Posté le 02-08-2003 à 00:30:34  profilanswer
 

aucune idée... pas le sujet de ton prochain tp de préférence

n°475415
fykman
Errare Humanum Est
Posté le 02-08-2003 à 00:32:09  profilanswer
 

Taz a écrit :

aucune idée... pas le sujet de ton prochain tp de préférence


 
AHAHAH, merci de ta solicitude, mais mes annees de facs sont loin derriere moi..
 
Bref, je vais scruter sur le web pour trouver un idée.


Message édité par fykman le 02-08-2003 à 00:32:59
n°475420
schnapsman​n
Zaford Beeblefect
Posté le 02-08-2003 à 00:33:24  profilanswer
 

Pour bien montrer aux éleves ce qu'il ne faut pas faire en apprenant le C, les profs de ma fac organisaient le concours suivant:
 
#1 : "écrire un programme C qui trie lexicalement les arguments de la ligne de commande, dont le source est le plus court possible"


Message édité par schnapsmann le 02-08-2003 à 18:09:34

---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
n°475424
fykman
Errare Humanum Est
Posté le 02-08-2003 à 00:35:03  profilanswer
 

Pourquoi pas...
 
Si tout le monde est d'accord on peut essayer ca.


Message édité par fykman le 02-08-2003 à 00:37:18
n°475434
Taz
bisounours-codeur
Posté le 02-08-2003 à 00:41:58  profilanswer
 

Code :
  1. #include <algorithm>
  2. #include <iterator>
  3. #include <iostream>
  4. #include <string>
  5. #include <vector>
  6. using namespace std;
  7. int main(int argc, char **argv)
  8. {
  9.   vector<string> args(argv, argv+argc);
  10.   sort(args.begin(), args.end());
  11.   copy(args.begin(), args.end(), ostream_iterator<string>(cout, " " ));
  12.   cout << endl;
  13. }

n°475436
Taz
bisounours-codeur
Posté le 02-08-2003 à 00:43:06  profilanswer
 

merde, j'ai le droit de jouer?

n°475443
schnapsman​n
Zaford Beeblefect
Posté le 02-08-2003 à 00:45:48  profilanswer
 

Taz a écrit :

merde, j'ai le droit de jouer?


 
les meilleurs arrivaient facilement en dessous des 100 caractères pour le source tout entier; remarque si tu veux on peux te faire jouer seul dans la catégorie c++/stl  [:boidleau]  [:calin]


Message édité par schnapsmann le 02-08-2003 à 00:46:06

---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
mood
Publicité
Posté le 02-08-2003 à 00:45:48  profilanswer
 

n°475449
Taz
bisounours-codeur
Posté le 02-08-2003 à 00:47:25  profilanswer
 

je veux pas d'un concours de code brouillé. j'ai donné l'exemple: du code clair, sur, réutilisable, performant

n°475451
fykman
Errare Humanum Est
Posté le 02-08-2003 à 00:47:45  profilanswer
 

Difficile de faire mieux la....
 
On sent la maitrise de la STL.

n°475457
Taz
bisounours-codeur
Posté le 02-08-2003 à 00:49:32  profilanswer
 

bon, je joue pas, je corrige. j'efface ou tu propose un truc de la même complexité?

n°475458
fykman
Errare Humanum Est
Posté le 02-08-2003 à 00:49:33  profilanswer
 

Taz a écrit :

je veux pas d'un concours de code brouillé. j'ai donné l'exemple: du code clair, sur, réutilisable, performant


 
Et qui compile pas sous Visual !

n°475459
Taz
bisounours-codeur
Posté le 02-08-2003 à 00:50:09  profilanswer
 

fykman a écrit :


 
Et qui compile pas sous Visual !

:non: c'est visual qui compile pas. c'est quoi le problème?

n°475468
fykman
Errare Humanum Est
Posté le 02-08-2003 à 00:52:40  profilanswer
 

Taz a écrit :

:non: c'est visual qui compile pas. c'est quoi le problème?


 
"Cannot convert char** to unsigned int"
 
ligne : vector<string> args(argv, argv+argc);
 
[:spamafote]
 
Et t'as oublié "return(0);" a la fin  ;)

n°475470
Taz
bisounours-codeur
Posté le 02-08-2003 à 00:54:11  profilanswer
 

l'erreur, je la comprends pas.
j'ai pas oublié le return(0). il est implicite: la valeur renvoyée est garantie comme indiquant une sortie correcte
d'ailleurs, ça serait un return 0, return étant une instruction et pas une fonction

n°475491
fykman
Errare Humanum Est
Posté le 02-08-2003 à 01:00:29  profilanswer
 

Taz a écrit :

l'erreur, je la comprends pas.


 
Ben moi non plus...  :(

n°475498
Taz
bisounours-codeur
Posté le 02-08-2003 à 01:03:10  profilanswer
 

fykman a écrit :


 
Ben moi non plus...  :(  

y a pas de support technique dans un compilo si cher (ok j'arrete)

n°475536
fykman
Errare Humanum Est
Posté le 02-08-2003 à 01:15:13  profilanswer
 

Ca, ca compile et ca marche :
 

Code :
  1. #include <algorithm>
  2. #include <iterator>
  3. #include <iostream>
  4. #include <string>
  5. #include <vector>
  6.  
  7. using namespace std;
  8.  
  9. int main(int argc, char **argv)
  10. {
  11. vector<string> args;
  12. for(int i=0; i<argc; i++) {
  13. string st(argv[i]);
  14. args.push_back(st);
  15. sort(args.begin(), args.end());
  16. copy(args.begin(), args.end(), ostream_iterator<string>(cout, " " ));
  17. cout << endl;
  18. return 0;
  19. }


 
Mais c'est moins elegant, forcement....

n°475543
Taz
bisounours-codeur
Posté le 02-08-2003 à 01:16:59  profilanswer
 

c'est bizarre cette histoire de constructeur...

n°475552
schnapsman​n
Zaford Beeblefect
Posté le 02-08-2003 à 01:19:19  profilanswer
 

Taz a écrit :

c'est bizarre cette histoire de constructeur...


 
boarf, ça m'étonne pas. Je me suis déjà cassé les dents à faire du code stl portable entre msc6 et d'autres compilos, le facteur limitant est vite trouvé.


---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
n°475556
Taz
bisounours-codeur
Posté le 02-08-2003 à 01:20:30  profilanswer
 

SchnapsMann a écrit :


 
boarf, ça m'étonne pas. Je me suis déjà cassé les dents à faire du code stl portable entre msc6 et d'autres compilos, le facteur limitant est vite trouvé.

c'est con quand même. c'est pas une question de version de STL. j'y connais rien mais j'ai déjà entendu des trucs là dessus. ou c'est vraiment le compilo?

n°475570
schnapsman​n
Zaford Beeblefect
Posté le 02-08-2003 à 01:23:16  profilanswer
 

Taz a écrit :

c'est con quand même. c'est pas une question de version de STL. j'y connais rien mais j'ai déjà entendu des trucs là dessus. ou c'est vraiment le compilo?


 
ouais même en utilisant VC++6 SP5, ce compilo ne passe pas tous les tests de conformance au standard stl [:schnapsmann]


---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
n°475576
fykman
Errare Humanum Est
Posté le 02-08-2003 à 01:25:14  profilanswer
 

J'y connais rien mais tu fait un cast inplicite entre un char** et un vector<string>::interator, le compilo doit pas aimer ca...

n°475584
Taz
bisounours-codeur
Posté le 02-08-2003 à 01:28:31  profilanswer
 

non, c'est pas ce qui se passe. tu peux imaginer le code du contructeur de vector comme ça
 

Code :
  1. template< typename T, typename InputIterator>
  2. vector<T>::vector(InputIterator begin, InputIterator end)
  3. {
  4.   /// des trucs;
  5.   // je fais ça explicitement
  6.   while(begin!=end)
  7.   {
  8.     push_back(*begin++);
  9.   }
  10. }


 
dans notre cas, *begin est de type char* ce qui est compatible avec le constructeur string(const char*)

n°475588
nraynaud
lol
Posté le 02-08-2003 à 01:30:15  profilanswer
 

SchnapsMann a écrit :

Pour bien montrer aux éleves ce qu'il ne faut pas faire en apprenant le C, les profs de ma fac organisaient le concours suivant:
 
"écrire un programme C qui trie lexicalement les arguments de la ligne de commande, dont le source est le plus court possible"

en O'caml :

Code :
  1. Array.sort String.compare Sys.argv



---------------
trainoo.com, c'est fini
n°475589
Taz
bisounours-codeur
Posté le 02-08-2003 à 01:31:12  profilanswer
 

nraynaud a écrit :

en O'caml :

Code :
  1. Array.sort String.compare Sys.argv


 

je te reconnait bien là  :D

n°475591
nraynaud
lol
Posté le 02-08-2003 à 01:32:04  profilanswer
 

Taz a écrit :

je te reconnait bien là  :D  

j'avais trop envie. En plus ce truc est meme pas fonctionnel !


---------------
trainoo.com, c'est fini
n°475594
Taz
bisounours-codeur
Posté le 02-08-2003 à 01:32:41  profilanswer
 

nraynaud a écrit :

j'avais trop envie. En plus ce truc est meme pas fonctionnel !

pourquoi?

n°475598
nraynaud
lol
Posté le 02-08-2003 à 01:36:19  profilanswer
 

Taz a écrit :

pourquoi?


Code :
  1. # Array.sort String.compare Sys.argv;;
  2. - : unit = ()


ca trie le tableau "en place", donc par effet de bord donc pas fonctionel (ou les valeurs n'ont pas le droit d'etre modifiées).
 
edit : version fonctionelle :

Code :
  1. # List.sort String.compare (Array.to_list Sys.argv);;
  2. - : String.t list = ["P:\\Objective Caml\\bin\\ocaml.exe"]


Message édité par nraynaud le 02-08-2003 à 01:41:55

---------------
trainoo.com, c'est fini
n°475600
Taz
bisounours-codeur
Posté le 02-08-2003 à 01:37:19  profilanswer
 

nraynaud a écrit :


Code :
  1. # Array.sort String.compare Sys.argv;;
  2. - : unit = ()


ca trie le tableau "en place", donc par effet de bord donc pas fonctionel (ou les valeurs n'ont pas le droit d'etre modifiées).

ah en ocaml, ok.

n°475700
red factio​n
Posté le 02-08-2003 à 10:42:36  profilanswer
 

ouaip bonne idee, malheureusement jsuis pas un bete de c++,
mais ca peut le faire  :D  
 
 

n°475702
red factio​n
Posté le 02-08-2003 à 10:47:31  profilanswer
 

faudrait clairement mettre le titre du 'contest' dans lentete du topic , et mettre en dessous le code de ceux qui ont deja reussi a le faire
 
un truc clair quoi
 
un peu comme le concours graphisme....


Message édité par red faction le 02-08-2003 à 11:12:18
n°475705
polo021
Posté le 02-08-2003 à 11:10:35  profilanswer
 

je suis partant aussi mais si on peut le faire en ... C  :ange:

n°475707
red factio​n
Posté le 02-08-2003 à 11:13:01  profilanswer
 

ouais moi aussi ca marrangerai bien , mais bon si on peut sameliorer en c++
 
du moment que ca devie pas en concours stl...

n°475710
polo021
Posté le 02-08-2003 à 11:17:31  profilanswer
 

bof, moi de toute facon j'associe automatiquement le C++ à la stl [:spamafote]
et comme je connais pas la stl, je ferai du C [:hotshot]


Message édité par polo021 le 02-08-2003 à 11:18:18
n°475714
Taz
bisounours-codeur
Posté le 02-08-2003 à 11:46:10  profilanswer
 

on est cat C++, pourrissez pas le topic. si vous voulez faire la meme chose dans d'autres langages, pas de problèmes. quelqu'un n'a qu'a créer le meme topic en C et voir ce que donne le meme problème, c'est tout suite moins bien en C

n°475716
polo021
Posté le 02-08-2003 à 11:46:52  profilanswer
 

Je ne te le fais pas dire  :sarcastic:  
 
 :jap:

n°475804
Kristoph
Posté le 02-08-2003 à 14:07:58  profilanswer
 

En adaptant un peu la version de Taz pour raccourcir :
 

Code :
  1. #include <iterator>
  2. #include <iostream>
  3. #include <string>
  4. #include <set>
  5. using namespace std;
  6. int main(int argc, char **argv)
  7. {
  8.   multiset<string> args(argv, argv+argc);
  9.   copy(args.begin(), args.end(), ostream_iterator<string>(cout, "\n" ));
  10.   return 0;
  11. }


 
Voila, c'est plus court et ça fait ce qui est demandé :D
 
Edit : il vaudrait beaucoup mieux utiliser multiset que set !


Message édité par Kristoph le 02-08-2003 à 14:11:42
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [C++] Concours de code : new test en cours, proposez votre solution !

 

Sujets relatifs
[Access][VBA]Recup la clef autoincrémenté de l'enregistrement en courstest
un code qui marche sous ie5.5 mais pas sous ie6[VB6] Datagrid et ajout d'enregistrement via code
[HTML] Comment éviter de copier-coller du code sur chaque page ?Prob important ! Mon code ne s'exécute plus !
Constantes Tableaux : Une solution ?[C] Peut-on conscidèrer ce bout de code correct ?
Solution "performante" pour générer du PDF[ASP + VB.net] Séparer HTML et code
Plus de sujets relatifs à : [C++] Concours de code : new test en cours, proposez votre solution !


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR