La tarea
En este desafío, su tarea es escribir un código que genere uno de sus anagramas elegidos aleatoriamente con una distribución uniforme, pero nunca debería emitirse.
Elaboración
Sin ninguna entrada, su programa debería generar cualquiera de los anagramas de su código fuente. Su programa nunca debería generar su propia fuente tal como es, es decir, nunca debería ser una quine.
Entrada
Su programa no debe tomar ninguna entrada. Sin embargo, si su idioma requiere entrada como una necesidad, puede suponer que se le dará minúscula a
. Sin embargo, no debe usar la entrada de ninguna manera.
Salida
Su programa puede generar resultados de cualquier manera, excepto escribirlo en una variable. Se permite escribir en archivos, consolas, pantallas, etc. La función también return
está permitida.
Reglas Adicionales
El código fuente de su programa debe tener al menos 3 caracteres (no 3 bytes).
El código fuente de su programa debe tener al menos 3 anagramas posibles (excluyéndose a sí mismo). Por ejemplo,
aab
no cuenta como un envío válido ya queaab
solo tiene dos anagramas distintos deaab
(baa
yaba
).Su programa no debe producir ningún error.
Su programa debe generar sus anagramas exactamente .
Se aplican las lagunas estándar y las reglas de quine estándar .
Ejemplo
Supongamos que el código fuente de su programa es abc
. Debería generar aleatoriamente cualquiera de los siguientes (con distribución uniforme):
acb
bca
bac
cba
cab
Y, nunca debería salir abc
.
Criterio ganador
Este es el código de golf , por lo que gana el código más corto en bytes. En caso de empate, ¡la solución que se publicó anteriormente gana!
fuente
Respuestas:
Jalea , 15 bytes
Solo para comenzar las cosas; esto es casi seguro vencible. Esto es básicamente una combinación de un constructor universal de quine y una función "elegir una permutación aleatoria que no sea la entrada"; lo último puede ser mejorable, lo primero es casi seguro.
Explicación
Constructor universal de quine
Esto puede verse como una quine si se ejecuta solo. También es un quine apropiado según la mayoría de las definiciones que conozco; no lee su propia fuente (más bien, contiene un literal que es "evaluado" y se le da una copia de sí mismo como argumento), puede llevar una carga útil (como se ve aquí) y el
v
exterior de la cadena literal está codificado por elv
interior.Elige un anagrama al azar
Esto es realmente ineficiente en una cadena de este tiempo, por lo que no he podido probar el programa en su conjunto, pero lo he probado en cadenas más cortas y parece funcionar correctamente.
fuente
Q
. Sin embargo, creo que puede cambiar este método de "todas las permutaciones" con uno "aleatorio" utilizandoẊ⁼¿
, guardando un byte y permitiendo que funcione en TIO.CJam , 17 bytes
Esto no va a terminar pronto, por lo que esta vez no habrá un enlace TIO.
Como consuelo, aquí hay una solución de 20 bytes que termina muy rápidamente:
Pruébalo en línea!
Explicación
En cambio, la solución de 20 bytes baraja el código fuente hasta que sea diferente del original.
fuente
Python 2, 117 bytes
Sorprendentemente, esta solución es más corta de lo que esperaba. Baraja el código fuente, hasta que difiere del original.
-2 bytes, gracias a @ mbomb007
-3 bytes, gracias a @Wondercricket
Pruébalo en línea
Esta es una de las quines básicas en Python, que he modificado
La generación del anagrama se realiza mediante un módulo aleatorio.
Donde R contiene el código fuente
Se necesitaban comillas triples ya que me vi obligado a mantener los códigos de línea reales en código. Los anagramas tendrán 3 líneas de todos modos.
fuente
exec s
en lugar deexec(s)
str
es inmutable, puede guardar bytes haciendoL=R
y usandosample
enL
lugar de usarshuffle
enlist
. repl.it . La idea está tomada de esteJava 7,
376428426428 bytes+52 y +2 bytes para dos correcciones de errores. No estaba comprobando (correctamente) si la cadena de generación aleatoria era igual al código fuente original. Las posibilidades de esto son astronómicas pequeñas considerando la cantidad de personajes involucrados, pero tengo que validarlo independientemente de cumplir con las reglas del desafío.
Mi primera respuesta quine en Java ...
Pruébalo aquí.
Puede eliminar ambos
Collections.shuffle(l)
y agregarlos!
delante de ambosx.equals(s)
para verificar que la salida realmente sea igual al programa:Pruébelo aquí.
Explicación:
String s
contiene el código fuente sin formato.%s
se utiliza para ingresar esta cadena en sí misma con els.format(...)
.%c
,%1$c
y34
se usan para formatear las comillas dobles.s.format(s,34,s)
lo pone todo juntoY esta parte del código es responsable de generar un anagrama aleatorio:
fuente
05AB1E , 22 bytes
Esto crea una lista que es demasiado grande para TIO, por lo que el enlace usa una cadena más pequeña, pero la idea es la misma.
Pruébalo en línea!
fuente
Javascript (ES6), 128 bytes
Utiliza sort () que devuelve aleatorio -1,0 o 1 para barajar la salida
fuente
Bash,
2796 bytesfold
divide el código en líneas,shuf
baraja las líneas ytr
vuelve a armar el códigosolucionó el problema de que se produjera, ahora nunca se generará
Pruébalo en línea!
fuente
$0
parece una violación de "Su programa no debe tomar ninguna entrada".