Isi kotak secara acak

9

Diberikan bilangan bulat positif n < 10, buat matriks 2 dimensi di mana setiap lokasi diisi dengan xdan yindeksnya (mulai dari kiri atas).

Sebagai contoh:

Input: 2

00 10
10 11

Input: 3

00 10 20
01 11 21
02 12 22

Setelah kisi-kisi dibuat, isilah setiap indeks secara acak. Ini bisa dengan 'x' atau cara lain untuk menunjukkan tempat telah diisi.

Anda menentukan lokasi mana yang harus diisi dengan membuat indeks secara acak untuk mengisi matriks. Anda hanya dapat mengisi n ^ 2 kali sehingga Anda tidak dapat mengisi sebanyak yang Anda inginkan sampai matriks terisi penuh. Pada akhirnya, matriks harus diisi sehingga Anda harus melakukan beberapa pekerjaan untuk memastikan bahwa Anda memeriksa angka acak yang Anda gunakan untuk memastikan bahwa tempat itu belum diisi.

Segarkan atau cetak setelah setiap isian untuk menunjukkan perkembangan iterasi isian.

Contoh untuk mengisi:

Input: 2

00 10
01 11

00 dipilih secara acak:

XX 10
01 11

01 dipilih secara acak:

XX 10
XX 11

00dipilih secara acak, tetapi karena sudah dipilih daftar ulang memilih 10:

XX XX
XX 11

11 dipilih secara acak:

XX XX
XX XX

Jangan mencetak angka acak karena secara visual saya harus dapat melihat indeks mana yang dipilih. Maksud saya jangan mencetak " 11dipilih secara acak:". Itu di sini untuk eksplorasi.

Karena ini adalah kode-golf, kode terpendek akan menang.

Bersenang-senang dan senang bermain golf!

jacksonecac
sumber
Saya tidak mengerti apa yang begitu rumit tentang instruksi yang sangat jelas. "buat matriks 2 dimensi di mana setiap lokasi diisi dengan indeks xy itu (mulai dari kiri atas)" (Bukan string yang dapat dicetak). "Refresh atau cetak setelah setiap pengisian untuk menunjukkan perkembangan iterasi pengisian." harus menunjukkan perkembangannya. Mengapa terlalu spesifik ketika hanya mempersempit bagaimana pengguna kreatif dapat dengan solusi mereka?
jacksonecac
Apakah n>= 10mungkin? (Anda harus mulai tahu tentang panjang maksimum untuk mengisi 0 di awal dengan benar). Isi untuk kasus itu adalah satu indeks pada satu waktu, bukan 1 digit pada suatu waktu, kan?
Ton Hospel
@TimmyD Saya setuju bahwa ini seharusnya menghabiskan lebih banyak waktu di Sandbox hanya karena itulah gunanya sandbox, tetapi bagi saya instruksinya cukup jelas tentang apa yang diperlukan. Bukan tantangan IMHO buruk.
ElPedro
@TonHospel Poin bagus. Saya akan mengedit untuk memastikan n <10
jacksonecac
1
Ini terlihat jauh lebih baik. Saya masih akan mengeluarkan referensi untuk "Kode terpendek menang dengan bonus jika beberapa GUI digunakan sebagai pengganti ASCII". Itu masih belum ditentukan.
Morgan Thrapp

Jawaban:

5

05AB1E , 29 byte

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

Cobalah online!

Spasi dipilih sebagai karakter untuk nomor yang dihapus (karena terlihat bagus), tetapi bisa diganti dengan karakter apa pun tanpa memengaruhi byte-count.

Penjelasan

                                # 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
Emigna
sumber
Kelihatannya luar biasa tapi ketika saya mengujinya, sepertinya tidak memenuhi setiap kotak?
jacksonecac
@ jacksonecac: Seperti yang saya pahami, saya harus mengisi secara acak n ^ 2 kali, dengan kemungkinan tidak semua kotak diisi jika indeks yang sama dipilih secara acak lebih dari satu kali. Jika itu salah saya harus mengulang ini nanti (harus menjalankan sekarang)
Emigna
"Anda menentukan lokasi mana yang harus diisi dengan secara acak membuat indeks untuk mengisi matriks. Anda hanya dapat mengisi n ^ 2 kali sehingga Anda tidak dapat mengisi sebanyak yang Anda inginkan sampai matriks terisi penuh." Jadi itu harus diisi. Saya akan mengklarifikasi lebih dalam deskripsi.
jacksonecac
@ jacksonecac Terima kasih atas klarifikasi. Saya telah memperbarui jawaban yang sesuai :)
Emigna
Sempurna! Pria yang baik!
jacksonecac
3

