TESTER

10 print

Reconstitution d'un grand classique (cela date de 2012, sur Commodore64).

10 print

Mise en route

On va commencer par le plus difficile, choisir 2 couleurs. Contrastées si possible.

let colorBG = "#1C46F3";
let color10p = "#FEFA66";

L'on va ensuite définir la taille de la diagonale, ainsi que le nombre de colonnes et de lignes (pour un effet optimal, il est préférable que cela tombe juste...).

let size = 25;
let cols = 32;
let rows = 24;
let thickness = 3;

L'épaisseur du trait est à ajuster en fonction de la taille du carré.

Nous allons ensuite créer le canvas et régler les outils graphiques:

canvas(size*cols, size*rows, colorBG);
weight(thickness);
stroke(color10p);

Ne reste plus qu'à faire deux boucles imbriquées, une pour les colonnes, une pour les lignes... A chaque tour, on tire au sort, une chance sur 2 que la diagonale soit dans un sens, et une sur 2 dans l'autre...

for (let x = 0; x < width(); x += size) {
    for (let y = 0; y < height(); y += size) {
        if (random() < 0.5) {
            line(x, y, x + size, y + size);
        } else {
            line(x, y + size, x + size, y);
        }
    }
}

Sans oublier de sauver l'image... différente à chaque lancement!

save("10print.png");

Variations...

Quelques idées et variations...

On peut définir une palette de couleurs

let palette = [
    "#FFF8E1", "#FFECB3", "#FFE082",
    "#FFD54F", "#FFCA28", "#FFC107",
    "#FFB300", "#FFA000", "#FF8F00"
];

Et dans la boucle, on ajoute un tirage au sort de la couleur:

for (let x = 0; x < width(); x += size) {
    for (let y = 0; y < height(); y += size) {
        stroke(randarray(palette));
        // etc...

Il est également possible d'alterner des traits verticaux et horizontaux, ici en faisant en plus varier les couleurs et l'épaisseur.

if (random(1) < 0.5) {
    stroke("#0177E1");
    weight(7);
    line(x + size / 2, y, x + size / 2, y + size);
} else {
    stroke("#F5D216");
    weight(3);
    line(x, y + size / 2, x + size, y + size / 2);
}

Horizotal ou vertical

Exemple, que je vous laisse coder, qui va alterner 5 états (2 diagonales, horizontale et verticales, ou un cercle), avec des couleurs spécifiques...

5 états, 3 palettes de couleurs

Dernière version, finalement peut-être plus proche de l'original:

  • une version texte (mais avec des emojis plus modernes)
  • tient en une seule ligne (car en RichnouLang les retours à la ligne sont optionnels...)
  • basé sur une boucle infinie (faire CTRL+C pour stopper!)
while(true){if(random(1)<0.5){print("🍏");}else{print("🍎");}}

Résultat intéressant ?

10print emojis

10 Print

Historiquement le "10 print" est un programme qui affiche une barre oblique (en texte) tantôt à gauche, tantôt à droite, donnant une impression de pavage, en une ligne de code (en basic). Le goto 10 revenant à la même ligne, donc génère une boucle infinie.

10 PRINT CHR$(205.5+RND(1)); : GOTO 10

10print original, tiré du livre

Simple.

De nombreuses variations ont été faites sur le sujet, dont par les auteurs d'origine (qui ont écrit un livre, depuis dans le domaine public, et dont sont tirées les 2 illustrations ci-dessus).

Quelques sources et documentation: