T'as passé la nuit dessus
T'as passé la nuit dessus
Je crois pas. Je sais pas, je veux fini les moyens avant. Mais y'a déjà des challenges moyen qui demandent du A* (enfin je crois, j'ai tenté d'implémenter une solution BFS pour le challenge TEADs et c'est trop lent: je me tape un Timeout dès que l'arbre a rechercher est trop gros)
- - - Mise à jour - - -
https://www.codingame.com/games/optim/71
Comme ca a l'air de brancher du monde, je pense créer un toppic dédié dans l'aprem.
- - - Mise à jour - - -
Parle pour toi . Avec 0 connaissances en prog, je sue bien sur les moyens...
Va falloir que j'aille regarder ça, ça a l'air assez sympathique.
Rien à voir, mais est-ce que certains d'entre vous auraient passé des test technique pour Microsoft (première étape de recrutement pour le centre de R&D d'Issy-Les-Moulineux) ?
Je passe ça jeudi et j'aurais bien aimé me renseigner un peu avant pour savoir si il y a un domaine en particulier à préparer (ou si c'est assez général ou au contrairement totalement random).
J'ai créé un sujet dédié pour ne pas trop polluer ce thread somme toute très sérieux
http://forum.canardpc.com/threads/10...step-dans-l-OP
Dans le toppic des sousous dans la popoche, il me semble que quelqu'un parlait de son entretien chez 'crosoft. J'ai juste en mémoire le test de la banane (ils lui avaient demandés de résoudre ca: http://mkcohen.com/saturday-puzzle-9-apples-and-oranges ).
Je connais pas leur méthode de recrutement, mais pour en faire dans une boite américaine, je pense que tu peux te préparer à des questions persos, des trucs techniques généraux (je serais surpris si une boite de ce genre te demande en entretien "comment fonctionne la fonction X()" et autre débilitées que tu peux demander rapidement à google et qui n'ont aucun sens à apprendre par coeur), des questions de logique et ptet une ou deux surprises (des trucs auxquels tu peux pas vraiment te préparer).
Dans mon cas c'est en 3 phases (chacune débloquée uniquement si la précédente est validée) :
1) un test purement technique d'une heure à résoudre en Java/C++/C# (au choix), pas besoin que ça compile ou tourne mais la qualité du code est quand même notée (pas seulement la logique et l'algorithmie)
2) un entretien téléphone d'1h (en Anglais ou Français) à propos notamment du test précédent + questions de maths et logique
3) une série d'entretiens sur place pendant une 1/2 journée
Pour ceux que ça intéresse, Joe Duffy balance pas mal d'infos sur Midori et M# (tout les deux étant maintenant à la poubelle (même s'ils récupèrent des trucs de M#), le premier étant un OS programmé avec le second (code managé)).
http://joeduffyblog.com/2015/12/19/safe-native-code/
Le sommaire : http://joeduffyblog.com/2015/11/03/b...-about-midori/
En remontant dans le blog, on peut voir le moment où il était confiant que M# allait finir en tant que produit.
Bon au final rien de compliqué pour le test technique : exploration et recherche dans un labyrinthe (avec position de départ et d'arrivée aléatoire).
Au final un bête A* pour trouver la case non explorée la plus proche et on déroule le labyrinthe en stockant l'état de chaque case (non explorée / explorée / mur).
Bien sur y'a des solutions plus optimisées et assez intéressantes à base d'apprentissage, m'enfin à froid comme ça (ça doit faire des semaines que j'ai pas codé sérieusement) et avec juste une 1h je préférais partir sur du classique.
Bon par contre mon code est pas trop propre, y'a des variables qui sa baladent un peu partout et des cast/enum de temps en temps.
Aujourd'hui a lieu le meeting khornos où ils vont probablement approuver les specs Vulkan. :j-y-crois:
Rust fanboy
Rust fanboy
Plop petite question "Quel est la meilleure pratique ?"
Cet aprem avec un ingé on a passé une bonne partie de notre temps à debugger un bug somme toute assez classique:
En gros
Quelque part dans le code :
Autre part :Code:void ma_fonction(int *truc) { truc[5] = 2; }
Bon évidemment, grand classique à ne pas faire, qui aboutit souvent à un segfault, mais ici le programme était suffisamment lourd en mémoire pour que l'adresse suivante nous appartienne donc une erreur aléatoire en découle selon l'adresse qui suit, évidemment.Code:void mon_autre_fonction() { int tableau[2]; ma_fonction(tableau); }
Ma question est simple : si j’étais en C++ rien de plus simple que d'éviter ce type de problème par la généralisation de l'usage d'une classe tableau qui force la vérification des taille à chaque fois, tout ça tout ça.
Mais ici je suis en C simple, du coups je me demande : quelle est la meilleure bonne pratique pour éviter le soucis, ou du moins qu'il balance une erreur claire... ?
Si vous avez des idées, je suis preneur. Ça fait déjà plusieurs jours de perdu de debug depuis le début de l'année pour des dépassements de buffer de ce type...
une balle, un imp (Newstuff #491, Edge, Duke it out in Doom, John Romero, DoomeD again)
Canard zizique : q 4, c, d, c, g, n , t-s, l, d, s, r, t, d, s, c, jv, c, g, b, p, b, m, c, 8 b, a, a-g, b, BOF, BOJV, c, c, c, c, e, e 80, e b, é, e, f, f, f, h r, i, J, j, m-u, m, m s, n, o, p, p-r, p, r, r r, r, r p, s, s d, t, t
Canard lecture
Sleeping all day, sitting up all night
Poncing fags that's all right
We're on the dole and we're proud of it
We're ready for 5 More Years
Yep, OK, c'est ce que je ferais si j'avais tout le programme à refaire. Mais là on est sur un programme immense et hautement collaboratif.
N'y a t-il pas un Warning qu'il est possible d'activer pour forcer les vérifications ? Ça me dit un truc, mais je n'arrive pas à mettre le doigt dessus ...
edit :
Un -fstack-protector-all devrait déjà permettre de faire un nettoyage non ?
Il semble que ça force l’arrêt du programme en cas de detection d'overflow, ce qui pourrait être potable dans mon cas, mais j'imagine que ça ralentit de beaucoup le code.
Sinon on m'a également recommandé : AddressSanitizer , de gcc.
A voir... donc .
Dernière modification par Nilsou ; 21/01/2016 à 21h06.
Mon conseil: utiliser std::vector ou std::array
"Dieu est mort" · "Si le téléchargement c’est du vol, Linux c’est de la prostitution."
Yep, pourquoi pas, en l'absence de C++.
Mais sinon dans un premier temps je vais me contenter d'un petit audit du programme dans plusieurs cas d'utilisation avec AdressSanitizer. J'essaierais de généraliser l'usage de vector et array par la suite.
edit : je dis nawak, tu m'a induis en erreur, c'est only C++ vector et array
Tu devances ma question. Quel est l'avatage (et la construction) d'un A* dans le cas d'un labyrinthe ou on cherche a explorer la case non exploree la plus proche, par rapport a un BFS? (Je pensais le BFS plis approprie a la recherche de chemin dans le cas ou on ne connait pas les coordonnees de la case d'arrivee souhaitee?) .
Et meme question concernant le Gang Of Four. Je pensais le faire commander par ma boite pour le lire. En quoi est-ce une mauvaise idee?
Dans le cas de l'exploration d'un labyrinthe A* est justement un très mauvais algorithme, faut faire gaffe. T'aurais pas du être pris
Tout simplement parce qu'il te faut une heuristique, qu'en l'absence d'info, dans un monde proche de la réalité de la vrai vie, le plus court chemin c'est mieux et fait une heuristique acceptable pour l'exploration de map. Mais que justement dans le cas d'un labyrinthe c'est tout pourris puisqu'il est conçu pour tromper l'utilisateur avec des cul de sac et tout.
D'ailleurs c'est bien connus que dans un labyrinthe il faut abandonner son intuition de la vrai vie (donc notre heuristique) pour devenir scientifique et tout explorer consciencieusement (Toujours tourner dans le même sens par exemple).
Donc même si tu connaissais la destination, un algo en largeur ou profondeur d'abord sera plus performant que A*.
Si en plus tu n'a pas accès à l'info sur la position de la sortie (ce n'est pas clair dans ton énoncé) je vois mal comment même tu a pu implémenter ton A*...
Sans heuristique A* n’existe pas donc ...
Oui bien évidemment, c'est d'ailleurs ce que j'ai fait.
Mais fatigue, tout ça tout ça, je me suis planté dans mon post de ce matin.
Je laisse le message original histoire que la conversation garde du sens.
Par contre j'ai aussi mal décris le problème, l'algo (peu importe lequel) pour le path finding sert juste à trouver la case non explorée la plus proche, mais pas à diriger la recherche globale (vu qu'on ne sait justement pas ce qu'on cherche).
Pour celle-ci c'est bien avec une exploration systématique du labyrinthe : on choisit toujours la même direction jusqu'à tomber sur un cul de sac ou une case déjà explorée, et c'est dans ce cas qu'on utilise du pathfinding pour trouver savoir où aller pour continuer à explorer.
Dernière modification par Orhin ; 21/01/2016 à 23h47.
La résolution de labyrinthe à la bourrin, en suivant toujours le même mur.
C'est le premier algo que j'ai codé de ma vie et la première fois que je reinventais la roue.
Question C# :
J’ai une classe qui contient un dictionnaire de dictionnaire du genre :
Et la classe doit être Serializable donc c’est la merde. J’utilise une API qui propose déjà une classe dérivée du dictionnaire standard pour en faire une version sérialisable, elle est utilisée dans l’API, un peu dans mon code et ça fonctionne sauf dans ce cas précis. Si dans le bout de code plus haut j’utilise cette classe dérivée donc un truc genre SerializableDictionary<int, SerializableDictionary<int, MaClasse>> la sérialisation se passe bien par contre à la désérialisation, pour une raison qui m’échappe je me retrouve avec unCode:class MaClasse : ISerializable { Dictionary<int, Dictionary<int, MaClasse>> _toto; }
et donc sans surprise ça désérialise que dalle. Si vous savez par quelle raison mystique le type change entre sérialisation et désérialisation et comment corriger ça je suis preneur. Si vous avez une solution pour le faire à la main je suis aussi preneur, j’ai un dernier truc à essayer mais après je suis bloqué.Code:System.Collections.Generic.Dictionary<int, SerializableDictionary<int, MaClasse>>
Edit : pour être plus précis, ce qui est sérialisé est une List<MaClasse>, je sais pas si ça joue sur le changement de type.
J'imagine que tu as du déjà y pensé, mais je pense que tu peux faire éventuellement une classe "dummy" qui contient juste ta Dictionnary et la rendre Serializable.
J'ai cliqué nonchalamment au boulot sur le lien de CodeInGame, en me disant boarmpfff allons voir ce que ça vaut.
10mn après j'avais créé un compte.
Dans l'après-midi, deux collègues aussi.
C'est bien cool ce truc, j'y passe peu de temps, mais un p'tit break de temps en temps. En tous cas les faciles sont suffisamment vite torchés pour faire des petites pauses sympa.