[Proposition] Petits problèmes d'algorithmique
Bonsoir à tous.

Je vous propose ce soir un petit test d'algorithmique. L'objectif est d'animer un peu le forum en vous permettant à la fois de vous creuser un peu les méninges, et également de pouvoir établir un petit comparatif entre les langages de programmation que vous connaissez.

Le principe

Le principe est simple, je fournis un problème algorithmique plus ou moins simple à régler. Votre objectif est de fournir une implémentation de la résolution du problème dans n'importe quel langage de programmation. Seul le code correspondant au problème demandé doit être visible, et un seul langage de programmation par post sera accepté. Si vous souhaitez présenter d'autres résultats ou améliorations à votre programme (en complexifiant du coup le problème d'origine, libre à vous de le proposer en spoiler afin de ne pas surcharger le sujet. Je maintiendrais à jour le message principal avec les implémentations de chacun.

Les objectifs

Clairement, l'objectif n'est pas de révolutionner la programmation, mais de partager ensemble d'éventuelles astuces d'écriture afin de répondre à un problème donné.

L'objectif n'est pas non plus de monopoliser le post pour se montrer, j'invite donc les membres confirmés à laisser la place aux développeurs juniors en leur laissant les langages les plus "mainstream" (php, lua, ....) et à se lancer sur des langages plus complexes (C++, Lisp, ASM ? Big Grin), voir ésotériques (ça vous dit un peu de BrainF*ck ? Big Grin)

Pour faciliter l'utilisation d'un maximum de langages différents, on ne traitera que de problèmes algorithmes dont le résultat se fera sous forme textuelle, visible dans un terminal. Vous utiliserez donc les sorties standard disponibles dans n'importe quel langage pour afficher vos résultats.

L'énoncé du problème

Pour la première édition, et pour pas faire trop peur, on commence assez simple. Cela a fait partie des premiers problèmes qu'on m'a donnés lorsque j'ai commencé mon DUT.

L'objectif est très simple, il est de générer algorithmiquement cet objet (les _ ne sont pas à afficher, ils représentent l'espace à ajouter à chaque ligne) :

Code :
____________F
___________FFF
__________FFFFF
_________FFFFFFF
__________FFFFF
_________FFFFFFF
________FFFFFFFFF
_______FFFFFFFFFFF
________FFFFFFFFF
_______FFFFFFFFFFF
______FFFFFFFFFFFFF
_____FFFFFFFFFFFFFFF
______FFFFFFFFFFFFF
_____FFFFFFFFFFFFFFF
____FFFFFFFFFFFFFFFFF
___FFFFFFFFFFFFFFFFFFF
____FFFFFFFFFFFFFFFFF
___FFFFFFFFFFFFFFFFFFF
__FFFFFFFFFFFFFFFFFFFFF
_FFFFFFFFFFFFFFFFFFFFFFF
__________TTTTT        
__________TTTTT        
__________TTTTT        
__________TTTTT

Vous l'aurez reconnu, il s'agit d'un très joli sapin Smile Il permettra aux néophytes de travailler avec les boucles et itérations, et aux confirmés de montrer leurs optimisations les plus moches :3

A vos claviers, faites-moi de beaux algorithmes bien mignons !




PS : Ceci est la première itération de ce "jeu". Si celui-ci vous plait, votre participation ne pourra que m'encourager à renouveler l'expérience avec d'autres problèmes plus techniques et intéressants. Nous pourrions même imaginer différentes évolutions, comme des catégories dans lesquelles le code doit contenir le moins de caractères possibles, alors éclatez vous et montrez votre envie de faire vivre ce forum Smile
Plutôt cool comme idée Applaudissements

Voici ma solution, en C :

Code :
#include <stdio.h>
#include <stdlib.h>

void printn_char(int n, char c) {

    while (n > 0) {

        printf("%c", c);
        n--;

    }

}

int main()
{

    int i;

    for (i = 0; i < 20; i++) {

        printn_char (12 -  (i / 2) - (i % 4) + ( (i % 4) / 2), ' ');
        printn_char (1 + i + (i % 4), 'F');
        printf("\n");

    }

    for (i = 0; i < 4; i++) {

        printn_char(10, ' ');
        printn_char(5, 'T');
        printf("\n");

    }

    return EXIT_SUCCESS;

}
e=5; print "\n".join(["\n".join([("{:^%d}"%(((e+1)*2)*2+1)).format("F"*(2*j)+("F"*(4*i+1))) for j in xrange(4)]) for i in xrange(e)]+[("{:^%d}"%(((e+1)*2)*2+1)).format("TTTTT")]*4)

Retourner en haut WoW-Emu