Share to: share facebook share twitter share wa share telegram print page

Piet

Piet
Programme en Piet qui imprime « Piet ».
Programme en Piet qui imprime « Piet ».

Date de première version 1993
Auteur David Morgan-Mar
Influencé par Piet Mondrian
Site web http://www.dangermouse.net/esoteric/piet.html

Piet est un langage de programmation exotique créé par David Morgan-Mar, dont les programmes sont des images matricielles inspirées des travaux du peintre néerlandais Piet Mondrian[1].

Fonctionnement

Constitution des images

Les programmes en Piet sont des images matricielles composées de 18 couleurs auxquelles s'ajoutent le blanc et le noir, comme le résume le tableau suivant :

noir #000000
blanc #FFFFFF
rouge clair

#FFC0C0

jaune clair

#FFFFC0

vert clair

#C0FFC0

cyan clair

#C0FFFF

bleu clair

#C0C0FF

magenta clair

#FFC0FF

rouge

#FF0000

jaune

#FFFF00

vert

#00FF00

cyan

#00FFFF

bleu

#0000FF

magenta

#FF00FF

rouge foncé

#C00000

jaune foncé

#C0C000

vert foncé

#00C000

cyan foncé

#00C0C0

bleu foncé

#0000C0

magenta foncé

#C000C0

Les couleurs autres que le blanc et le noir s'enchaînent dans deux cycles :

  • Teinte : rouge → jaune → vert → cyan → bleu → magenta → rouge → ...
  • Luminosité : clair → normal → foncé → clair → ...

Par exemple le cyan possède trois teintes de plus que le rouge, et le jaune deux teintes de plus que le magenta. De même une couleur foncée est deux pas de luminosité plus loin qu'une couleur claire, tandis qu'une couleur claire est un pas de luminosité plus loin qu'une couleur foncée.

Les images sont évidemment constituées de pixels comme toutes les images matricielles, mais peuvent être agrandies pour faciliter la lisibilité des détails ou rendre l'image graphiquement plus intéressante. Chaque groupe carré de pixels correspondant à un pixel de l'image originale est alors interprété comme un seul et même pixel que l'on appelle codel pour éviter la confusion. Il est ainsi nécessaire de préciser la taille des codels de l’image utilisée lors de l'exécution du programme.

Un groupe de codels juxtaposés (deux codels positionnés en diagonale ne sont pas considérés comme juxtaposés) de couleur identique constitue un bloc ainsi délimité soit par le bord de l'image soit par des codels d'une autre couleur. Ces blocs peuvent être de n'importe quelle forme, et même posséder des "trous". Le nombre de codels constituant le bloc permet de représenter un entier (mais en aucun cas une instruction).

Structure de données

Le langage utilise pour le stockage des données une structure en pile (ou stack en anglais) fondé sur le principe LIFO. Cette pile ne contient que des entiers, et il n'y a en théorie pas de limite à sa taille.

Exécution

L’interpréteur commence l'exécution du programme dans le codel situé en haut à gauche de l'image. Le déplacement de l'interpréteur dans l'image est ensuite géré par un pointeur directionnel (Direction Pointer ou DP en anglais) initialisé vers la droite et pouvant pointer quatre directions (droite, bas, gauche, haut) et un sélectionneur de codel (Codel Chooser ou CC en anglais) initialisé vers la gauche et pouvant prendre deux valeurs (gauche et droite). L'interpréteur suit alors les mêmes règles de déplacement tout au long de l'exécution :

  • l'interpréteur détermine, au sein du bloc dans lequel il se trouve, le bord qui est le plus loin dans la direction du DP ;
  • l'interpréteur détermine le codel de ce bord qui est le plus loin dans la direction du CC par rapport au sens du DP. Le tableau suivant explicite ce choix du codel :
