무작위로 그리드 채우기


9

양의 정수가 주어지면 n < 10각 위치가 왼쪽 상단부터 시작 하여 그 위치 xy색인으로 채워지는 2 차원 행렬을 만듭니다 .

예를 들면 다음과 같습니다.

입력 : 2

00 10
10 11

입력 : 3

00 10 20
01 11 21
02 12 22

그리드가 생성되면 각 인덱스를 임의로 채 웁니다. 이것은 'x'또는 스팟이 채워 졌음을 나타내는 다른 방법 일 수 있습니다.

행렬을 채울 인덱스를 임의로 생성하여 채울 위치를 결정합니다. n ^ 2 번만 채울 수 있으므로 행렬이 완전히 채워질 때까지 원하는만큼 채울 수 없습니다. 마지막에 매트릭스를 채워야하기 때문에 스팟이 아직 채워지지 않았는지 확인하기 위해 채우는 데 사용하는 난수를 확인하기 위해 몇 가지 작업을 수행해야합니다.

채우기 반복의 진행률을 표시하기 위해 각 채우기 후에 새로 고치거나 인쇄하십시오.

충전 예 :

입력 : 2

00 10
01 11

00 무작위로 선택됩니다 :

XX 10
01 11

01 무작위로 선택됩니다 :

XX 10
XX 11

00임의로 선택되었지만 이미 선택되었으므로 다시 롤을 선택합니다 10.

XX XX
XX 11

11 무작위로 선택됩니다 :

XX XX
XX XX

난수를 시각적으로 인쇄하지 마십시오. 선택한 색인을 볼 수 있습니다. 이것에 의해 나는 인쇄하지 않습니다 " 11는 무작위로 선택됩니다 :". 탐색 목적으로 여기에 있습니다.

이것이 코드 골프이기 때문에 가장 짧은 코드가 승리합니다.

재미 있고 행복한 골프를 즐기십시오!


나는 매우 명확한 지침에 대해 너무 복잡한 것이 무엇인지 이해하지 못합니다. "각 위치가 xy 인덱스 (왼쪽 위에서 시작)로 채워지는 2 차원 행렬을 만듭니다."(인쇄 가능한 문자열이 아님). "충전 반복의 진행 상황을 보여주기 위해 각 충전 후 새로 고침 또는 인쇄." 진행 상황을 보여 주어야합니다. 창의적인 사용자가 솔루션을 사용할 수있는 방법을 좁힐 때 왜 지나치게 구체적이어야합니까?
jacksonecac

n>= 10가능? (선행 0을 올바르게 채우려면 최대 길이를 알아야합니다.) 이 경우의 채우기는 한 번에 1 자리가 아닌 한 번에 하나의 인덱스입니다.
Ton Hospel

@TimmyD 나는 이것이 샌드 박스에 대한 것이기 때문에 샌드 박스에서 더 많은 시간을 보냈다는 것에 동의하지만 나에게 필요한 것은 명령에 대해 명확합니다. 나쁜 도전이 아닙니다.
ElPedro

@TonHospel 좋은 지적입니다. 나는
jacksonecac

1
이것은 훨씬 좋아 보인다. "아스키 대신 일부 GUI를 사용하면 가장 짧은 코드가 보너스로 승리합니다." 아직 정의되지 않았습니다.
Morgan Thrapp 16:12의

답변:


5

05AB1E , 29 바이트

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

온라인으로 사용해보십시오!

제거 된 숫자의 문자로 선택된 공간 (좋아 보이지만), 바이트 수에 영향을 미치지 않고 임의의 문자로 바꿀 수 있습니다.

설명

                                # 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

멋져 보이지만 테스트 할 때 모든 사각형을 채우지 않는 것처럼 보입니까?
jacksonecac

@ jacksonecac : 내가 이해했듯이 무작위로 n ^ 2 번 채울 필요가 있습니다. 동일한 인덱스를 여러 번 무작위로 선택하면 모든 사각형이 채워질 수있는 가능성이 있습니다. 이것이 틀렸다면 나중에 다시 실행해야합니다 (지금 실행해야 함)
Emigna

