var QUESTION_ID=188988;
var OVERRIDE_USER=53748;
var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;function answersUrl(d){return"https://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+d+"&pagesize=100&order=asc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(d,e){return"https://api.stackexchange.com/2.2/answers/"+e.join(";")+"/comments?page="+d+"&pagesize=100&order=asc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(d){answers.push.apply(answers,d.items),answers_hash=[],answer_ids=[],d.items.forEach(function(e){e.comments=[];var f=+e.share_link.match(/\d+/);answer_ids.push(f),answers_hash[f]=e}),d.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(d){d.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),d.has_more?getComments():more_answers?getAnswers():process()}})}getAnswers();var SCORE_REG=function(){var d=String.raw`h\d`,e=String.raw`\-?\d+\.?\d*`,f=String.raw`[^\n<>]*`,g=String.raw`<s>${f}</s>|<strike>${f}</strike>|<del>${f}</del>`,h=String.raw`[^\n\d<>]*`,j=String.raw`<[^\n<>]+>`;return new RegExp(String.raw`<${d}>`+String.raw`\s*([^\n,]*[^\s,]),.*?`+String.raw`(${e})`+String.raw`(?=`+String.raw`${h}`+String.raw`(?:(?:${g}|${j})${h})*`+String.raw`</${d}>`+String.raw`)`)}(),OVERRIDE_REG=/^Override\s*header:\s*/i;function getAuthorName(d){return d.owner.display_name}function process(){var d=[];answers.forEach(function(n){var o=n.body;n.comments.forEach(function(q){OVERRIDE_REG.test(q.body)&&(o="<h1>"+q.body.replace(OVERRIDE_REG,"")+"</h1>")});var p=o.match(SCORE_REG);p&&d.push({user:getAuthorName(n),size:+p[2],language:p[1],link:n.share_link})}),d.sort(function(n,o){var p=n.size,q=o.size;return p-q});var e={},f=1,g=null,h=1;d.forEach(function(n){n.size!=g&&(h=f),g=n.size,++f;var o=jQuery("#answer-template").html();o=o.replace("{{PLACE}}",h+".").replace("{{NAME}}",n.user).replace("{{LANGUAGE}}",n.language).replace("{{SIZE}}",n.size).replace("{{LINK}}",n.link),o=jQuery(o),jQuery("#answers").append(o);var p=n.language;p=jQuery("<i>"+n.language+"</i>").text().toLowerCase(),e[p]=e[p]||{lang:n.language,user:n.user,size:n.size,link:n.link,uniq:p}});var j=[];for(var k in e)e.hasOwnProperty(k)&&j.push(e[k]);j.sort(function(n,o){return n.uniq>o.uniq?1:n.uniq<o.uniq?-1:0});for(var l=0;l<j.length;++l){var m=jQuery("#language-template").html(),k=j[l];m=m.replace("{{LANGUAGE}}",k.lang).replace("{{NAME}}",k.user).replace("{{SIZE}}",k.size).replace("{{LINK}}",k.link),m=jQuery(m),jQuery("#languages").append(m)}}
body{text-align:left!important}#answer-list{padding:10px;float:left}#language-list{padding:10px;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="https://cdn.sstatic.net/Sites/codegolf/primary.css?v=f52df912b654"> <div id="language-list"> <h2>Winners by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr></thead> <tbody id="languages"> </tbody> </table> </div><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><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td><a href="{{LINK}}">{{SIZE}}</a></td></tr></tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td><a href="{{LINK}}">{{SIZE}}</a></td></tr></tbody> </table>
void foo(char *c, size_t len)
es zulässig ist, einen Eingabe- / Ausgabepuffer und eine Länge zu verwenden und keinen Rückgabewert zu haben eine Nebenwirkung auf das Objekt, auf das es einen Zeiger hat.Antworten:
Malbolge , 20775 und 2334 Bytes
Wahrscheinlich habe ich niemanden damit geschlagen, aber es hat unglaublich Spaß gemacht, es zu machen.
Probieren Sie es online!
Wenn die Herausforderung nicht irgendwann angehalten werden musste (z. B. eof), wird sie mit 2334 Bytes ziemlich trivial :
Probieren Sie es online!
Erläuterung
Ich wurde gebeten zu erklären, wie das Programm funktioniert. Ich werde die zweite auswählen, da es einfacher ist, sie zu erklären als die erste, aber die Art und Weise, wie diese beiden Arbeiten wirklich ähnlich sind.
Beginnen wir mit der Entschlüsselung des Codes. Da es jemand in den Kommentaren getan hat, bevor ich an der Erklärung gearbeitet habe, rate ich Ihnen dringend, es sich anzusehen.
Es macht das Lesen des Programms nicht einfacher, aber bevor wir direkt in den Code springen, wollen wir uns die Grundlagen von Malbolge ansehen.
Die virtuelle Maschine basiert auf trits ( tri nären Ziffer s ). Jedes Maschinenwort ist zehn Trits breit und liegt zwischen 0 und 2222222222t (= 59048d). Jede Speicherposition enthält ein Maschinenwort; Die Adressen sind ebenfalls ein Maschinenwort breit. Sowohl Daten als auch Code teilen sich den gleichen Speicherplatz.
Es gibt drei Register, von denen jedes ein Maschinenwort enthält, anfangs 0: das Coderegister C, das einen Zeiger auf den Befehl darstellt, der ausgeführt werden soll, das Datenregister D, das zur Datenmanipulation verwendet wird, und den Akkumulator A, der auch von mehreren verwendet wird Anweisungen zum Bearbeiten von Daten.
Wenn der auszuführende Befehl nicht im Bereich 33-126 liegt, stoppt die Ausführung (der Referenzinterpreter hängt in diesem Fall aufgrund eines Fehlers). Andernfalls wird zur Bestimmung des tatsächlich auszuführenden Befehls der Wert, auf den das C-Register zeigt, zum C-Register selbst addiert und das Ergebnis durch 94 geteilt, wobei der Rest genommen wird.
Hier ist eine Tabelle aller möglichen Anweisungen.
Jetzt, da der Code verständlicher ist und tatsächlich erkennbar ist, was dort vor sich geht, können wir zu der allgemeinen Vorstellung springen, was dort vor sich geht.
Ohne Sprünge ist die Programmierung von Malbolge so ziemlich trivial. Wenn die Sprünge verwendet werden, muss eine Entschlüsselungsaufgabe ausgeführt werden, bevor dieser Code erneut ausgeführt wird. Jedes Mal, wenn eine Anweisung ausgeführt wird, wird sie direkt nach der Verschlüsselung abgerufen, sodass sie sich nicht so verhält wie zuvor.
Schauen wir uns zur Veranschaulichung der Problemumgehung das normalisierte Malbolge-Katzenprogramm an:
So wie Sie, in der zweiten Zeile sehen wir haben
/
und<
Anweisungen Umgang mit E / A - Sachen. Unter Verwendung der Tatsache, dass dasC
Register der Befehlszeiger ist, können wir es unter Verwendung einesi
Befehls modifizieren, wodurch effektiv ein Zweig erzeugt wird. Bevor die Verzweigung jedoch ausgeführt wird, müssen Befehle entschlüsselt werden, die nur wenige Zyklen entfernt sind, und die zusammen mit einem Sprung die Ausgabe an und von TTY lesen und schreiben. Da es keinen wirklichen Weg gibt, Konstanten effektiv zu speichern, müssen wir viele nicht zusammenhängende Anweisungen einbetten und ihren Wert verwenden, um andere benötigte Konstanten zu berechnen (unter Ausnutzung der Tatsache, dass Malbolge Programm und Daten nicht trennt).Hinweis: Teile dieser Antwort stammen aus der Esolang-Wiki-Malbolge-Seite, die unter CC0- Link lizenziert ist .
Vielleicht möchten Sie meine andere Antwort mit Seed überprüfen
quelle
Brainfuck , 6 Bytes
Probieren Sie es online!
Diesmal eine wirklich konkurrenzfähige Antwort im Brainfuck. :-) Es liest nur von der Standardeingabe (
,
), schleift dann, während das gelesene Zeichen nicht Null ist ([
), schreibt das gelesene Zeichen zweimal (..
) und liest schließlich ein neues Zeichen (,
), bevor es zum Anfang der Schleife zurückkehrt (]
).Alternative 6-Byte-Antwort:
Probieren Sie es online!
quelle
Seed ,
60133942388438653848 BytesProbieren Sie es online!
quelle
Gelee , 1 Byte
Volles Programm.
Probieren Sie es online!
quelle
Ḥ
ż`F
), während meiner nicht glaube ich)Shakespeare Programming Language ,
139129109106 Bytes-3 Bytes dank Jo King
Probieren Sie es online!
Spricht Warnungen aus und endet mit einem Fehler. Komm damit klar.
quelle
Haskell ,
151413 BytesProbieren Sie es online!
oder leserlich:
Erläuterung: Listen sind
Monad
in Haskell ein und der Bindeoperator>>=
ist einconcatMap
, der eine Funktion ausführt, die ein Element übernimmt und eine Liste für jedes Element der Liste zurückgibt und dann die resultierenden Listen zu einer großen Liste verkettet.Jetzt müssen wir nur noch eine Funktion erstellen, die bei gegebenem Wert zweimal eine Liste dieses Werts zurückgibt. Dies wird erreicht durch
(<$"dd")
: "Nehmen Sie die Liste['d','d']
und ersetzen Sie jedes Element durch das Argument dieser Funktion. Das"dd"
könnte sein." Jeder Ausdruck, der eine Liste von genau zwei Elementen ergibt, aber dies ist der kürzeste, den ich finden konnte.quelle
<$
war etwas, an das ich nie gedacht hätte05AB1E , 2 Bytes
OK ich gebe auf. Ich kann kein 1-Byte-Objekt finden, um das Problem zu lösen. Jede Menge 2-Byte, obwohl ..
Versuchen Sie
ø˜
Online oder versuchenøS
Online .Versuchen Sie
ζ˜
Online oder versuchenζS
Online .Versuchen Sie
€D
Online oder versuchen€Â
Online .Versuchen Sie es
.ι
online.Versuchen Sie es
ºS
online.Versuchen Sie
·S
Online oder versuchenxS
Online .Versuchen Sie es
+S
online.I / O als Liste von Zeichen.
Erläuterung:
Das einzige Programm, das in beiden Versionen von 05AB1E gleich funktioniert. :)
Diese Version funktioniert im Prinzip genauso wie die obige für die neue Version. In der alten Version würden Sie zuerst ein explizites Paar benötigen
‚
, und dann könnten Sie das zip / transponieren. Nurζ
auf einer 1D-Liste wird ein No-Op in der Legacy-Version von 05AB1E sein.In der neuen Version von 05AB1E bleiben alle Werte auf dem Stapel in der Ergebnisliste, wenn eine Zuordnung vorgenommen wird. Während mit der älteren Version von 05AB1E nur der Spitzenwert beibehalten würde. Deshalb funktionieren diese nur in der neuen Version.
Dieses Builtin war in der Vorgängerversion von 05AB1E noch nicht vorhanden.
In der Vorgängerversion von 05AB1E wurde
∞
stattdessen der horizontale Spiegel eingebautº
. Allerdings∞S
funktioniert nicht in der alten Version, weil sie implizit die Liste eine neue Zeile getrennte Zeichenfolge umwandeln würde , bevor es vollständig (Spiegelung Probieren Sie es hier ), wonach dasS
würde auch diese Zeilenumbrüche enthalten.Double ist die Abkürzung für
2*
. In der neuen Version von 05AB1E, die in Elixir integriert ist, funktioniert dies nur mit numerischen Werten. Die Vorgängerversion von 05AB1E wurde jedoch in Python erstellt,2*
funktioniert also ähnlich und wiederholt den Charakter.Da die Vorgängerversion von 05AB1E in Python erstellt wurde,
"a"+"a"
führt dies erneut zu"aa"
, wohingegen das+
nicht zum Anhängen von Zeichenfolgen in der neuen Version verwendet werden kann. (PS: Es gibt einen Anhang für Strings, der in beiden Versionen funktioniert.«
Wenn Sie jedoch zwei Listenargumente angeben, werden diese miteinander verkettet, anstatt die einzelnen Strings an denselben Indizes wie im obigen Programm zusammenzuführen. ( Versuchen Sie es hier ).)quelle
ζ˜
für moderne 05AB1E.ø˜
, also habe ich es auch nicht hinzugefügt. Ich habe es hinzugefügt (sowieøS
/ζS
/xS
).Pyramidenschema ,
229 218213 BytesProbieren Sie es online!
Dies kann definitiv kürzer sein. Die Eingabe erfolgt über Kommandozeilenargumente. Dies entspricht im Wesentlichen:
Mit ein paar Einschränkungen, wie das Drucken tatsächlich sowohl im Schleifenzustand als auch im Schleifenkörper gehandhabt wird.
Alternative 215 byter:
Probieren Sie es online!
quelle
set
können verschoben und verlassen werden, ohne etwas zu stören. Probieren Sie es online!Gelee , 1 Byte
Ein volles Programm druckt das Ergebnis aus.
Probieren Sie es online!
Wie?
Verwendet eine
Fehlerfunktion... Jellys"doppeltes" Atom
Ḥ
wird mit Pythons implementiert*
und vektorisiert, während Jellys Zeichenlisten (die einzigen "Zeichenfolgen") als Listen von Python-Zeichenfolgen implementiert werden, die normalerweise nur ein Zeichen lang sind - das heißt bis wir erkennen, dass in Python'blah'*2='blahblah'
...quelle
ḤṾV
$ echo -n "Ḥ" | hexdump -C
<newline>00000000 e1 b8 a4 |...|
af
,Ḥ
ist nur eine visuelle Darstellung dieses Byte findet Jelly Code-Seite (auch in der Kopfzeile der Post verbunden ist ).Gelee, 1 Byte
Probieren Sie es online!
Entschuldigen Sie meine Unerfahrenheit, ich fange gerade erst mit Jelly an. Ich glaube, es passiert, dass wir eine dyadische Kette definiert haben, die ein einzelnes Argument sowohl als linkes als auch als rechtes Argument behandelt. In diesem Fall besteht die Kette aus "zip; interleave x and y", wobei die Eingabezeichenfolge mit sich selbst verschachtelt wird.
Jemand hat bereits eine 1-Byte-Jelly-Lösung veröffentlicht, daher hoffe ich, dass es keine schlechten Manieren sind, meine zu veröffentlichen.
quelle
Python,
3425 BytesProbieren Sie es online! Eine andere, die eine Zeichenfolge anstelle einer Liste von Zeichen zurückgibt:
Probieren Sie es online!
quelle
lambda i:sum(zip(i,i),())
sollte für -9 tun.for i in input():print(i,end=i)
lambda i:''.join(c*2 for c in i)
32 Bytes, gibt aber eine Zeichenfolge und keine Liste zurücklambda i:''.join(c*2for c in i)
PowerShell ,
292321 Byte-6 Bytes dank Andrei Odegov
-2 Bytes dank mazzy
Probieren Sie es online!
Nimmt Eingaben über Splatting entgegen und macht es im Wesentlichen zu einer Zeichenfolge
quelle
8088 Assembly, IBM PC DOS,
1610 BytesAssemblierter Byte-
xxd
DumpZerlegte Auflistung:
Standalone-PC-DOS-Programm. Eingabe von
STDIN
, Ausgabe an Konsole.Interaktive Konsoleneingabe:
Eingabe per Pipe:
Ursprüngliche 16-Byte- Antwort:
Assemblierter Byte-
xxd
DumpZerlegte Auflistung:
Standalone-PC-DOS-Programm. Eingabe über Kommandozeile, Ausgabe an Konsole.
quelle
LODSW
das führende Leerzeichen (20H
), aus dem heraus,81H
inAH
das natürlich das Chaos gerät,LOOP
wenn das inCH
... Scheiße ist.sed ,
108 BytesProbieren Sie es online!
Vielen Dank an @manatwork für -2 Bytes.
quelle
s/./&&/g
.JavaScript (Node.js) , 22 Byte
Nimmt die Eingabe als Array von Zeichen.
Probieren Sie es online!
JavaScript (ES6), 26 Byte
Übernimmt die Eingabe als Zeichenfolge.
Probieren Sie es online!
Alternative Version von @PabloLozano vorgeschlagen:
Probieren Sie es online!
Genauso lange dauert es, es rekursiv zu machen:
Probieren Sie es online!
quelle
s=>s.replace(/./gs,c=>c+c)
so dass.
auch Spiele newlinesjoin('')
sollten sich darum kümmern. Beim zweiten Gedanken kann dies die Ausgabe auf eine nicht standardmäßige Weise erhöhen, so dass sie möglicherweise nicht gültig ist.["aa","bb","cc"]
ist eine Liste von Zeichenfolgen, jedoch weder eine Zeichenfolge noch eine Liste von Zeichen für sich. Das Hinzufügen oder Reduzieren eines Joins zu einer Liste von Zeichen ist zulässig, muss jedoch auf die Byteanzahl angerechnet werden.Haskell , 8 Bytes
Probieren Sie es online!
Beliebige zweistellige Zeichenfolge funktioniert anstelle von
"x2"
.quelle
Brachylog , 2 Bytes
Probieren Sie es online!
Erläuterung
quelle
Befunge-98 (PyFunge) , 6 Bytes
Probieren Sie es online!
quelle
C (gcc) , 40 Bytes
Probieren Sie es online!
Angenommen, es
t
handelt sich um einen Puffer, der groß genug ist, um die Ausgabe zu speichern.Wahrscheinlich nicht standardkonform, aber es funktioniert mit TIO.
quelle
J ,
63 Bytes-3 Bytes dank Richard Donovan
Probieren Sie es online!
K (oK) ,
84 Bytes-4 Bytes dank ngn!
Probieren Sie es online!
quelle
{2}#
APL (dzaima / APL) , 2 Byte SBCS
Anonyme implizite Präfixfunktion.
Probieren Sie es online!
⌿
ist "replizieren" :-)quelle
Haskell , 15 Bytes
Hier
(:)<*>pure
nimmt ein Argument und gibt eine Liste zurück, die dieses Argument zweimal enthält. Dann>>=
ordnet diese Funktion über jeden Eintrag einen der Eingabeliste (die eine Zeichenfolge in unserem Fall ist) und flacht das Ergebnis (eine Liste von Listen) zurück in eine Liste.Probieren Sie es online!
quelle
Rust ,
8346 BytesProbieren Sie es online!
Ich mag das nicht, aber es betrügt nicht .
quelle
Labyrinth , 12 Bytes
Probieren Sie es online!
Ich habe gerade diese Sprache entdeckt, damit diese Antwort deutlich verbessert werden kann ...
quelle
","
anstelle von"",
), ich habe jetzt eine elf geschafft - könnte es eine zehn oder eine bessere geben?Stax , 2 Bytes
Führen Sie es aus und debuggen Sie es unter staxlang.xyz!
Kopieren. Postleitzahl. Impliziter Druck.
quelle
Retina , 4 Bytes
Probieren Sie es online!
Entspricht der leeren Zeichenfolge (dh der Position vor / nach jedem Zeichen) und fügt die Zeichenfolge zwischen dieser und der vorherigen Übereinstimmung ein (die immer genau das vorherige Zeichen ist; mit Ausnahme der ersten Übereinstimmung, bei der nichts ausgeführt wird).
quelle
Java 8, 27 Bytes
Probieren Sie es online aus.
Die alten 31 Bytes haben geantwortet, bevor die Regeln geändert wurden:
HINWEIS: Der Vorschlag von @EmbodimentOfIgnorance (
\n|.
anstelle von(?s).
wurde zurückgesetzt, da er fehlschlägt, wenn die Eingabe enthält\r
. Vielen Dank für die Meldung an @ OlivierGrégoire .Probieren Sie es online aus.
Erläuterung:
Regex Erklärung:
quelle
(?s).
kann ersetzt werden durch\n|.
\n|.
Version funktioniert bei der Eingabe nicht richtig"\r"
. Die(?s).
Version funktioniert jedoch korrekt mit\r
.\n
es druckbar ist, aber nicht zum ASCII-Druckbereich gehört.Pyth , 2 Bytes
Probieren Sie es online!
.i
Verschachtelt zwei Kopien der Eingabe. Die Eingabe ist implizit, also wäre eine "vollständige" Version dieses Programms.iQQ
, inQ
der sich die Eingabe des Programms befindet.quelle
MarioLANG ,
23 2017 BytesProbieren Sie es online!
Im Gegensatz zu Brainfuck gibt MarioLANG bei EOF -1 zurück, daher müssen wir den gelesenen Wert erhöhen, bevor wir ihn mit Null vergleichen, und dann vor dem Drucken dekrementieren. Dies ist wahrscheinlich die kürzestmögliche Antwort in MarioLANG.
quelle
Brain-Flak , 48 Bytes
Probieren Sie es online!
Dieser Code besteht aus zwei Hauptabschnitten. Der erste kehrt die Zeichenfolge einfach um:
Die zweite ist nahezu identisch, sie kehrt die Zeichenfolge um und verdoppelt die vorhandenen Zeichen
Der Grund, warum wir die Dinge umkehren müssen, ist, dass wir jedes Element der Zeichenketten berühren müssen, um die Ausgabe zu machen. Da Brain-Flak ein Stapelmodell verwendet, bedeutet das Berühren jedes Zeichens, alle Elemente zu platzieren und zu schieben. Aufgrund der FIFO-Art eines Stapels bedeutet dies, dass Sie die Zeichenfolge jedes Mal umkehren, wenn Sie dies tun. Das Umkehrproblem ist in Brain-Flueue unten nicht vorhanden.
Brain-Flueue , 28 Bytes
Probieren Sie es online!
Da die Warteschlangen an erster Stelle stehen, müssen wir in Brain-Flueue nur die gesamte Zeichenfolge durchlaufen, um jedes Zeichen an der richtigen Stelle zu verdoppeln. Dies macht es jedoch schwieriger, den gesamten Stapel zu durchlaufen. In Brain-Flak könnten wir jedoch mit einer Warteschlange einfach so weit gehen, bis die Stapelhöhe Null ist, und durch Drücken von etwas wird sie am Ende der Warteschlange platziert, wodurch sie im Wesentlichen verloren geht. Stattdessen verwenden wir die zweite Warteschlange, um die Anzahl der Operationen zu verfolgen, die wir benötigen. Dadurch sieht die Hauptschleife wie folgt aus:
Mit dem Inhalt ist die magere
Nur zum Spaß könnten diese beiden Antworten viel kürzer werden, wenn die Eingabe keine Null-Bytes enthält (ASCII-Wert Null).
Brain-Flak , 26 Bytes
Probieren Sie es online!
Brain-Flueue , 14 Bytes
Probieren Sie es online!
quelle