|
Publicité ' | ||||||||||||||||||||||||
|
|
#61 | ||
|
Inactif
Inscription : juillet 2005 Messages : 1 958 ![]() |
Salut, j'ai pris mon temps pour donner une solution en scheme.
Ça fait un moment que je n'étais pas vraiment passé par là et je n'avais pas vu que vous aviez commencé. Menfinbon. Voici sans optimisation, avec un code simple. C'est la technique de tous je crois. Code :
Dans les optimisations simples: les listes « infinies » pour conserver les valeurs des calculs temporaires et le retour de plusieurs paramètres pour éviter les constructions destructions de listes (je pense surtout au créateur union-des-listes-de). Mais j'ai pas essayé encore. |
||
|
|
00
|
|
|
#62 | ||
|
Inactif
Inscription : juillet 2005 Messages : 1 958 ![]() |
Voici une version compilable avec Bigloo
Code :
Avec mon PowerBook G4 et l'optimisation O3, j'obtiens 51s de user time pour 64. |
||
|
|
00
|
|
|
#63 |
![]() ![]() ![]() Nicolas ValléeIngénieur d'études Inscription : décembre 2005 Messages : 9 978 ![]() |
j'ai un petit problème avec ce programme...
voilà la ligne avec laquelle je compile avec succès mais quand je lance rien ne s'affiche... ce serait bien d'afficher le nombre de solutions pour être sûr que tout marche pour les performances + 21 => 6ms + 54 => 3s + 70 => 51s |
|
|
00
|
|
|
#64 | ||
![]() ![]() ![]() Nicolas ValléeIngénieur d'études Inscription : décembre 2005 Messages : 9 978 ![]() |
bon allez, pour ne pas laisser ocaml derrière haskell, voici une petite version avec l'algorithme simpliste plus une petite mémorisation des résultats
Attention : je n'ai pas encore partagé les listes intermédiaires pour éviter la duplication en mémoire... Code :
les performances : + n=21 => 2ms + n=54 => 657s + n=70 => 9s stack overflow à n=75 bizarre... d'après les données renvoyées par statm, cela consommerait seulement 6Mo de mémoire, et selon top je prendrais 280Mo (plus réaliste) pour comparaison, la "même" méthode en haskell par Jedai avait les performances suivantes : + 3ms pour 21 + 450ms pour 54 + 5,6s pour 70 il est vrai que ocamlopt optimise bien, mais je ne lui ai pas rajouté d'options... car je ne sais pas lesquelles prendre ; alors que le ghc optimise avec pas mal d'options |
||
|
|
00
|
|
|
#65 | ||
|
Expert Confirmé Sénior
![]() ![]() |
J'ai rajouté ton programme dans mes benchs, ça donne déjà un rang plus réaliste à OCaml. Par contre ça serait bien si à l'avenir tu utilisais des espaces plutôt que des tabulations, parce qu'elles prennent une place folle sur le forum, du coup ton code devient difficile à lire (il s'étale horizontalement...). Si tu utilisais des espaces, tu pourrais avoir plutôt un truc comme :
Code OCaml :
-- Jedaï |
||
|
|
00
|
|
|
#66 | |
![]() ![]() ![]() Nicolas ValléeIngénieur d'études Inscription : décembre 2005 Messages : 9 978 ![]() |
Citation:
zut sous vim, chaque tab ne prend que la place que je souhaite pourtant.... ![]() faudra que j'essaie d'y penser |
|
|
|
00
|
|
|
#67 | |||||
|
Inactif
Inscription : juillet 2005 Messages : 1 958 ![]() |
Citation:
J'ai fait ça pour ne pas avoir à rediriger la sortie. Dans Dr Scheme, on lit cependant les résultats de retour des fonctions. En exécution avec Bigloo il ne les produit pas par contre. Je t'assure que tout marche. Mais sinon voici le changement que tu peux faire pour afficher Code :
Code :
|
|||||
|
|
00
|
|
|
#68 | |
|
Inactif
Inscription : juillet 2005 Messages : 1 958 ![]() |
Citation:
|
|
|
|
00
|
|
|
#69 | |
![]() ![]() ![]() Nicolas ValléeIngénieur d'études Inscription : décembre 2005 Messages : 9 978 ![]() |
Citation:
je sais, mais cela prend plus de place...
|
|
|
|
00
|
|
|
#70 | |
|
Expert Confirmé Sénior
![]() ![]() |
Citation:
Sinon j'ai une autre solution pour toi : utilise emacs ! -- Jedaï |
|
|
|
00
|
|
|
#71 | |
![]() ![]() ![]() Nicolas ValléeIngénieur d'études Inscription : décembre 2005 Messages : 9 978 ![]() |
si je remplace une tabulation par 2 ou 3 espaces... le fichier du code source sera plus gros
Citation:
en fait, j'utilise emacs + tuareg pour ocaml... mais ça fait 6 mois que je ne code presque pas, alors j'avais oublié
|
|
|
|
00
|
|
|
#72 |
|
Membre Expert
![]() Inscription : mars 2002 Messages : 962 ![]() |
C'est malin !
Utilise alors : C-x h M-x untabify avant de poster ton code source. Pour ma part, quand je me fiche de la taille du fichier, je préfère avoir : (setq-default indent-tabs-mode nil) pour ne pas avoir de caractère tabulation (je trouve ça bien au final vu les problèmes qu'elles posent... d'ailleurs F# les interdit en mode #light). |
|
|
00
|
|
|
#73 | |
|
Inactif
Inscription : juillet 2005 Messages : 1 958 ![]() |
Citation:
TU veux combien d'espace pour une tabulation ? |
|
|
|
00
|
|
|
#74 | ||
|
Expert Confirmé Sénior
![]() ![]() |
Citation:
Citation:
-- Jedaï |
||
|
|
00
|
|
|
#75 | |
![]() ![]() ![]() Nicolas ValléeIngénieur d'études Inscription : décembre 2005 Messages : 9 978 ![]() |
Citation:
cool... un lien ? |
|
|
|
00
|
|
|
#76 |
|
Expert Confirmé Sénior
![]() ![]() |
Haskell mode for Emacs, très pratique, permet de charger son module dans GHCi ou Hugs automatiquement, excellent système d'indentation (ce qui a son importance en Haskell) et autres gadgets (type des fonctions standard automatiquement affiché dans le mini-buffer, après chargement du module dans un interpréteur, vous pouvez avoir la même chose pour n'importe quelle fonction, retrouver la définition d'un symbole, etc...).
-- Jedaï |
|
|
00
|
|
|
#77 |
|
Inactif
Inscription : juillet 2005 Messages : 1 958 ![]() |
Dans la partie HS, j'étais un grand fan de Emacs avant. Sauf qu'un jour j'ai eu à utiliser des serveurs qui ne possédait que VI (et oui ça arrive)... depuis je n'utilise plus que celui-ci. Le seul truc qui me manque de Emacs, c'est son dialecte Lisp ^_^
|
|
|
00
|
|
|
#78 | ||
|
Membre Expert
![]() Inscription : mars 2007 Messages : 858 ![]() |
Voici une version (compilable) en Oz. Elle est lazy et utilise la mémorisation des résultats intermédiaires. C'est pas très joli (comparée à du Haskell p.e.) mais relativement efficace (2 secondes environ pour sums 64; 6 ou 7 secondes pour sums 75).
C'est un langage intéressant; dommage qu'il soit si verbeux et que la librairie standard soit si pauvre... Code :
|
||
|
|
00
|
|
|
#79 | ||
|
Invité(e)
![]() Messages : n/a ![]() |
Voici une version purement fonctionnelle (sauf pour le décompte des feuilles, qui n'est là que pour l'exemple) en OCaml, sans mémoization ou quoi que ce soit. Je n'ai pas non plus mis de pretyprinter, mais ce n'est pas bien compliqué. Sur mon pentium M 1,2GHz, compilé avec ocamlopt, pour 40 (résultat 37338), ça prend 0,16 secondes. Pour 60, on monte à 3,87, et pour 70, je swap comme une brute, et je n'ai pas envie de continuer :-)
Code :
|
||
00
|
|
|
#80 | ||
|
Invité(e)
![]() Messages : n/a ![]() |
Pour ceux qui comme Saint Thomas ne croient que ce qu'ils voient, la version avec pretty-printer...
Code :
|
||
00
|
Copyright © 2000-2013 - www.developpez.com