随机填写表格


9

给定正整数n < 10,创建一个二维矩阵,其中每个位置均以x和填充y(从左上角开始)。

例如:

输入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索引填充(从左上角开始)”(不是可打印的字符串)。“在每次填充后刷新或打印,以显示填充迭代的进度。” 必须显示进度。当缩小创意用户的解决方案范围时,为什么要过于具体?
jacksonecac

n>= 10可能吗?(您必须开始知道最大长度才能正确地填入前导0)。这种情况下的填充一次是一个索引,而不是一次1位,对吗?
Ton Hospel,2013年

@TimmyD我同意应该在沙箱中花费更多的时间,仅仅是因为那是沙箱的目的,但是对我来说,说明非常清楚所需要的内容。恕我直言,这不是一个坏挑战。
ElPedro

@TonHospel好点。我将进行编辑以确保n <10
jacksonecac

1
看起来好多了。我仍然会引用“如果使用某些GUI而不是ASCII,则最短的代码会赢得额外的奖励”。仍然没有定义。
Morgan Thrapp '16

Answers:


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 '16

完善!干得好!
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的数字,仅删除index_i==index_j。为什么会是这个原因背后的任何想法?
魔术章鱼缸

1
@carusocomputing不确定,但是可能与(mi@##Pmi@0)零件中索引的选择有关。我输入了几个减少字节的骇客,具体取决于索引为一位数字。
DLosc

##, 得到它了。很好地使用假设。感谢您的解释哈哈。
魔术章鱼缸

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 '16

如果要在迭代之间使用定界符,请在摘要中指定它。
魔术章鱼缸

在这里,尝试在迭代之间添加换行符:groovyconsole.appspot.com/edit/5171951567896576
Magic Octopus

我很抱歉我得出结论。让我来解析一下: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()
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.