เติมในตารางแบบสุ่ม


9

รับจำนวนเต็มบวกn < 10ให้สร้างเมทริกซ์ 2 มิติโดยที่แต่ละตำแหน่งเต็มไปด้วยxและyดัชนี (เริ่มจากด้านซ้ายบน)

ตัวอย่างเช่น:

อินพุต: 2

00 10
10 11

อินพุต: 3

00 10 20
01 11 21
02 12 22

เมื่อสร้างกริดแล้วให้สุ่มเติมดัชนีแต่ละอัน นี่อาจเป็น 'x' หรือวิธีอื่นเพื่อแสดงว่ามีการเติมเต็มจุดแล้ว

คุณกำหนดตำแหน่งที่จะเติมโดยสร้างดัชนีแบบสุ่มเพื่อเติมเมทริกซ์ คุณสามารถเติมได้เพียง ^ ^ ครั้งเท่านั้นดังนั้นคุณจึงไม่สามารถเติมได้หลายครั้งเท่าที่คุณต้องการจนกว่าเมทริกซ์นั้นจะถูกเติมเต็ม ในตอนท้ายเมทริกซ์ต้องถูกเติมดังนั้นคุณต้องทำงานเพื่อให้แน่ใจว่าคุณตรวจสอบหมายเลขสุ่มที่คุณใช้เพื่อเติมเพื่อให้แน่ใจว่าจุดนั้นไม่ได้ถูกเติมแล้ว

รีเฟรชหรือพิมพ์หลังจากเติมแต่ละครั้งเพื่อแสดงความก้าวหน้าของการเติมซ้ำ

ตัวอย่างการเติม:

อินพุต: 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

@ TimmyD ฉันเห็นด้วยว่าควรใช้เวลามากกว่านี้ใน Sandbox เพียงเพราะนั่นคือสิ่งที่ sandbox มีไว้สำหรับฉัน แต่สำหรับฉันคำแนะนำนั้นค่อนข้างชัดเจนเกี่ยวกับสิ่งที่ต้องการ ไม่ใช่ความท้าทายที่เลวร้าย IMHO
ElPedro

@ TonHospel จุดดี ฉันจะแก้ไขเพื่อให้แน่ใจว่า n <10
jacksonecac

1
มันดูดีขึ้นมาก ฉันจะยังคงอ้างอิงถึง "รหัสสั้นที่สุดชนะด้วยโบนัสหากมีการใช้ GUI แทนการ ASCII" มันยังไม่ได้กำหนด
Morgan Thrapp

คำตอบ:


5

05AB1E , 29 ไบต์

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

ลองออนไลน์!

Space ที่ถูกเลือกเป็นอักขระสำหรับตัวเลขที่ถูกลบ (เพราะดูดี) แต่สามารถแทนที่ด้วยอักขระใด ๆ โดยไม่ส่งผลกระทบต่อจำนวนไบต์

คำอธิบาย

                                # 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

"คุณกำหนดตำแหน่งที่จะเติมโดยการสร้างดัชนีแบบสุ่มเพื่อเติมเมทริกซ์คุณสามารถเติมได้เพียง ^ ^ 2 ครั้งเท่านั้นดังนั้นคุณจึงไม่สามารถเติมได้หลายครั้งเท่าที่คุณต้องการจนกว่าเมทริกซ์จะเต็ม" ดังนั้นจะต้องเติมให้เต็ม ฉันจะอธิบายเพิ่มเติมในคำอธิบาย
jacksonecac

@jacksonecac ขอบคุณสำหรับการชี้แจง ฉันได้อัปเดตคำตอบแล้ว :)
Emigna

ที่สมบูรณ์แบบ! เป็นคนที่ดีมาก!
jacksonecac

3

Pip , 41 40 38 36 bytes

รหัส 35 ไบต์ +1 สำหรับ-Sธง

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ก็เพียงเอาที่ แนวคิดใดที่อยู่เบื้องหลังเหตุผลว่าทำไมถึงเป็นเช่นนั้น?
Magic Octopus Urn

1
@carusocomputing ไม่แน่ใจทั้งหมด แต่มันอาจจะเกี่ยวข้องกับการเลือกดัชนีใน(mi@##Pmi@0)ส่วนนั้น ฉันใส่แฮ็กลดจำนวนหลายไบต์ที่ขึ้นอยู่กับดัชนีที่เป็นเลขหลักเดียว
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 ไบต์สำหรับการพิมพ์ที่สวยกว่า)

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

ตัวอย่างผลลัพธ์:

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 มันคือมันคือ4x4สี่เหลี่ยมจัตุรัสดัชนี 0 สแควร์เองนั้นถูกคั่นด้วยการขึ้นบรรทัดใหม่เช่นเดียวกับการวนซ้ำแต่ละครั้งจะถูกคั่นด้วยการขึ้นบรรทัดใหม่ดังนั้นเอาต์พุตของเอาต์พุตจะทำงานร่วมกัน
AdmBorkBork

หากคุณต้องการตัวคั่นระหว่างการวนซ้ำให้ระบุในตัวย่อ
Magic Octopus Urn

ลองที่นี่ด้วยการขึ้นบรรทัดใหม่ในระหว่างการวนซ้ำ: groovyconsole.appspot.com/edit/5171951567896576
Magic Octopus Urn

ฉันขอโทษที่ฉันได้ข้อสรุป ให้ฉันแยกวิเคราะห์เรื่องนี้: D
jacksonecac

1

R, 84 81 74 ไบต์

ตอนนี้ใช้การจัดทำดัชนีเดียวแทนที่จะเป็นศูนย์การจัดทำดัชนี ได้ลบแล้ว 7 ไบต์ด้วย @Billywob

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

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.