Битва масиву з незвичайними таємними силами


11

Ось відносно простий виклик двовимірного масиву.

Уявіть поле бою з 625 піших солдатів. Ти командуєш непарними військами, але, на жаль, сила парних військ перемагає тебе. На щастя, у ваших солдатів є таємна влада: якщо сила кожного непарного війська та оточуючих їх непарних союзників розділяється на таємне число сили, вони розв’язують їх кінцеву атаку і перемагають! Ви повинні вшанувати кожного солдата-переможця.

Правила

Враховуючи цілий масив розміром 25 x 25, де кожен елемент містить добуток своєї позиції x і y плюс 1, повертайте координати кожного "переможного" непарного елемента, який відповідає наступним критеріям:

Сума значення елемента та суміжних непарних елементів (вгору, вниз, вліво та вправо) ділиться на вхід (секретний номер потужності). У нього повинні бути прилеглі до нього елементи з усіх чотирьох сторін і не бути на краю.

Подання можуть бути як функцією, так і повноцінною програмою, яка вимагає одного введення. Вихід може бути в будь-якому порядку.

Наш масив розміром 25 x 25, поле бою, виглядає так:

1, 1, 1, 1,...
1, 2, 3, 4,...
1, 3, 5, 7,...
1, 4, 7, 10,...
etc.

Приклад

Ось приклад 3 х 3:

43, 57, 71
46, 61, 76
49, 65, 81

Щоб визначити, чи перемагає елемент (61, в центрі), підсумовуємо його значення та суміжні непарні елементи.

61 + 57 + 65 = 183

Якщо підсумок ділиться на вхід, друкується позиція елемента x і y. Якщо наш вхід дорівнює 3, оскільки 183 ділиться на 3, друкується "1, 1".

Вихідні дані

Якщо вхід (таємний номер потужності) 37, повернені елементи (переможці солдатів, які повинні бути похвалені) повинні бути:

2, 18
3, 12
4, 9
5, 22
6, 6
8, 23
9, 4
10, 11
11, 10
12, 3
18, 2
22, 5
23, 8

Якщо вхід 191, повернені елементи повинні бути:

10, 19
19, 10

Вхід 3:

1, 2
1, 4
1, 6
1, 8
1, 10
1, 12
1, 14
1, 16
1, 18
1, 20
1, 22
2, 1
2, 3
2, 4
2, 5
2, 7
2, 9
2, 10
2, 11
2, 13
2, 15
2, 16
2, 17
2, 19
2, 21
2, 22
2, 23
3, 2
3, 4
3, 6
3, 8
3, 10
3, 12
3, 14
3, 16
3, 18
3, 20
3, 22
4, 1
4, 2
4, 3
4, 5
4, 7
4, 8
4, 9
4, 11
4, 13
4, 14
4, 15
4, 17
4, 19
4, 20
4, 21
4, 23
5, 2
5, 4
5, 6
5, 8
5, 10
5, 12
5, 14
5, 16
5, 18
5, 20
5, 22
6, 1
6, 3
6, 5
6, 7
6, 9
6, 11
6, 13
6, 15
6, 17
6, 19
6, 21
6, 23
7, 2
7, 4
7, 6
7, 8
7, 10
7, 12
7, 14
7, 16
7, 18
7, 20
7, 22
8, 1
8, 3
8, 4
8, 5
8, 7
8, 9
8, 10
8, 11
8, 13
8, 15
8, 16
8, 17
8, 19
8, 21
8, 22
8, 23
9, 2
9, 4
9, 6
9, 8
9, 10
9, 12
9, 14
9, 16
9, 18
9, 20
9, 22
10, 1
10, 2
10, 3
10, 5
10, 7
10, 8
10, 9
10, 11
10, 13
10, 14
10, 15
10, 17
10, 19
10, 20
10, 21
10, 23
11, 2
11, 4
11, 6
11, 8
11, 10
11, 12
11, 14
11, 16
11, 18
11, 20
11, 22
12, 1
12, 3
12, 5
12, 7
12, 9
12, 11
12, 13
12, 15
12, 17
12, 19
12, 21
12, 23
13, 2
13, 4
13, 6
13, 8
13, 10
13, 12
13, 14
13, 16
13, 18
13, 20
13, 22
14, 1
14, 3
14, 4
14, 5
14, 7
14, 9
14, 10
14, 11
14, 13
14, 15
14, 16
14, 17
14, 19
14, 21
14, 22
14, 23
15, 2
15, 4
15, 6
15, 8
15, 10
15, 12
15, 14
15, 16
15, 18
15, 20
15, 22
16, 1
16, 2
16, 3
16, 5
16, 7
16, 8
16, 9
16, 11
16, 13
16, 14
16, 15
16, 17
16, 19
16, 20
16, 21
16, 23
17, 2
17, 4
17, 6
17, 8
17, 10
17, 12
17, 14
17, 16
17, 18
17, 20
17, 22
18, 1
18, 3
18, 5
18, 7
18, 9
18, 11
18, 13
18, 15
18, 17
18, 19
18, 21
18, 23
19, 2
19, 4
19, 6
19, 8
19, 10
19, 12
19, 14
19, 16
19, 18
19, 20
19, 22
20, 1
20, 3
20, 4
20, 5
20, 7
20, 9
20, 10
20, 11
20, 13
20, 15
20, 16
20, 17
20, 19
20, 21
20, 22
20, 23
21, 2
21, 4
21, 6
21, 8
21, 10
21, 12
21, 14
21, 16
21, 18
21, 20
21, 22
22, 1
22, 2
22, 3
22, 5
22, 7
22, 8
22, 9
22, 11
22, 13
22, 14
22, 15
22, 17
22, 19
22, 20
22, 21
22, 23
23, 2
23, 4
23, 6
23, 8
23, 10
23, 12
23, 14
23, 16
23, 18
23, 20
23, 22

