Herausforderung
Wenn Sie eine Zeichenfolge als Eingabe angeben, spielen Sie das Fourier-Programm ab, das diese Zeichenfolge ausgibt.
In Fourier gibt es keine einfache Möglichkeit, einen String auszugeben: Sie müssen jeden Zeichencode durchgehen und diesen als Zeichen ausgeben.
Fourier
Die Sprache basiert auf einem Akkumulator, einer globalen Variablen, die zu Beginn des Programms auf 0 initialisiert wird. Dies wird von fast jedem Operator in der Sprache verwendet. Nur einige ändern den Wert des Akkus nicht.
Charakter aus
a
Nimmt den Wert des Akkus als ASCII-Code und gibt das Zeichen aus. Ändert den Wert des Akkus nicht.
Wenn der Akku größer als 255 ist, gibt das Programm einen Fehler zurück. Ebenso, wenn der Akku kleiner als 0 ist.
Nummer raus
o
Gibt den Wert des Akkus aus. Ändert den Wert des Akkus nicht.
Erhöhen, ansteigen
^
Erhöhen Sie den Akku um eins.
Verringern
v
Verringern Sie den Akku um eins.
Hinzufügen
+x
Setzt den Akku auf den Wert des Akkus plus den Wert von x.
Subtrahieren
-x
Setzt den Akku auf den Wert des Akkus minus dem Wert von x.
Multiplizieren
*x
Setzt den Akku auf den Wert des Akkus multipliziert mit dem Wert von x.
Teilen
/x
Setzt den Akku auf den Wert des Akkus geteilt durch den Wert von x. (Beachten Sie, dass dies eine Ganzzahldivision ist. Dies 1/6
führt zu 0
)
Nummer
n
Stellen Sie den Akku auf die ganze Zahl n.
Hinweis
Hier x
und n
kann eine beliebige ganze Zahl von 0
bis 2^32-1
einschließlich sein.
Mehr Informationen
Sie dürfen nur die oben beschriebenen Operatoren verwenden. Daher ist Ihr ausgegebenes Fourier-Programm ungültig, wenn eines der folgenden Elemente verwendet wird (beachten Sie, dass die folgenden Operatoren für die Prämie zulässig sind):
- Wiederholen Sie die Schleifen
- If-Anweisungen
- Variablen
- Zufällig
- Modulo
- Benutzereingabe
- Größer / Kleiner als Operatoren
- Gleichstellungsoperatoren
- Bildschirm löschen
- Zeitverzögerung
- Datumsfunktionen
Ihr Programm kann entweder ein vollständiges Programm oder eine Funktion sein, die Eingaben über STDIN, eine Datei oder Funktionsargumente aufnimmt. Sie können Eingaben auch direkt aus dem Internet vornehmen.
Beachten Sie, dass vv
Sie den Code durch einen ersetzen sollten , wenn er einen enthält -2
. Das gleiche gilt für das ^^
Ersetzen durch +2
.
Beispiele
Wenn die Eingabe lautet 7n
, lautet das erwartete Programm:
55a110a
Mit können Sie aber ein Byte sparen
55a*2a
Ein anderer Weg ist
7o110a
Nummer raus verwenden.
In ähnlicher Weise lautet Hello
das erwartete Programm, wenn die Eingabe lautet:
72a101a108a108a111a
Sie können es um 3 Bytes reduzieren (da die Ausgabe den Akku nicht verändert):
72a101a108aa111a
Aber warte, wir können den Additionsoperator verwenden und 2 Bytes sparen:
72a101a+7aa+3a
Formatierung
Da ich die Stack Snippet-Bestenliste von Martin Büttner verwende, können Sie den Titel folgendermaßen formatieren:
# <Language name>, <length of total output> bytes
Dann können Sie alles, was Sie wollen, unter den Titel setzen.
Gewinnen
Sie sollten die Länge der Fourier-Programme (von Ihrem Code erstellt) angeben, um diese Textdatei und diese Textdatei auszugeben . Ihre Punktzahl ist die kombinierte Länge der beiden Fourier-Programme in Bytes (Nicht-ASCII-Zeichen werden in Fourier nicht verwendet, es macht also keinen wirklichen Unterschied).
Die Person mit den niedrigsten Punktzahlen gewinnt. Bei Gleichstand gewinnt das kürzeste Programm in Bytes.
Kopfgeld
Diese Prämie von 500 Wiederholungen ist für eine neue Antwort gedacht, bei der die Saiten mit einer der Fourier-Funktionen gespielt werden. Dazu gehören Variablen, Schleifen und if-Anweisungen usw. Diese neue Antwort wird nicht akzeptiert.
Bestenliste
Siehe Formatierungsabschnitt oben:
var QUESTION_ID=55384;function answersUrl(e){return"http://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),e.has_more?getAnswers():process()}})}function shouldHaveHeading(e){var a=!1,r=e.body_markdown.split("\n");try{a|=/^#/.test(e.body_markdown),a|=["-","="].indexOf(r[1][0])>-1,a&=LANGUAGE_REG.test(e.body_markdown)}catch(n){}return a}function shouldHaveScore(e){var a=!1;try{a|=SIZE_REG.test(e.body_markdown.split("\n")[0])}catch(r){}return a}function getAuthorName(e){return e.owner.display_name}function process(){answers=answers.filter(shouldHaveScore).filter(shouldHaveHeading),answers.sort(function(e,a){var r=+(e.body_markdown.split("\n")[0].match(SIZE_REG)||[1/0])[0],n=+(a.body_markdown.split("\n")[0].match(SIZE_REG)||[1/0])[0];return r-n});var e={},a=1,r=null,n=1;answers.forEach(function(s){var t=s.body_markdown.split("\n")[0],o=jQuery("#answer-template").html(),l=(t.match(NUMBER_REG)[0],(t.match(SIZE_REG)||[0])[0]),c=t.match(LANGUAGE_REG)[1],i=getAuthorName(s);l!=r&&(n=a),r=l,++a,o=o.replace("{{PLACE}}",n+".").replace("{{NAME}}",i).replace("{{LANGUAGE}}",c).replace("{{SIZE}}",l).replace("{{LINK}}",s.share_link),o=jQuery(o),jQuery("#answers").append(o),e[c]=e[c]||{lang:c,user:i,size:l,link:s.share_link}});var s=[];for(var t in e)e.hasOwnProperty(t)&&s.push(e[t]);s.sort(function(e,a){return e.lang>a.lang?1:e.lang<a.lang?-1:0});for(var o=0;o<s.length;++o){var l=jQuery("#language-template").html(),t=s[o];l=l.replace("{{LANGUAGE}}",t.lang).replace("{{NAME}}",t.user).replace("{{SIZE}}",t.size).replace("{{LINK}}",t.link),l=jQuery(l),jQuery("#languages").append(l)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",answers=[],page=1;getAnswers();var SIZE_REG=/\d+(?=[^\d&]*(?:<(?:s>[^&]*<\/s>|[^&]+>)[^\d&]*)*$)/,NUMBER_REG=/\d+/,LANGUAGE_REG=/^#*\s*([^,]+)/;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script><link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"><div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr></thead> <tbody id="answers"> </tbody> </table></div> <tbody id="languages"> </tbody> </table></div><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody></table>