ProgHelp

Une communauté intelligente et active

[Candidature] Wordeur

Message par Wordeur » 19 Avril 2017, 10:02

Bonjour à tous.

Présente toi en quelque mot s'il te plait.
Wordeur 21 ans étudiant en dernières années de BTS système numérique option informatique et réseau. Je suis passionné de programmation depuis maintenant plus de 4 ans.
SPOILER : AFFICHER
Même si au vu de mes anciens tutoriels, vous pouvez voir qu'il m'aura fallu du temps pour attraper un bon niveau. :hap:
.

Pourquoi veux-tu obtenir ce grade?
Pour être honnête c'est tout d'abord pour une question de fierté , d'avoir le titre de programmeur dans un forum d'aide de programmation, c'est la classe :hap: et également pour légitimer les tutoriels que je compte continuer à développer par la suite.

Que comptes-tu apporter au forum si ta candidature est acceptée?
Je m'engage à sortir jusqu'à la fin de mes études (maximum 3 ans donc) tous les deux mois au maximum un tutoriel de programmation dans l'un des langages que je maîtrise. 8-) .

Qu'est ce qui te différencie selon toi des autres développeurs ?
Deux choses :
- Tout d'abord ma veille technologique , j'ADORE, la programmation au début je détestais cela, mais quand on commence à faire des trucs, on ne peut put s'en passé , je passe au minimum 3H par jour à apprendre de nouvelle chose , de nouveau framework des nouvelles technologies de nouvel algorithme. Depuis hier même (grâce à Patak) je planche sur les algorithmes passionnant du pathfinding ! Je n'en loupe pas une miette, mon objectif est de valider l'épreuve de programmation :
SPOILER : AFFICHER
https://www.newbiecontest.org/index.php?page=epreuve&no=239
.

- Mon envie de retransmettre , je sais, je sais, je ne suis pas le meilleur rédacteur de tutoriel du monde, mais promis pour la suite, je vais faire des efforts ! :D, j'adore apprendre des choses et je prends tout autant de plaisir à les retransmettre ;).

Niveau technologie , qu'est-ce que tu maîtrises ?
- Technologie DotNet.
- C# ( framework Xamarin , Windows Forms , WPF)

- Technologie Web.
- PHP , SQL
- Javascript ( framework NodeJs , framework AngularJs , micro-framework Express.Js , micro-framework Socket.IO)

- Service Web.
- REST (micro-framework SlimFramwork ).

- C++
- wxWidget & STL.

Les patrons de conception,ça te dit quelque chose?
- Oui, les modèles de programmation écrits par le "gang des 4" qui permettent d'écrire un code robuste, maintenable et évolutif ? J'en maîtrise quelqu'un d'ailleurs : Singleton , Observateur , Décorateur(même si j'ai du mal avec lui) , Prototype.

Maintenant c'est à vous de jugé !
Les chaussettes de l'archiduchesse sont-elles sèches? Archi-sèches ?


Coordialement , Wordeur =)
Wordeur
Membre habitué
 
Messages : 69
Points d'honneur : 57 PH
Inscription : 28 Juin 2013

Message par Patak » 19 Avril 2017, 15:59

Cool :grin:

Je vais donc te proposer un défi en ES6 !

Voilà comment la difficulté de celui-ci a été calculée :

SPOILER : AFFICHER
Que compte, tu apportais au forum

=> Que comptes-tu apporter

les algorithmes passionnent du pathfinding

=> les algorithmes passionnants du pathfinding

les modèles [...] qui permette

=> les modèles [...] qui permettent

4 fautes corrigées, donc difficulté de niveau 4


Défi EcmaScript 6

Il s'agit de coder une fonction totoro qui répond à ce comportement :

totoro([["a", "b"], ["c", "d"]]);
//["a c", "a d", "b c", "b d"]

