Заповнюйте сітку випадковим чином


9

Давши додатне ціле число n < 10, створіть двовимірну матрицю, де кожне місце заповнено його xта yіндексом (починаючи з верхнього лівого краю).

Наприклад:

Вхід: 2

00 10
10 11

Вхід: 3

00 10 20
01 11 21
02 12 22

Після створення сітки випадковим чином заповніть кожен індекс. Це може бути за допомогою "х" або будь-яким іншим способом позначення місця.

Ви визначаєте, яке місце заповнити, випадково генеруючи індекси для заповнення матриці. Ви можете заповнити лише 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 цифра за раз, правда?
Тон Євангелія

@TimmyD Я погоджуюся, що це повинно було провести більше часу в «Пісочниці» просто тому, що це те, для чого це пісочниця, але для мене інструкції досить чіткі щодо того, що потрібно. Непоганий виклик ІМХО.
ElPedro

@TonHospel Добре. Я редагую, щоб забезпечити n <10
jacksonecac

1
Це виглядає набагато краще. Я б все-таки взяв посилання на "Найкоротший код виграє з бонусом, якщо замість ASCII використовувався якийсь графічний інтерфейс". Це ще не визначено.
Морган Трапп

Відповіді:


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 рази, з можливістю заповнення не всіх квадратів, якщо один і той же індекс обраний випадковим чином більше одного разу. Якщо це неправильно, мені доведеться повторити це пізніше (треба запустити зараз)
Емінья

"Ви визначаєте, яке місце заповнити, випадково генеруючи індекси для заповнення матриці. Ви можете заповнити лише n ^ 2 рази, щоб ви не могли заповнити стільки разів, скільки хочете, доки матриця не буде заповнена повністю." Тож його треба заповнити. Я уточню докладніше в описі.
jacksonecac

@jacksonecac Дякую за пояснення Відповідно я оновив відповідь :)
Емінья

Ідеально! Гарна робота людини!
jacksonecac

3

Піп , 41 40 38 36 байт

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 байт для кращого друку)

Безголівки:

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

Якщо ви хочете розмежувати між ітераціями, вкажіть це в стислому описі.
Чарівна восьминога урна

Ось спробуйте його з новим
Чарівний восьминіг

Прошу вибачення, що я прискорив висновки. Дозвольте мені проаналізувати це: 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

Пітон 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()
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.