Вхід 5:

1, 4
1, 14
2, 2
2, 4
2, 6
2, 7
2, 8
2, 10
2, 12
2, 14
2, 16
2, 17
2, 18
2, 20
2, 22
3, 8
3, 18
4, 1
4, 2
4, 4
4, 6
4, 8
4, 10
4, 11
4, 12
4, 14
4, 16
4, 18
4, 20
4, 21
4, 22
6, 2
6, 4
6, 6
6, 8
6, 9
6, 10
6, 12
6, 14
6, 16
6, 18
6, 19
6, 20
6, 22
7, 2
7, 12
7, 22
8, 2
8, 3
8, 4
8, 6
8, 8
8, 10
8, 12
8, 13
8, 14
8, 16
8, 18
8, 20
8, 22
8, 23
9, 6
9, 16
10, 2
10, 4
10, 6
10, 8
10, 10
10, 12
10, 14
10, 16
10, 18
10, 20
10, 22
11, 4
11, 14
12, 2
12, 4
12, 6
12, 7
12, 8
12, 10
12, 12
12, 14
12, 16
12, 17
12, 18
12, 20
12, 22
13, 8
13, 18
14, 1
14, 2
14, 4
14, 6
14, 8
14, 10
14, 11
14, 12
14, 14
14, 16
14, 18
14, 20
14, 21
14, 22
16, 2
16, 4
16, 6
16, 8
16, 9
16, 10
16, 12
16, 14
16, 16
16, 18
16, 19
16, 20
16, 22
17, 2
17, 12
17, 22
18, 2
18, 3
18, 4
18, 6
18, 8
18, 10
18, 12
18, 13
18, 14
18, 16
18, 18
18, 20
18, 22
18, 23
19, 6
19, 16
20, 2
20, 4
20, 6
20, 8
20, 10
20, 12
20, 14
20, 16
20, 18
20, 20
20, 22
21, 4
21, 14
22, 2
22, 4
22, 6
22, 7
22, 8
22, 10
22, 12
22, 14
22, 16
22, 17
22, 18
22, 20
22, 22
23, 8
23, 18

Це є , виграє найнижчий код підрахунку байтів без використання стандартних лазівки.

Оскільки це моє перше подання, будь-яка порада високо цінується. Дякую!


Я розгублений з приводу даного цілого масиву 25 x 25 . Чи повинні наші подання генерувати цей список чи він фактично надається на вході?
Містер Xcoder

Має значення лише вихід. Генерування фактичного масиву необов’язково.
Пандазоїк