totoro([["a", "b"], ["c", "d"], ["e", "f"]]);
//["a c e", "a c f", "a d e", "a d f", "b c e", "b c f", "b d e", "b d f"]

totoro([["a", "b", "c"], ["d"], ["e", "f"]]);
//["a d e", "a d f", "b d e", "b d f", "c d e", "c d f"]

totoro([["a"]]);
//["a"]

totoro([["il", "elle"], ["boit", "regarde"], ["la mer", "l'eau"]]);
//["il boit la mer", "il boit l'eau", "il regarde la mer", "il regarde l'eau", "elle boit la mer", "elle boit l'eau", "elle regarde la mer", "elle regarde l'eau"]


La fonction totoro doit être récursive et faire moins de 12 lignes de codes.

Cette fonction ne doit pas utiliser de for, ou de while, ou de forEach !

Le code doit être très propre.

Tu n'as pas besoin de gérer les cas où totoro reçoit un tableau vide.

Astuces :


SPOILER : AFFICHER
["a", "b", "c"].slice(1)
//Nous renvoie ["b", "c"]


[].concat(...[["a", "b"], ["c"], ["d", "e"]])
//Nous renvoie ["a", "b", "c", "d", "e"]
//(c'est un aplatissement)


Map & Reduce

function totoro(array) {
return ["À toi de jouer !"];
}
Image


SPOILER : AFFICHER


Avatar de l’utilisateur
Patak
Administrateur
 
Messages : 1143
Points d'honneur : -666 PH
Inscription : 30 Oct 2012

Message par Patak » 20 Avril 2017, 23:37

Aucune réponse concluante n'a été apportée.
La candidature est pour l'instant refusée ...

Solution du défi

let flatten = arr => [].concat(...arr);

function totoro(arr) {
let first = arr[0];

if(arr.length == 1)
return first;

let suite = totoro(arr.slice(1));

return flatten(first.map(a =>
suite.map(b => a + " " + b)
));
}



Explications

SPOILER : AFFICHER
La fonction totoro est récursive

Nous allons nous baser sur ces deux exemples que l'on pouvait facilement déduire :

totoro([["0", "1"], ["a", "b"]])
//Nous renvoie ["0 a", "0 b", "1 a", "1 b"]

totoro([["a", "b"]])
//Nous renvoie ["a", "b"]


Considérons à présent que :

La 1ere étape de la récursivité reçoit [["0", "1"], ["a", "b"]]
La 2ieme étape de la récursivité reçoit [["a", "b"]]
=> La 2ieme étape de la récursivité renvoie ["a", "b"]
=> La 1ere étape de la récursivité renvoie ["0 a", "0 b", "1 a", "1 b"]

La question est :

Comment passer de la valeur renvoyée par la 2ième récursivité à la valeur renvoyée par la 1ere ?

La solution consiste à utiliser deux map imbriqués ainsi qu'une concaténation a + " " + b
Sauf que deux map imbriqués nous donnent un Array d'Array, or nous souhaitons un Array
Il faut donc faire un aplatissement



Bonus : Version barbare

let totoro = r =>
r.length == 1 ?
r[0] :
[].concat(...r[0].map(a =>
totoro(r.slice(1)).map(b =>
a + " " + b
)
));


Je lock le topic.
Image


SPOILER : AFFICHER


Avatar de l’utilisateur
Patak
Administrateur
 
Messages : 1143
Points d'honneur : -666 PH
Inscription : 30 Oct 2012


Retour vers Programmeur

cron
  • Qui est en ligne ?
  • Consulter les nouveaux messages
  • Consulter les messages sans réponse
  • Au total, il y a 0 utilisateur en ligne :: 0 inscrit, 0 invisible et 0 invité (basé sur le nombre d’utilisateurs actifs des 5 dernières minutes)
  • Le nombre maximum d’utilisateurs en ligne simultanément a été de 272 le 12 Mars 2015, 03:11
  • Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 0 invité(s)