Small is Beautiful

Cette page est dédiée aux amateurs d'optimisation en temps et en espace. Vous y trouverez quelques défis, et les meilleures solutions trouvées par ceux qui y ont participé.

1. Rotation de mots

Afficher en sortie une version de l'entrée qui a subit une rotation de 90 degrés.

Par exemple, avec cette entrée:

1 2 3 4
5 6 7 8
9 10 11 12

on doit avoir cette sortie:

9 5 1
10 6 2
11 7 3
12 8 4

Solution la plus courte:

#!/usr/bin/perl -na
$i=0;unshift@{$r[$i++]},$_ for@F;END{print map{"@$_\n"}@r}

2. Nombres premiers

Afficher tous les nombres premiers compris entre 2 et 100000.

Solution la plus courte en Perl:

#!/usr/bin/perl
for$i(2..1E5){map{$i%$_||next}(2..$i-1);print"$i\n"}

Solution la plus rapide en Perl:

#!/usr/bin/perl
print"2\n";for($i=3;$i<1E5;$i+=2){map{$i%$_||next;$_*$_>$i&&goto l}@p;l:print"$i\n";push@p,$i}

Solution la plus courte en C:

main(j,i){for(i=2;i<1e5;)i%j--||printf(j?"":"%d ",j=i++);}  // Visual C++ uniquement
main(j,i){for(i=2;i<1e5;)i%j--||(j||printf("%d ",i),j=i++);}
(par Teodor Nitescu)

Solution la plus rapide en C:

main(i){int t,n=0,p[9999];while(++i<1E5){for(t=0;t<n&&p[t]*p[t]<=i;t++)if(i%p[t]==0)goto N;printf("%d ",p[n++]=i);N:}}
(50 fois plus rapide que la version perl !)

3. PI

Calculer les 3000 premières décimales de PI

Liens

Tiny ELF executables for Linux


Retour