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!


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

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)

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 

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"

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

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
}

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()
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.