Salida de un carácter aleatorio para cada carácter del código fuente (como se ilustra a continuación). La probabilidad de cada carácter es su frecuencia en el código fuente original. Por lo tanto, la salida será un código fuente falso parecido a una quine.
Especificación
- Restricciones
- Se aplican restricciones de quine estándar . No hay programas o funciones vacías. Además, no leer su propia fuente.
- Salida
- El número de caracteres de salida debe ser exactamente el número de caracteres en el código fuente
- Cada carácter de salida debe elegirse aleatoriamente
- La probabilidad de elegir cualquier personaje es igual a
(occurrences in source) / (length of source)
- Esto significa que incluso una solución unaria necesita elegir 'al azar' 1con probabilidad
1
. Lo que quiere decir que la salida no puede ser codificada.
- Victorioso
- Este es el código de golf, por lo que gana menos bytes
Ejemplo
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%
Respuestas:
CJam , 14 bytes
Pruébalo en línea!
Explicación
Cada personaje aparece exactamente dos veces, por lo que las probabilidades de los personajes deben ser todas iguales.
fuente
Jalea , 13 bytes
Pruébalo en línea!
Cómo funciona
fuente
Perl, 59 bytes
Utilicé una quine existente como base y la modifiqué para imprimir caracteres aleatorios del contenido de origen.
Uso
Guardar como
faux-source-code.pl
y ejecutar usando:Produce algo como lo siguiente:
En una breve prueba, ~ 3% de los resultados del programa con
eval
éxito. No estoy seguro de lo que dice eso sobre Perl ...fuente
eval
! ¡Buena esa! ;-)'
oq//
,q{}
etc.)!Japt , 22 bytes
¡Pruébalo en línea!
Cómo funciona
fuente
Pyth, 16 bytes
Pruébalo en línea!
Contiene cada char dos veces, por lo tanto, la probabilidad es la misma que si cada uno estuviera allí solo una vez.
fuente
PHP,
71140110124140120 bytescorre con
php -d
ord
(la misma probabilidad que si doblara la cadena y agregue dos comillas);
Posiblemente se pueda jugar más, pero mis intentos de evaluar fueron inútiles hasta ahora.
Probablemente no iré más profundo aquí.
fuente
The probability of each character is its frequency in the original source code.
Puedo estar equivocado, pero no parece que esta entrada cumpla con este requisito.syntax error, unexpected '<'
. Pero no estoy familiarizado con PHP, ¿cómo pruebo esto?php
ophp-cgi
sin marcas. Quizás puedas usar un heredoc.<?
para usar con-d
.Python 2, 88 bytes
Todo el mérito real para llegar hasta aquí va a mbomb007: gracias por su ayuda (y el puntero sobre las barras invertidas)
fuente
n
caracteres largos), necesita imprimirn
caracteres aleatorios. Donde la probabilidad de quec
se elija un símbolo es igual a(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
. Desearía haber pensado en eso.Ruby, 47 bytes
Esto se basa en la
eval
quine estándar :Es un byte más largo que el quine más corto, pero generalmente es la mejor opción para los quines generalizados, ya que cualquier cálculo realizado en la cadena de código fuente no necesita duplicarse. Mientras que en el quine habitual, cada cálculo adicional debe ir dentro y fuera de la cadena principal, solo se necesita dentro de la cadena principal para este tipo de quine.
En cuanto a lo que realmente hace el código: después de obtener una cadena que representa todo el código fuente, simplemente seleccionamos un carácter aleatorio (seleccionando un índice aleatorio) 47 veces e imprimimos cada carácter por separado.
fuente
Wolfram Language / Mathematica, 109 Bytes
salida de muestra:
Oh esos corchetes.
fuente
Jalea, 44 bytes
Espero haber interpretado todas las reglas correctamente (no estoy muy seguro de qué significa "llevar carga" en meta o si es relevante para este desafío).
Pruébalo en Pruébelo TryItOnline
Esto construye una cadena para elegir los caracteres. La cadena inicial tiene todos los caracteres utilizados, excepto las comillas de apertura y cierre. Luego dobla esa cadena y concatena una de cada una de las comillas abiertas y cerradas de los ordinales (de ahí la necesidad de duplicar los otros caracteres). Por último, selecciona repetidamente caracteres aleatorios de la cadena compuesta a la longitud del programa.
fuente
Pyke, 35 bytes
Pruébalo aquí!
Para verificar: elimine el final
H
y la cadena resultante contiene el número correcto de cada carácter (con el extraH
)Esto NO utiliza una quine generalizada o, de hecho, una quine en absoluto. Se basa en poder crear una cadena que contenga todos los caracteres en la fuente. Se debe ser capaz de hacerlo por cualquier código, pero cada personaje aumenta logarítmicamente el tamaño del código. El único número de veces que se permite un personaje en la fuente es 2 o 7
fuente
Ruby,
8167 bytesAhorró un montón de bytes al robar algunos trucos de la solución de Martin
No me di cuenta de que tenías que seleccionar al azar cada vez; Pensé que un barajado haría el truco. Esto probablemente se puede jugar al golf, pero es lo más corto que pude conseguir.
Quine estándar de Ruby con algunas modificaciones para que imprima la cadena mezclada. Estoy triste porque me tomó como quince minutos descubrir las peculiaridades del formato antes de darme cuenta de que de todos modos lo estaba robando inconscientemente.
Creo que la combinación de cuerdas se puede acortar pero no sé cómo; También podría hacer que el formato sea más corto una vez que lo piense. La ayuda sería apreciada.
Pruébalo en línea!
fuente
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 para código de golf pero no quine que toma cualquier cadena
Mientras que para contar caracteres mi solución necesitaba 86:
fuente
f
toma una cadena e imprime a la salida estándar: la cadena puede ser cualquier secuencia de caracteres.rand()%LENGTH_OF_STRING
toma el carácter de acuerdo con la probabilidad de ese carácter con distribución normal proporcionada porrand()
. Tal vez, no entiendo elquine
enfoque para C ...s
solo necesita contenerchar*s="";
. Creo que algo como estochar*s="char*s=l,i;f(){l=i=strlen(s);while(i--)putchar(s[rand()%l]);};+''"+'""'
lo haría (pero no estoy familiarizado con C).JavaScript, 128 bytes
Nota: solo funciona en Firefox debido al uso de
uneval
.Ejecuciones de muestra:
fuente
gtraoan
que es casi un gemido, supongo ..."
Tiene una probabilidad de aparecer?Python 3,
134132 bytesUtilizo todos los caracteres en mi código fuente dentro de la cadena la cantidad correcta de veces, luego multiplico la cadena por dos para incluirla. El programa imprime un carácter aleatorio de esa cadena para cada carácter en el código (la longitud está codificada).
Pruébalo en línea
Evité las barras diagonales inversas como la peste. Tan pronto como el código contenga
\n
o\"
, tiene un problema, porque la cadena aún no contiene barras diagonales inversas, por lo que también debe agregarlas, pero en una cadena separada multiplicada por un número mayor, porque se necesitan dos barras diagonales inversas para representar una (\\
)Salida de ejemplo:
Debo decir que me recuerda a FlogScript.
fuente
PowerShell v2 +, 175 bytes
Quines en PowerShell apesta, porque los delimitadores de reemplazo de cadena
{}
también denotan bucles y demás, por lo que debe usar un montón dechar
s en el-f
operador, que hincha el código.Similar a mi respuesta de Quine en cada línea . Básicamente, hacemos un bucle desde y
0
hasta174
cada iteración recalculamos la quine$d
, la convertimos como unachar
matriz y extraemos unRandom
elemento elegido uniformemente de la entrada. Por definición, esto da probabilidad(occurrences in source) / (length of source)
según sea necesario. Esos personajes están encapsulados en parens y-join
vuelven a unir en una cadena.Ejemplo
(Sí, esa es una nueva línea en la salida: cuando una cadena que contiene una nueva línea es
char
-array'd,`n
se trata como un carácter, ya quechar
-array es solo una matriz de códigos de bytes, por lo que también tiene un 1 / 175o posibilidad de ser seleccionado.)fuente
Dyalog APL , 20 bytes
f←{
...}
define f como(,⎕CR'f')
listified (,
) Carácter C (tabla) R epresentación (⎕CR
) de f ('f'
)[?⍴⍨20]
indexado con ([
...]
) aleatorio hasta (?
) repetirse a sí mismo veces (⍴⍨
) de veinteVamos a ejecutarlo (con un argumento ficticio) algunas veces:
Bien, pero ¿es correcta la distribución? Ejecutemos en 10,000 argumentos ficticios y veamos cuántas veces ocurre cada personaje:
Claramente,
f
y'
ocurre el doble de veces que los otros caracteres, al igual que en el código fuente original.¿Cómo lo hicimos?
⍳1E4
genera los primeros 10,000 enterosf¨
ejecuta f en cada uno de esos números∊
aplana todas las pseudoquines en una sola cadena de 200,000 caracteres⌸
es una función de orden superior que para cada carácter único en los datos del lado derecho, alimenta a la función del lado izquierdo el elemento único como argumento izquierdo y los índices donde ese carácter aparece como argumento derecho. La función del lado izquierdo es⍺
argumento izquierdo, es decir, el carácter único,
seguido por1E¯4×
1 × 10⁻⁴ veces⍴⍵
la forma del argumento correcto (los índices de ocurrencia), es decir, cuántas veces ocurreFinalmente, lo
⌸
pone todo junto en una mesa.fuente
C #,
277280268 bytes.Sin golf:
Estoy bastante seguro de que esto funciona correctamente.
Salida de muestra:
fuente
(new Random()).Next(0,134)]
? Ahorraría un par de bytes.C, 136 bytes
Salida de ejemplo:
Este programa genera 136 caracteres al azar.
El código fuente completo (menos "comillas") está contenido en una cadena. El programa determina la probabilidad de generar una comilla como 2/136, de lo contrario, generará uno de los otros 67 caracteres al azar.
Hay dos ocurrencias de cada carácter en la cadena en el programa. La probabilidad de generar un carácter de la cadena es 134/136. La probabilidad de elegir un personaje específico en la cadena es 1/67. Entonces, la posibilidad de generar un carácter en la cadena es 134/136 * 1/67 = 2/136. Hay dos ocurrencias de cada carácter de cadena en el programa, por lo que hay una probabilidad de 1/136 de generar un carácter para cada ocurrencia en el programa.
El orden de los símbolos dentro de la cadena no importa.
fuente