Die Aufgabe
Bei dieser Herausforderung besteht Ihre Aufgabe darin, Code zu schreiben, der eines seiner zufällig ausgewählten Anagramme mit gleichmäßiger Verteilung ausgibt, sich jedoch niemals selbst ausgeben sollte.
Ausarbeitung
Wenn keine Eingabe erfolgt, sollte Ihr Programm eines der Anagramme seines Quellcodes ausgeben. Ihr Programm sollte niemals seine eigene Quelle ausgeben, wie es ist, dh es sollte niemals eine Quine sein.
Eingang
Ihr Programm darf keine Eingaben annehmen. Wenn Ihre Sprache jedoch eine Eingabe erfordert, können Sie davon ausgehen, dass sie in Kleinbuchstaben angegeben wird a
. Sie dürfen die Eingabe jedoch in keiner Weise verwenden.
Ausgabe
Ihr Programm kann auf jede andere Weise ausgegeben werden, außer in eine Variable zu schreiben. Das Schreiben in eine Datei, eine Konsole, einen Bildschirm usw. ist zulässig. Funktion return
ist ebenfalls erlaubt.
Zusätzliche Regeln
Der Quellcode Ihres Programms muss mindestens 3 Zeichen (nicht 3 Byte) enthalten.
Der Quellcode Ihres Programms muss mindestens 3 mögliche Anagramme enthalten (außer sich selbst). Zählt beispielsweise
aab
nicht als gültige Übermittlung, daaab
nur zwei andere Anagramme alsaab
(baa
undaba
) vorhanden sind.Ihr Programm darf keinen Fehler erzeugen.
Ihr Programm sollte seine Anagramme genau ausgeben .
Beispiel
Angenommen, der Quellcode Ihres Programms lautet abc
. Es sollte zufällig eine der folgenden Optionen (mit gleichmäßiger Verteilung) ausgeben:
acb
bca
bac
cba
cab
Und es sollte niemals ausgegeben werden abc
.
Gewinnkriterium
Dies ist Code-Golf , also gewinnt der kürzeste Code in Bytes! Bei einem Unentschieden gewinnt die zuvor veröffentlichte Lösung!
quelle
Antworten:
Gelee , 15 Bytes
Nur um die Dinge in Gang zu bringen; das ist mit ziemlicher Sicherheit schlagbar. Dies ist im Grunde nur eine Kombination aus einem universellen Quine-Konstruktor und einer Funktion "Wählen Sie eine andere zufällige Permutation als die Eingabe". Letzteres mag verbesserungsfähig sein, Ersteres ist es mit ziemlicher Sicherheit.
Erläuterung
Universeller Quine-Konstruktor
Dies kann als Quine angesehen werden, wenn es von selbst ausgeführt wird. Nach den meisten Definitionen, die ich kenne, ist es auch eine richtige Quine. Es liest keine eigene Quelle (vielmehr enthält es ein Literal, das "ausgewertet" wurde, und erhält eine Kopie von sich selbst als Argument), es kann eine Nutzlast (wie hier zu sehen!) und die
v
Außenseite der Zeichenfolge tragen Das Literal wird vonv
innen codiert .Wähle ein zufälliges Anagramm
Dies ist für eine so lange Zeichenfolge wirklich ineffizient, sodass ich das Programm nicht als Ganzes testen konnte, aber ich habe es für kürzere Zeichenfolgen getestet und es scheint korrekt zu funktionieren.
quelle
Q
. Ich glaube , Sie können jedoch mit diesen „alle Permutationen“ Methode ändern eines „Shuffle“ eine VerwendungẊ⁼¿
, ein Byte - Speichern und gleichzeitig soll es an die Arbeit auf TIO ermöglicht.CJam , 17 Bytes
Dies wird nicht in Kürze abgeschlossen sein, daher gibt es diesmal keinen TIO-Link.
Als Trost ist hier eine 20-Byte-Lösung, die sehr schnell endet:
Probieren Sie es online aus!
Erläuterung
Die 20-Byte-Lösung mischt stattdessen den Quellcode, bis er sich vom Original unterscheidet.
quelle
Python 2, 117 Bytes
Überraschenderweise ist diese Lösung kürzer als ich erwartet hatte. Mischt den Quellcode, bis er vom Original abweicht.
-2 Bytes, dank @ mbomb007
-3 Bytes, dank @Wondercricket
Probieren Sie es online aus
Dies ist eine der grundlegenden Quines in Python, die ich geändert habe
Das Erzeugen eines Anagramms erfolgt durch ein Zufallsmodul
Wobei R den Quellcode enthält
Es wurden dreifache Anführungszeichen benötigt, da ich gezwungen war, die tatsächlichen Lineseparatoren im Code zu belassen. Anagramme haben sowieso 3 Zeilen.
quelle
exec s
stattexec(s)
str
unveränderlich ist, können Sie Bytes speichern,L=R
indem Siesample
on ausführen und verwenden,L
anstattshuffle
on zu verwendenlist
. repl.it . Die Idee stammt aus diesem StackoverflowJava 7,
376428426428 Bytes+52 und +2 Bytes für zwei Fehlerkorrekturen. Ich habe nicht (korrekt) überprüft, ob der zufällig generierte String dem ursprünglichen Quellcode entspricht. Die Chancen dafür sind angesichts der Anzahl der beteiligten Zeichen astronomisch gering, aber ich muss es validieren, unabhängig davon, ob ich die Herausforderungsregeln einhalte.
Meine erste Quine- Antwort in Java.
Probieren Sie es hier aus.
Sie können beide entfernen
Collections.shuffle(l)
und!
vor beiden hinzufügenx.equals(s)
, um zu überprüfen, ob die Ausgabe tatsächlich dem Programm entspricht:Probieren Sie es hier aus.
Erläuterung:
String s
enthält den unformatierten Quellcode.%s
wird verwendet, um diesen String mit dem in sich selbst einzugebens.format(...)
.%c
,%1$c
Und die34
werden verwendet , um die doppelten Anführungszeichen zu formatieren.s.format(s,34,s)
fasst alles zusammenUnd dieser Teil des Codes ist für die Ausgabe eines zufälligen Anagramms verantwortlich:
quelle
05AB1E , 22 Bytes
Dadurch wird eine Liste erstellt, die für TIO zu groß ist. Daher verwendet der Link eine kleinere Zeichenfolge, aber die Idee ist dieselbe.
Probieren Sie es online aus!
quelle
Javascript (ES6), 128 Bytes
Verwendet sort () und gibt zufällig -1,0 oder 1 zurück, um die Ausgabe zu mischen.
quelle
Bash,
2796 Bytesfold
teilt den Code in Zeilen,shuf
mischt die Zeilen undtr
setzt den Code wieder zusammenDas Problem, dass es sich selbst ausgibt, wurde behoben. Jetzt wird es sich nie selbst ausgeben
Probieren Sie es online aus!
quelle
$0
sieht nach einer Verletzung von "Ihr Programm darf keine Eingaben annehmen" aus.