Concours « jeu de mots » et cadeaux pour Noël

Posté par (page perso) . Édité par Davy Defaud, BAud, ZeroHeure et Jehan. Modéré par Pierre Jarillon. Licence CC by-sa
12
19
déc.
2016
LinuxFr.org

LinuxFr.org organise un grand concours de fin d’année pour tous les codeurs fous avec des cadeaux pour Noël.

La fin d’année est une période calme pour la plupart d’entre nous, animée par l’esprit de fête et propice à la détente. Dans ce cadre idyllique, LinuxFr.org lance le concours des jeux de mots . Chacun choisit ses armes — son langage de programmation — et use et abuse des notations et syntaxes pour notre plus grande joie.

Fais bouillir ton cerveau. Allez, c’est parti !   ᕕ(ᐛ)ᕗ

Les deux filles _nerds_ ouvrent le concours sur les jeux de mots à tous les langages de programmation

Origine du concours

Initialement, ce concours faisait partie de la dépêche du calendrier de l’Avent du C++. Ce concours étaient illustré par deux filles nerds s’exerçant avec les littéraux hexadécimaux du C++.

0xC0DE'B0F
0x1'B0L 0x2'CAFE
0xBaffe'B0B0'C00L

Puis, après publication, les auteurs de la dépêches ont eu l’impression de détourner les cadeaux de LinuxFr.org au bénéfice d’un seul langage de programmation et au détriment de la diversité du monde libre.

Alors, est venue l’idée de rectifier le tir et de permettre à tous de participer. Pas besoin d’être balaise sur un langage de programmation, il suffit juste d’être créatif. Ce concours est accessible au plus grand nombre.

Règlement

  1. écrire dans un commentaire de cette dépêche un code source valide dans le langage de programmation de son choix (script shell, SQL, Rust…) ;
  2. l’objectif de ce code source est d’user de la notation du langage pour réaliser des jeux de mots ;
  3. le code source doit être publié sous une licence libre de son choix (tu peux choisir parmi celle‐ci ou celles‐là (sauf celles avec clause NC ou ND) ou ici ou  ; et n’oublie pas de la mentionner dans ton commentaire, pas besoin de copier‐coller le long texte de la licence).

LinuxFr.org étant un site francophone, les jeux de mots en langue française seront appréciés. Aucune limite du nombre de réponse par personne, de la taille du code source, si ce n’est sur les limitations techniques de LinuxFr.org.

Exemples

Les jeux de mots peuvent utiliser le nom des variables, la forme des caractères, les symboles, les opérateurs…

La dépêche originale propose le jeu ce mot :

double w = 0xC0DE'2017.1CAFEp-1;
// CC BY-SA 4  Oliver H  2016

Gof a mentionné un jeu de mots présent dans le code source du noyau Linux :

static const long HV_LINUX_GUEST_ID_HI = 0xB16B00B5p0;
// GPL 2

D’ailleurs, ce jeu de mots a été à l’origine d’un troll bien nourri comme on les aime chez LinuxFr.org. Gof nous a aussi fait part d’un autre jeu de mots :

0xcacap1-pi
// CC0  Gof  2016

Oliver H. a répondu par un humour très provocateur, complété par un lien vers godbolt.org dont le code source retourne une valeur bien étrange :

#include <cstddef>
int main()
{
  auto C = NULL;
  auto avenir =  C + + 17  +  0xC00L;
  return avenir / 000'111;
}
// CC0  Oliver H  2016

D’autres jeux de mots ont été proposés, mais la licence n’a pas été mentionnée. Par respect de la convention de Berne, nous ne pouvons nous permettre de les reproduire ici.

Sauras‐tu relever le défi et gagner un cadeau ?

Récompenses

Les meilleures réponses seront sélectionnées parmi celles qui auront le plus de points « pertinents » et le moins de points « inutiles ».

Selon la qualité des jeux de mots, un ou plusieurs auteurs auront le privilège de gagner un livre de leur choix, parmi ceux des éditions suivantes :

Un CD Warmux remix et un DVD SupertuxKart seront également offerts par Libre games initiatives.

