on December 08, 2011, at 04:03 PM

Tout comme les mathématiques et ses démonstrations, l'informatique et la programmation peut avoir un coté très esthétique, comme par exemple une belle fonction récursive. Sur 4chan un petit script bash, réalisant un tri, a ce caractère qui fait que l'on s'arrête dessus, que l'on aurait bien aimé l'écrire, que l'on en parle .... et qu'en aucun cas on s'interroge sur son utilité, tout ceci est bien-sur très subjectif.

 Name: Anonymous : 2011-01-20 12:22

 Man, am I a genius. Check out this sorting algorithm I just invented.

 #!/bin/bash
 function f() { sleep "$1"; echo -n "$1 "; }
 while [ -n "$1" ]; do { f "$1"& }; shift; done; echo

Ce petit programme est plein de malice. Lorsque vous appelez votre script bash avec une liste de N nombres, vous générez N processus, qui chacun effectuent la fonction f() et donc s'endorment x secondes avant d'afficher x avec x qui correspond à la valeur du nombre. Ainsi si vous avez lancé . ./sleepsort.bash 3 1 2, le premier processus attendra 3 secondes avant d'afficher 3, le deuxième processus 1 seconde avant d'afficher 1 et enfin le dernier 2 secondes avant d'afficher 2. Vous verrez donc s'afficher votre liste en ordre croissant.

Bon d'accord . ./sleepsort.bash 5676778@ 1 vous risquez d'attendre longtemps, d'autant que sleep est en seconde !

À partir de là une bande de furieux, plus ou moins inspirés se sont déchaînés en proposant éventuellement d'autres versions dans d'autres langages. Je ne résiste pas au plaisir de vous mettre une version Java.

 import  java.util.ArrayList;

 public class Narcoleptique extends Thread{
  int dodo;
  final static int ROMPICH = 10;

  public static void main(String[] args){
    ArrayList<Thread> triThreads = new ArrayList<Thread>(args.length);

    for(String val: args){
      Thread triThread = new Narcoleptique(Integer.parseInt(val));          
      triThread.start();
      triThreads.add(triThread);
    }

    for(Thread triThread: triThreads){
      try {
           triThread.join();
          } catch (Exception e) {}
    }
    System.out.println();	
  }

  public Narcoleptique(int dodo){
    this.dodo = dodo;
  }

  public void run(){
    try {
         Thread.sleep(dodo*ROMPICH);
        } catch (InterruptedException e) {}
    System.out.print(dodo+" ");
  }
 }

Puisque l'on fait dans l'exotique terminons sur le tri spaghetti.

Soit N nombres à trier. Couper le premier spaghetti à une longueur proportionnelle au premier nombre à trier. Couper le second de la même façon, et ainsi de suite pour tous les nombres. Vous obtenez un paquet de N spaghettis. Poser un des cotés de votre paquet composé de l'une des extrémités de vos spaghettis sur un plan de façon à tasser l'ensemble. Maintenant, posez votre autre main à plat sur l'autre coté de votre tas de façon à ce qu'elle rencontre un spaghetti. Retirez celui-ci insérez à le première position de votre liste de sortie (initialement vide). Répétez ce traitement jusqu'à obtenir un tas vide.

Si vous n'êtes pas convaincu essayez la danse.

(:youtube ywWBy6J5gz8 width=560 height=315 scale=1 fs=1 hd=1 nocookie=1:)

Attach:fichier.ext Δ

Fichiers sources

sleepsort.bash Narcoleptique.java narcoleptique.py RonRon.scala

Leave a comment

Name (required)
E-mail (required, will not be published)
Website
Comment

Enter value: (:input captcha tabindex=1:)