DP CC Codel choisi
Droite Gauche Extrémité supérieure
Droite Extrémité inférieure
Bas Gauche Extrémité droite
Droite Extrémité gauche
Gauche Gauche Extrémité inférieure
Droite Extrémité supérieure
Haut Gauche Extrémité gauche
Droite Extrémité droite
  • l'interpréteur passe alors dans le bloc immédiatement situé après ce codel dans la direction du DP, en exécutant l'instruction correspondant au changement de teinte et de luminosité entre les couleurs des deux blocs, en fonction du tableau suivant :
Changement de luminosité
+0 +1 +2
Changement de teinte +0 push pop
+1 add subtract multiply
+2 divide mod not
+3 greater pointer switch
+4 duplicate roll in (nombre)
+5 in (caractère) out (nombre) out (caractère)

Cas particulier

Les blocs de couleur noire et les bords de l'image agissent sur l’interpréteur de façon identique : si ce dernier essaye de passer dans un tel bloc ou à travers un bord, le CC est inversé. S'il s'agit d'un nouvel échec, le DP est tourné dans le sens horaire. Si le CC et le DP reviennent à leur configuration initiale sans que l'interpréteur ait pu se déplacer (ce qui correspond à huit essais), le programme s'arrête.

D'autre part les blocs de couleur blanche représentent des zones ou l'interpréteur n'est jamais arrêté : lorsqu'il sort d'un bloc coloré vers un bloc blanc, il se déplace dans la direction du DP jusqu'à ce qu'il rencontre un bloc coloré, un bloc noir, ou un bord. De plus, sortir d'un bloc blanc vers un autre bloc n'exécutera aucune commande, quel que soit le bloc : c'est ainsi un moyen de changer la couleur actuelle sans exécuter de commande, afin notamment de réaliser des boucles.

Instructions

Piet possède 17 instructions exécutées en fonction du changement de couleur lors du passage de l'interpréteur d'un bloc à un autre.

Instruction Signification
push Empile la valeur du bloc venant d'être quitté
pop Désempile la valeur au sommet de la pile
add Désempile les deux valeurs au sommet de la pile et empile leur somme
substract Désempile les deux valeurs au sommet de la pile et empile la différence de la deuxième moins la première
multiply Désempile les deux valeurs au sommet de la pile et empile leur produit
divide Désempile les deux valeurs au sommet de la pile et empile le quotient de division euclidienne de la deuxième par la première
mod Désempile les deux valeurs au sommet de la pile et empile le reste de la division euclidienne de la deuxième par la première
not Remplace la valeur au sommet de la pile par 1 si elle est nulle, et par 0 sinon
greater Désempile les deux valeurs au sommet de la pile et empile 1 si la deuxième est plus grande que la première ou 0 dans le cas contraire
pointer Désempile la valeur au sommet de la pile et tourne le pointeur directionnel dans le sens horaire autant de fois que la valeur (dans le sens anti-horaire si la valeur est négative)
switch Désempile la valeur au sommet de la pile et inverse le sélectionneur de codel autant de fois que la valeur
duplicate Empile la valeur au sommet de la pile
roll Désempile les deux valeurs au sommet de la pile et "roule" la pile d'une profondeur de la deuxième valeur, autant de fois que la première valeur.
in (nombre) Lit une valeur en tant que nombre et l'empile
in (caractère) Lit une valeur en tant que caractère et l'empile
out (nombre) Désempile la valeur au sommet de la pile et l'affiche en tant que nombre
out (caractère) Désempile la valeur au sommet de la pile et l'affiche en tant que caractère

Exemples

Beaucoup de programme créés permettent simplement d'afficher de courtes chaînes de caractères comme "Piet" ou encore le fameux "Hello world!", mais certains permettent d'exécuter des algorithmes relativement simples, comme le calcul des nombres de Fibonacci, la vérification de la primalité d'un entier, le calcul d'une factorielle, ou encore la détermination du plus grand commun diviseur de deux entiers avec l'algorithme d'Euclide.

