Geben Sie für jedes Zeichen des Quellcodes ein zufälliges Zeichen aus (siehe Abbildung unten). Die Wahrscheinlichkeit für jedes Zeichen ist die Häufigkeit im ursprünglichen Quellcode. Die Ausgabe wird also ein gefälschter Quellcode sein, der einem Quine ähnelt.
Spezifikation
- Beschränkungen
- Es gelten die Standardbedingungen für Quines . Keine leeren Programme oder Funktionen. Auch keine eigene Quelle lesen.
- Ausgabe
- Die Anzahl der ausgegebenen Zeichen sollte genau der Anzahl der Zeichen im Quellcode entsprechen
- Jedes Ausgabezeichen sollte zufällig ausgewählt werden
- Die Wahrscheinlichkeit, ein beliebiges Zeichen zu wählen, ist gleich
(occurrences in source) / (length of source)
- Dies bedeutet, dass selbst eine unäre Lösung mit hoher 1Wahrscheinlichkeit eine zufällige Auswahl treffen muss
1
. Das heißt, dass die Ausgabe nicht fest codiert werden kann.
- Gewinnen
- Dies ist Codegolf, so dass nur wenige Bytes gewinnen
Beispiel
Program Frequency Probability Possible Output
------- --------- ----------- ---------------
a@!@ a - 1 a - 25% @@a@
! - 1 ! - 25%
@ - 2 @ - 50%
Program Frequency Probability Possible Output
------- --------- ----------- ---------------
caBaDBcDaBDB a - 3 a - 25% aaaBBBBccDDD
B - 4 B - 33%
c - 2 c - 17%
D - 3 D - 25%
Antworten:
CJam , 14 Bytes
Probieren Sie es online!
Erläuterung
Jedes Zeichen erscheint genau zweimal, daher sollten alle Wahrscheinlichkeiten der Zeichen gleich sein.
quelle
Jelly , 13 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
Perl, 59 Bytes
Ich habe ein vorhandenes Quine als Basis verwendet und es modifiziert, um zufällige Zeichen aus dem Quellinhalt zu drucken.
Verwendung
Speichern unter
faux-source-code.pl
und ausführen mit:Erzeugt so etwas wie folgendes:
In einem kurzen Test waren ~ 3% der Ergebnisse des Programms
eval
erfolgreich. Ich bin mir nicht sicher, was das über Perl aussagt ...quelle
eval
! Schön! ;-)'
oderq//
,q{}
etc.)!Japt , 22 Bytes
Testen Sie es online!
Wie es funktioniert
quelle
Pyth, 16 Bytes
versuche es online!
Enthält jedes Zeichen zweimal, daher ist die Wahrscheinlichkeit dieselbe, als ob jedes Zeichen nur einmal darin wäre.
quelle
PHP,
71140110124140120 Bytesrenn mit
php -d
ord
(gleiche Wahrscheinlichkeit, als würde ich die Zeichenfolge verdoppeln und zwei Anführungszeichen hinzufügen);
Kann möglicherweise weiter golfen werden, aber meine Versuche auf eval waren bisher vergeblich.
Ich werde hier wahrscheinlich nicht tiefer gehen.
quelle
The probability of each character is its frequency in the original source code.
Ich kann mich irren, aber es sieht nicht so aus, als würde dieser Eintrag diese Anforderung erfüllen.syntax error, unexpected '<'
. Aber ich bin nicht mit PHP vertraut. Wie teste ich das?php
oderphp-cgi
ohne Flags aufgerufen werden. Vielleicht kannst du einen Heredoc benutzen.<?
zur Verwendung mit-d
.Python 2, 88 Bytes
Der eigentliche Verdienst, so weit zu kommen, geht an mbomb007 - danke für Ihre Hilfe (und den Hinweis auf Backslashes)
quelle
n
zeichenlang) müssen Sien
zufällige Zeichen drucken . Wobei die Wahrscheinlichkeit, dass ein Symbolc
ausgewählt wird, gleich ist(number of times c occurs in your solution) / n
.exec("""s = 'from random import choice; print "".join([choice(s) for c in s])'; exec(s)""")
join
.s='''from random import*;print"".join(choice(s)for c in s+"s='';''exec s''")''';exec s
. Ich wünschte, ich hätte daran gedacht.Ruby, 47 Bytes
Dies basiert auf der Standard-
eval
Quine:Es ist ein Byte länger als das kürzeste Quine, aber normalerweise die bessere Wahl für verallgemeinerte Quines, da die Berechnung der Quellcode-Zeichenfolge nicht dupliziert werden muss. Während im normalen Quine jede zusätzliche Berechnung sowohl innerhalb als auch außerhalb des Hauptstrings erfolgen muss, wird sie für diese Art von Quine nur innerhalb des Hauptstrings benötigt.
Was der Code tatsächlich tut: Nachdem wir eine Zeichenfolge erhalten haben, die den gesamten Quellcode darstellt, wählen wir einfach 47 Mal ein zufälliges Zeichen aus (indem wir einen zufälligen Index auswählen) und drucken jedes Zeichen einzeln aus.
quelle
Wolfram Language / Mathematica, 109 Bytes
Beispielausgabe:
Oh diese eckigen Klammern.
quelle
Jelly, 44 Bytes
Ich hoffe, ich habe alle Regeln richtig interpretiert (ich bin mir nicht ganz sicher, was die "Carry Payload" -Sache in Meta ist oder ob sie für diese Herausforderung überhaupt relevant ist).
Testen Sie es bei TryItOnline
Dadurch wird eine Zeichenfolge erstellt, aus der Zeichen ausgewählt werden können. Die Anfangszeichenfolge enthält alle verwendeten Zeichen außer der Anführungszeichen zum Öffnen und Schließen. Anschließend wird diese Zeichenfolge verdoppelt und jeweils eines der offenen und geschlossenen Anführungszeichen aus Ordnungszahlen verkettet (daher müssen die anderen Zeichen verdoppelt werden). Zuletzt wählt es wiederholt zufällige Zeichen aus der zusammengesetzten Zeichenfolge zur Länge des Programms aus.
quelle
Pyke, 35 Bytes
Probieren Sie es hier aus!
Zur Kontrolle: Entfernen Sie das Finale
H
und die resultierende Zeichenfolge enthält die richtige Nummer für jedes Zeichen (mit dem ExtraH
).Dies verwendet KEIN verallgemeinertes Quine oder überhaupt ein Quine. Es setzt voraus, dass eine Zeichenfolge erstellt werden kann, die alle Zeichen in der Quelle enthält. Dies sollte für jeden Code möglich sein, wobei jedoch jedes Zeichen die Codegröße logarithmisch erhöht. Die einzige Anzahl von Malen, die ein Zeichen in der Quelle erlaubt ist, ist 2 oder 7
quelle
Ruby,
8167 BytesSparte eine Menge Bytes, indem er einige Tricks aus Martins Lösung stahl
Mir war nicht klar, dass du jedes Mal zufällig auswählen musstest; Ich dachte, ein Shuffle würde es schaffen. Dies kann wahrscheinlich Golf gespielt werden, aber es ist das kürzeste, was ich bekommen kann.
Standard Ruby Quine mit ein paar Modifikationen, damit die gemischte Saite ausgedruckt wird. Ich bin traurig, weil es ungefähr fünfzehn Minuten gedauert hat, bis ich festgestellt habe, dass ich es trotzdem unbewusst gestohlen habe.
Ich denke, das Mischen der Saiten kann verkürzt werden, aber ich weiß nicht wie; Ich könnte auch in der Lage sein, die Formatierung zu verkürzen, wenn ich etwas darüber nachgedacht habe. Hilfe wäre dankbar.
Probieren Sie es online!
quelle
64.times{$><<"64.times{$><<.inspect[rand 32]}".inspect[rand 32]}
eval r="47.times{$><<('eval r=%p'%r)[rand 47]}"
C 125 Bytes
C, 60 Bytes für golfenen, aber keinen Quine-Code, der eine Zeichenfolge annimmt
Während zum Zählen der Zeichen meine Lösung 86 benötigte:
quelle
f
nimmt string und druckt zur Standardausgabe: string kann eine beliebige Folge von Zeichen sein.rand()%LENGTH_OF_STRING
nimmt das Zeichen entsprechend der Wahrscheinlichkeit dieses Zeichens mit der von angegebenen Normalverteilung anrand()
. Vielleicht verstehe ichquine
Ansatz für C nicht ....s
muss nur enthaltenchar*s="";
. Ich denke so etwaschar*s="char*s=l,i;f(){l=i=strlen(s);while(i--)putchar(s[rand()%l]);};+''"+'""'
würde es tun (aber ich kenne mich mit C nicht aus).JavaScript, 128 Bytes
Hinweis: Funktioniert aufgrund der Verwendung von nur in Firefox
uneval
.Probeläufe:
quelle
gtraoan
was fast ein Stöhnen ist, denke ich ..."
eine Wahrscheinlichkeit auftauchen?Python 3,
134132 BytesIch verwende jedes Zeichen in meinem Quellcode innerhalb der Zeichenfolge so oft, wie es richtig ist, und multipliziere die Zeichenfolge dann mit zwei, um sich selbst einzuschließen. Das Programm druckt für jedes Zeichen im Code ein zufälliges Zeichen aus dieser Zeichenfolge (die Länge ist fest codiert.)
Probieren Sie es online aus
Ich vermied Rückschläge wie die Pest. Sobald der Code
\n
oder enthält\"
, haben Sie ein Problem, da der String noch keine Backslashes enthält. Sie müssen diese ebenfalls hinzufügen, jedoch in einem separaten String multipliziert mit einer höheren Zahl, da zwei Backslashes erforderlich sind, um einen darzustellen (\\
).Beispielausgabe:
Ich muss sagen, es erinnert mich an FlogScript.
quelle
PowerShell v2 +, 175 Byte
Quines in PowerShell sind zum Kotzen, weil die Trennzeichen für Zeichenfolgenersetzungen
{}
auch Schleifen und so weiter bezeichnen. Daher müssen Sie eine Reihe vonchar
s im-f
Operator verwenden, die den Code aufblähen.Ähnlich wie meine Quine on Every Line- Antwort. Grundsätzlich durchlaufen wir eine Schleife von
0
bis174
und berechnen bei jeder Iteration den Quine neu$d
,char
wandeln ihn in ein -array um und ziehen einRandom
einheitlich ausgewähltes Element aus der Eingabe heraus. Per Definition ergibt dies die(occurrences in source) / (length of source)
erforderliche Wahrscheinlichkeit . Diese Zeichen sind in parens und eingekapselt-join
zu einer Zeichenfolge zusammengefasst.Beispiel
(Ja, das ist eine neue Zeile in der Ausgabe. Wenn eine Zeichenfolge, die eine neue
char
Zeile enthält, -array'd ist ,`n
wird das als Zeichen behandelt, da einchar
-array nur ein Array von Byte-Codes ist, also auch ein 1 / 175th Chance ausgewählt zu werden.)quelle
Dyalog APL , 20 Bytes
f←{
...}
definiere f als(,⎕CR'f')
listified (,
) C HARACTER (Tabelle) R ePresentation (⎕CR
) von f ('f'
)[?⍴⍨20]
indiziert mit ([
...]
) zufälligen bis zu (?
) Wiederholungszeiten (⍴⍨
) von zwanzigLassen Sie es uns ein paar Mal (mit einem Scheinargument) ausführen:
Gut, aber ist die Verteilung korrekt? Lassen Sie es uns mit 10.000 Dummy-Argumenten ausführen und sehen, wie oft jedes Zeichen vorkommt:
Deutlich,
f
und'
doppelt so häufig wie die anderen Zeichen, genau wie im ursprünglichen Quellcode.Wie haben wir das gemacht?
⍳1E4
generiert die ersten 10.000 ganzen Zahlenf¨
Läuft f auf jede dieser Zahlen∊
Fasst alle Pseudo-Quines zu einer einzigen Zeichenfolge mit 200.000 Zeichen zusammen⌸
ist eine Funktion höherer Ordnung, die für jedes eindeutige Zeichen in den Daten auf der rechten Seite das eindeutige Element als linkes Argument und die Indizes, in denen dieses Zeichen vorkommt, als rechtes Argument an die Funktion auf der linken Seite weitergibt. Die linke Funktion ist⍺
linkes Argument, dh das eindeutige Zeichen,
gefolgt von1E¯4×
1 × 10⁻⁴ mal⍴⍵
Die Form des rechten Arguments (die Vorkommensindizes) gibt an, wie oft es vorkommtZum Schluss wird
⌸
alles in einer Tabelle zusammengefasst.quelle
C #,
277280268 Bytes.Ungolfed:
Ziemlich sicher, dass dies richtig funktioniert.
Beispielausgabe:
quelle
(new Random()).Next(0,134)]
Arbeit? Es würde ein paar Bytes sparen.C 136 Bytes
Beispielausgabe:
Dieses Programm gibt 136 Zeichen nach dem Zufallsprinzip aus.
Der gesamte Quellcode (weniger "Anführungszeichen") ist in einer Zeichenfolge enthalten. Das Programm bestimmt die Wahrscheinlichkeit, ein Anführungszeichen als 2/136 auszugeben, andernfalls wird eines der anderen 67 Zeichen zufällig ausgegeben.
Es gibt zwei Vorkommen jedes Zeichens in der Zeichenfolge im Programm. Die Wahrscheinlichkeit, ein Zeichen aus der Zeichenkette auszugeben, beträgt 134/136. Die Wahrscheinlichkeit, ein bestimmtes Zeichen in der Zeichenfolge auszuwählen, beträgt 1/67. Die Wahrscheinlichkeit, ein Zeichen in der Zeichenfolge auszugeben, beträgt 134/136 * 1/67 = 2/136. Es gibt zwei Vorkommen jedes Zeichenstrings im Programm, daher besteht eine Wahrscheinlichkeit von 1/136, dass für jedes Vorkommen im Programm ein Zeichen ausgegeben wird.
Die Reihenfolge der Symbole in der Zeichenfolge spielt keine Rolle.
quelle