Ouais c'est clair, mais là par exemple le problème 3 je me fais enculer sevèrement
Clairement Ruby avec ses fonctions built in le projet euler tu lui fais mal quoi.
Mais je pense avoir compris mon problème, depuis le début j'utilise ghci. J'ai pas encore écrit de vrai script, du coup comme Haskell n'est pas un vrai langage interprêté ça doit jouer énormément sur la lenteur. Du coup je fais le compiler dans un script à part.
Mais j'ai jamais fait ça, tu peux m'expliquer le soucis dans mon main
isPrime :: (Integral a) => a -> Bool
isPrime 0 = error "0 not allowed"
isPrime x
| length [ n | n<-[2..max],x `mod` n == 0] == 0 = True
| otherwise = False
where max = truncate $ sqrt $ fromIntegral x
divisorsOf :: (Integral a) => a -> [a]
divisorsOf 0 = error "Division by zero"
divisorsOf x = [ n | n<-[1..x], x `mod` n == 0]
main = putStrLn $ last $ filter (isPrime) $ divisorsOf 600851475143
Erreur:
prime_brute.hs:13:34:
No instance for (Integral String) arising from a use of ‘isPrime’
In the first argument of ‘filter’, namely ‘(isPrime)’
In the expression: filter (isPrime)
In the second argument of ‘($)’, namely
‘filter (isPrime) $ divisorsOf 600851475143’
prime_brute.hs:13:56:
No instance for (Num String)
arising from the literal ‘600851475143’
In the first argument of ‘divisorsOf’, namely ‘600851475143’
In the second argument of ‘($)’, namely ‘divisorsOf 600851475143’
In the second argument of ‘($)’, namely
‘filter (isPrime) $ divisorsOf 600851475143’
Sinon le problème 8 est pas trop dur en Ruby, mais j'ai mis un peu de temps à l'écrire. Peut être 1h
En fait il fallait appeler show avant de le passer à PutStrLn
Bon sinon je pense que que le bruteforce soit une option avec un langage paresseux, j'ai le même code qu'en Ruby là et j'ai toujours rien après une minute
(Sinon t'as réussi le 18 mais pas le 8 wtf?)
"Clairement Ruby avec ses fonctions built in le projet euler tu lui fais mal quoi."
Rooh, mais arrête avec ça
Les built-ins pour des tours mathématiques comme ceux proposés dans Euler, y'en a dans _tous_ les langages. Sauf que pour les problèmes, suffit de ne pas les utiliser. J'ai pas utilisé la bibliothèque de primes de Ruby qui génère des primes de façon optimisée, par exemple. Et c'est normal, c'est même inscrit dans les règles.
Tout ce que j'ai fait en Ruby se développe exactement de la même façon dans n'importe quel autre langage impératif, simplement en plus de lignes en général. Tout ce que la syntaxe du Ruby apporte dans ces cas-là, c'est 3 lignes économisées en faisant un each plutôt qu'un for. Tu penses vraiment que c'est ça qui gâche le jeu ou qui apporte un quelconque avantage ?
Le langage ne change pas l'algorithme ni même son implémentation tant qu'on reste dans le même paradigme. Et dans le projet euler, c'est l'algo qui compte, on se fout de savoir si on l'a fait avec un forEach ou un for, puisque c'est juste du sucre syntaxique. Quelqu'un qui sait utiliser un forEach sait utiliser un for, quand même.
C'est comme si tu grognais parce que quelqu'un utilise les += ou ++/-- parce qu'on a toujours moyen de le faire plus classiquement.
Pas dans ce cas là, je te parle de la majorité des problèmes requierant un algorithme bien foutu qui se fait en quelques fonctions de Ruby déjà built-in
Après je dis pas que c'est le cas de tout les problèmes mais bon utiliser des fonctions built-in ça aide énormément et ça m'étonnerait que tu n'en aies jamais utilisés (autres que les simples raccourcis)
C'est pas de la sorcellerie, ces fonctions ont bien du être écrite par un être humain, donc je vois pas pourquoi c'est si étonnant.
Dites, j'ai installé Gnome, et maintenant mon Grub est limite vert avec écrit "Debianedu SkoleLinux", et j'ai aussi ce fond d'écran, et en l'ouvrant ça m'a ouvert une page web vers un truc de l'éducation ou je ne sais quoi, si je vais dans Aptitude et que je supprime tout GNOME, tout rentrera dans l'ordre?
Merci!
Donne un exemple, parce que sérieusement je vois pas.
Je vois 2 choses à quoi tu peux penser : les fonctions wrappers qui ne sont que des _sucres syntaxiques_, comme les boucles et itérateurs (each, select, map, times, ...). C'est tellement mécanique qu'on peut tout à fait les convertir en boucles classiques avec un préprocesseur. Le seul avantage que ça apporte, c'est une diminution du nombre de lignes. Rien d'autre, et quiconque sait utiliser ces wrappers parfois obscurs sait utiliser les structures de base qu'il y a derrière. C'est exactement le même principe que les ++/-- ou +=/*=/... : ça permet de gagner du temps, mais n'importe quel idiot peut résoudre un problème sans s'en servir. Y'a pas besoin de sortir d'X pour implémenter un map ou un select, quand même.
L'autre option, ce sont les fonctions des bibliothèques standards ou utilisateur, type prime pour générer des nombres premiers, les fonctions de tri, ou celles qui bossent avec de l'aléatoire. Là, c'est plus compliqué à implémenter manuellement, forcément, et je suis d'accord, c'est de la triche si on s'en sert dans un problème Euler.
Mais ça, je me répète, c'est disponible dans n'importe quel langage. C++ les a, Python les a, Java les a, ... C'est stupide de s'en servir pour les problèmes Euler, mais ça c'est propre à l'utilisateur, pas au langage et sur ce point Ruby fait ni mieux ni moins bien que les autres.
Pour le reste, je vois pas. Ruby n'est pas un langage magique qui résout les problèmes pour toi. S'il est populaire, c'est surtout parce qu'il est bourré de sucres syntaxiques et de constructions souples (les if/while/whatever placables n'importe où dans une ligne, par exemple), ce qui permet de gagner du temps de développement parce qu'on a pas besoin de répéter 36k fois les mêmes choses.
Non mais sur ce point tu as parfaitement raison, Ruby est bourré de sucre syntaxiques qui font qu'on écrit qu'on écrit plus facilement ce qu'on pense. Toujours est-il que rien que ça c'est déjà un énorme avantage sur d'autres langages, mais nous ne leurrons pas 99% de ces choses peuvent être écrit avec des structures standards.
J'ai pas trop d'exemple ça fait longtemps le projet Euler et j'en suis qu'au problème 3 actuellement Mais particulièrement je pense à ça (il y a en d'autres),
https://projecteuler.net/problem=19
C'est un problème qui algorithmiquement n'est pas trivial à mon sens, mais en 10 lignes de Ruby c'est fait. On crée un objet Time avec la date de départ on fait une boucle où on incrémente d'un jour à chaque itération et là magie la petite fonction Sunday? de Ruby ( ) qui fait tout le boulot.
Quand je serais arrivé au point où j'en suis en Ruby actuellement avec Haskell je te donnerais d'autres exemples là je suis toujours au 3 ème
Et tu utilise un groupement non trivial de la bibliothèque standard.
Les objets Date/Time sont pas exclusifs au Ruby, t'en as dans la quasi totalité des langages de script, et C/C++ ont des utilitaires semblables avec le header <ctime>
C'est le même principe que les nombres premiers ou les algos de tri, là encore. Si on fait ce problème, on les utilise pas, mais c'est la même situation dans un nombre impressionnant de langages.
vava740 ( https://www.jeuxvideo.com/forums/1-38-7665853-2084-0-1-0-0.htm#message_7818638 )
« Lien du thème CSS GitHub pour GitWeb ? »
https://github.com/kogakure/gitweb-theme il me semble.
Simple et efficace. Le seul truc qui "manque" à gitweb vanilla c'est l'affichage du réseau de commits mais je m'en fous, je fais ça en local avec gitg
Oui enfin t'as pas de méthodes aussi puissantes avec les structures <ctime>. Mais c'est pour ça que Ruby est plus haut niveau que C++ aussi, normal que ça se passe comme ça.
Et si c'est pas pour utiliser ces méthodes il y a peu d'intérêt à utiliser Ruby, on préférera utiliser d'autres langages.
Mais c'est clairement l'objectif de Ruby ce n'est pas un mauvais point hein, ça dépends juste de l'usage qu'on en fait
(t'as utilisé ces fonctions pour le problème 19? )
Google_bot, j'ai enfin réussi à installer Debian
@Google_Bot « réseau de commits » ?
L'arborescence, ou historique, ou git log --graph
(ils appellent ça "network" sur GitHub, j'pensais que ça parlerait )
Ah. Même avec GitHub je passe toujours pas git log --graph.
Je vais tester ElementaryOS pour voir ce que a donne, on entend beaucoup parler de cette distro
Y'a NixOS qui m'a l'air plutôt nice, surtout leur gestionnaire de paquets qui me fait baver (installation par utilisateur, gestion de profils, configuration inspirée par la programmation fonctionnelle...).
Mais à part l'installer j'ai pas encore fait grand chose dessus.
Le truc plutôt cool c'est qu'il y a une installation en mode Arch (sauf qu'on a en plus le beginner's guide dans un w3m dans une TTY d'office, ce qui est plutôt appréciable), et apparemment aussi une installation graphique.
---
Sinon y'en a parmi vous qui ont testé le xsh ( http://xsh.org/ ) ?
bryce@quasar[~/Code/Haskell] -> time ./problem3 +RTS -s [16:28:51]
Probleme 3 Euler: Veuillez entrer un entier.
600851475143
Vous avez entre : 600851475143
ça fait plus d'une heure je désespère
J'ai envie de l'installer, c'est mon petit côté hipster qui me le dit, même si mon côté barbu me dit de faire un grand bricolage Slackware/Nix/foo.
Franchement, ça apporte vraiment un truc neuf, y'avait une autre distribution Linux qui faisait tout différemment mais je me souviens plus du nom.