IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

[Ludique] Défis code en un tweet


Sujet :

JavaScript

  1. #381
    Membre émérite
    Avatar de Kaamo
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 165
    Points : 2 778
    Points
    2 778
    Par défaut
    Oui j'ai vu ça, c'est alambiqué
    comme pistes pour réduire :
    enlever var t et mettre la variable t dans les paramètres de la fonction pour éviter le global leak
    window devient self et la double égalité suffit

  2. #382
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    ah j'étais pas au courant de la règle g('al') === 'gal'

    J'ai une autre idée qui m'est venue, je bosse dessus
    One Web to rule them all

  3. #383
    Membre émérite
    Avatar de Kaamo
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 165
    Points : 2 778
    Points
    2 778
    Par défaut
    Ma faute, j'avais pas donné le lien de la règle initiale.

  4. #384
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Bingo ! Réutilisable à 47 caractères :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function g(a){  return a?g._?g('o'+a,--g._):'g'+a:(g._=-~g._,g)  }
    One Web to rule them all

  5. #385
    Membre éclairé

    Femme Profil pro
    Experte JS / Conseillère en best practices / Chercheuse en programmation
    Inscrit en
    Octobre 2007
    Messages
    740
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Experte JS / Conseillère en best practices / Chercheuse en programmation
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 740
    Points : 805
    Points
    805
    Par défaut
    Citation Envoyé par Kaamo Voir le message
    Oui j'ai vu ça, c'est alambiqué
    comme pistes pour réduire :
    enlever var t et mettre la variable t dans les paramètres de la fonction pour éviter le global leak
    window devient self et la double égalité suffit
    Ce n'est pas alambiqué, c'est juste propre et sécurisé, impossible de modifier son comportement depuis l'extérieur, ni en passant un 2ème argument.


    Citation Envoyé par SylvainPV Voir le message
    Bingo ! Réutilisable à 47 caractères :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function g(a){  return a?g._?g('o'+a,--g._):'g'+a:(g._=-~g._,g)  }
    On est carrément dans l'extra, là, mais... on a fait un beau fork ^^

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    var ng;
     
    ng = g()()()()()();
     
    console.log('Le tien affiche  gooooooooal', ng()()('al'));
    console.log('puis             gooal', ng()()('al'));
     
    console.log('Le mien affiche  gooooooooal', ng()()('al'));
    console.log('puis             gooooooooooal', ng()()('al'));
    Afin d'obtenir plus facilement de l'aide, n'hésitez pas à poster votre code de carte bancaire

    Mon GitHub

    Une alternative à jQuery, Angular, Vue.js, React, ... ? Testez anticore, en quelques secondes à peine !
    (Contributions bienvenues)

  6. #386
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Ah oui mais je ne crois pas avoir vu dans les règles qu'il faille gérer les variables intermédiaires ? Si tu veux du code propre et sécurisé, tu te goures de topic
    One Web to rule them all

  7. #387
    Membre éclairé

    Femme Profil pro
    Experte JS / Conseillère en best practices / Chercheuse en programmation
    Inscrit en
    Octobre 2007
    Messages
    740
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Experte JS / Conseillère en best practices / Chercheuse en programmation
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 740
    Points : 805
    Points
    805
    Par défaut
    Citation Envoyé par SylvainPV Voir le message
    Si tu veux du code propre et sécurisé, tu te goures de topic
    Bah, pourquoi ne pourrait-on pas faire les deux en même temps? ^^


    Sinon, pour les curieux, en plus de ma version JS, j'ai posté une proposition PHP, bien qu'elle nécessite une factorisation à chaque appel :

    https://github.com/Lcfvs/goal/blob/p...Lcfvs/goal.php
    Afin d'obtenir plus facilement de l'aide, n'hésitez pas à poster votre code de carte bancaire

    Mon GitHub

    Une alternative à jQuery, Angular, Vue.js, React, ... ? Testez anticore, en quelques secondes à peine !
    (Contributions bienvenues)

  8. #388
    Membre émérite
    Avatar de Kaamo
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 165
    Points : 2 778
    Points
    2 778
    Par défaut
    ouais PHP n'autorise pas (encore) cette imbrication d'exécution de fonction.
    Sinon une solution qui semble répondre à toutes les règles :

    63 caractères :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    g=function h(i){return function(j){return j?i+j:h(i+'o')}}('g');

    Tests :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    console.log(g('al')); // gal
    console.log(g()()('al')); // gooal
     
    var ng;
     
    ng = g()();
    console.log(ng('al')); // gooal
    console.log(ng()()('al')); // gooooal
    console.log(ng()()('al')); // gooooal

  9. #389
    Membre éclairé

    Femme Profil pro
    Experte JS / Conseillère en best practices / Chercheuse en programmation
    Inscrit en
    Octobre 2007
    Messages
    740
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Experte JS / Conseillère en best practices / Chercheuse en programmation
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 740
    Points : 805
    Points
    805
    Par défaut
    Kaamo> Sympa et court... Grimly avait aussi proposé une solution avec une new fonction à chaque appel... juste que j'trouve ça lourd lol
    Afin d'obtenir plus facilement de l'aide, n'hésitez pas à poster votre code de carte bancaire

    Mon GitHub

    Une alternative à jQuery, Angular, Vue.js, React, ... ? Testez anticore, en quelques secondes à peine !
    (Contributions bienvenues)

  10. #390
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 636
    Points : 66 655
    Points
    66 655
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ng = g()();
    console.log(ng('al')); // gooal
    console.log(ng()()('al')); // gooooal
    console.log(ng()()('al')); // gooooal
    heu tu es sur que le nombre de o est correct ?
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  11. #391
    Membre émérite
    Avatar de Kaamo
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 165
    Points : 2 778
    Points
    2 778
    Par défaut
    oui je pense.

    ng === g()() donc ng vaut 2 "o"
    Donc,
    2 "o" + 0 "o" console.log(ng('al')); // gooal.
    2 "o" + 2 "o" console.log(ng()()('al')); // gooooal

  12. #392
    Membre éclairé

    Femme Profil pro
    Experte JS / Conseillère en best practices / Chercheuse en programmation
    Inscrit en
    Octobre 2007
    Messages
    740
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Experte JS / Conseillère en best practices / Chercheuse en programmation
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 740
    Points : 805
    Points
    805
    Par défaut
    Bon, cela fait trop longtemps qu'on a plus vu de défis, ici...

    En voici un sympa, sans doute trop facile pour certains mais bon...

    Le but étant de créer une fonction permettant de faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    var substring,
        substringFromHello,
        slice,
        sliceDeclaredArray;
     
    substring = f(String.prototype.substring);
    substringFromHello = substring('hello world!');
    console.log(substringFromHello([6, 11])); // 'world'
     
    // or
     
    substring = f(String.prototype.substring);
    substringFromHello = substring('hello world!', 6);
    console.log(substringFromHello([11])); // 'world'
     
    // or
     
    slice = f(Array.prototype.slice);
    sliceDeclaredArray = slice([1, 2, 3, 4, 5]);
    console.log(sliceDeclaredArray([2, 4])); // [3, 4]
     
    /*
    constraints :
    - the f function
      - takes 1 argument, a function (or object method) and must work with any other
      - returns a function which
        - takes one or more arguments, where the first is the value to treat with the final function
          and pass the rest to the final function
        - returns a function which
          - takes any number of arguments, as array or arguments object
          - returns the result
          
    - no global vars
    - no more than 40 characters
    - no more than 2 words, except your own var names
    - must be valid in current standard JS (ES6)
    */
    Bon amusement à vous
    Afin d'obtenir plus facilement de l'aide, n'hésitez pas à poster votre code de carte bancaire

    Mon GitHub

    Une alternative à jQuery, Angular, Vue.js, React, ... ? Testez anticore, en quelques secondes à peine !
    (Contributions bienvenues)

  13. #393
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    J'ai ça : Mais la fonction retournée ne prend pas les paramètres en array mais en liste d'arguments, comme la première (plus logique non ?)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    substring = f(String.prototype.substring);substringFromHello = substring('hello world!');
    console.log(substringFromHello(6, 11)); // 'world'
     
    // or
     
    substring = f(String.prototype.substring);
    substringFromHello = substring('hello world!', 6);
    console.log(substringFromHello(11)); // 'world'
    One Web to rule them all

  14. #394
    Membre éclairé

    Femme Profil pro
    Experte JS / Conseillère en best practices / Chercheuse en programmation
    Inscrit en
    Octobre 2007
    Messages
    740
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Experte JS / Conseillère en best practices / Chercheuse en programmation
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 740
    Points : 805
    Points
    805
    Par défaut
    Quand je disais que ce serait super simple pour certains, j'pensais bizarrement à toi... ^^

    Citation Envoyé par SylvainPV Voir le message
    Mais la fonction retournée ne prend pas les paramètres en array mais en liste d'arguments, comme la première (plus logique non ?)
    Oui mais non, le but étant bien de pouvoir y envoyer un array ou array-like, comme un objet arguments ^^
    Afin d'obtenir plus facilement de l'aide, n'hésitez pas à poster votre code de carte bancaire

    Mon GitHub

    Une alternative à jQuery, Angular, Vue.js, React, ... ? Testez anticore, en quelques secondes à peine !
    (Contributions bienvenues)

  15. #395
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    C'est une fonction curry modifiée que tu nous demande de faire en fait

    J'ai un début de truc mais c'est pas encore au point. Je reviens dans un petit moment…
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  16. #396
    Membre éclairé

    Femme Profil pro
    Experte JS / Conseillère en best practices / Chercheuse en programmation
    Inscrit en
    Octobre 2007
    Messages
    740
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Experte JS / Conseillère en best practices / Chercheuse en programmation
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 740
    Points : 805
    Points
    805
    Par défaut
    Citation Envoyé par Watilin Voir le message
    C'est une fonction curry modifiée que tu nous demande de faire en fait
    Ouais, c'est bien cela... belle identification de l'énoncé
    Afin d'obtenir plus facilement de l'aide, n'hésitez pas à poster votre code de carte bancaire

    Mon GitHub

    Une alternative à jQuery, Angular, Vue.js, React, ... ? Testez anticore, en quelques secondes à peine !
    (Contributions bienvenues)

  17. #397
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    Alors j'ai ça qui fait 62 caractères :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    f=m=>(o,...a)=>b=>a.reduce((g,x)=>g.bind(0,x),m.bind(o))(...b)
    Ça passe les tests. Mais vu que tu demandes de faire moins de 40 (), ça doit être atrocement compliqué par rapport à la « bonne » solution

    J'ai eu des cours de Scheme, je crois que ça m'a marqué à vie…
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  18. #398
    Membre éclairé

    Femme Profil pro
    Experte JS / Conseillère en best practices / Chercheuse en programmation
    Inscrit en
    Octobre 2007
    Messages
    740
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Experte JS / Conseillère en best practices / Chercheuse en programmation
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 740
    Points : 805
    Points
    805
    Par défaut
    Max 40...

    Et, non, c'est pas mal moins complexe que ta solution... ^^
    Afin d'obtenir plus facilement de l'aide, n'hésitez pas à poster votre code de carte bancaire

    Mon GitHub

    Une alternative à jQuery, Angular, Vue.js, React, ... ? Testez anticore, en quelques secondes à peine !
    (Contributions bienvenues)

  19. #399
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    f=F=>(c,...r)=>(a)=>F.apply(c,[...r, ...a])
    C'est beaucoup moins élégant, je préfère ma première solution ^^

    edit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    f=F=>(c,...r)=>(a)=>F.bind(c)(...r,...a)
    40 tout pile

    Ce changement liste -> argument array m'embrouille...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    f=F=>(c,...r)=>(a)=>F.call(c,...r,...a)
    39
    One Web to rule them all

  20. #400
    Membre éclairé

    Femme Profil pro
    Experte JS / Conseillère en best practices / Chercheuse en programmation
    Inscrit en
    Octobre 2007
    Messages
    740
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Experte JS / Conseillère en best practices / Chercheuse en programmation
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 740
    Points : 805
    Points
    805
    Par défaut
    @SylvainPV : Peut mieux faire...

    - trop long
    - variables globales

    EDIT : Je pense que tu trouveras la solution élégante aussi, t'inquiète
    Afin d'obtenir plus facilement de l'aide, n'hésitez pas à poster votre code de carte bancaire

    Mon GitHub

    Une alternative à jQuery, Angular, Vue.js, React, ... ? Testez anticore, en quelques secondes à peine !
    (Contributions bienvenues)

Discussions similaires

  1. Défi : Toutes les semaines un peu de code pour aller plus loin avec Windows 7
    Par Jérôme Lambert dans le forum Développement Windows
    Réponses: 41
    Dernier message: 05/01/2012, 13h00
  2. [Ludique] Mini-jeu : épisode 3 (déchiffrage de code, niveau : facile)
    Par RomainVALERI dans le forum Général JavaScript
    Réponses: 17
    Dernier message: 03/11/2010, 01h45
  3. [Ludique] Mini-jeu - niveau 2 : déchiffrage de code (niveau modéré)
    Par RomainVALERI dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 29/07/2010, 00h15
  4. [Ludique] Mini-jeu : déchiffrage de code (niveau facile)
    Par RomainVALERI dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 13/07/2010, 19h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo