Remplissez la grille au hasard

9

Étant donné un entier positif n < 10, créez une matrice bidimensionnelle où chaque emplacement est rempli avec son xet son yindex (en partant du coin supérieur gauche).

Par exemple:

Entrée: 2

00 10
10 11

Entrée: 3

00 10 20
01 11 21
02 12 22

Une fois la grille créée, remplissez aléatoirement chaque index. Cela peut être avec un «x» ou tout autre moyen pour indiquer qu'un emplacement a été rempli.

Vous déterminez l'emplacement à remplir en générant de manière aléatoire des indices pour remplir la matrice. Vous ne pouvez remplir que n ^ 2 fois, vous ne pouvez donc pas remplir autant de fois que vous le souhaitez tant que la matrice n'est pas complètement remplie. À la fin, la matrice doit être remplie, vous devez donc faire un certain travail pour vous assurer de vérifier les nombres aléatoires que vous utilisez pour vous assurer que ce point n'est pas déjà rempli.

Actualisez ou imprimez après chaque remplissage afin de montrer la progression des itérations de remplissage.

Exemple de remplissage:

Entrée: 2

00 10
01 11

00 est choisi au hasard:

XX 10
01 11

01 est choisi au hasard:

XX 10
XX 11

00est choisi au hasard, mais comme il a déjà été choisi, un relance choisit 10:

XX XX
XX 11

11 est choisi au hasard:

XX XX
XX XX

N'imprimez pas les nombres aléatoires car visuellement, je devrais pouvoir voir quel index a été sélectionné. J'entends par là ne pas imprimer " 11est choisi au hasard:". C'est ici pour des raisons exploratoires.

Puisqu'il s'agit de code-golf Le code le plus court l'emporte.

Amusez-vous et amusez-vous au golf!

jacksonecac
la source
Je ne comprends pas ce qui est si compliqué dans les instructions qui sont très claires. "créer une matrice bidimensionnelle où chaque emplacement est rempli avec son index xy (en partant du coin supérieur gauche)" (Pas une chaîne imprimable). "Actualisez ou imprimez après chaque remplissage afin de montrer la progression des itérations de remplissage." doit montrer la progression. Pourquoi être trop précis alors qu'il réduit simplement la créativité des utilisateurs avec leurs solutions?
jacksonecac
Est-ce n>= 10possible? (vous devez alors commencer à connaître la longueur maximale pour remplir correctement les 0 à gauche). Le remplissage pour ce cas est un index à la fois, pas un chiffre à la fois, non?
Ton Hospel
@TimmyD Je suis d'accord que cela aurait dû passer plus de temps dans le bac à sable simplement parce que c'est à cela que sert le bac à sable, mais pour moi, les instructions sont assez claires sur ce qui est requis. Pas un mauvais défi à mon humble avis.
ElPedro
@TonHospel Bon point. Je modifierai pour assurer n <10
jacksonecac
1
Cela semble beaucoup mieux. Je retirerais toujours les références à "Le code le plus court gagne avec un bonus si une interface graphique était utilisée à la place de l'ASCII". C'est encore indéfini.
Morgan Thrapp du

Réponses:

5

05AB1E , 29 octets

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

Essayez-le en ligne!

Espace choisi comme caractère pour les nombres supprimés (car il a l'air bien), mais il pourrait être remplacé par n'importe quel caractère sans affecter le nombre d'octets.

Explication

                                # 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
la source
Il a l'air génial mais comme je le teste, il semble qu'il ne remplit pas tous les carrés?
jacksonecac
@jacksonecac: Si j'ai bien compris, je devrais remplir aléatoirement n ^ 2 fois, avec la possibilité que tous les carrés ne soient pas remplis si le même index est choisi au hasard plus d'une fois. Si c'est faux, je devrai refaire ça plus tard (je dois courir maintenant)
Emigna
"Vous déterminez l'emplacement à remplir en générant de manière aléatoire des indices pour remplir la matrice. Vous ne pouvez remplir que n ^ 2 fois, vous ne pouvez donc pas remplir autant de fois que vous le souhaitez tant que la matrice n'est pas complètement remplie." Il faut donc le remplir. Je vais clarifier plus dans la description.
jacksonecac
@jacksonecac Merci pour la clarification. J'ai mis à jour la réponse en conséquence :)
Emigna
Parfait! Nice job man!
jacksonecac
3

Pip , 41 40 38 36 octets

35 octets de code, +1 pour le -Sdrapeau.

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

Prend l'entrée de l'argument cmdline. Remplace par un espace (tout autre caractère est possible pour +1 octet). Génère des itérations successives séparées par une seule nouvelle ligne (ce qui est légal mais peut être un peu difficile à lire). Essayez-le en ligne!

Toutes sortes de sales tours dans celui-ci. La version plus courte a moins de trucs sales. : ^ (Explication:

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
la source
Bon travail! Cela fonctionne parfaitement
jacksonecac
En fait, car n>=10la randomisation ne fonctionne pas correctement, mais elle frappe toujours le brief. Pour les nombres supérieurs à 10, il supprime uniquement où index_i==index_j. Une idée derrière la raison pour laquelle ce serait?
Urne de poulpe magique
1
@carusocomputing Pas tout à fait sûr, mais c'est probablement quelque chose à voir avec la façon dont les indices sont choisis dans la (mi@##Pmi@0)partie. J'ai mis plusieurs hacks réduisant les octets qui dépendent des indices à un seul chiffre.
DLosc
##, je l'ai. Belle utilisation des hypothèses. Merci pour l'explication haha.
Urne de poulpe magique du
1

Groovy (202 octets)

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

Ce format de sortie spécifique a vraiment gâché mon nombre d'octets, mais meh.
Essayez-le: https://groovyconsole.appspot.com/edit/5171951567896576 (+9 octets pour une impression plus jolie)

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

Exemple de sortie:

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 
Urne de poulpe magique
la source
la matrice doit être NxN donc un carré parfait.
jacksonecac
@jacksonecac C'est, c'est un 4x4carré indexé 0 . Le carré lui-même est juste séparé par des sauts de ligne, ainsi que chaque itération est séparée par des sauts de ligne, donc la sortie fonctionne un peu ensemble.
AdmBorkBork du
Si vous voulez des délimiteurs entre les itérations, spécifiez-le dans le brief.
Urne de poulpe magique du
Ici, essayez-le avec la nouvelle ligne ajoutée entre les itérations: groovyconsole.appspot.com/edit/5171951567896576
Magic Octopus Urn
Je m'excuse d'avoir sauté aux conclusions. Laissez-moi analyser ceci: D
jacksonecac
1

R, 84 81 74 octets

Utilise désormais une indexation unique plutôt qu'une indexation nulle. Débarrassé de 7 octets grâce à @Billywob.

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

Exemple de sortie pour 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
la source
Bon travail! Fonce. Enregistrez ces octets!
jacksonecac
Vous pouvez enregistrer quelques octets en utilisant la substitution directe au lieu de replace:for(i in sample(N^2)){m[i]="XX";print(m)}
Billywob
@Billywob Merci, j'ai édité le code pour incorporer votre suggestion. Superbe capture!
rturnbull
0

AWK, 229 octets

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

J'ai ajouté quelques octets pour donner à la sortie un espace entre chaque matrice.

Remarque: pour le rendre plus «aléatoire» entre les exécutions, un appel à srand()pourrait être ajouté pour 7 octets supplémentaires.

Utilisation et sortie après avoir enregistré le code ci-dessus dans 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
la source
0

PHP, 172 octets

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

Panne

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
la source
0

Python 2, 190 octets

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
la source