Izgarayı rastgele doldurun


9

Pozitif tamsayı verildiğinde n < 10, her bir konumun xve ydiziniyle (sol üst köşeden başlayarak) doldurulduğu 2 boyutlu bir matris oluşturun .

Örneğin:

Giriş: 2

00 10
10 11

Giriş: 3

00 10 20
01 11 21
02 12 22

Izgara oluşturulduktan sonra, her dizini rastgele doldurun. Bu bir 'x' ile veya bir noktanın doldurulduğunu belirtmenin başka bir yolu olabilir.

Matrisi doldurmak için rastgele indeksler oluşturarak hangi konumu dolduracağınızı belirleyebilirsiniz. Matris tamamen dolana kadar yalnızca n ^ 2 kez doldurabilirsiniz. Sonunda matrisin doldurulması gerekir, böylece noktanın önceden doldurulmadığından emin olmak için doldurmak için kullandığınız rasgele sayıları kontrol ettiğinizden emin olmak için biraz çalışma yapmanız gerekir.

Dolum yinelemelerinin ilerlemesini göstermek için her dolumdan sonra yenileyin veya yazdırın.

Doldurma örneği:

Giriş: 2

00 10
01 11

00 rastgele seçilir:

XX 10
01 11

01 rastgele seçilir:

XX 10
XX 11

00rastgele seçilir, ancak daha önceden seçildiği için yeniden rulo seçer 10:

XX XX
XX 11

11 rastgele seçilir:

XX XX
XX XX

Rastgele sayıları yazdırmayın çünkü görsel olarak hangi dizinin seçildiğini görebilmeliyim. Bununla demek istediğim " 11rastgele seçilmiş:" yazmayın. Keşif uğruna burada.

Bu kod golf olduğu için En kısa kod kazanır.

Eğlenceli ve mutlu golf var!


Çok net olan talimatlar hakkında neyin bu kadar karmaşık olduğunu anlamıyorum. msgstr "her bir yerin xy indeksi (sol üst köşeden başlayarak) ile doldurulduğu 2 boyutlu bir matris oluştur" (Yazdırılabilir bir dize değil). "Dolum yinelemelerinin ilerlemesini göstermek için her dolumdan sonra yenileyin veya yazdırın." ilerlemeyi göstermelidir. Yaratıcı kullanıcıların çözümleriyle nasıl olabileceğini daralttığında neden aşırı özel olun?
jacksonecac

n>= 10mümkün? (önde gelen 0'ları düzgün bir şekilde doldurmak için maksimum uzunluğu bilmeniz gerekir). Bu vakanın dolgusu bir seferde bir indekstir, bir seferde 1 basamak değil, değil mi?
Ton Hospel

@TimmyD Bunun Sandbox'ta daha fazla zaman geçirmesi gerektiğine katılıyorum, çünkü sandbox bunun için budur ama benim için talimatlar neyin gerekli olduğu konusunda oldukça açık. Kötü bir meydan okuma IMHO değil.
ElPedro

@TonHospel İyi bir nokta. N <10
jacksonecac

1
Bu çok daha iyi görünüyor. Hala "ASCII yerine bazı GUI kullanılmış olsaydı en kısa kod bir bonus ile kazanır" için referanslar almak istiyorum. Hala tanımsız.
Morgan Thrapp

Yanıtlar:


5

05AB1E , 29 bayt

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

Çevrimiçi deneyin!

Kaldırılan sayılar için karakter olarak seçilen alan (güzel göründüğü gibi), ancak bayt sayısını etkilemeden herhangi bir karakterle değiştirilebilir.

açıklama

                                # 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

Harika görünüyor ama test ederken her kareyi doldurmuyor gibi görünüyor?
jacksonecac

@jacksonecac: Anladığım kadarıyla, rasgele n ^ 2 kez doldurmalıyım, aynı dizin birden fazla kez rasgele seçildiyse tüm karelerin doldurulmaması olasılığı ile. Eğer yanlışsa, bunu daha sonra tekrar yapmam gerekecek (şimdi koşmak zorundayım)
Emigna

"Matrisi doldurmak için rasgele dizinler oluşturarak hangi konumu dolduracağınızı belirlersiniz. Matris tamamen dolana kadar yalnızca n ^ 2 kez doldurabilirsiniz, böylece istediğiniz kadar dolduramazsınız." Yani doldurulmalı. Açıklamasında daha fazla açıklığa kavuşacağım.
jacksonecac

@ jacksonecac Açıklama için teşekkürler. Cevabı buna göre güncelledim :)
Emigna

