Complete la cuadrícula al azar

9

Dada entero positivo n < 10, crear una matriz de 2 dimensiones, donde cada lugar se llena con su xy yde índice (comenzando desde la izquierda superior).

Por ejemplo:

Entrada: 2

00 10
10 11

Entrada: 3

00 10 20
01 11 21
02 12 22

Una vez que se crea la cuadrícula, rellena cada índice al azar. Esto puede ser con una 'x' o cualquier otra forma de denotar que se ha llenado un lugar.

Usted determina qué ubicación llenar generando índices aleatoriamente para llenar la matriz. Solo puede llenar n ^ 2 veces, por lo que no puede llenar tantas veces como desee hasta que la matriz esté completamente llena. Al final, la matriz debe llenarse, por lo que debe hacer un trabajo para asegurarse de verificar los números aleatorios que usa para llenar para asegurarse de que el lugar aún no esté lleno.

Actualice o imprima después de cada relleno para mostrar la progresión de las iteraciones de relleno.

Ejemplo para llenar:

Entrada: 2

00 10
01 11

00 se elige al azar:

XX 10
01 11

01 se elige al azar:

XX 10
XX 11

00se elige al azar, pero como ya se ha elegido, un re-roll elige 10:

XX XX
XX 11

11 se elige al azar:

XX XX
XX XX

No imprima los números aleatorios ya que visualmente debería poder ver qué índice se seleccionó. Con esto quiero decir no imprimir " 11se elige al azar:". Está aquí por el bien exploratorio.

Dado que este es el código de golf, el código más corto gana.

Diviértete y feliz golf!

jacksonecac
fuente
No entiendo qué es tan complicado acerca de las instrucciones que son muy claras. "crea una matriz bidimensional donde cada ubicación se llena con su índice xy (comenzando desde la parte superior izquierda)" (No es una cadena imprimible). "Actualice o imprima después de cada relleno para mostrar la progresión de las iteraciones de relleno". Debe mostrar la progresión. ¿Por qué ser demasiado específico cuando solo reduce cuán creativos pueden ser los usuarios con sus soluciones?
jacksonecac
Es n>= 10posible? (debe comenzar a conocer la longitud máxima para completar correctamente los primeros 0). El relleno para ese caso es un índice a la vez, no 1 dígito a la vez, ¿verdad?
Ton Hospel
@TimmyD Estoy de acuerdo en que esto debería haber pasado más tiempo en el Sandbox simplemente porque para eso es el sandbox, pero para mí las instrucciones son bastante claras sobre lo que se requiere. No es un mal desafío en mi humilde opinión.
ElPedro
@TonHospel Buen punto. Voy a editar para asegurar n <10
jacksonecac
1
Esto se ve mucho mejor. Todavía sacaría las referencias a "El código más corto gana con una bonificación si se usara alguna GUI en lugar de ASCII". Aún no está definido.
Morgan Thrapp

Respuestas:

5

05AB1E , 29 bytes

<ÝDâJU[X¹ä»,XÐÙg#Jþ2ô.R„  :)U

Pruébalo en línea!

Espacio elegido como el carácter para los números eliminados (ya que se ve bien), pero podría reemplazarse con cualquier carácter sin afectar el conteo de bytes.

Explicación

                                # implicit input n
<ÝDâ                            # cartesian product of [0..n-1] and [0..n-1]
    JU                          # join pairs and store in X
      [     XÐÙg#               # loop until there's only spaces left in X
       X¹ä                      # split X into n pieces
          »,                    # join rows by space and columns by newlines and print
                 Jþ             # join X to string and remove all non-digits
                   2ô.R         # split in pieces of 2 and pick a pair at random
                       „  :)    # replace this pair with 2 spaces
                            U   # and store in X
Emigna
fuente
Se ve increíble, pero mientras lo pruebo, ¿parece que no llena todos los cuadrados?
jacksonecac
@jacksonecac: tal como lo entendí, debería llenar aleatoriamente n ^ 2 veces, con la posibilidad de que no se llenen todos los cuadrados si se elige el mismo índice al azar más de una vez. Si eso está mal, tendré que rehacer esto más tarde (tengo que correr ahora)
Emigna
"Usted determina qué ubicación llenar al generar índices aleatoriamente para llenar la matriz. Solo puede llenar n ^ 2 veces, por lo que no puede llenar tantas veces como desee hasta que la matriz esté completamente llena". Entonces debe ser llenado. Aclararé más en la descripción.
jacksonecac
@jacksonecac Gracias por la aclaración. He actualizado la respuesta en consecuencia :)
Emigna
¡Perfecto! Buen trabajo hombre!
jacksonecac
3