La réception des récompenses se fera par courrier électronique postal.

Sponsors

Merci à nos sponsors Libre games initiatives (papap), ENI et Eyrolles pour les nombreux livres gratuitement acheminés aux meilleurs contributeurs sur LinuxFr.org.

logo libre games initiatives Logo des éditions ENI Logo des éditions Eyrolles

Commentaires

Afin de mieux visualiser les réponses au concours, merci de ne pas trop remplir les commentaires avec d’autres sujets.

  • # Je me lance !

    Posté par . Évalué à 3. Dernière modification le 19/12/16 à 18:01.

    #include <stdlib.h>
    
    #define R | (1 << 20) |
    #define r | 1
    #define V | (1 << 8) |
    
    int main(void){
        int C;
        int avenir;
    
        avenir =  C + + 17  +  0xC00L;
        C = 0XF0 R 3 V 3 r;
    
        return (avenir > C);
    }

    Ça sera pas le meilleur mais c'est pour rebondir sur le code d'Olivier H :p

    Concernant la licence ce sera WTFPL :p

    • [^] # Re: Je me lance !

      Posté par (page perso) . Évalué à 1. Dernière modification le 19/12/16 à 18:28.

      Pas mal du tout, je rajouterai une petite contribution sur la dernière ligne : l'opérateur --> qui est valide en C

      return (avenir --> C);

      Pour info, l'opérateur --> veut dire "aller jusqu'à" :

      int main()
      {
          int C = 11;
          int D;
          while (C --> 0)
              D += C;
          return D;
      }

      Commentaire sous licence Creative Commons Zero CC0 1.0 Universal (Public Domain Dedication)

      • [^] # Re: Je me lance !

        Posté par . Évalué à 2. Dernière modification le 19/12/16 à 18:32.

        Merci ^^

        Je me suis rendu compte qu'après coup que mes décalages ne servaient à rien puisque 0XF0 est interprété comme étant 0XF0 et pas 0XF0000000.

        Concernant l'opérateur c'est un vrai opérateur ou la décrémentation (--) suivi d'un test (>) ?

        • [^] # Re: Je me lance !

          Posté par (page perso) . Évalué à 2.

          Pour info, l'opérateur --> veut dire "aller jusqu'à"

          hmm… Je n'ai jamais vu cet opérateur. Bon ensuite je ne peux prétendre connaître les moindres subtilités du C. Par contre il serait en effet indistinguible de '--' suivi de '>' (puisque l'espace n'est pas obligatoire). Donc je doute vraiment qu'un tel op puisse exister.

          Dans l'exemple donné, chaque test a simplement l'effet de bord de décrémenter la variable apres coup. Ça ne marche donc que pour un décompte. Un compte croissant devra utiliser '++ >'.

          Ensuite je veux bien avoir tort et apprendre quelque chose aujourd'hui. Mais ça me paraîtrait vraiment étonnant que cet op existe. :p

          Film d'animation libre en CC by-sa/Art Libre, fait avec GIMP et autre logiciels libres: ZeMarmot [ http://film.zemarmot.net ]

          • [^] # Re: Je me lance !

            Posté par (page perso) . Évalué à 3.

            Non, c’est effectivement ça, c’est un « while (i-- > 100) » écrit d’une façon amusante qui fait ressembler à une flèche.

            Ce n’est pas un opérateur spécial. D’ailleurs ça ne veut effectivement dire « aller jusqu’à » que si c’est dans un while, et que l’on y va en décrémentant la variable.

            • [^] # Re: Je me lance !

              Posté par (page perso) . Évalué à 1. Dernière modification le 19/12/16 à 20:15.

              chuuuuuuuuut… faut pas l'dire que c'est une blague…
              Car les blagues de "code source écrit bizarrement" sont exceptionnellement autorisées dans le cadre des jeux de mots de code source. Non ?
              Vite vite, cliquons sur "inutile" pour faire disparaître ces messages ;-)

              Commentaire sous licence Creative Commons Zero CC0 1.0 Universal (Public Domain Dedication)

            • [^] # Re: Je me lance !

              Posté par (page perso) . Évalué à 2.

              ça ne veut effectivement dire « aller jusqu’à » que si c’est dans un while, et que l’on y va en décrémentant la variable.

              Cela implique que la décrémentation ait lieu avant la comparaison.
              La norme indique que c'est garanti ?

              • [^] # Re: Je me lance !

                Posté par (page perso) . Évalué à 1.

                Vu que c'est une décrémentation post fixée, je dirais que c'est fait après la comparaison.
                Il en serait pour moi autrement si c'était préfixé (avec <-- par exemple).

                • [^] # Re: Je me lance !

                  Posté par (page perso) . Évalué à 2.

                  Quelqu'un a moinssé, mais nous ne sommes pas plus avancés.

                  Je viens de vérifier rapidement : le post-incrément est garanti comme étant traité après une comparaison.
                  J'ai le souvenir que certaines opérations de pré/post-incrémentation/décrémentation n'ont pas d'ordre garanti.

                  • [^] # Re: Je me lance !

                    Posté par (page perso) . Évalué à 3.

                    Sauf dans i-- > t[i]. On ne sait pas qui sera évalué en premier: i-- ou t[i].

                    Sinon, oui, le principe de la post-décrémentation, c'est de mettre de côté la valeur qui sera utilisée pour la suite et après de décrémenter la variable.

      • [^] # Re: Je me lance !

        Posté par . Évalué à 2.

        Dans le même genre, il y a aussi les opérateurs tadpoles, peu connus :). cf ici

        Mes commentaires sont en wtfpl. Une licence sur les commentaires, sérieux ? o_0

        • [^] # Re: Je me lance !

          Posté par (page perso) . Évalué à 5.

          Opérateur têtards en français, si j'ai bien compris.

        • [^] # Re: Je me lance !

          Posté par . Évalué à 5.

          C'est beau tous ces mécanismes pour rendre le code plus lisible et plus maintenable :-)

          Et puis c'est vrai que -~x c'est beaucoup plus rapide à écrire que x+1 clairement on y gagne.

          • [^] # Re: Je me lance !

            Posté par (page perso) . Évalué à 2.

            L'intérêt du « tas de pole » est d'être l'équivalent de (x+1) dont avec les parenthèses. Donc c'est un poil plus rapide à écrire, mais surtout c'est fait pour rendre le code plus lisible et fiable.
            C'est juste mon avis personnel, mais c'est totalement illisible et source d'erreurs. Donc ça tombe « un peu » à côté de l'objectif.

  • # Perl poetry

    Posté par . Évalué à 8.

    Pour ceux qui ne connaissent pas. Il y avait/a des fans de poésie avec Perl.

    http://docstore.mik.ua/orelly/perl/prog3/ch27_02.htm

    J'aime bien celui-ci:

    sleep, close together,
    sort of sin each spring & wait;
    50% die

    • [^] # Re: Perl poetry

      Posté par . Évalué à 2.

      J'avais lu que le créateur du langage avait écrit un poème en utilisant seulement les mots clefs du langage.

      Malheureusement je ne le trouve plus sur wikipédia il faudra donc se contenter d'une image.

      • [^] # Re: Perl poetry

        Posté par . Évalué à 4.

        Malheureusement je ne le trouve plus sur wikipédia […]

        Il y en a sous l'entrée Black Perl. La version française renvoie sur une URL externe, l'anglaise recopie le poème.

        Tant qu'on y est, L.W. avait aussi participé à deux reprises à l'IOCC, en gagnant en 1986 le prix « en confusionnisme élégant » et en 1987 celui de « la plus pertinente obfuscation.» Le code de 1987 compile sans erreur avec les toutes dernières versions de GCC et CLANG. En entrée du programme, taper successivement des unsigned int pour écouter Virgile et Horace.

        Pour terminer, dans la catégorie poésie, crapuleuse cette fois-ci (Ne pas Basher !), il y a :

        uname | talk | date | touch | unzip | strip | finger | mount | fsck | more | umount | make clean | sleep
        • [^] # Re: Perl poetry

          Posté par (page perso) . Évalué à 3.

          J'ai testé l'idée d'une succession de commandes shell :

          which 'kill cat' 'kill man'
          more man; less tree & awk

          en CC0, au cas où ça inspire d'autres personnes.

  • # Langage d'interrogation de Google : suivez les liens

    Posté par . Évalué à -2. Dernière modification le 20/12/16 à 10:22.

  • # content: 'de rien'

    Posté par . Évalué à 2.

    <html>
        <head><title>Titre qui perd la t&#234;te. Est-ce encore du langage ? Ce n'est pas un po&#232;me.</title>
        <script>
        function amaplace(suisJe, maintenantInutile){
            var moinsQueRien=0;
                var leQuelDestinParmiLesSymboles= setInterval(function() {
                    document.getElementById(suisJe).innerHTML+=maintenantInutile[moinsQueRien]; 
                    moinsQueRien++;
                    if(moinsQueRien==maintenantInutile.length){
                        clearInterval(leQuelDestinParmiLesSymboles);
                    }
                }, 323);
        }
        </script>
        <style>
        body {
            font: 1.0em "Liberation Sans";
        }
        #troiscents + #quatrecents {
            font: 5.3pt sans-serif;
            color: #1E2E2E;
        }
        #neant {
            cursor: pointer;
            color: #DE5E27;
        }
        </style>
        </head>
        <body>
            <div id="troiscents">
                root@sansdirection:~$ mv /home/zer0 /dev/null <code id="neant" onclick="amaplace('quatrecents','Nulle&nbsp;part&nbsp;ne&nbsp;reste&nbsp;la&nbsp;function[...] Script&nbsp;sans&nbsp;humains,[...] Le&nbsp;num&#233;rique&nbsp;se&nbsp;divise&nbsp;par&nbsp;moinsQueRien&nbsp;en&nbsp;l\'interval. ');">[Un pas vers l'avant (OUI/NON)]</code>
            </div>
            <div id="quatrecents">
                Encore du sens pour root ?
            </div>
        </body>
    </html>
  • # Using the force, Luke

    Posté par (page perso) . Évalué à 10.

    using force = long/*evity*/;
    
    using the = force;
    
    the jedi(char acter[] = "luke" ) {
      return 0.f + the(&jedi);
    }

    sous CC BY-SA 4

  • # Saving Nature With Gambas

    Posté par . Évalué à 2. Dernière modification le 24/12/16 à 10:11.

    ' Gambas module file
    
    Public Sub Main()
    
      ISay As File
      Gambas As String = Not Like "M{$,onsanto,afia}"
    
      With signal
        .Send(message("To Nature"))
        ISay = Open "YourE.yes" For Read Write Create
        If YouCan And YouNeed Then
          Do
            Something(Now())
            Raise "End of The"
          Loop
    
    
    
        Endif
      End With
    End

    Licence WTFPL :-)

    • [^] # Re: Saving Nature With Gambas

      Posté par . Évalué à 3.

      Petite erreur de synthaxe.

      ' Gambas module file
      
      Public Sub Main()
      
        ISay As File
        Gambas As String = Not Like "M{$,onsanto,afia}"
      
        With signal
          .Send(message("To Nature"))
          ISay = Open "YourE.yes" For Read Write Create
          If YouCan And YouNeed Then
            Do
              Something(Now())
              Raise EndOfThe
            Loop
      
      
      
          Endif
        End With
      End

      Toujours Licence WTFPL :-)

  • # Divers Hors Sujet du concours

    Posté par (page perso) . Évalué à 2. Dernière modification le 01/01/17 à 23:20.

    D'une professeur (donc de sexe féminin) de C en école d'ingé… véridique, involontaire et inopiné :
    "Il n'est pas très aisé de travailler avec un String !"
    => LOL, repris par le canard de l'école, mythique :-)

    Sinon, essayez de représenter 132 en binaire sur vos main (et oui, on peut compter jusque 1023 avec 10 doigts)… Il y a seulement 10 types de personnes dans le monde, tout ça… Et bonne année 2017 au passage ! :-)

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.