28 Dec 2014
Einige meiner besten Freunde sind Fremde. Aber diese Fremden sind nicht von hier...
Dies ist ein Gastbeitrag von einem mir lieben Menschen. Für diejenigen, die von neuen Dingen überfordert sind und Stabilität brauchen, hier die aktuellen guten Bandnamen:
- Dirty Talk auf der Landstraße
- Gazellenbande
- Pathos-Express
Hervorhebung beabsichtigt, weil extrem gut.
Genug! Nun, falls ihr noch da seid, folgt der Gastbeitrag (es geht um ein bestimmtes Thema, soviel kann ich schonmal verraten). Viel SPA?
Nak? nak? Naknak nak. Naknaknak Nak? Naknak nak?
Nak? Nak? Naknak Naknak. Naknak nak? Nananak Nak nak? nak? Naknak nak? Naknak Nananak Naknak nak? Naknaknak Nananak Naknaknak Nanananak Naknak Nanananak Naknak Nak. Naknaknak Nananak Naknak Naknak. Naknak Naknak Naknaknak Nak? Nananak Nak Naknaknak nak? Naknak nak. Naknak Nak? Nananak Nak Naknak Nak? Naknak nak? Naknaknak Nananak Nananak Nak nak? Nak? Naknak nak? Naknaknak Nak. Naknaknak Nak? Nananak Nak Naknak Nak. Naknak Naknak. Naknak nak? Naknaknak Nananak Nananak Nak Naknak nanak Naknak Nanak Naknak nak. Naknak nak. Nananak Nak Naknak nak! Naknak Naknak. Naknaknak Nak? Nananak Nak Naknak Nak? Naknak nak? Naknak nak! Nananak Nak Nananak Nananak Nak? Nak? Naknak nak? Naknaknak nak? Naknaknak Nak? Naknaknak Nanananak Naknak Nanananak Naknak Nak. Nananak Nak Nananak Nak Nak? nak? Naknak nak. Naknaknak Nak? Naknak nak? Nananak Nak nak? nak? Naknak nak? Naknak Nananak Naknak nak? Naknaknak Nananak Naknaknak Nanananak Naknak nak? Naknaknak Nak? Naknaknak Naknaknaknak Naknak nak? Naknaknak Nananak Nananak Nananak Nananak Nak Naknaknak nak? Naknak nak? Naknak Nananak Naknak nak? Naknaknak Nananak Naknaknak Nanananak Naknak nak? Naknaknak Nak? Naknaknak Naknaknaknak Naknaknak Nak? Nananak Nak Naknaknak Naknaknak Naknak nak? Naknaknak Nananak Naknak Nak? Naknak nak? Naknak nak. Nananak Nak Nanananak nanak Nananak Naknak.
oder: Esoterische Programmiersprachen
Der Text oben hat mich extrem an die esoterische Programmiersprache
Ook! erinnert.
Aber halt: eine Programmiersprache? Und dann auch noch
eine esoterische!? Was zur Hoelle?
Ok, zur Erklaerung: das ist ein Gastbeitrag von einem IT-Mensch. Und dieser Mensch programmiert gerne, nutzt also Programmiersprachen. Fuer Computer und so. Und es gibt solche langweiligen Programmiersprachen wie C++, COBOL1, Go oder Lisp, aber halt auch esoterische. Diese sind nicht fuer den praktischen Einsatz entwickelt worden, sondern um ungewoehnliche/lustige/komplizierte/queere Sprachkonzepte umzusetzen. Mit Esoterik hat das auch erst mal nicht so viel zu tun, nur der Name: Esoterik gilt fuer viele Menschen als Synonym fuer abwegige Pseudowissenschaften (mit gutem Grund!) also wurde der Begriff auf solche Programmiersprachen uebertragen, die in den Augen von Aussenstehenden ebenso sinnlos und abwegig erscheinen (Quelle).
Hier mal meine Lieblingssprachen:
-
Brainfuck
ist die wohl bekannteste esoterische Programmiersprache und besteht aus nur 8 Befehlen (>, <, +, -, ., ,, [ und ]).
Das uebliche BeispielprogrammHello World!
in Brainfuck:++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.
Ook! basiert auf Brainfuck, indem die 8 Befehle durch Tupel wie
Ook. Ook?
ersetzt werden. Bananas are good. -
Chef
ist eine Programmiersprache in Form von englischen Koch- oder Backrezepten.
Ein veganes und opulentesHello world!
in Chef:Hello World Souffle. Ingredients. 72 g haricot beans 101 eggplants 108 leeks 111 cups oil 32 zucchinis 119 ml water 114 rutabagas 100 g dandelion 33 potatoes Method. Put potatoes into the mixing bowl. Put dandelion into the mixing bowl. Put leeks into the mixing bowl. Put rutabagas into the mixing bowl. Put oil into the mixing bowl. Put water into the mixing bowl. Put zucchinis into the mixing bowl. Put oil into the mixing bowl. Put leeks into the mixing bowl. Put leeks into the mixing bowl. Put eggplants into the mixing bowl. Put haricot beans into the mixing bowl. Liquefy contents of the mixing bowl. Pour contents of the mixing bowl into the baking dish. Serves 1.
- Java2K
ist eine probabilistische (wahrscheinliche) Sprache, in der eine Funktion innerhalb eines Programmes mehr oder weniger korrekt ausgefuehrt wird (mit einer Wahrscheinlichkeit von 90%).
Hello World!
in Java2K befindet sich hier. -
Malbolge
gilt als schwierigste Sprache (und wurde auch mit diesem Ziel entwickelt). DiesesHello world
enstand 2 Jahre nach Entwicklung von Malbolge …('&%:9]!~}|z2Vxwv-,POqponl$Hjig%eB@@>}=<M:9wv6WsU2T|nm-,jcL(I&%$#" `CB]V?Tx<uVtT`Rpo3NlF.Jh++FdbCBA@?]!~|4XzyTT43Qsqq(Lnmkj"Fhg${z@>
-
Piet
ist eine Sprache, deren Programmcode wie ein abstraktes Bild aussieht (nach Art von Piet Mondrian). Das Bild muss im GIF-Format vorliegen und enthaelt als kleinste semantische Einheit Codel (Code + Pixel = Codel; Quadrat aus n2 Pixeln gleicher Farbe), die quasi normalem Code entsprechen.
Als Beispiel wiederHello world
in Piet: -
Whitespace
ist eine der sichersten Sprachen, denn sie besteht nur aus Leerzeichen (Spaces), Tabulatoren (Tabs) und Zeilenumbruechen (Newlines).
Ausgedruckt also hochsicher und kann sogar offen herumliegen!
Da der Codeblock in HTML leider nicht mit solchen Whitespaces umgehen kann, gibt es hierHello world
mit folgenden Ersetzungen:
S
steht fuer Space oder Leerzeichen,T
fuer Tab undL
fuer Newline oder Zeilenumbruch.SSSTSSTSSSL TL SSSSSTTSSTSTL TL SSSSSTTSTTSSL TL SSSSSTTSTTSSL TL SSSSSTTSTTTTL TL SSSSSTSTTSSL TL SSSSSTSSSSSL TL SSSSSTTTSTTTL TL SSSSSTTSTTTTL TL SSSSSTTTSSTSL TL SSSSSTTSTTSSL TL SSSSSTTSSTSSL TL SSSSSTSSSSTL TL SSL L L
-
Whenever
ist eine Sprache, die ihre Befehle irgendwann mal ausfuehrt. Auch die Reihenfolge ist erstmal nicht so wichtig. Ein simplesHello world
ist dabei noch einfach, denn es wird irgendwann korrekt ausgefuehrt:1 print("Hello world!");
Andere Programme mit mehr Zeilen haben es da schwieriger, so kann das Ende vor dem Anfang ausgefuehrt werden, was meistens nicht das Gewuenschte bewirkt …
Neben esoterischen Programmiersprachen gibt es natuerlich auch noch andere Dinge, z.B. Algorithmen und Betriebssysteme. Ich moechte aber hier nicht so langweilige Algorithmen wie Mergesort, Quicksort oder Bubblesort und langweilige Betriebssysteme wie Arch Linux, Microsoft Windows 10 oder OS X 10.10 vorstellen, sondern folgende:
-
Algorithmus: Bogobogosort
basiert auf Bogosort, auch bekannt als Randomsort, was ungefaehr so funktioniert:1. Gucke nach, ob die Liste mit Nummern sortiert ist. Wenn ja, hoer auf, wenn nicht, gehe zu Schritt 2. 2. Mische die Liste zufaellig. 3. Gehe zu Schritt 1.
Dieser Algorithmus ist natuerlich viel zu effizient, daher hier Bogobogosort:
1. Erstelle eine Kopie von der Liste mit Nummern. 2. Sortiere die ersten *n-1* Elemente der Kopie mit Bogobogosort (d.h. alles bis auf das letzte Element). 3. Gucke nach, ob das letzte (*n*-te Element) der sortierten Kopie groesser ist als das hoechste Element der *n-1* Elemente. Wenn ja ist die Kopie nun sortiert, ansonsten mische die Elemente der Kopie zufaellig und gehe zu Schritt 2. 4. Gucke nach, ob die Kopie in der gleichen Reihenfolge ist wie das Original.
-
Algorithmus: Dropsort
ist ein schneller Algorithmus, der nur ein Durchlauf durch eine Liste benoetigt, allerdings mit ein paar Einbussen:1. Beginne mit der 2. Nummer in der Liste. 2. Ist diese Nummer kleiner als die Nummer zuvor, entferne sie aus der Liste, ansonsten ist sie in sortierter Reihenfolge, also behalte sie. 3. Gehe zur naechsten Nummer und wiederhole Schritt 2.
- Algorithmus: Intelligent Design Sort
ist inspiriert von der Theorie des intelligenten Designs (vgl. das fliegende Spaghettimonster). Hier wird davon ausgegangen, das jede Liste mit Nummern schon in einer fuer uns unverstaendlichen Weise sortiert ist, die nur ein*e Schoepfer*in versteht. Eine fuer uns natuerliche Anordnung waere demnach Blasphemie und die Liste sogar weniger sortiert. Der Algorithmus ist damit der schnellstbekannteste, mit einer konstanten Laufzeit (O(1)).
Praise the Sorter! - Algorithmus: Sleepsort
ist einfach wie genial. Jede Liste wird nach einer genau bekannten Laufzeit sortiert sein, dauert nur ggf. etwas lange. Sleepsort mit der Liste1 2 3
braucht nur ca. 6 Sekunden, eine Liste mit den 2 Elementen0 123456789
schon etwas laenger (knapp 4 Jahre). -
Algorithmus: Miraclesort
ist ein ebenfalls toller Algorithmus, wenn die Laufzeit keine Rolle spielt:1. Starte mit einer Liste im Speicher (z.B. im RAM). 2. Gucke nach, ob die Liste sortiert ist. 3. Wenn ja, dann beende; wenn nein, dann warte ein bisschen und gehe dann zu Schritt 2.
-
Algorithmus: Jingle Sort
eignet sich besonders gut fuer die Weihnachtszeit, benoetigt aber ein paar Kinder:Verpacke die Nummern deiner Liste in Geschenke. Gebe jedem Kind ein Geschenk (du brauchst also mindestens *n* Kinder, wobei *n* die Anzahl der Elemente in deiner Liste ist), warte eine Weile und verlass dich auf die Kinder, die ihre Geschenke untereinander vergleichen und dann ordnen werden. Merry Christmas!
-
Betriebssystem: Petrovich
ist ein Betriebssystem, das auf dem Belohnungssystem von Ivan Petrovich Pavlov basiert. Es gibt dabei nur 4 Befehle:do something
,do something with <file>
,reward
undpunish
.
Das Betriebssystem lernt also mitreward
undpunish
, was es das naechste Mal lieber (nicht) machen soll. Ein paar Beispiele:Petrovich> do something 11:15:23 11 June 2005 Petrovich> reward Petrovich>
Hier war die Ausgabe des Datums nuetzlich fuer mich, d.h. Petrovich wurde belohnt.
Petrovich> do something with data_run_20050711.txt plotting data to printer Petrovich> punish Petrovich> do something with data_run_20050711.txt performing Fast Fourier Transform... saving result to data_FFT_20050711.txt Petrovich> reward Petrovich>
Die erste Aktion war unerwuenscht (Resourcenverschwendung!), daher die Strafe; die zweite Aktion konnte ich gerade gut gebrauchen, daher gabs eine Belohnung.
In welcher (esoterischen) Programmiersprache programmiert ihr gerne
spannende Algorithmen?
Und wenn nein, dann warum noch nicht?!
Weitere Quellen (Weiterbildung und so):
- Praesentation
- Esolang (wiki) und die Language list
- 99 Bottles of Beer
- DM’s Esoteric Programming Languages
- Thread mit weiteren Algorithmen
- Getanzte Sortieralgorithmen
1 In dem Zusammenhang interessant: ein Teammitglied um die Mit-Entwicklerin von COBOL Grace Hopper fand den ersten echten Bug, eine Motte (Quelle).