Una empresa de lotería quiere generar un número de boleto de lotería aleatorio de 10 caracteres de longitud.
Escriba un código en cualquier idioma para crear un número en el que cada dígito aparezca solo una vez, por ejemplo, 9354716208
en este número todos los enteros del 0 al 9 solo aparecen una vez. Este número debe ser un número aleatorio.
- El número generado debe mostrarse en la pantalla.
- Debe poder generar todas las permutaciones de todos los caracteres permitidos.
- Se requiere que el código sea lo más pequeño posible (en bytes).
Respuestas:
J (4 bytes)
No pude resistirme.
En J, si
F
es diádico,F~ x
es lo mismo quex F x
.fuente
[0..10)
, por lo que básicamente significa una permutación aleatoria de '0123456789'.J, 5 caracteres y APL, 8 caracteres
J
J tiene el operador de reparto incorporado (
?
). Por lo tanto, podemos tomar 10 de 10 (10?10
).APL
APL tiene el mismo operador que desafortunadamente comienza con uno en lugar de cero. Por lo tanto, estamos restando uno de cada número (
1-⍨X
significaX-1
debido al operador de viaje).fuente
10#.
⎕IO←0
para no tener que restar uno. Además, tanto para J como para APL, puede usar conmutar para guardar un byte con?~10
y?⍨10
dado que la aplicación monádica de la función derivada usa su argumento derecho también como argumento izquierdo. Sin embargo, tenga en cuenta que esto hace que el código J sea idéntico al de Marinus .Python 2.7 (
646357)No es una oportunidad aquí en comparación con los lenguajes pesados del operador y debido a la falta de carga aleatoria predeterminada :) Esto es lo más corto que se me ocurrió;
Crea un rango y muestra 10 números de él sin reemplazo.
(Gracias a @xfix por la corrección de formato de importación más corta y a @blkknght por señalar mi rango de muestreo algo complicado)
Python 2.7 (40)
Si lo ejecuta desde el indicador interactivo y puede leer separados por comas, puede reducirlo a 40, pero se siente un poco como romper el espíritu de las reglas;
fuente
from random import*
para guardar un personaje. Esto se parece a mi solución Perl 6, pero más detallado, pero es genial ver que algo como esto puede funcionar en Python, incluso si es más detallado."0123456789"
lugar derange
usarlas y asignarlasstr
.PHP, 29 caracteres
<?=str_shuffle('0123456789');
Con PHP, no se requiere la etiqueta de cierre. Pero si eso va en contra de las reglas, entonces puedes reemplazarlo; con?> para 1 aumento neto.
fuente
Rubí, 18
Ejecute esto en
irb
:Si desea que este sea un programa independiente, con salida para
stdout
(las reglas no parecen requerir esto), agregue estos 4 caracteres al comienzo:fuente
(0..9).to_a
a[*0..9]
.[*0..9].shuffle
en primer lugar?PHP - 37 caracteres
Tenía una solución de 18 caracteres que, en teoría, debería funcionar, pero PHP es extraño.
O, si quieres una respuesta xkcd:
EDITAR: Gracias xfix, ahora es 5 caracteres más corto y completo. EDITAR DE NUEVO: Ejemplo en vivo .
fuente
echo
no necesita parens, y siecho
es la primera declaración en el programa, puede reemplazar<?php echo
con<?=
. Además,join
es un alias paraimplode
.<?=
y?>
. Es un código PHP válido sin esos.echo
tiene la misma longitud<?=
y?>
combinadas, y sin ellas, no funciona en Codepad. Gracias sin embargo. : PPerl 6 (
18 años16 caracteres)Esto genera una matriz que contiene todos los elementos aleatorios (
pick *
) de0
a9
y envía el resultado (print
).Salida de muestra:
fuente
pick
.[~]
(que se analiza como un listop, de acuerdo con la gramática de Perl 6) requiere un espacio en blanco (o paren) después si contiene algún argumento. De lo contrario, el compilador Perl 6 se queja de "dos términos seguidos". No era necesario en versiones anteriores de Perl 6, pero este es el pasado. El Perl 6 todavía se está trabajando.print
lugar desay [~]
y guardar 2 caracteres :)GolfScript, 12 caracteres
Simplemente genera la lista de dígitos (
10,
) y la ordena de{...}$
acuerdo con algunas teclas aleatorias, lo que produce un orden aleatorio de los dígitos.Ejemplos (prueba en línea ):
fuente
9rand
con99rand
(en su mayoría) solucionaría eso;9.?rand
Sería prácticamente perfecto .R (23 caracteres)
Salida de muestra:
fuente
TI-BASIC, 5 bytes
fuente
randIntNoRep(0,9:.1sum(Ans10^(cumSum(1 or Ans
.Octava (14)
randperm
desafortunadamente crea una selección de 1..n, por lo que debe restar 1 al final para obtener 0-9.fuente
En el servidor sql
Ver demo
O algo similar (cortesía de @manatwork) usando recursividad y xml.
fuente
select i+0from(select 0i union select 1union select 2union select 3union select 4union select 5union select 6union select 7union select 8union select 9)f order by newid()for xml path('')
. (Por cierto, gran truco esonewid()
.)with c as(select 0i union all select i+1from c where i<9)select i+0from c order by newid()for xml path('')
.(VALUES (1),(2),...)
Javascript (
797868 caracteres)En lugar de crear una matriz con los números 0-9 y ordenarlos, decidí generar números aleatorios. Cuando apareció un número que aún no estaba en la matriz, lo agregó. Esto se repite diez veces y luego alerta la salida.
for(a="";!a[9];){~a.indexOf(b=~~(Math.random()*10))||(a+=b)}alert(a)
fuente
||
evaluación de cortocircuito en lugar deif
:for(a="";!a[9];){b=Math.floor(Math.random()*10);~a.indexOf(b)||(a+=b)}alert(a)
for(a="";!a[9];){~a.indexOf(b=Math.floor(Math.random()*10))||(a+=b)}alert(a)
for(a="";!a[9];){~a.indexOf(b=~~(Math.random()*10))||(a+=b)}alert(a)
Mathematica, 27
fuente
Shell / Coreutils, 23
fuente
shuf -i0-9|tr -d \\n
shuf -zi0-9
JavaScript, 82 caracteres
EDITAR: Gracias a Rob W , la longitud del código se reduce a 90 caracteres.
EDITAR: Gracias a George Reith , la longitud del código se reduce a 82 caracteres (usando for loop).
Forma bastante directa: elija un elemento aleatorio de la
[0,1,2,3,4,5,6,7,8,9]
matriz y añádalo a la salida, luego reduzca la matriz y vuelva a reproducir.Versión anterior (106 caracteres):
Versión legible:
Mejor versión (90 caracteres):
Última versión (82 caracteres):
JSFiddle: http://jsfiddle.net/gthacoder/qH3t9/ .
fuente
a='0123456789'.split(t=''),l=10;while(l--)t+=a[r=0|Math.random()*l],a.splice(r,1);alert(t)
. Grandes ahorradores:Math.random(x)
===0|x
. Reemplace las llaves y los puntos y comas con comas. Use directamente el resultado de una asignación como valor, en lugar de usar una variable intermedia. Finalmente, inicialice la matriz inicial usando.split(r='')
. Esto es más corto que crear una matriz usando literales de matriz y asignar el valor de cadena en una expresión separada.Math.floor(x) === 0|x
.l=11
y cambiar su condición de bucle while awhile(--l)
a="0123456789".split(t='');for(l=11;--l;t+=a.splice(0|Math.random()*l,1));alert(t)
- Su código encaja perfectamente en los argumentos de inicialización, condición y expresión de bucles for. Lar
variable es redundante.C #, 145 bytes
Sin golf
Golfed
fuente
Enumerable.Range(0,10)
, y no necesita los corchetes en elforeach
bucle.JavaScript (80 caracteres)
JS-Fiddle: http://jsfiddle.net/IQAndreas/3rmza/
fuente
alert("0123456789".split("").sort(n=>.5-Math.random()).join(""))
return
y.5
K / Kona (6)
Al igual que con J,
?
es el operador del acuerdo; las-
fuerzas de los valores que se repiten.fuente
Mathematica 40
El número se crea como una cadena para permitir que se muestre cero como primer carácter, cuando sea necesario.
Ejemplos de salida
Explicación
"0"~CharacterRange~"9"
es la notación infija para `CharacterRange [" 0 "," 9 "]". Cualquiera de estos devuelve la lista, {"0", "1", "2", "3", "4", "5", " 6 "," 7 "," 8 "," 9 "}.RandomSample[list]
por defecto devuelve una permutación de la lista. (También se puede usar para otros tipos de muestreo, cuando se incluyen parámetros. Por ejemploRandomSample[list, 4]
, devolverá una muestra aleatoria de 4 caracteres, sin repeticiones.fuente
Scala, 37
fuente
Adelante, 72
Todavía hay espacio para el golf, tal vez, pero Forth lo hizo difícil. Yo creo que.
fuente
Prolog, 177/302 caracteres
Soy un principiante en Prolog, por lo que probablemente este no sea el código más condensado.
Devoluciones:
Si desea que devuelva un entero:
Devoluciones:
Usando en su lugar:
Da los números en el orden opuesto:
A diferencia de otros códigos publicados, esto devuelve todas las posibilidades (sin repeticiones).
fuente
q / kdb [6 caracteres]
generará 10 números aleatorios únicos.
fuente
√ å ı ¥ ® Ï Ø ¿ , 4 bytes
fuente
Clojure, 42
fuente
Javascript, 83 caracteres
Mientras se ejecuta hasta que la matriz tenga 10 elementos.
Generando un número aleatorio de 0 a 9, luego verifique si la matriz incluye este número y agréguelo a la matriz.
fuente
Esto no es mucho más pequeño que la respuesta de JMK, pero aquí hay una solución C # un poco más pequeña (135):
Compactado (134):
Versión alternativa (135):
Comprimido:
Tienen la misma longitud, pero en realidad solo depende de si desea utilizar la función ForEach de Linq o la función Join de String. Pude eliminar 10 caracteres de longitud al deletrear el rango "0123456789" en una cadena en lugar de usar Enumerable.Range (0, 10).
fuente
LOGOTIPO , 64 caracteres
pick devuelve un elemento aleatorio de la lista suministrada. butmember devuelve la lista con todas las apariciones del elemento especificado eliminado. Nota: No todas las implementaciones de Logo admiten
butmember
comandos.fuente
Raqueta
4543fuente