Pip , 41 40 38 36 bytes

35 bytes de código, +1 para la -Sbandera.

Pm:J_MM ZCGa{ST:mmR:asX2}M$ALmSK{r}

Toma información del argumento cmdline. Reemplaza con espacio (cualquier otro carácter es posible para +1 byte). Produce iteraciones sucesivas separadas por una sola línea nueva (que es legal pero puede hacer que sea un poco difícil de leer). Pruébalo en línea!

Todo tipo de trucos sucios en este. La versión más corta tiene menos trucos sucios. : ^ (Explicación:

Pm:J_MM ZCGa{ST:mmR:asX2}M$ALmSK{r}
                                     -S flag means nested lists are delimited first
                                       by newlines then by spaces when stringified/printed
           a                         1st cmdline arg
         CG                          Coordinate Grid, a list of lists of coord pairs
        Z                            Zip (transposes so it's x,y instead of row,col)
   J_                                Function that takes a list and joins all items
     MM                              MapMap: map this function to each sublist
                                       This joins a coord pair [1;0] into a string "10"
 Pm:                                 Assign the result to m and print it

                          $ALm       Fold m on Append List: appends all sublists of m
                                       together, making a single list of coord pairs
                              SK     Sort with the following function as key:
                                {r}  Return a random number
                                     We now have a randomly-ordered list of all the
                                       coord pairs from m

            {           }M           Map this function to that list:
             ST:m                    Convert m to string in-place
                 mR:                 Replace (in-place)...
                    a                  the argument (a coord pair)...
                     sX2               ... with two spaces
                                     The map operation returns a list of strings, one for
                                       each step of the process, which are autoprinted
                                       (separated by newlines)
DLosc
fuente
¡Buen trabajo! Eso funciona perfectamente
jacksonecac
En realidad, porque n>=10la aleatorización no funciona correctamente, pero aún así da en el blanco. Para números mayores que 10, solo elimina dónde index_i==index_j. ¿Alguna idea detrás de la razón por la que sería?
Magic Octopus Urn
1
@carusocomputing No estoy completamente seguro, pero probablemente tenga algo que ver con cómo se eligen los índices en la (mi@##Pmi@0)parte. Puse varios hacks de reducción de bytes que dependen de que los índices sean de un solo dígito.
DLosc
##, Entendido. Buen uso de suposiciones. Gracias por la explicación jaja.
Magic Octopus Urn
1

Groovy (202 bytes)

{a->b=new String[a][a];while(b.flatten().flatten().contains(null)){b[(int)(Math.random()*a)][(int)(Math.random()*a)]="XX";b.eachWithIndex{e,i->e.eachWithIndex{f,j->print f?"XX ":"${i}${j} "}println()}}}

Ese formato de salida específico realmente arruinó mi recuento de bytes, pero meh.
Pruébelo: https://groovyconsole.appspot.com/edit/5171951567896576 (+9 bytes para una impresión más bonita)

Sin golf:

y={a->
    b=new String[a][a];
    while(b.flatten().flatten().contains(null)) {
        b[(int)(Math.random()*a)][(int)(Math.random()*a)]="XX";
        b.eachWithIndex{
            e,i->
            e.eachWithIndex{
                f,j->
                print f ? "XX ": "${i}${j} " 
            }
            println()
        }
    }
}
y(4)​

Ejemplo de salida:

00 01 02 XX 
10 11 12 13 
20 21 22 23 
30 31 32 33 
00 01 02 XX 
XX 11 12 13 
20 21 22 23 
30 31 32 33 
XX 01 02 XX 
XX 11 12 13 
20 21 22 23 
30 31 32 33 
XX 01 XX XX 
XX 11 12 13 
20 21 22 23 
30 31 32 33 
XX 01 XX XX 
XX 11 12 XX 
20 21 22 23 
30 31 32 33 
XX 01 XX XX 
XX 11 12 XX 
XX 21 22 23 
30 31 32 33 
XX 01 XX XX 
XX 11 XX XX 
XX 21 22 23 
30 31 32 33 
XX 01 XX XX 
XX XX XX XX 
XX 21 22 23 
30 31 32 33 
XX XX XX XX 
XX XX XX XX 
XX 21 22 23 
30 31 32 33 
XX XX XX XX 
XX XX XX XX 
XX 21 22 23 
30 31 32 33 
XX XX XX XX 
XX XX XX XX 
XX 21 22 23 
XX 31 32 33 
XX XX XX XX 
XX XX XX XX 
XX 21 22 23 
XX 31 32 33 
XX XX XX XX 
XX XX XX XX 
XX 21 22 23 
XX 31 32 33 
XX XX XX XX 
XX XX XX XX 
XX 21 22 23 
XX 31 32 33 
XX XX XX XX 
XX XX XX XX 
XX 21 22 23 
XX 31 32 33 
XX XX XX XX 
XX XX XX XX 
XX 21 22 23 
XX 31 32 33 
XX XX XX XX 
XX XX XX XX 
XX 21 22 23 
XX 31 32 33 
XX XX XX XX 
XX XX XX XX 
XX 21 22 23 
XX 31 32 33 
XX XX XX XX 
XX XX XX XX 
XX 21 22 XX 
XX 31 32 33 
XX XX XX XX 
XX XX XX XX 
XX 21 22 XX 
XX 31 32 33 
XX XX XX XX 
XX XX XX XX 
XX 21 22 XX 
XX 31 32 33 
XX XX XX XX 
XX XX XX XX 
XX 21 22 XX 
XX 31 32 XX 
XX XX XX XX 
XX XX XX XX 
XX XX 22 XX 
XX 31 32 XX 
XX XX XX XX 
XX XX XX XX 
XX XX 22 XX 
XX 31 32 XX 
XX XX XX XX 
XX XX XX XX 
XX XX 22 XX 
XX 31 32 XX 
XX XX XX XX 
XX XX XX XX 
XX XX 22 XX 
XX 31 32 XX 
XX XX XX XX 
XX XX XX XX 
XX XX 22 XX 
XX 31 32 XX 
XX XX XX XX 
XX XX XX XX 
XX XX 22 XX 
XX 31 32 XX 
XX XX XX XX 
XX XX XX XX 
XX XX 22 XX 
XX 31 32 XX 
XX XX XX XX 
XX XX XX XX 
XX XX 22 XX 
XX 31 32 XX 
XX XX XX XX 
XX XX XX XX 
XX XX 22 XX 
XX 31 32 XX 
XX XX XX XX 
XX XX XX XX 
XX XX 22 XX 
XX 31 32 XX 
XX XX XX XX 
XX XX XX XX 
XX XX 22 XX 
XX 31 32 XX 
XX XX XX XX 
XX XX XX XX 
XX XX 22 XX 
XX XX 32 XX 
XX XX XX XX 
XX XX XX XX 
XX XX 22 XX 
XX XX 32 XX 
XX XX XX XX 
XX XX XX XX 
XX XX 22 XX 
XX XX 32 XX 
XX XX XX XX 
XX XX XX XX 
XX XX 22 XX 
XX XX 32 XX 
XX XX XX XX 
XX XX XX XX 
XX XX 22 XX 
XX XX 32 XX 
XX XX XX XX 
XX XX XX XX 
XX XX 22 XX 
XX XX 32 XX 
XX XX XX XX 
XX XX XX XX 
XX XX 22 XX 
XX XX 32 XX 
XX XX XX XX 
XX XX XX XX 
XX XX 22 XX 
XX XX 32 XX 
XX XX XX XX 
XX XX XX XX 
XX XX 22 XX 
XX XX 32 XX 
XX XX XX XX 
XX XX XX XX 
XX XX 22 XX 
XX XX 32 XX 
XX XX XX XX 
XX XX XX XX 
XX XX 22 XX 
XX XX 32 XX 
XX XX XX XX 
XX XX XX XX 
XX XX 22 XX 
XX XX 32 XX 
XX XX XX XX 
XX XX XX XX 
XX XX 22 XX 
XX XX 32 XX 
XX XX XX XX 
XX XX XX XX 
XX XX 22 XX 
XX XX 32 XX 
XX XX XX XX 
XX XX XX XX 
XX XX 22 XX 
XX XX XX XX 
XX XX XX XX 
XX XX XX XX 
XX XX 22 XX 
XX XX XX XX 
XX XX XX XX 
XX XX XX XX 
XX XX 22 XX 
XX XX XX XX 
XX XX XX XX 
XX XX XX XX 
XX XX 22 XX 
XX XX XX XX 
XX XX XX XX 
XX XX XX XX 
XX XX 22 XX 
XX XX XX XX 
XX XX XX XX 
XX XX XX XX 
XX XX 22 XX 
XX XX XX XX 
XX XX XX XX 
XX XX XX XX 
XX XX 22 XX 
XX XX XX XX 
XX XX XX XX 
XX XX XX XX 
XX XX 22 XX 
XX XX XX XX 
XX XX XX XX 
XX XX XX XX 
XX XX XX XX 
XX XX XX XX 
Urna de pulpo mágico
fuente
la matriz debe ser NxN para que sea un cuadrado perfecto.
jacksonecac
@jacksonecac Es, es un 4x4cuadrado indexado 0 . El cuadrado en sí solo está separado por una nueva línea, así como cada iteración está separada por una nueva línea, por lo que la salida se ejecuta un poco.
AdmBorkBork
Si desea delimitadores entre las iteraciones, especifíquelo en el resumen.
Urna mágica de pulpo
Aquí, pruébalo con la nueva línea agregada entre iteraciones: groovyconsole.appspot.com/edit/5171951567896576
Urna de pulpo mágico
Pido disculpas, saqué conclusiones precipitadas. Permítanme analizar esto: D
jacksonecac
1

R, 84 81 74 bytes

Ahora usa una indexación en lugar de cero. Se deshizo de 7 bytes gracias a @Billywob.

N=scan()
m=outer(1:N,1:N,paste0)
for(i in sample(N^2)){m[i]="XX";print(m)}

Ejemplo de salida para N = 3

     [,1] [,2] [,3]
[1,] "11" "12" "XX"
[2,] "21" "22" "23"
[3,] "31" "32" "33"
     [,1] [,2] [,3]
[1,] "11" "12" "XX"
[2,] "21" "22" "23"
[3,] "31" "XX" "33"
     [,1] [,2] [,3]
[1,] "11" "12" "XX"
[2,] "XX" "22" "23"
[3,] "31" "XX" "33"
     [,1] [,2] [,3]
[1,] "11" "XX" "XX"
[2,] "XX" "22" "23"
[3,] "31" "XX" "33"
     [,1] [,2] [,3]
[1,] "XX" "XX" "XX"
[2,] "XX" "22" "23"
[3,] "31" "XX" "33"
     [,1] [,2] [,3]
[1,] "XX" "XX" "XX"
[2,] "XX" "22" "23"
[3,] "XX" "XX" "33"
     [,1] [,2] [,3]
[1,] "XX" "XX" "XX"
[2,] "XX" "XX" "23"
[3,] "XX" "XX" "33"
     [,1] [,2] [,3]
[1,] "XX" "XX" "XX"
[2,] "XX" "XX" "XX"
[3,] "XX" "XX" "33"
     [,1] [,2] [,3]
[1,] "XX" "XX" "XX"
[2,] "XX" "XX" "XX"
[3,] "XX" "XX" "XX"
rturnbull
fuente
¡Buen trabajo! Ve a por ello. ¡Guarda esos bytes!
jacksonecac
Puede guardar algunos bytes utilizando la sustitución directa en lugar de replace:for(i in sample(N^2)){m[i]="XX";print(m)}
Billywob
@Billywob Gracias, he editado el código para incorporar su sugerencia. Gran captura!
rturnbull
0

AWK, 229 bytes

func p(a){for(k=1;k<=m;k++){if(k==a)gsub("[0-9]","X",M[k])
printf"%s",M[k]}}{n=$1;m=n*n
k=1
for(i=0;i<n;i++)for(j=0;j<n;j++){s=k%n==0?k==m?"\n\n":"\n":" "
M[k++]=i j s}p()
for(;z<m;z++){do{y=int(rand()*m+1)}while(M[y]~"X")p(y)}}

Agregué algunos bytes para darle un espacio a la salida entre cada matriz.

Nota: para hacerlo más 'aleatorio' entre ejecuciones, se srand()podría agregar una llamada a 7 bytes adicionales.

Uso y salida después de almacenar el código anterior en FILE:

    awk -f FILE <<< 2

00 01
10 11

XX 01
10 11

XX XX
10 11

XX XX
10 XX

XX XX
XX XX
Robert Benson
fuente
0

PHP, 172 bytes

for(;$x<$s=($a=$argv[1])*$a;)$r[]=$x%$a.($x++/$a^0);echo($c=chunk_split)(join(" ",$r),$a*3);for(;$q<$s;){if($r[$z=rand(0,$s-1)]<X)++$q&$r[$z]=XX;echo$c(join(" ",$r),$a*3);}

Descompostura

for(;$x<$s=($a=$argv[1])*$a;)$r[]=$x%$a.($x++/$a^0); #make the array
echo($c=chunk_split)(join(" ",$r),$a*3); # Output array
for(;$q<$s;)
{
  if($r[$z=rand(0,$s-1)]<X)++$q&$r[$z]=XX; #fill position if it is not XX and raise increment
  echo$c(join(" ",$r),$a*3); #Output array
}
Jörg Hülsermann
fuente
0

Python 2, 190 bytes

from random import *
R=range(input())
G=[(x,y)for x in R for y in R]
def f():print"\n".join(" ".join(["XX","%d%d"%(x,y)][(x,y) in G]for x in R)for y in R)
f()
while G:G.remove(choice(G));f()
Karl Napf
fuente