"Уявіть поле бою з 625 піших солдатів" Правильно. Це високий рівень. O_o
Хроноцид

Відповіді:


3

JavaScript (ES6),  83 81 80  76 байт

Вихід - це рядки координат з обмеженим пробілом х,у.

f=(n,x=y=23,k=5,v=x*y)=>y?(v&1|~v*k%n?[]:[x,y]+' ')+f(n,--x||23|!y--,k^6):[]

Спробуйте в Інтернеті!

Як?

Дозволяє cх,у=ху+1 - значення комірки, розташованої в (х,у).

Оскільки клітини на краю не враховуються, ми припускаємо 0<х<24 і 0<у<24.

cх,у непарне, якщо будь-яке х або у є рівним (або обом).

Якщо х дивно, значить cх-1,у і cх+1,унепарні. Але в цьому випадкуу повинні бути рівними, так і є cх,у-1 і cх,у+1. Сума комірки та її непарних навколишніх сусідів становить:

сх,у=cх,у+cх-1,у+cх+1,у=3cх,у

Так само, якщо у непарно:

сх,у=cх,у+cх,у-1+cх,у+1=3cх,у

Якщо обоє х і у рівні, усі навколишні сусіди дивні:

сх,у=cх,у+cх-1,у+cх+1,у+cх,у-1+cх,у+1=5cх,у

Цей множник (3 або 5) названий к в коді JS.

Прокоментував

f = (                // f is a recursive function taking:
  n,                 //   n      = input
  x = y = 23,        //   (x, y) = current coordinates, starting at (23, 23)
  k = 5,             //   k      = multiplier (3 or 5)
  v = x * y          //   v      = x * y (value of the current cell - 1)
) =>                 //
  y ?                // if y is greater than 0:
    ( v & 1 |        //   if v is odd (meaning that v + 1 is not)
      ~v * k % n ?   //   or n is not a divisor of -(v + 1) * k:
        []           //     append nothing
      :              //   else:
        [x, y] + ' ' //     append the coordinates followed by a space
    ) +              //
    f(               //   append the result of a recursive call:
      n,             //     pass n unchanged
      --x ||         //     decrement x; if the result is 0:
        23 | !y--,   //       pass 23 instead and decrement y
      k ^ 6          //     update k (5 -> 3 -> 5 -> ...)
    )                //   end of recursive call
  :                  // else:
    []               //   stop recursion

Дякую за проникливе пояснення. Розумний за допомогою побітового XOR перемикається між множниками.
Пандазой

3

C # (Visual C # Interactive Compiler) , 97 93 91 90 байт

x=>{for(int i=0,d=0,j;++i<24;d=5)for(j=0;++j<24;d^=6)if(i*j%2+(i*j+1)*d%x<1)Print((i,j));}

Збережено 6 байт завдяки @Kevin Cruijssen!

Спробуйте в Інтернеті!


int i=0; ... int j=0;може бути int i=0,j; ... j=0;і <1&може бути +для -4 байт.
Kevin Cruijssen

@KevinCruijssen Для декларацій int спочатку я мав це таким чином, поки не змінив свою функцію на інший метод, а потім повернув її. Хоча +один хороший, спасибі
Втілення

Ще -2 замінивши ((i+j)%2>0?3:5)на(5-(i+j)%2*2)
Кевін Круїссен

2

Стакс , 25 байт

âÖÅ{┼îÄï$εS╢,σδXú(Γ°#↑√nG

Запустіть і налагодіть його

Це здебільшого просто груба сила, з одним гранично розумним спостереженням. У всіх непарних військ є або 2, або 4 непарні сусіди. І загальна сума цих плюс оригінальний припой - 3pабо5p де pсила солдата. Коефіцієнт (3 або 5) можна визначити, gcd(2, x, y) * 2 + 1)де xі yє координати солдата.




1

Желе , 22 байти

23×þ`‘µḤḤÐeÐe+×Ḃ³ḍaƊŒṪ

Спробуйте в Інтернеті!

Повна програма, яка бере єдиний аргумент, секретний номер потужності і неявно друкує список [x, y]пар. Використовують спостереження, які інші зробили про кратні 3 і 5.


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