Pip , 41 40 38 36 byte

35 byte kode, +1 untuk -Sbendera.

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

Mengambil input dari argumen cmdline. Mengganti dengan spasi (karakter lain apa pun dimungkinkan untuk +1 byte). Iterasi output berturut-turut dipisahkan oleh satu baris baru (yang legal tetapi dapat membuatnya agak sulit dibaca). Cobalah online!

Segala macam trik kotor yang satu ini. Versi yang lebih pendek memiliki lebih sedikit trik kotor. : ^ (Penjelasan:

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)
DLosc
sumber
Pekerjaan yang baik! Itu bekerja dengan sempurna
jacksonecac
Sebenarnya, untuk n>=10pengacakan tidak berfungsi dengan benar, tetapi masih hits brief. Untuk angka yang lebih besar dari 10 itu hanya menghilangkan di mana index_i==index_j. Ada ide di balik alasan mengapa itu terjadi?
Magic Octopus Mm
1
@carusocomputing Tidak sepenuhnya yakin, tapi mungkin ada hubungannya dengan bagaimana indeks dipilih di (mi@##Pmi@0)bagian tersebut. Saya memasukkan beberapa byte pereduksi hacks yang bergantung pada indeks menjadi satu digit.
DLosc
##, oke. Penggunaan asumsi yang bagus. Terima kasih atas penjelasannya haha.
Magic Octopus Mm
1

Groovy (202 Bytes)

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

Format output spesifik itu benar-benar mengacaukan jumlah byte saya, tetapi meh.
Cobalah: https://groovyconsole.appspot.com/edit/5171951567896576 (+9 byte untuk cetakan yang lebih cantik)

Tidak Disatukan:

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

Contoh Keluaran:

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 
Guci Gurita Ajaib
sumber
matriksnya harus NxN jadi kuadrat sempurna.
jacksonecac
@ jacksonecac Yaitu, ini adalah 4x4bujur sangkar berindeks 0 . Kotak itu sendiri hanya dipisahkan baris baru, serta setiap iterasi dipisahkan baris baru, sehingga output agak berjalan bersama.
AdmBorkBork
Jika Anda ingin pembatas di antara iterasi, tentukan dalam brief.
Magic Octopus Mm
Di sini, coba dengan baris baru yang ditambahkan di antara iterasi: groovyconsole.appspot.com/edit/5171951567896576
Magic Octopus Mm
Saya minta maaf saya langsung mengambil kesimpulan. Biarkan saya uraikan ini: D
jacksonecac
1

R, 84 81 74 byte

Sekarang gunakan satu-pengindeksan daripada pengindeksan-nol. Singkirkan 7 byte berkat @Billywob.

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

Contoh output untuk 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"
rturnbull
sumber
Pekerjaan yang baik! Lakukan untuk itu. Simpan byte itu!
jacksonecac
Anda dapat menyimpan beberapa byte menggunakan substitusi langsung alih-alih replace:for(i in sample(N^2)){m[i]="XX";print(m)}
Billywob
@ Billywob Terima kasih, saya telah mengedit kode untuk memasukkan saran Anda. Tangkapan hebat!
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)}}

Saya menambahkan beberapa byte untuk memberikan output ruang antara setiap matriks.

Catatan: untuk membuatnya lebih 'acak' antara berjalan, panggilan ke srand()dapat ditambahkan selama 7 byte tambahan.

Penggunaan dan keluaran setelah menyimpan kode di atas di 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
Robert Benson
sumber
0

PHP, 172 Bytes

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

Kerusakan

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
}
Jörg Hülsermann
sumber
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()
Karl Napf
sumber