Điền vào lưới ngẫu nhiên


9

Cho số nguyên dương n < 10, tạo ma trận 2 chiều trong đó mỗi vị trí được điền với chỉ số xychỉ mục của nó (bắt đầu từ trên cùng bên trái).

Ví dụ:

Đầu vào: 2

00 10
10 11

Đầu vào: 3

00 10 20
01 11 21
02 12 22

Khi lưới được tạo, điền ngẫu nhiên từng chỉ số. Điều này có thể bằng 'x' hoặc bất kỳ cách nào khác để biểu thị một điểm đã được điền.

Bạn xác định vị trí cần điền bằng cách tạo ngẫu nhiên các chỉ mục để điền vào ma trận. Bạn chỉ có thể điền n ^ 2 lần để bạn không thể điền bao nhiêu lần tùy ý cho đến khi ma trận được lấp đầy hoàn toàn. Cuối cùng, ma trận phải được điền để bạn phải thực hiện một số công việc để đảm bảo rằng bạn kiểm tra các số ngẫu nhiên mà bạn sử dụng để điền để đảm bảo rằng điểm đó chưa được điền.

Làm mới hoặc in sau mỗi lần điền để hiển thị tiến trình của các lần lặp điền.

Ví dụ để điền:

Đầu vào: 2

00 10
01 11

00 được chọn ngẫu nhiên:

XX 10
01 11

01 được chọn ngẫu nhiên:

XX 10
XX 11

00được chọn ngẫu nhiên, nhưng vì nó đã được chọn, nên chọn lại cuộn 10:

XX XX
XX 11

11 được chọn ngẫu nhiên:

XX XX
XX XX

Không in ra các số ngẫu nhiên như trực quan tôi sẽ có thể thấy chỉ số nào đã được chọn. Bằng cách này, tôi có nghĩa là không in " 11được chọn ngẫu nhiên:". Nó ở đây vì lợi ích khám phá.

Vì đây là code-golf Mã ngắn nhất sẽ thắng.

Chúc bạn chơi golf vui vẻ và hạnh phúc!


Tôi không hiểu những gì rất phức tạp về các hướng dẫn rất rõ ràng. "Tạo ma trận 2 chiều trong đó mỗi vị trí được lấp đầy bằng chỉ số xy (bắt đầu từ trên cùng bên trái)" (Không phải là chuỗi có thể in). "Làm mới hoặc in sau mỗi lần điền để hiển thị tiến trình của các lần lặp điền." phải thể hiện sự tiến bộ. Tại sao phải quá cụ thể khi nó chỉ thu hẹp cách người dùng sáng tạo có thể với các giải pháp của họ?
jacksonecac

n>= 10thể không? (bạn phải bắt đầu biết về độ dài tối đa để điền chính xác vào đầu 0 sau đó). Việc điền vào trường hợp đó là một chỉ mục tại một thời điểm, không phải 1 chữ số tại một thời điểm, phải không?
TonMedel

@TimmyD Tôi đồng ý rằng điều này nên dành nhiều thời gian hơn trong Sandbox đơn giản vì đó là những gì sandbox dành cho nhưng đối với tôi các hướng dẫn khá rõ ràng về những gì được yêu cầu. Một thử thách không tồi IMHO.
ElPedro

@TonHeach Điểm tốt. Tôi sẽ chỉnh sửa để đảm bảo n <10
jacksonecac

1
Điều này có vẻ tốt hơn nhiều. Tôi vẫn sẽ đưa ra các tham chiếu đến "Mã ngắn nhất sẽ thắng với phần thưởng nếu một số GUI được sử dụng thay vì ASCII". Nó vẫn chưa được xác định.
Morgan Thrapp

Câu trả lời:


5

05AB1E , 29 byte

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

Hãy thử trực tuyến!

Không gian được chọn làm char cho các số bị loại bỏ (vì nó trông đẹp), nhưng nó có thể được thay thế bằng bất kỳ char nào mà không ảnh hưởng đến số byte.

Giải trình

                                # 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

Nó trông tuyệt vời nhưng khi tôi kiểm tra nó, có vẻ như nó không lấp đầy mọi ô vuông?
jacksonecac

@jacksonecac: Theo tôi hiểu, tôi nên điền ngẫu nhiên n ^ 2 lần, với khả năng không phải tất cả các ô vuông đều được điền nếu cùng một chỉ số được chọn ngẫu nhiên nhiều hơn một lần. Nếu đó là sai tôi sẽ phải làm lại điều này sau (phải chạy ngay bây giờ)
Emigna

