Preencha a grade aleatoriamente

9

Dado um número inteiro positivo n < 10, crie uma matriz bidimensional em que cada local seja preenchido com seu xe yíndice (começando no canto superior esquerdo).

Por exemplo:

Entrada: 2

00 10
10 11

Entrada: 3

00 10 20
01 11 21
02 12 22

Depois que a grade for criada, preencha aleatoriamente cada índice. Pode ser com um 'x' ou qualquer outra maneira de indicar que um ponto foi preenchido.

Você determina qual local preencher, gerando índices aleatoriamente para preencher a matriz. Você só pode preencher n ^ 2 vezes para não preencher quantas vezes quiser até que a matriz esteja completamente preenchida. No final, a matriz deve ser preenchida, portanto, você deve fazer algum trabalho para verificar os números aleatórios que você usa para preencher, para garantir que a mancha ainda não esteja preenchida.

Atualize ou imprima após cada preenchimento para mostrar a progressão das iterações de preenchimento.

Exemplo para preenchimento:

Entrada: 2

00 10
01 11

00 é escolhido aleatoriamente:

XX 10
01 11

01 é escolhido aleatoriamente:

XX 10
XX 11

00é escolhido aleatoriamente, mas, como já foi escolhido, um relançamento escolhe 10:

XX XX
XX 11

11 é escolhido aleatoriamente:

XX XX
XX XX

Não imprima os números aleatórios, pois visualmente eu devo ver qual índice foi selecionado. Com isso, quero dizer não imprimir " 11é escolhido aleatoriamente:". Está aqui por uma questão exploratória.

Como esse é o código-golfe O código mais curto vence.

Divirta-se e jogue golfe feliz!

jacksonecac
fonte
Não entendo o que há de tão complicado nas instruções, que são muito claras. "cria uma matriz bidimensional onde cada local é preenchido com seu índice xy (começando no canto superior esquerdo)" (Não é uma string imprimível). "Atualize ou imprima após cada preenchimento para mostrar a progressão das iterações de preenchimento." deve mostrar a progressão. Por que ser excessivamente específico quando apenas restringe como os usuários criativos podem ser com suas soluções?
jacksonecac
É n>= 10possível? (você precisa começar a saber sobre o comprimento máximo para preencher corretamente os zeros à esquerda). O preenchimento desse caso é um índice de cada vez, não um dígito de cada vez, certo?
Ton Hospel
@ TimmyD Concordo que isso deveria ter passado mais tempo na Sandbox simplesmente porque é para isso que serve a sandbox, mas para mim as instruções são bem claras sobre o que é necessário. Não é um mau desafio IMHO.
ElPedro 11/10
@TonHospel Bom argumento. Vou editar para garantir n <10
jacksonecac
11
Isso parece muito melhor. Eu ainda retiraria as referências a "O código mais curto vence com um bônus se alguma GUI foi usada em vez de ASCII". Ainda está indefinido.
Morgan Thrapp

Respostas:

5

05AB1E , 29 bytes

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

Experimente online!

O espaço escolhido como caractere para os números removidos (como parece bom), mas pode ser substituído por qualquer caractere sem afetar a contagem de bytes.

Explicação

                                # 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
fonte
Parece incrível, mas enquanto eu o teste, parece que não preenche todos os quadrados?
21126 jacksonecac
@jacksonecac: Pelo que entendi, eu deveria preencher aleatoriamente n ^ 2 vezes, com a possibilidade de nem todos os quadrados serem preenchidos se o mesmo índice for escolhido aleatoriamente mais de uma vez. Se isso é errado eu vou ter que refazer isso mais tarde (tem que correr agora)
Emigna
"Você determina qual local preencher, gerando índices aleatoriamente para preencher a matriz. Você só pode preencher n ^ 2 vezes para não poder preencher quantas vezes quiser até que a matriz esteja completamente preenchida." Portanto, deve ser preenchido. Vou esclarecer mais na descrição.
21126 jacksonecac
@jacksonecac Obrigado pelo esclarecimento. Eu atualizei a resposta em conformidade :)
Emigna
Perfeito! Bom trabalho, cara!
21136 jacksonecac
3

Pip , 41 40 38 36 bytes

35 bytes de código, +1 para o -Ssinalizador.

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

Recebe entrada do argumento cmdline. Substitui por espaço (qualquer outro caractere é possível por +1 byte). Produz iterações sucessivas separadas por uma única nova linha (que é legal, mas pode dificultar a leitura). Experimente online!

Todos os tipos de truques sujos neste. A versão mais curta tem menos truques sujos. : ^ (Explicação:

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
fonte
Bom trabalho! Isso funciona perfeitamente
jacksonecac
Na verdade, n>=10a randomização não está funcionando corretamente, mas ainda atinge o sumário. Para números maiores que 10, ele remove apenas onde index_i==index_j. Alguma idéia por trás da razão disso?
Magic Octopus Urn
11
@carusocomputing Não tenho muita certeza, mas provavelmente tem algo a ver com a maneira como os índices são escolhidos na (mi@##Pmi@0)parte. Eu coloquei vários hacks de redução de bytes que dependem dos índices serem de um dígito.
DLosc
##, Entendi. Bom uso de suposições. Obrigado pela explicação haha.
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()}}}

Esse formato de saída específico realmente atrapalhou minha contagem de bytes, mas meh.
Experimente: https://groovyconsole.appspot.com/edit/5171951567896576 (+9 bytes para uma impressão mais bonita)

Ungolfed:

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)​

Exemplo de saída:

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 polvo mágico
fonte
a matriz deve ser NxN, portanto, um quadrado perfeito.
22416 jacksonecac
@jacksonecac É um 4x4quadrado indexado a 0 . O quadrado em si é apenas uma nova linha separada, assim como cada iteração é uma nova linha, portanto a saída meio que corre junto.
AdmBorkBork
Se você deseja delimitadores entre as iterações, especifique-o no resumo.
Magic Octopus Urn
Aqui, experimentá-lo com a nova linha adicionada no meio destes iterações: groovyconsole.appspot.com/edit/5171951567896576
Magia Octopus Urna
Peço desculpas, tirei conclusões precipitadas. Deixe-me analisar isso: D
jacksonecac
1

R, 84 81 74 bytes

Agora usa uma indexação em vez de indexação zero. Livrei-me de 7 bytes graças a @Billywob.

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

Exemplo de saída 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
fonte
Bom trabalho! Vá em frente. Salve esses bytes!
22416 jacksonecac
Você pode salvar alguns bytes usando a substituição direta em vez de replace:for(i in sample(N^2)){m[i]="XX";print(m)}
Billywob 13/10
@ Billywob Obrigado, editei o código para incorporar sua sugestão. Great catch!
Rtbb #
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)}}

Eu adicionei alguns bytes para dar à saída um espaço entre cada matriz.

Nota: para torná-lo mais 'aleatório' entre as execuções, uma chamada para srand()pode ser adicionada por 7 bytes adicionais.

Uso e saída após armazenar o código acima em 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
fonte
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);}

Demolir

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
fonte
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
fonte