"매트릭스를 채우기 위해 인덱스를 무작위로 생성하여 채울 위치를 결정합니다. n ^ 2 번만 채울 수 있으므로 매트릭스가 완전히 채워질 때까지 원하는만큼 채울 수 없습니다." 따라서 채워 져야합니다. 설명에서 더 명확하게 설명하겠습니다.
jacksonecac

@jacksonecac 설명해 주셔서 감사합니다. 나는 이에 따라 답변을 업데이트했습니다 :)
Emigna

완전한! 잘 했어!
jacksonecac

3

, 41 40 38 36 바이트

35 바이트의 코드, -S플래그의 경우 +1

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

cmdline 인수에서 입력을받습니다. 공백으로 대체합니다 (다른 문자는 +1 바이트 가능). 하나의 줄 바꿈으로 구분 된 연속 반복을 출력합니다 (법적이지만 읽기가 다소 어려울 수 있음). 온라인으로 사용해보십시오!

이것에 대한 모든 종류의 더러운 트릭. 더 짧은 버전은 더티 트릭이 적습니다. : ^ (설명 :

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)

좋은 작업! 그것은 완벽하게 작동합니다
jacksonecac

실제로 n>=10무작위 화가 제대로 작동하지 않지만 여전히 적중합니다. 10보다 큰 숫자의 경우 where 만 제거합니다 index_i==index_j. 왜 그런지에 대한 아이디어가 있습니까?
매직 문어 Urn

1
@carusocomputing 완전히 확실하지는 않지만 아마도 (mi@##Pmi@0)부분 에서 인덱스를 선택하는 방법과 관련이있을 것 입니다. 나는 한 자릿수 인 인덱스에 의존하는 몇 가지 바이트 감소 핵을 넣었습니다.
DLosc

##, 알았다. 가정의 좋은 사용. 설명 감사합니다.
매직 문어 Urn

1

그루비 (202 바이트)

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

이 특정 출력 형식은 실제로 바이트 수를 엉망으로 만들었습니다.
사용해보십시오 : https://groovyconsole.appspot.com/edit/5171951567896576 (더 예쁘게 인쇄 하려면 + 9 바이트)

언 골프 드 :

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

출력 예 :

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 

행렬은 NxN이어야하므로 완벽한 정사각형입니다.
jacksonecac

@jacksonecac 그것은 0 인덱스 4x4사각형입니다. 정사각형 자체는 줄 바꿈으로 구분되며 각 반복은 줄 바꿈으로 구분되므로 출력은 함께 실행됩니다.
AdmBorkBork

반복 사이에 분리 문자를 원하면 요약으로 지정하십시오.
매직 문어 Urn

여기에 반복 사이에 줄 바꿈을 추가하여 사용해보십시오. groovyconsole.appspot.com/edit/5171951567896576
Magic Octopus Urn

결론을 내린 것에 대해 사과드립니다. 내가 이것을 파싱하자 : D
jacksonecac

1

R, 84 81 74 바이트

이제 인덱싱이 아닌 1 인덱싱을 사용합니다. @Billywob 덕분에 7 바이트를 제거했습니다.

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

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"

좋은 작업! 해봐 그 바이트를 저장하십시오!
jacksonecac

다음 대신 직접 대체를 사용하여 몇 바이트를 절약 할 수 있습니다 replace.for(i in sample(N^2)){m[i]="XX";print(m)}
Billywob

@Billywob 감사합니다. 제안 사항을 반영하도록 코드를 편집했습니다. 대단하다!
rturnbull

0

AWK, 229 바이트

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

출력에 각 행렬 사이에 공간을 제공하기 위해 몇 바이트를 추가했습니다.

참고 : 실행간에 '임의'로 만들기 srand()위해 7 바이트를 추가 할 수 있습니다.

위의 코드를 저장 한 후 사용법 및 출력 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 바이트

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

고장

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

파이썬 2, 190 바이트

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()
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.