Mükemmel! İyi iş adamım!
jacksonecac

3

Pip , 41 40 38 36 bayt

35 bayt kod, -Sbayrak için +1 .

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

Cmdline argümanından girdi alır. Boşluk ile değiştirilir (+1 bayt için başka herhangi bir karakter mümkündür). Ardışık yinelemeleri tek bir satırsonu ile ayırır (yasaldır, ancak okunması biraz zor olabilir). Çevrimiçi deneyin!

Bu her türlü kirli hileler. Kısa versiyonda daha az kirli numara vardır. : ^ (Açıklama:

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)

İyi iş! Mükemmel çalışıyor
jacksonecac

Aslında, n>=10rasgeleleştirme düzgün çalışmıyor, ancak yine de brifinge çarpıyor. 10'dan büyük sayılar için yalnızca nerede kaldırılır index_i==index_j. Bunun nedeninin ardında bir fikir var mı?
Sihirli Ahtapot Urn

1
@carusocomputing Tamamen emin değilim, ama muhtemelen endekslerin (mi@##Pmi@0)kısımda nasıl seçildiği ile ilgili bir şey. Endekslerin tek haneli olmasına bağlı olarak bayt azaltan birkaç hack koydum.
DLosc

##, anladım. Varsayımların güzel kullanımı. Açıklama için teşekkürler haha.
Sihirli Ahtapot Urn

1

Groovy (202 Bayt)

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

Bu özel çıktı biçimi bayt sayımı gerçekten berbat etti, ama meh.
Deneyin: https://groovyconsole.appspot.com/edit/5171951567896576 (Daha güzel bir baskı için +9 bayt)

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

Çıktı Örneği:

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 

matris NxN olmalı, bu yüzden mükemmel bir kare olmalıdır.
jacksonecac

@jacksonecac Bu, 0 dizinli bir 4x4kare. Meydanın kendisi sadece satırsonu ayrılmış, her yineleme satırsonu ayrılmış, bu nedenle çıktı birlikte çalışır.
AdmBorkBork

Yinelemeler arasında sınırlayıcılar istiyorsanız, kısaca belirtin.
Sihirli Ahtapot Urn

Burada, yinelemeler arasına
Sihirli Ahtapot Urn

Sonuçlara atladığım için özür dilerim. Bırakın ayrıştıralım: D
jacksonecac

1

R, 84 81 74 bayt

Artık sıfır endeksleme yerine tek indeksleme kullanıyor. @Billywob sayesinde 7 bayttan kurtuldu.

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

N = 3 için örnek çıktı

     [,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"

İyi iş! Göreyim seni. Bu baytları kaydedin!
jacksonecac

Bunun yerine doğrudan değiştirme kullanarak birkaç bayt kaydedebilirsiniz replace:for(i in sample(N^2)){m[i]="XX";print(m)}
Billywob

@Billywob Teşekkürler, önerinizi dahil etmek için kodu düzenledim. Büyük yakalamak!
rturnbull

0

AWK, 229 bayt

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

Çıktıya her matris arasında boşluk bırakmak için birkaç bayt ekledim.

Not: Çalışmalar arasında daha 'rastgele' yapmak srand()için 7 ek bayt için bir çağrı eklenebilir.

Yukarıdaki kodu sakladıktan sonra kullanım ve çıktı 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 Bayt

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

Yıkmak

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 bayt

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()
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.