"Bạn xác định vị trí cần điền bằng cách tạo ngẫu nhiên các chỉ mục để điền vào ma trận. Bạn chỉ có thể điền n ^ 2 lần để bạn không thể điền bao nhiêu lần tùy ý cho đến khi ma trận được lấp đầy hoàn toàn." Vì vậy, nó phải được lấp đầy. Tôi sẽ làm rõ hơn trong mô tả.
jacksonecac

@jacksonecac Cảm ơn đã làm rõ. Tôi đã cập nhật câu trả lời tương ứng :)
Emigna

Hoàn hảo! Người đàn ông tốt công việc!
jacksonecac

3

Pip , 41 40 38 36 byte

35 byte mã, +1 cho -Scờ.

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

Lấy đầu vào từ đối số cmdline. Thay thế bằng không gian (bất kỳ ký tự nào khác đều có thể cho +1 byte). Đầu ra các lần lặp kế tiếp nhau được phân tách bằng một dòng mới (hợp pháp nhưng có thể làm cho nó hơi khó đọc). Hãy thử trực tuyến!

Tất cả các loại thủ đoạn bẩn trong cái này. Phiên bản ngắn hơn có ít thủ đoạn bẩn hơn. : ^ (Giải thích:

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)

Công việc tốt! Điều đó hoạt động hoàn hảo
jacksonecac

Trên thực tế, đối n>=10với ngẫu nhiên không hoạt động chính xác, nhưng nó vẫn đạt được tóm tắt. Đối với các số lớn hơn 10, nó chỉ xóa ở đâu index_i==index_j. Bất kỳ ý tưởng đằng sau lý do tại sao điều đó sẽ được?
Bạch tuộc ma thuật Urn

1
@carusocomputing Không hoàn toàn chắc chắn, nhưng có lẽ đó là điều cần làm với cách các chỉ số được chọn trong (mi@##Pmi@0)phần. Tôi đưa vào một số hack giảm byte phụ thuộc vào các chỉ số là các chữ số đơn.
DLosc

##, hiểu rồi. Sử dụng tốt các giả định. Cảm ơn đã giải thích haha.
Bạch tuộc ma thuật 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()}}}

Định dạng đầu ra cụ thể đó thực sự làm rối số byte của tôi, nhưng meh.
Dùng thử: https://groovyconsole.appspot.com/edit/5171951567896576 (+9 byte cho bản in đẹp hơn)

Ung dung:

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

Ví dụ đầu ra:

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 

ma trận nên là NxN sao cho một hình vuông hoàn hảo.
jacksonecac

@jacksonecac Đó là một 4x4hình vuông có 0 chỉ số . Bản thân hình vuông chỉ là dòng mới được phân tách, cũng như mỗi lần lặp được phân tách dòng mới, do đó, loại đầu ra chạy cùng nhau.
admBorkBork

Nếu bạn muốn phân cách giữa các lần lặp, hãy chỉ định nó trong bản tóm tắt.
Bạch tuộc ma thuật Urn

Tại đây, hãy thử với dòng mới được thêm vào giữa các lần lặp: groovyconsole.appspot.com/edit/5171951567896576
Bạch tuộc ma thuật Urn

Tôi xin lỗi tôi đã nhảy đến kết luận. Hãy để tôi phân tích điều này: D
jacksonecac

1

R, 84 81 74 byte

Bây giờ sử dụng một chỉ mục một thay vì chỉ mục không. Đã thoát khỏi 7 byte nhờ @Billywob.

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

Ví dụ đầu ra cho 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"

Công việc tốt! Cứ liều thử đi. Lưu các byte đó!
jacksonecac

Bạn có thể lưu một vài byte bằng cách sử dụng thay thế trực tiếp thay vì replace:for(i in sample(N^2)){m[i]="XX";print(m)}
Billywob

@Billywob Cảm ơn, tôi đã chỉnh sửa mã để kết hợp đề xuất của bạn. Cú bắt tuyệt vời!
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)}}

Tôi đã thêm một vài byte để tạo đầu ra khoảng trắng giữa mỗi ma trận.

Lưu ý: để làm cho nó trở nên 'ngẫu nhiên' hơn giữa các lần chạy, srand()có thể thêm một cuộc gọi đến 7 byte bổ sung.

Sử dụng và đầu ra sau khi lưu trữ mã trên 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);}

Phá vỡ

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()
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.