Chef Code

Herkunft / Verwendung:Chef ist eine esoterischen Programmiersprache, die von David Morgan-Mar aka Dangermouse entworfen wurde und dessen Code wie Kochrezepte aussehen. Der hier implementierte Koch (Interpreter) beherrscht keine exotischen Kochmethoden und verfügt nur über eine Schüssel, dafür versteht er aber deutsche und englische Rezepte.

Spezifikation des Codes

Ein Kochrezept ist wie folgt aufgebaut:

Rezeptname

Dies ist der Name des Rezeptes. Oder einfach nur ein Fantasie-Name sein. Der Rezept-Titel ist immer die erste Zeile eines Chef-Rezepts gefolgt von zwei Zeilenumbrüchen.

Kurzbeschreibung

Hier wird in ein paar Worten erklärt, wie das Resultat schmecken wird bzw. was das Programm macht. Es folgt wieder eine Leerzeile.

Zutatenlisten

Wird eingeleitet mit dem Schlüsselwort "Ingredients." bzw. "Zutaten:" in der ersten Zeile. Pro Zeile folgen die Angaben für Menge, Einheit und Zutat:

{Menge} {Einheit} {Zutat}, wobei:

Menge eine Ganzzahl ist,

Einheit bezeichnet, ob es sich um eine feste oder flüssige Zutat handelt.

Feste Zutaten sind: g, kg, pinch(es), Prise(n)
Flüssige Zutaten sind: ml, l, dash(es), Spritzer
Von der Konsistenz her unbekannte Zutaten sind: teaspoon(s), Teeelöffel, tablespoon(s), Esslöffel, cup(s), Tasse(n)

{Zutat} ist ein Variablennamen, der beliebig gewählt werden darf, aber immer gleich geschrieben werden muss (also immer im Singluar oder Plural), z. B: Eier, Kartoffeln, Schokolade.

Garzeit

Der nächste Absatz ist optional und gibt die Garzeit an:

Garzeit: "nnn Stunden" oder "nnn Minuten" bzw.
Cooking time: "nnn hour(s)" oder "nnn minute(s)."

Ofentemperatur

Auch die Ofentemperatur ist optional und für Speisen gedacht, die gebacken werden müssen:

Ofen auf nnn Grad Celsius vorheizen bzw.
Pre-heat oven to temperature nnn degrees Celsius

Zubereitung

Wird eingeleitet mit dem Schlüsselwort "Method." bzw. "Zubereitung:" in der ersten Zeile. Jede Zubereitungsanweisung wird durch einen Punkt abgeschlossen und trennt sich von der nächsten durch ein Leerzeichen. Zur Zubereitung wird eine Schüssel benutzt, in die die Zutaten gegeben werden. Die Schüssel funktioniert wie ein Stack und hält alle bisher eingebrachten Werte, zuunterst den zuerst eingebrachten Wert, zuoberst den zuletzt eingebrachten.

Die Zubereitunsanweisungen sind:

