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. #21
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 128
    Points : 210
    Points
    210
    Par défaut
    Si on abandonne la compatibilité chrome qui n'implémente pas encore cette syntaxe on peut descendre à 86 caractères :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    (function parseNumbers(s){
    return s.replace(/ ?(s?.)\S*/g,(a,b)=>+{z:0,u:1,d:2,t:3,q:4,c:5,si:6,se:7,h:8,n:9}[b])
    })("un deux trois quatre cinq six sept huit neuf zero");

  2. #22
    Rédacteur
    Avatar de Macmillenium
    Homme Profil pro
    Développeur front-end
    Inscrit en
    Mars 2008
    Messages
    2 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur front-end
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2008
    Messages : 2 333
    Points : 3 747
    Points
    3 747
    Par défaut
    100 caractères avec array...

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    (function parseNumbers(s){
    return s.split(" ").map(function(a){return"zeundetrqucisisehune".indexOf(a.substr(0,2))/2}).join("")
    })("un deux trois quatre cinq six sept huit neuf zero");
    Je ne réponds pas aux questions techniques par MP.

  3. #23
    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 la syntaxe ES6, c'est vrai que je n'y avais pas songé mais bon, je ne peux pas l'accepter si ça ne tourne pas sur Chrome

    Voilà la piste que je creusais avec les Array, assez ressemblante à celle de Macmillenium

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return s.split(" ").map(function(a){return"zudtqcsshn".indexOf(a[0])+!!(a[2]=='p')}).join("")
    93 caractères
    One Web to rule them all

  4. #24
    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 : 37
    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
    J'étais parti sur la même soluce que @Macmillenium. Mais avec le forEach et x[0]+x[1] à la place de sbstr, c'est un poil plus court (5 caractères de moins) :

    Donc en 95 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    (function parseNumbers(s){
    a='';s.split(' ').forEach(function(x){a+='zeundetrqucisisehune'.indexOf(x[0]+x[1])/2});return a
    })("un deux trois quatre cinq six sept huit neuf zero");
    Excellent Sylvain ! J'avais pas trouvé cette astuce Par contre avec le forEach tu gagnes 1 caractère
    En 92 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    (function parseNumbers(s){
    a='';s.split(' ').forEach(function(x){a+='zudtqcsshn'.indexOf(x[0])+!!(x[2]=='p')});return a
    })("un deux trois quatre cinq six sept huit neuf zero");

  5. #25
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 418
    Points
    91 418
    Billets dans le blog
    20
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    (function parseNumbers(s){
    return '1 2 3 4 5 6 7 8 9 0'
    })("un deux trois quatre cinq six sept huit neuf zero");
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  6. #26
    Rédacteur
    Avatar de Macmillenium
    Homme Profil pro
    Développeur front-end
    Inscrit en
    Mars 2008
    Messages
    2 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur front-end
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2008
    Messages : 2 333
    Points : 3 747
    Points
    3 747
    Par défaut


    Bon je descends à 99 caractères en remplaçant substr par slice
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    (function parseNumbers(s){
    return s.split(" ").map(function(a){return"zeundetrqucisisehune".indexOf(a.slice(0,2))/2}).join("")
    })("un deux trois quatre cinq six sept huit neuf zero");
    Je ne réponds pas aux questions techniques par MP.

  7. #27
    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
    Bovino tu sors

    Je pense qu'il y a peut-être encore des pistes d'améliorations avec une RegExp au lieu de split() et un Array.reduce au lieu de map().join()
    One Web to rule them all

  8. #28
    Rédacteur
    Avatar de Macmillenium
    Homme Profil pro
    Développeur front-end
    Inscrit en
    Mars 2008
    Messages
    2 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur front-end
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2008
    Messages : 2 333
    Points : 3 747
    Points
    3 747
    Par défaut
    97 caractères avec reduce
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    (function parseNumbers(s){
    return s.split(" ").reduce(function(a,b){return a+('zudtqcsshn'.indexOf(b[0])+!!(b[2]=='p'))},'')
    })("un deux trois quatre cinq six sept huit neuf zero");
    Je ne réponds pas aux questions techniques par MP.

  9. #29
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 418
    Points
    91 418
    Billets dans le blog
    20
    Par défaut
    63 caractères
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    (function parseNumbers(s){
    t='';s.split(' ').forEach(function(a,b){t+=(b+1)%10});return t
    })("un deux trois quatre cinq six sept huit neuf zero");
    Edit :
    Ah ben non, 61 même !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    (function parseNumbers(s){
    t='';s.split(' ').forEach(function(a,b){t+=b+1%10});return t
    })("un deux trois quatre cinq six sept huit neuf zero");
    Un peu étonné qu'il y ai pas besoin de parenthèses d'ailleurs...
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  10. #30
    Membre actif
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 162
    Points : 209
    Points
    209
    Par défaut
    Ca n'a pas l'air de marcher des masses Bovino :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    (function parseNumbers(s){
    t='';s.split(' ').forEach(function(a,b){t+=(b+1)%10});return t
    })("deux quatre six huit zero un trois cinq sept neuf");

  11. #31
    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
    Bon on va rajouter des tests pour Bovino :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    console.assert(parseNumbers("six quatre un trois deux huit cinq zero sept neuf")=="6413285079");
    console.assert(parseNumbers("zero zero sept")=="007");
    One Web to rule them all

  12. #32
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 418
    Points
    91 418
    Billets dans le blog
    20
    Par défaut


    J'avais pas pris en compte que l'ordre pouvait être aléatoire...
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  13. #33
    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 : 37
    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
    Sylvain, en séparant par des virgules c'est plus sexy non ? (basé sur ta solution avec l'astuce []+ qui transforme le tableau en chaine donc, incluant les virgules
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    (function parseNumbers(s){
    return[]+s.split(' ').map(function(x){return'zudtqcsshn'.indexOf(x[0])+!!(x[2]=='p')})
    })("un deux trois quatre cinq six sept huit neuf zero");

  14. #34
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 128
    Points : 210
    Points
    210
    Par défaut
    Citation Envoyé par Kaamo Voir le message
    Excellent Sylvain ! J'avais pas trouvé cette astuce Par contre avec le forEach tu gagnes 1 caractère
    En 92 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    (function parseNumbers(s){
    a='';s.split(' ').forEach(function(x){a+='zudtqcsshn'.indexOf(x[0])+!!(x[2]=='p')});return a
    })("un deux trois quatre cinq six sept huit neuf zero");
    Pas mal cette méthode, je n'aurai pas cru qu'on pourrait faire aussi compact en faisant une verif sur un second caractère !

    On peut encore gagner 5 caractères en utilisant l'opérateur comma (,), ce qui donne en 87 caractères :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return s.split(' ').forEach(function(x){a+='zudtqcsshn'.indexOf(x[0])+!!(x[2]=='p')}),a
    Et si on s'autorisait la syntaxe ES6 ( méchant chrome) on arrive même à 77 caractères :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    (function parseNumbers(s){
    return s.split(' ').forEach(x=>a+='zudtqcsshn'.indexOf(x[0])+!!(x[2]=='p')),a
    })("un deux trois quatre cinq six sept huit neuf zero six six sept");

  15. #35
    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
    @Kaamo: Ah mais on ne peut pas modifier l'énoncé à sa guise C'est pour ça que je pensais à Array.reduce, on peut indiquer une String vide comme premier élément afin de forcer le cast en String et la concaténation, comme l'a montré MacMillenium

    @TheGwy: cette méthode ne fonctionne pas si a n'a pas été précédemment déclaré dans le scope global : ReferenceError: a is not defined
    One Web to rule them all

  16. #36
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 128
    Points : 210
    Points
    210
    Par défaut
    Citation Envoyé par SylvainPV Voir le message
    @TheGwy: cette méthode ne fonctionne pas si a n'a pas été précédemment déclaré dans le scope global : ReferenceError: a is not defined
    Effectivement, j'ai été induit en erreur car j'évalue mes optims à la suite dans une console (donc toujours le même scope)

  17. #37
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 128
    Points : 210
    Points
    210
    Par défaut
    On peut gagner un ultime (?) caractère en inversant la seconde condition ce qui nous fait gagner un NOT :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    (function parseNumbers(s){
    a='';s.split(' ').forEach(function(x){a+='zudtqcsshn'.indexOf(x[0])+!(x[2]!='p')});return a
    })("un deux trois quatre cinq six sept huit neuf zero six sept six six sept");

  18. #38
    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
    Ultime, ultime, tu vas vite en besogne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    (function parseNumbers(s){
    for(a='',c=s.split(' ');x=c.pop();a='zudtqcsshn'.indexOf(x[0])+(x[2]=='p')+a);return a
    })("un deux trois quatre cinq six sept huit neuf zero");
    86 caractères
    One Web to rule them all

  19. #39
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 128
    Points : 210
    Points
    210
    Par défaut
    C'est beau


  20. #40
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 128
    Points : 210
    Points
    210
    Par défaut
    Retour aux regexp :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    (function parseNumbers(s){
    return s.replace(/\b ?s?(.)/g,(s='',function(a,b){s+='zudtqciehn'.indexOf(b)})),s
    })("un deux trois quatre cinq six sept huit neuf zero six six sept");
    81 caractères

    et sans variables globales

    EDIT :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    (function parseNumbers(s){
    return t='',s.replace(/\b ?s?(.)/g,function(a,b){t+='zudtqciehn'.indexOf(b)}),t
    })("un deux trois quatre cinq six sept huit neuf zero six six sept");
    79 caractères avec une variable globale


    EDIT 2 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    (function parseNumbers(s){
    return t='',s.replace(/\b ?s?(.)/g,function(a,b){t+='zudtqciehn'.search(b)}),t
    })("un deux trois quatre cinq six sept huit neuf zero six six sept");
    78 caractères

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, 12h00
  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, 00h45
  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: 28/07/2010, 23h15
  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, 18h24

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