grillmoebel
Analytisches Prosa Nichtprosa Musiknerdtum Kommentare zum Zeitgeschehen wiederkehrende Rubriken Fragmente Meta Blogroll (alt)

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 Beispielprogramm Hello 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 opulentes Hello 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). Dieses Hello 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 wieder Hello world in Piet:

    Hello 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 hier Hello world mit folgenden Ersetzungen:
    S steht fuer Space oder Leerzeichen, T fuer Tab und L 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 simples Hello 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 Liste 1 2 3 braucht nur ca. 6 Sekunden, eine Liste mit den 2 Elementen 0 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 und punish.
    Das Betriebssystem lernt also mit reward und punish, 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):


1 In dem Zusammenhang interessant: ein Teammitglied um die Mit-Entwicklerin von COBOL Grace Hopper fand den ersten echten Bug, eine Motte (Quelle).

Analytisches Prosa Nichtprosa Musiknerdtum Kommentare zum Zeitgeschehen wiederkehrende Rubriken Fragmente Meta Blogroll (alt)