Piet et art

Art abstrait

Certains programmes en Piet peuvent rappeler les œuvres abstraites du peintre néerlandais éponyme Piet Mondrian.

Pixel art

Malgré les contraintes liées au principe du langage, certains programmeurs écrivent des programmes fonctionnels en leur conférant une certaine qualité esthétique, des formes particulières ou en ajoutant du texte au sein même de l'image matricielle.

Turing-complétude

Puisqu'il est possible de programmer en Piet un interpréteur de Brainfuck[2], et que cet autre langage exotique est Turing-complet[3], Piet est nécessairement[4] lui aussi Turing-complet. Il est donc théoriquement possible d'écrire n'importe quel programme informatique en Piet.

Néanmoins, il n'existe à ce jour pas de preuve formelle directe pour démontrer cette propriété.

Annexes

Articles connexes

Notes et références

  1. David Morgan-Mar, « Piet » (consulté le )
  2. (en) « Brainfuck interpreter in Piet », sur www.matthias-ernst.eu
  3. (en) « Brainfuck is Turing-complete », sur www.iwriteiam.nl
  4. (en) « Piet - Computational class », sur esolangs.org

Liens externes

Read more information:

|Зображення_підпис= Попільнянський ліцей Попільнянської селищної ради Житомирської областіТип ліцей[1] 49°56′51″ пн. ш. 29°27′46″ сх. д. / 49.9475° пн. ш. 29.4629° сх. д. / 49.9475; 29.4629Засновано 1924Директор Шуляр Валерій МихайловичУчителі 63Учні 838[2]

Campionati europei 1957 Competizione Campionati europei Sport Hockey su pista Edizione 23ª Organizzatore FIRS Date dal 29 maggio 1957al 2 giugno 1957 Luogo  SpagnaBarcellona Partecipanti 6 Risultati Vincitore Spagna(4º titolo) Secondo Portogallo Terzo Italia Statistiche Incontri disputati 15 Gol segnati 85 (5,67 per incontro) Cronologia della competizione 1956 1959 Manuale I Campionati Europei 1957 furono la 23ª edizione dei campionati europei di hockey su pista; la manifest…

Pour les articles homonymes, voir Bleu Blanc Rouge et BBR. Jean-Marie Le Pen (à g.), président du Front national, à la tribune de l'édition 2001 de la fête des BBR. Il est accompagné par Roger Holeindre, qui a participé à la fondation du parti. La fête des Bleu-blanc-rouge (couleurs du drapeau de la France), couramment appelée fête des BBR, est une rencontre annuelle de sympathisants et membres du Front national. Cette manifestation est créée en 1981 sous l'impulsion de Michel Colli…

Eleições parlamentares europeias de 2019 Distritos: Aveiro | Beja | Braga | Bragança | Castelo Branco | Coimbra | Évora | Faro | Guarda | Leiria | Lisboa | Portalegre | Porto | Santarém | Setúbal | Viana do Castelo | Vila Real | Viseu | Açores | Madeira | Estrangeiro ← 2014 •  • 2024 → Eleições parlamentares europeias de 2019 na Madeira 26 de maio de 2019 Demografia eleitoral Hab. inscritos:  257 929 Votantes : 99 393  …

Село Ґрабовопол. Grabowo Координати 53°19′ пн. ш. 20°34′ сх. д. / 53.317° пн. ш. 20.567° сх. д. / 53.317; 20.567Координати: 53°19′ пн. ш. 20°34′ сх. д. / 53.317° пн. ш. 20.567° сх. д. / 53.317; 20.567 Країна ПольщаПольщаВоєводство Вармінсько-Мазурське…

