Compila la griglia in modo casuale


9

Dato un numero intero positivo n < 10, crea una matrice bidimensionale in cui ogni posizione è riempita con il suo xe l' yindice (a partire dalla parte superiore sinistra).

Per esempio:

Ingresso: 2

00 10
10 11

Ingresso: 3

00 10 20
01 11 21
02 12 22

Una volta creata la griglia, riempire casualmente ciascun indice. Questo può essere con una 'x' o qualsiasi altro modo per indicare che un punto è stato riempito.

Determinate quale posizione riempire generando casualmente indici per riempire la matrice. Puoi riempire solo n ^ 2 volte in modo da non poter riempire tutte le volte che vuoi fino a quando la matrice è completamente riempita. Alla fine la matrice deve essere riempita, quindi devi fare un po 'di lavoro per assicurarti di controllare i numeri casuali che usi per riempire per assicurarti che lo spot non sia già riempito.

Aggiorna o stampa dopo ogni riempimento per mostrare la progressione delle iterazioni di riempimento.

Esempio di riempimento:

Ingresso: 2

00 10
01 11

00 viene scelto casualmente:

XX 10
01 11

01 viene scelto casualmente:

XX 10
XX 11

00viene scelto casualmente, ma poiché è già stato scelto un re-roll sceglie 10:

XX XX
XX 11

11 viene scelto casualmente:

XX XX
XX XX

Non stampare i numeri casuali come visivamente dovrei essere in grado di vedere quale indice è stato selezionato. Con questo intendo non stampare " 11è scelto casualmente:". È qui per amor di esplorazione.

Dato che si tratta di code-golf, vince il codice più corto.

Buon divertimento e buon golf!


Non capisco cosa sia così complicato nelle istruzioni che sono molto chiare. "crea una matrice bidimensionale in cui ogni posizione è riempita con il suo indice xy (a partire dall'angolo in alto a sinistra)" (Non una stringa stampabile). "Aggiorna o stampa dopo ogni riempimento per mostrare la progressione delle iterazioni di riempimento." deve mostrare la progressione. Perché essere eccessivamente specifico quando restringe il modo in cui gli utenti creativi possono essere con le loro soluzioni?
jacksonecac,

È n>= 10possibile? (devi iniziare a conoscere la lunghezza massima per compilare correttamente gli 0 iniziali quindi). Il riempimento per quel caso è un indice alla volta, non 1 cifra alla volta, giusto?
Ton Hospel,

@TimmyD Concordo sul fatto che questo avrebbe dovuto trascorrere più tempo nella Sandbox semplicemente perché questo è lo scopo della sandbox, ma per me le istruzioni sono abbastanza chiare su ciò che è richiesto. Non è una brutta sfida IMHO.
ElPedro,

@TonHospel Buon punto.
Modificherò

1
Sembra molto meglio. Vorrei ancora eliminare i riferimenti a "Il codice più corto vince con un bonus se al posto di ASCII fosse utilizzata una GUI". È ancora indefinito.
Morgan Thrapp,

Risposte:


5

05AB1E , 29 byte

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

Provalo online!

Spazio scelto come carattere per i numeri rimossi (come sembra bello), ma potrebbe essere sostituito con qualsiasi carattere senza influire sul conteggio dei byte.

Spiegazione

                                # 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

Sembra fantastico ma mentre lo collaudo, sembra che non riempia tutti i quadrati?
jacksonecac,

@jacksonecac: Come ho capito, dovrei riempire casualmente n ^ 2 volte, con la possibilità che non tutti i quadrati vengano riempiti se lo stesso indice viene scelto casualmente più di una volta. Se è sbagliato, dovrò
rifarlo

"Determini quale posizione riempire generando casualmente gli indici per riempire la matrice. Puoi riempire solo n ^ 2 volte in modo da non poter riempire tutte le volte che vuoi fino a quando la matrice è completamente riempita." Quindi deve essere riempito. Chiarirò di più nella descrizione.
jacksonecac,

@jacksonecac Grazie per il chiarimento. Ho aggiornato la risposta di conseguenza :)
Emigna,

Perfetto! Bel lavoro amico!
jacksonecac,

3

Pip , 41 40 38 36 byte

35 byte di codice, +1 per la -Sbandiera.

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

Prende input dall'argomento cmdline. Sostituisce con spazio (è possibile qualsiasi altro carattere per +1 byte). Produce iterazioni successive separate da una singola riga (che è legale ma può rendere un po 'difficile la lettura). Provalo online!

Tutti i tipi di trucchi sporchi in questo. La versione più breve ha meno trucchi sporchi. : ^ (Spiegazione:

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)

Bel lavoro! Funziona perfettamente
jacksonecac,

In realtà, per n>=10la randomizzazione non funziona correttamente, ma colpisce ancora il brief. Per numeri superiori a 10 rimuove solo dove index_i==index_j. Qualche idea dietro il motivo per cui sarebbe?
Magic Octopus Urn,

1
@carusocomputing Non del tutto sicuro, ma probabilmente ha a che fare con il modo in cui gli indici vengono scelti nella (mi@##Pmi@0)parte. Ho inserito diversi hack per la riduzione dei byte che dipendono dal fatto che gli indici sono cifre singole.
DLosc,

##, fatto. Bel uso delle ipotesi. Grazie per la spiegazione haha.
Magic Octopus Urn,

1

Groovy (202 byte)

{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()}}}

Quel formato di output specifico ha davvero incasinato il mio conteggio byte, ma meh.
Prova: https://groovyconsole.appspot.com/edit/5171951567896576 (+9 byte per una stampa più bella)

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

Esempio di output:

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 

la matrice dovrebbe essere NxN, quindi un quadrato perfetto.
jacksonecac,

@jacksonecac Lo è, è un 4x4quadrato con indice 0 . Il quadrato stesso è appena separato da newline, così come ogni iterazione è separata da newline, quindi l'output in genere funziona insieme.
AdmBorkBork,

Se vuoi delimitatori tra le iterazioni, specificalo nel breve.
Magic Octopus Urn,

Qui, provalo con la nuova riga aggiunta tra le iterazioni: groovyconsole.appspot.com/edit/5171951567896576
Magic Octopus Urn

Mi scuso per essere balzato alle conclusioni. Vorrei analizzarlo: D
jacksonecac,

1

R, 84 81 74 byte

Ora utilizza uno-indicizzazione anziché zero-indicizzazione. Sbarazzato di 7 byte grazie a @Billywob.

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

Esempio di output per 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"

Bel lavoro! Fallo. Salva quei byte!
jacksonecac,

È possibile salvare alcuni byte utilizzando la sostituzione diretta anziché replace:for(i in sample(N^2)){m[i]="XX";print(m)}
Billywob,

@Billywob Grazie, ho modificato il codice per incorporare il tuo suggerimento. Ottima cattura!
rturnbull,

0

AWK, 229 byte

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

Ho aggiunto alcuni byte per dare all'output uno spazio tra ogni matrice.

Nota: per renderlo più "casuale" tra le esecuzioni, è srand()possibile aggiungere una chiamata a per 7 byte aggiuntivi.

Utilizzo e output dopo aver archiviato il codice sopra in 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

0

PHP, 172 byte

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);}

Abbattersi

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
}

0

Python 2, 190 byte

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()
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.