EnglischDeutschErklärung
Take {Zutat} from refrigerator.{Zutat} aus dem Kühlschrank nehmen.Liest einen numerischen Wert von STDIN (hier: Schlüsselfeld) und überschreibt damit den Wert der Variablen {Zutat}.
Put {Zutat} into mixing bowl.{Zutat} in die Schüssel geben.Gibt die Zutat in die Schüssel.
Fold {Zutat} into mixing bowl.{Zutat} unterheben.Entnimmt den obersten Wert vom Stack und schreibt ihn in die Variable {Zutat}.
Add {Zutat} [to mixing bowl].{Zutat} dazugeben.Addiert den Wert der Variable {Zutat} zu dem obersten Stackwert und speichert das Ergebnis auf dem Stack.
Remove {Zutat} [from mixing bowl].{Zutat} abschöpfen.Substrahier den Wert der Variable {Zutat} von dem obersten Stackwert und speichert das Ergebnis auf dem Stack.
Combine {Zutat} [into mixing bowl].{Zutat} kombinieren.Multipliziert den Wert der Variable {Zutat} mit dem obersten Stackwert und speichert das Ergebnis auf dem Stack.
Divide {Zutat} [into mixing bowl].{Zutat} teilen.Dividiert den Wert der Variable {Zutat} durch den obersten Stackwert und speichert das Ergebnis auf dem Stack.
Add dry ingredients [to mixing bowl].Alle festen Zutaten hinzugeben.Addiert alle festen Zutaten und schiebt sie auf den Stack.
Liquefy {Zutat}.{Zutat} zerlassen.Verflüssigt eine Zutat.
Liquefy contents of the mixing bowl.Inhalt der Schüssel auf dem Stövchen erhitzen. Verflüssigt alle Zutaten in der Schüssel.
Stir [the mixing bowl] for [nnn] minutes.Schüssel für nnn Minuten umrühren.Rührt das oberste Stackelement nnn mal unter die anderen, wobei es jedes Mal einen Platz unter die anderen Zutaten kommt. Danach befindet es sich an nnn+1. Position von oben. Wird länger als nötig gerührt, verbleibt das unterrührte Element an unterster Stelle.
Stir {Zutat} into the mixing bowl.{Zutat} unterrühren.Wie zuvor, nur wird dem Inhalt der Variablen {Zutat} entsprechend oft gerührt.
Mix mixing bowl well.Inhalt der Schüssel gut verrühren.Bringt alle Stackwerte in eine zufällige Reihenfolge
Clean mixing bowl.Schüssel abwaschen.Stack löschen.
Pour contents of the mixing bowl into the baking dish.Inhalt der Schüssel auf [ein Backblech, Teller, Servierplatte etc.] stürzen. Gibt alle Elemente vom Schüssel-Stack in umgekehrter Reihenfolge (neuestes zuerst) aus.
Lift contents of the mixing bowl onto the baking dish.Inhalt der Schüssel auf [ein Backblech, Teller, Servierplatte etc.] heben. Gibt alle Elemente vom Schüssel-Stack in der Reihenfolge alt nach neu (neuestes zuletzt) aus.
{behandeln} the {Zutat}.{Zutat} {behandeln} Dies markiert den Beginn einer Schleife und ist nur gültig mit einem Schleifenende. Es wird geprüft, ob die Zutat 0 ist, dann wird die Schleife unterbrochen. Ansonsten fortgeführt.
{behandlung} [the {Zutat}] until {behandeln}ed.Solange {behandeln} bis [{Zutat}] zur Weiterarbeitung bereit. Dies markiert das Ende einer Schleife. Die Schleife wird verlassen, wenn die Zutat 0 ist. Wenn eine Zutat im Satz genannt wird, wird diese um eins erniedrigt. Diese Zutat muss nicht die vom Schleifenbeginn sein. {behandlung} muss nicht dem ursprünglichem {behandeln} entsprechen.
Set aside.Zur Seite stellen. Verlässt die innerste Schleife sofort.
Refrigerate.Einfrieren.Verlässt das Programm sofort und gibt das Ergebnis bis hierhin aus.


Portionen

Der nächste Absatz gibt an, für wieviele Personen das Gericht gedacht ist. Sie beendet das Programm und gibt nnn Backblech-Stacks als Ergebnis zurück. Soll etwas ausgegeben werden, muss dieser Absatz angegeben werden.

Poritionen: {nnn}. bzw.
Serves {nnn}.

Beispiel englisch

Hello World Souffle. This recipe prints the immortal words "Hello world!", in a basically brute force way. It also makes a lot of food for one person. Ingredients. 72 g haricot beans 101 eggs 108 g lard 111 cups oil 32 zucchinis 119 ml water 114 g red salmon 100 g dijon mustard 33 potatoes Method. Put potatoes into the mixing bowl. Put dijon mustard into the mixing bowl. Put lard into the mixing bowl. Put red salmon 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 lard into the mixing bowl. Put lard into the mixing bowl. Put eggs 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. Ausgabe:Hello world!

Beispiel deutsch

Oma's fantastischer Obstsalat Dies ist das Geheim-Rezept meiner Oma für ihren fantastischen Obstsalat. Der schmeckt so toll. Ihr müsst ihn unbedingt einmal ausprobieren. Zutaten: 121 g Traubenzucker 116 g Grob gehackte Walnüsse 112 g Gehackte Mandeln 111 ml Honig 100 g Erdbeeren 107 g Weintrauben 101 g Kirschen 46 g Ananas 101 g Äpfel 114 g Birnen 103 g Honigmelone 105 g Mandarinen 102 g Kiwis 97 g Bananen Zubereitung: Kirschen in die Schüssel geben. Erdbeeren in die Schüssel geben. Ananas in die Schüssel geben. Äpfel in die Schüssel geben. Mandarinen in die Schüssel geben. Kiwis in die Schüssel geben. Bananen in die Schüssel geben. Birnen in die Schüssel geben. Honigmelone in die Schüssel geben. Honig in die Schüssel geben. Weintrauben in die Schüssel geben. Grob gehackte Walnüsse in die Schüssel geben. Schüssel für 1 Minute umrühren. Gehackte Mandeln in die Schüssel geben. Schüssel für 1 Minute umrühren. Traubenzucker in die Schüssel geben. Schüssel für 1 Minute umrühren. Birnen in die Schüssel geben. Schüssel für 1 Minute umrühren. Schüssel in eine Servierschale stürzen. Portionen: 1. Ausgabe:kryptografie.de

Code / Chiffre online dekodieren / entschlüsseln bzw. kodieren / verschlüsseln (Decoder / Encoder / Solver-Tool)

Quellen, Literaturverweise und weiterführende Links

Chef bei David Morgan-Mar (Dangermouse)