Segunda División de Catar Segunda División de Catar 2020-21 Datos generalesDeporte FútbolSede Catar CatarContinente AFCNombre comercial Qatargas LeagueEquipos participantes 8Datos históricosFundación 1963 (60 años)Datos estadísticosCampeón actual Al Wakrah (2018-19)Más campeonatos Al-Markhiya (5)Otros datosSitio web oficial qsl.com.qa[editar datos en Wikidata] La Segunda División de Catar, también conocida por su nombre comercial Qatargas League[1]​ (en árab…

Chemical compound 3-MeO-PCEClinical dataOther names3-MeO-PCE; MethoxieticyclidineLegal statusLegal status DE: NpSG (Industrial and scientific use only) UK: Class B Illegal in Sweden and Switzerland Identifiers IUPAC name N-Ethyl-1-(3-methoxyphenyl)cyclohexan-1-amine CAS Number1364933-80-1 YPubChem CID57461569ChemSpider58191438UNIIPX6CYK9I4HChemical and physical dataFormulaC15H23NOMolar mass233.355 g·mol−13D model (JSmol)Interactive image SMILES CCNC1(CCCCC1)C2=CC(=CC=C2)OC…

US Supreme Court justice from 1958 to 1981 Potter StewartOfficial portrait, 1976Associate Justice of the Supreme Court of the United StatesIn officeOctober 14, 1958 – July 3, 1981Nominated byDwight D. EisenhowerPreceded byHarold Hitz BurtonSucceeded bySandra Day O'ConnorJudge of the United States Court of Appeals for the Sixth CircuitIn officeApril 27, 1954 – October 13, 1958Nominated byDwight D. EisenhowerPreceded byXenophon HicksSucceeded byLester LeFevre Cecil Personal d…

Суперкубок Німеччини з футболу 2023Турнір Суперкубок Німеччини з футболу Баварія РБ Лейпциг 0 3 Дата 12 серпня 2023Стадіон Ред Булл Арена, ЛейпцигАрбітр Бастіан ДанкертГлядачі 75 024← 2022 2024 → Суперкубок Німеччини з футболу 2023 — 14-й розіграш турніру після його відновлення …

Artikel ini adalah bagian dari seriPembagian administratifIndonesia Tingkat I Provinsi Daerah istimewa Daerah khusus Tingkat II Kabupaten Kota Kabupaten administrasi Kota administrasi Tingkat III Kecamatan Distrik Kapanewon Kemantren Tingkat IV Kelurahan Desa Dusun (Bungo) Gampong Kute Kalurahan Kampung Kalimantan Timur Lampung Papua Riau Lembang Nagari Nagori Negeri Maluku Maluku Tengah Negeri administratif Pekon Tiyuh Lain-lain Antara III dan IV Mukim Di bawah IV Banjar Bori Pedukuhan Dusun Jo…

Logotipo da série Esta é a lista de episódios de Shingeki no Kyojin (em japonês: 進撃の巨人, Shingeki no Kyojin? lit. Titã de Ataque, Ataque dos Gigantes ou ainda Investida dos Gigantes; também conhecido como Attack on Titan), uma série de anime baseado no mangá de mesmo nome escrito e ilustrado por Hajime Isayama entre 2009 e 2021. A história segue as aventuras de Eren Yeager e seus amigos Mikasa Ackerman e Armin Arlert, que vivem em uma cidade cercada por três grandes m…

Elihu Root Elihu Root (* 15. Februar 1845 in Clinton, New York; † 7. Februar 1937 in New York City) war ein US-amerikanischer Jurist und Politiker. 1912 erhielt er den Friedensnobelpreis für sein stetes Bemühen um Ausgleich der Interessen und die Formulierung von Schiedsverträgen in internationalen Konflikten. Inhaltsverzeichnis 1 Leben und Werk 1.1 Frühe Jahre und Ausbildung 1.2 Politisches Wirken 2 Literatur 3 Weblinks 4 Einzelnachweise Leben und Werk Frühe Jahre und Ausbildung Eli…

J. R. R. Tolkien's use of stories to frame his novels J. R. R. Tolkien used frame stories throughout his Middle-earth writings, especially his legendarium, to make the works resemble a genuine mythology written and edited by many hands over a long period of time. He described in detail how his fictional characters wrote their books and transmitted them to others, and showed how later in-universe editors annotated the material. The frame story for both Tolkien's novels published in his lifetime, …

Genus of fungi Sistotremella Sistotremella perpusilla growing on beech Scientific classification Kingdom: Fungi Division: Basidiomycota Class: Agaricomycetes Order: Trechisporales Family: Hydnodontaceae Genus: SistotremellaHjortstam (1984)[1] Type species Sistotremella perpusillaHjortstam (1984) Species S. cystidiolophora S. hauerslevii S. paullicorticioides S. perpusilla Sistotremella is a genus of corticioid fungi in the family Hydnodontaceae. The genus has a widespread distribution, a…

This article relies largely or entirely on a single source. Relevant discussion may be found on the talk page. Please help improve this article by introducing citations to additional sources.Find sources: 2022–23 Deportivo Toluca F.C. season – news · newspapers · books · scholar · JSTOR (October 2022) Toluca 2022–23 football seasonToluca2022–23 seasonPresidentFrancisco SuinagaManagerIgnacio AmbrízStadiumNemesio DíezLiga MXApertura: 6th (Runner-up)…

Location of San Jacinto County in Texas This is a list of the National Register of Historic Places listings in San Jacinto County, Texas. This is intended to be a complete list of properties listed on the National Register of Historic Places in San Jacinto County, Texas. There are two properties listed on the National Register in the county. Both properties are also designated Recorded Texas Historic Landmarks.           This National Park Service list is complete…

John Henry Poynting John Henry Poynting Teorema de Poynting, vector de Poynting, efeito Poynting, efeito Poynting-Robertson Nascimento 9 de setembro de 1852Manchester Morte 30 de março de 1914 (61 anos)Birmingham Nacionalidade inglês Cidadania Reino Unido da Grã-Bretanha e Irlanda Irmão(ã)(s) Frank Poynting Alma mater Universidade de Cambridge, Universidade de Manchester Ocupação físico, professor universitário Prêmios Prêmio Adams (1893), Medalha Real (1905) Empregador(a) U…

This article has multiple issues. Please help improve it or discuss these issues on the talk page. (Learn how and when to remove these template messages) This biography of a living person needs additional citations for verification. Please help by adding reliable sources. Contentious material about living persons that is unsourced or poorly sourced must be removed immediately from the article and its talk page, especially if potentially libelous.Find sources: Gabi Siboni – news&…

LasemKecamatanNegara IndonesiaProvinsiJawa TengahKabupatenRembangPemerintahan • Camat-Populasi • Total47,868 jiwa (2.005) jiwaKode Kemendagri33.17.14 Kode BPS3317140 Luas45,04 km²Desa/kelurahan20 desa Lasem adalah sebuah kecamatan di Kabupaten Rembang, Jawa Tengah, Indonesia. Merupakan kota terbesar kedua di Kabupaten Rembang setelah kota Rembang. Sejarah Kuil Tionghoa di Lasem. Dahulu Lasem dikenal sebagai Tiongkok kecil (atau Little Chinatown) karena merupakan kot…

Crown worn during coronation by the Empress of Iran Empress's CrownCrown of Empress Farah Pahlavi, 1967DetailsCountryIranMade1967Weight2 kgMaterialWhite gold, silverCapGreen velvetNotable stonesPearl, diamond, emerald, ruby, spinel Shahbanu Farah Pahlavi wearing the crown at her coronation. The Empress's Crown (Persian: تاج شهبانو) is part of the coronation regalia used by the third Shahbanu (Empress) of Iran (Persia), Farah Pahlavi. The crown is part of the Iranian National Jewels, and…

Kembali kehalaman sebelumnya

Lokasi Pengunjung: 3.215.77.88