function answersUrl(a){return"https://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+a+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(a,b){return"https://api.stackexchange.com/2.2/answers/"+b.join(";")+"/comments?page="+a+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(a){answers.push.apply(answers,a.items),answers_hash=[],answer_ids=[],a.items.forEach(function(a){a.comments=[];var b=+a.share_link.match(/\d+/);answer_ids.push(b),answers_hash[b]=a}),a.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(a){a.items.forEach(function(a){a.owner.user_id===OVERRIDE_USER&&answers_hash[a.post_id].comments.push(a)}),a.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(a){return a.owner.display_name}function process(){var a=[];answers.forEach(function(b){var c=b.body;b.comments.forEach(function(a){OVERRIDE_REG.test(a.body)&&(c="<h1>"+a.body.replace(OVERRIDE_REG,"")+"</h1>")});var d=c.match(SCORE_REG);d?a.push({user:getAuthorName(b),size:+d[2],language:d[1],link:b.share_link}):console.log(c)}),a.sort(function(a,b){var c=a.size,d=b.size;return c-d});var b={},c=1,d=null,e=1;a.forEach(function(a){a.size!=d&&(e=c),d=a.size,++c;var f=jQuery("#answer-template").html();f=f.replace("{{PLACE}}",e+".").replace("{{NAME}}",a.user).replace("{{LANGUAGE}}",a.language).replace("{{SIZE}}",a.size).replace("{{LINK}}",a.link),f=jQuery(f),jQuery("#answers").append(f);var g=a.language;g=jQuery("<a>"+g+"</a>").text(),b[g]=b[g]||{lang:a.language,lang_raw:g,user:a.user,size:a.size,link:a.link}});var f=[];for(var g in b)b.hasOwnProperty(g)&&f.push(b[g]);f.sort(function(a,b){return a.lang_raw.toLowerCase()>b.lang_raw.toLowerCase()?1:a.lang_raw.toLowerCase()<b.lang_raw.toLowerCase()?-1:0});for(var h=0;h<f.length;++h){var i=jQuery("#language-template").html(),g=f[h];i=i.replace("{{LANGUAGE}}",g.lang).replace("{{NAME}}",g.user).replace("{{SIZE}}",g.size).replace("{{LINK}}",g.link),i=jQuery(i),jQuery("#languages").append(i)}}var QUESTION_ID=101638,ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",OVERRIDE_USER=34718,answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,<]*(?:<(?:[^\n>]*>[^\n<]*<\/[^\n>]*>)[^\n,<]*)*),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:400px;float:left}table thead{font-weight:800}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="language-list"> <h2>Shortest Solution 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>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody></table><table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody></table>
Antworten:
WinDbg, 1 Byte
Beeindruckend! Niemals eine 1-Byte-Lösung von WinDbg erwartet!
#
Sucht nach einem Demontagemuster. Da jedoch keine Parameter vorhanden sind, wird lediglich die nächste Montageanweisung in dem Speicherauszug / Prozess zurückgegeben, an den Sie angehängt sind. Ich bin mir nicht sicher, wie ich die Anfangsadresse festlegen soll, aber das tut es.Beispielausgabe:
quelle
Java 7,
333027 BytesWeil Java.
quelle
toString
in einer Vorgängerversion dann aber den RückgabetypString
der länger ist alsint
. Speichern Sie die Bytes! :]hashCode()
ist hier eine Abkürzung fürthis.hashCode()
, daher würde es nur als Instanzmethode funktionieren, nicht als statische Methode. In diesem Fall benötigen Sie zusätzlichen Code, um ein Objekt im Aufrufer zu erstellen. Dies ist hier relevant, da es sich um den Code handelt, mit dem ein Objekt erstellt wird, das für den Nichtdeterminismus verantwortlich ist.()->hashCode()
für 14 Bytes. Einfach sagen;)MATLAB, 3 Bytes
why
gibt Antworten auf fast jede Frage. Einige Beispiele:Dies ist kürzer als jede andere
rand
Funktion, die mir einfällt.quelle
R, 1 Byte
Gibt den Quellcode der Funktion und eine Speicherzeigeradresse aus, die sich bei jedem (Neu-) Start von R ändert.
quelle
huh? 0 Bytes
Ein leeres Programm erzeugt weiterhin eine Ausgabe. Die letzten Zeilen des Python-Interpreters, die ausgeführt werden:
Am Ende eines Programms druckt der Python-Interpreter
...
, erstellt / öffnet eine aufgerufene TextdateiNotes.txt
und schreibt einen String, der die aktuelle Uhrzeit vor sich enthält.quelle
Labyrinth , 5 Bytes
Entweder Ausdrucke
0
oder nichts (jeweils 50% Chance).Probieren Sie es online!
Es gibt einen sehr speziellen Fall, in dem Labyrinth ein zufälliges Verhalten aufweist:
Wenn alle diese Bedingungen erfüllt sind, wird die Richtung, in die sich die IP bewegt, (gleichmäßig) zufällig ausgewählt. Der Clou dabei ist, dass diese drei Bedingungen im regulären Kontrollfluss nicht erfüllt werden können, es sei denn, Sie ändern den Quellcode zur Laufzeit.
(Dies mag ein bisschen willkürlich erscheinen, aber es ist tatsächlich das beständigste Verhalten, das ich für diese Bedingungen finden konnte, da normalerweise die Richtung der IP immer von der vorherigen Richtung, ihren Nachbarn und dem Vorzeichen der Stapelspitze abhängt dies schien eine elegante Möglichkeit zu sein, eine Quelle der Zufälligkeit in die Sprache aufzunehmen.)
Mit Hilfe der Source Code Rotation Instructions (
<^>v
) ist es möglich, die IP in diese Situation zu bringen. Ein solches Beispiel ist oben zu sehen. Die IP zeigt zunächst nach Osten und beginnt oben. Dasv
dreht die aktuelle Spalte so, dass wir erhalten:Die IP bewegt sich mit dieser Drehung mit, so dass sie immer noch auf der
v
nach Osten zeigenden . Alle Bedingungen sind jetzt erfüllt, sodass die IP entweder zufällig nach oben oder unten geht. Wenn es hochgeht, wird das Programm sofort beendet. Wenn es nach unten geht, gibt es eine Null aus, dreht die Spalte erneut und endet dann.Es gibt drei andere Programme, die davon Gebrauch machen (eines, das auch druckt
0
, eines, das druckt,00
und eines, das druckt000
):(Tatsächlich gibt es eine Menge mehr als drei andere Programme, weil man auch verwenden könnte
.
anstelle von!
Null - Bytes zu drucken oder ersetzen , dass"
mit einer großen Vielzahl von Befehlen, aber ich glaube , sie alle arbeiten im Wesentlichen gleich.)quelle
Befunge (-93 und -98), 3 Bytes
Die
?
Sende-Ausführung erfolgt in zufälliger Richtung. Wenn es rauf oder runter geht, geht es zurück zum?
und rerolls. Wenn es nach links geht, bricht das Programm den Vorgang ab@
und wird beendet, ohne dass etwas gedruckt wird. Wenn es richtig läuft , wird gedruckt0
(die Ausgabe, die erzeugt wird,.
wenn der Stapel leer ist) und dann auf dem Drucker beendet@
.quelle
.
in dem Programm, das ich zum Testen verwendete, wurde aber irgendwie zu einem,,
als ich es auf PPCG kopierte. Fest.Minecraft,
54 BytesWird verwendet, indem Sie in die Konsole eines Servers oder in einen Befehlsblock eingeben und ihm Strom geben. Kann über die Chat-Oberfläche ausgeführt werden, indem ein vorangestellt wird
/
.Normalerweise tut dies nichts, aber wenn sich ein Spieler mit dem Benutzernamen "8" auf dem Server befindet, werden ihm Bedienerberechtigungen erteilt. Beachten Sie, dass Minecraft normalerweise einen Benutzernamen mit 3 Zeichen erfordert. Vor dieser Einschränkung wurden jedoch einige Konten mit kürzeren Namen erstellt.
Die Version, für die nachgewiesen werden kann, dass sie nicht deterministisch ist, ohne dass einer dieser Benutzernamen oder das Risiko besteht, einem Benutzer Operator-Berechtigungen zu erteilen, ist hier:
Zeigt eine Nachricht für alle an, wobei die Nachricht der Benutzername eines zufälligen Spielers ist. Der
op
Befehl akzeptiert nur ein Zeichenfolgenliteral, kein Skript, das eine Zeichenfolge zurückgibt.Der
me
Befehl würde im ersten Beispiel nicht wirklich funktionieren, sondern angezeigt"<your-username> 8"
. Bei der Ausführung von einem Befehlsblock aus wäre dies nicht deterministisch, da alle Befehlsblöcke den gleichen "Benutzernamen" haben, für die Ausführung von der Chat-Oberfläche/
aus wird jedoch ein zusätzliches Byte benötigt.quelle
/
also nicht in der Byteanzahl enthalten?help
ein Befehlsblock, der 4 Byte umfasst (und keine Raubkopien erfordert).sh + procps, 1 Byte
Dies ist die kürzeste mir bekannte Lösung, die über den Aufruf externer ausführbarer Dateien funktioniert.
procps
ist das verantwortliche Paket für das Melden von Informationen zum aktuellen Systemstatus (ps
und zu Freunden) und wird standardmäßig auf den meisten Linux-Distributionen installiert.w
ist der Befehl mit dem kürzesten Namen und gibt Informationen zu den angemeldeten Benutzern, aber auch einige nicht deterministische Informationen wie die Betriebszeit zurück.quelle
Informieren Sie 7, 6 Bytes
Dies ist kein gültiges Inform 7-Programm, da weder "x" noch "y" definiert wurde. Das wirft also einen Fehler auf.
Einige der Fehlermeldungen von Inform 7 - einschließlich dieser - sind jedoch zufällig angeordnet. Der Text, den es druckt, ist also technisch nicht deterministisch.
Einige mögliche Ausgaben sind:
quelle
JavaScript, 4 Bytes
Eine Funktion, die das aktuelle Datum und die aktuelle Uhrzeit zurückgibt. Ich denke, das ist die kürzeste, die es bekommen wird ...
Erläuterung
Da dies eine Menge Verwirrung darüber zu verursachen scheint, warum es gültig ist, werde ich versuchen, dies zu erklären.
In JavaScript ist ein Funktionseintrag gültig, wenn er einer Variablen zugewiesen und wie eine Funktion aufgerufen werden kann. Diese Funktion ist beispielsweise ein gültiger Eintrag:
Da es sich um eine Funktion handelt, die einer Variablen wie folgt zugewiesen werden kann:
Und laufen Sie dann
f()
so oft wie nötig mit. Jedes Mal wird die aktuelle Datums- / Uhrzeitzeichenfolge zurückgegeben, die vom OP als nicht deterministisch eingestuft wurde.Diese ES6-Pfeilfunktion ist auch gültig:
Es kann mit zugewiesen
f=_=>Date()
und dann mitf()
dem anderen ausgeführt werden.Hier ist ein weiterer gültiger Eintrag:
Warum? Denn genau wie die beiden anderen Einträge kann es mit zugewiesen
f=Date
und dann mit aufgerufen werdenf()
, was genau dasselbe ergibt wie die beiden anderen. Versuch es:Code-Snippet anzeigen
quelle
Date()
, um die Funktion aufzurufen?Date
ist eine Funktion, die, wenn sie ohne Eingaben aufgerufen wird, das aktuelle Datum und die aktuelle Uhrzeit liefert._=>Date()
ist ein eindeutig gültiger Eintrag, der genau dasselbe tut, alsoDate
ein gültiger Eintrag.Date
ich in die JavaScript-Konsole meines Browsers tippe, wird eine deterministische Ausgabe erzeugtfunction Date() { [native code] }
. Sie meinen wahrscheinlichDate()
6 Bytes.Bash (procps-ng), 2 Bytes
$$
ist auch eine Lösung.quelle
w
ist kürzer und kommt auch von procps.Python 2, 11 Bytes
quelle
id(0)
aber. :)Pyth, 2 Bytes
Erläuterung:
Es ist so, dass, wenn
O
es0
als Argument hat, es einfach einen zufälligen Float zwischen0
und zurückgibt1
, exklusiv.Lass es uns nur zum Teufel machen!
Es scheint auch so, als ob dies ein bisschen retro sein kann (dank 34718 / mbomb007):
Pyth, 2 Bytes
Erläuterung:
Versuchen Sie stattdessen diese boooooooooooooooring- Version
>:(
quelle
PowerShell,
42 Bytes(durchgestrichen 4 sieht immer noch aus wie 4 )
Dies ist der Alias für
Get-Process
den die aktuelle Prozessauflistung als Tabelle ausgegeben wird, einschließlich Handles, privatem Speicher, CPU-Zeit usw.Führen Sie es über etwas wie das folgende aus:
quelle
Zsh, 5 Bytes
Druckt die PID.
quelle
Commodore 64 Basic, 4 Bytes
PETSCII-Substitution:
|
=SHIFT+Y
Die Nullseite eines Commodore 64 ist ein Bereich von 256 Byte Speicher, auf den schneller zugegriffen werden kann als auf den Rest des RAM. Folglich verwenden Programme (wie der BASIC-Interpreter) ihn für Daten, auf die häufig zugegriffen wird, und die CPU selbst speichert hier einen Teil ihres internen Zustands. Der Inhalt kann ohne vorherige Ankündigung geändert werden.
Das obige BASIC-Programm, ungolfed, ist z
1 SYS 0
. Ausführung an Speicherplatz 0 übertragen. Dadurch wird die Nullseite als Code ausgeführt. Normalerweise sind die ersten 16 Bytes, wenn der BASIC-Interpreter ein Programm ausführtso
SYS 0
würde führen Sie den folgendenDas Gesamtergebnis besteht darin, die BASIC-
READY.
Eingabeaufforderung auszugeben und die Steuerung an den Benutzer zurückzugeben. Der Speicherort 0x00 ist jedoch das E / A-Richtungsregister der CPU, und der Speicherort 0x01 ist das E / A-Adressregister der CPU. Wenn Sie vor dem Ausführen des Programms Änderungen daran vorgenommen haben, sind die Ergebnisse möglicherweise unvorhersehbar. Sie reichen von der Ausgabe von Datenmüll bis zum Sperren des ComputersHALT
Opcodes). .Alternativ ist ein zuverlässigeres unvorhersehbares Programm das Vier-Byte-Programm
Gibt die seit dem Einschalten des Systems verstrichene Zeit in Sekundenschnelle (1/60 Sekunde) aus.
quelle
05AB1E , 2 Bytes
Probieren Sie es online!
Gibt aktuelle Mikrosekunden von der internen Uhr des ausführenden Computers aus.
Oder Sie könnten so etwas tun ...
05AB1E , 3 Bytes
Probieren Sie es online!
Gibt ein zufällig gemischtes Kleinbuchstaben aus.
Oder das funktioniert auch:
Probieren Sie es online!
Gibt einen zufälligen Buchstaben aus dem Alphabet aus.
Oder das funktioniert auch und ist cooler:
05AB1E , 9 Bytes
Probieren Sie es online!
Gibt nach dem Zufallsprinzip einen der folgenden Werte aus:
quelle
BrainfuckX und Small Script (etc) Polyglot - 2 Bytes
? - Randomisieren Sie den Wert in der aktuellen Zelle
. - Aktuelle Zelle an stdout senden
quelle
C,
2521 BytesDanke an pseudonym117 für das Speichern von 4 Bytes.
Kompiliert mit
gcc -o test lol.c
(ja, ich bin ziemlich originell mit dem Namen meiner Datei ...) und lief mit./test
.Es gibt das aus, was es sagt: Gibt das Zeichen aus
i
, das der zur Laufzeit definierten Speicheradresse von entspricht , daher sollte es nicht deterministisch sein.quelle
&
da der Wert einer Variablen auf dem Stapel nicht definiert ist? 2. Sie haben eine konstante Anzahl von Dingen auf dem Stapel. Ist die Speicheradresse alsoi
konstant?i
wird das, was normalerweise heißtargc
, also hast du recht, es wird immer 1 sein, wenn es nicht mehr Argumente gibt. Ich kann nicht glauben, dass ich mich nicht daran erinnert habe. Ich bin mir immer noch nicht sicher, warum sich der Standort ändert, aber wenn es funktioniert, funktioniert es.putchar
durchreturn
main(){printf("%d");}
Python 2, 29 Bytes
Leider nicht das erste Mal, dass Sie Code auf ein Smartphone schreiben.
quelle
Perl, 5 Bytes
Gibt die Prozess-ID und eine neue Zeile aus.
quelle
Ruby , 3 Bytes
Probieren Sie es online!
Druckt die Prozess-ID.
quelle
Pyke, 1 Byte
Probieren Sie es hier aus!
Gibt die aktuelle Uhrzeit aus
quelle
C89 mit GCC / Clang, 20 Bytes
Die andere C-Lösung schlägt jedes Mal fehl, wenn sie mit GCC oder Clang erstellt wird. Dies jedoch.
Welches sieht aus wie:
Ziemlich viel nicht druckbarer Müll, aber es ist nicht deterministisch!
quelle
puts
ergibt seine Adresse 1, und wenn n 2 ist,puts
ergibt seine Adresse 2). Das Addieren von 1 zu der Adresse von n, die auf ein 4 Byte breites Byte zeigen sollteint
, ergibt eine Junk-Adresse mit einem Junk-Wert, der dort mit einer bestimmten Anzahl von Bytes bis zum nächsten NUL-Byte gespeichert ist. Dieses Verhalten ist zwischen GCC und Clang reproduzierbar und geht völlig über mich hinaus. Ich glaube, ich werde bei StackOverflow nachfragen.n
ist noch initialisiert mit dem, was normalerweise alsargc
das ist0
in Ihrem allgemeinen Testfall, so mit&n
,puts
bekommt einen ganz determinis Zeiger auf ein Byte ‚\ 0‘ in einem leeren String resultierenden (Zeigergröße == integer Größe unter der Annahme , und all das Zeugs) .&n+1
Es ist jedoch die Adresse dessen, was normalerweise aufgerufen wirdargv
(zumindest bei ABIs, die Parameter in umgekehrter Reihenfolge anstelle von Registern an den Stack übergeben und bei einem Stack, der von hohen zu niedrigen Adressen wächst), die unter der Annahme von ASLR alle einen anderen Zeiger haben sollten Zeit.PHP, 12 Bytes
Gibt eine eindeutige ID
583f4da627ee3
basierend auf der aktuellen Zeit in Mikrosekunden aus. ↑quelle
<?=time();
<- 10 Bytes.uniqid()
ist 1'000'000 Mal unbestimmt alstime()
;)Groovy, 9 Bytes
{print{}}
Ausgänge:
Script1$_run_closure1@2c8ec01c
Da es die Speicheradresse des Abschlusses ausgibt, ist es nicht deterministisch.
quelle
groovy Script1.groovy
, bekomme ich eine Fehlermeldung:Ambiguous expression could be either a parameterless closure expression or an isolated open code block;
. Wie verwende ich das?Emotinomicon, 15 Bytes
Erläuterung:
quelle
Borland C unter Windows, 12 Byte
Ich habe es umgeschrieben, weil sie sagen, dass es möglich ist, eine Funktion zu verwenden. Der Compiler hat das Argument nicht überprüft, also kompilieren Sie es. Aber setzt sehen eine Adresse "niemand" wissen und beginnen zu drucken, an welcher Stelle diese Adresse, bis das Byte 0x00 finden. Es könnte nicht in Ordnung sein, wenn diese Adresse nicht genügend Speicher für das Programm hat, aber hier etwas ausdrucken
quelle
argv
, da der Compiler wahrscheinlich printf aufrufen würde, wobei sich das zweite Argument von main noch in diesem Register befindet. Genau das passiert mit gcc6.2 für Linux: Siehe source + asm im Godbolt-Compiler-Explorer : main berührt RSI vorher nichtcall printf
.argv
ist auf dem Stapel, aber nicht ganz oben. Die Adresse wird jedoch vom Stapel-ASLR beeinflusst, sodass dies funktioniert. Dies würde mit weniger gut funktionieren-m32
. Sie würden wahrscheinlich immer Null erhalten, damain
der Stapel ausgerichtet bleiben muss, damit der Stapelschlitz über der Formatzeichenfolge neuer Stapelspeicher ist, der nie berührt wurde (und wahrscheinlich immer Null ist, da der Kernel Informationslecks vermeidet, indem er stattdessen Seiten auf Null setzt von User-Space-Seiten voller alter Daten).Babysprache , 0 Bytes
Ich habe dies ursprünglich nicht eingereicht, weil ich dachte, dass es die Frage nachdatiert. Ich lag falsch; Die Sprache hatte einen Dolmetscher in der Zeit erstellt. Es ist wahrscheinlich auch die am wenigsten betrügerische 0-Byte-Lösung, die ich gesehen habe (vorausgesetzt, ein 0-Byte-Programm wird angegeben, um genau das zu tun, was das Programm verlangt, und nicht, um bei Golfherausforderungen zu betrügen).
Baby Language wird angegeben, um das gegebene Programm zu ignorieren und etwas nach dem Zufallsprinzip zu tun. (Der auf der Esolang-Seite verlinkte Interpreter generiert ein zufälliges legales BF-Programm und führt es aus.) Das scheint perfekt für diese Herausforderung zu passen.
quelle