グリッドをランダムに入力します


9

正の整数を指定してn < 10、各場所に(xおよびy左上から開始して)とインデックスを入力する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はランダムに選択されています:」と表示しないことを意味します。探索のためにここにあります。

これはコードゴルフなので、最も短いコードが優先されます。

楽しくて楽しいゴルフを!


非常に明確な指示について、何がそんなに複雑なのか理解できません。「2次元マトリックスを作成し、各場所にxyインデックス(左上から開始)を入力します」(印刷可能な文字列ではありません)。「充填の反復の進行を示すために、各充填後にリフレッシュまたは印刷してください。」進行を示す必要があります。クリエイティブなユーザーがソリューションをどのように利用できるかを狭めるだけの場合、具体的すぎるのはなぜですか?
jacksonecac

であるn>= 10可能性?(その場合、先頭の0を適切に埋めるために最大長を知る必要があります)。その場合の記入は、一度に1桁ではなく、一度に1つのインデックスです。
Ton Hospel

@TimmyD私はこれがサンドボックスの目的であるという理由だけでサンドボックスでより多くの時間を費やしたはずであることに同意しますが、私にとっては、指示は必要なものについてかなり明確です。私見では悪い挑戦ではありません。
ElPedro 2016年

@TonHospel良い点。n <10になるように編集します
jacksonecac

1
これはずっと良く見えます。「ASCIIの代わりにGUIを使用した場合、最短のコードはボーナスで勝ちます」への参照をまだ削除します。まだ定義されていません。
Morgan Thrapp

回答:


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バイトで可能です)。単一の改行で区切られた連続する反復を出力します(これは合法ですが、読みにくくなる場合があります)。オンラインでお試しください!

この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です。それがそうなる理由の背後にある考えはありますか?
Magic Octopus Urn

1
@carusocomputing完全に定かではありませんが、それはおそらくインデックスが(mi@##Pmi@0)パートでどのように選択されるかと関係があります。インデックスが1桁であることに依存する、バイト削減ハッキングをいくつか行いました。
DLosc

##、 とった。仮定の適切な使用。説明ありがとうございます。
Magic Octopus Urn

1

Groovy(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

反復間に区切り文字が必要な場合は、ブリーフで指定します。
Magic Octopus Urn

ここで、反復の間に改行を追加して試してください:groovyconsole.appspot.com/edit/5171951567896576
Magic Octopus Urn

結論に飛びついたことをお詫びします。これを解析してみましょう:D
jacksonecac

1

R、84 81 74バイト

ゼロインデックスではなく、ワンインデックスを使用するようになりました。@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

あなたの代わりに、直接代入を使用して、いくつかのバイトを保存することができますreplacefor(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

Python 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.