Pertempuran array dengan kekuatan rahasia yang aneh

11

Berikut ini adalah tantangan array dua dimensi yang relatif sederhana.

Bayangkan medan perang 625 kaki prajurit. Anda memerintahkan pasukan aneh , tapi sayangnya kekuatan pasukan genap membanjiri Anda. Syukurlah, prajurit Anda memiliki kekuatan rahasia: Jika kekuatan setiap pasukan aneh dan sekutu aneh di sekitar mereka dapat dibagi oleh nomor kekuatan rahasia, mereka melepaskan serangan pamungkas mereka dan menang! Anda harus menghormati setiap prajurit yang menang.

Aturan

Diberikan array integer 25 x 25 di mana setiap elemen berisi produk posisi x dan y ditambah 1, kembalikan koordinat setiap elemen aneh "pemenang" yang memenuhi kriteria berikut:

Jumlah nilai elemen dan elemen ganjil yang berdekatan (atas, bawah, kiri, dan kanan) dapat dibagi dengan input (nomor kekuatan rahasia). Itu harus memiliki elemen yang berdekatan di keempat sisinya dan tidak di tepi.

Pengajuan dapat berupa fungsi atau program lengkap yang membutuhkan input tunggal. Output bisa dalam urutan apa pun.

Susunan 25 x 25 kami, medan perang, terlihat seperti ini:

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

Contoh

Berikut adalah contoh 3 x 3:

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

Untuk menentukan apakah suatu elemen (61, di tengah) menang, kami menjumlahkan nilainya dan elemen ganjil yang berdekatan.

61 + 57 + 65 = 183

Jika total dapat dibagi oleh input, posisi elemen x dan y dicetak. Jika input kami adalah 3, karena 183 dapat dibagi dengan 3, "1, 1" dicetak.

Keluaran

Jika input (angka kekuatan rahasia) adalah 37, elemen yang dikembalikan (prajurit yang menang harus dipuji) harus:

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

Jika inputnya 191, elemen yang dikembalikan harus:

10, 19
19, 10

Masukan 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

Masukan 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

Ini adalah , byte-hitung terendah tanpa menggunakan celah standar adalah pemenangnya.

Karena ini adalah pengiriman pertama saya, saran apa pun sangat dihargai. Terima kasih!

Pandazoic
sumber
Saya sedikit bingung tentang Diberikan array integer 25 x 25 . Haruskah kiriman kami membuat daftar ini atau itu benar-benar diberikan pada input?
Tn. Xcoder
Hanya masalah output. Membuat array aktual adalah opsional.
Pandazoic
"Bayangkan medan perang 625 kaki prajurit" Benar. Itu tinggi. O_o
Kronologis

Jawaban:

3

JavaScript (ES6),  83 81 80  76 byte

x,y

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):[]

Cobalah online!

Bagaimana?

cx,y=xy+1(x,y)

0<x<240<y<24

cx,yxy

xcx-1,ycx+1,yycx,y-1cx,y+1

sx,y=cx,y+cx-1,y+cx+1,y=3cx,y

y

sx,y=cx,y+cx,y-1+cx,y+1=3cx,y

xy

sx,y=cx,y+cx-1,y+cx+1,y+cx,y-1+cx,y+1=5cx,y

35k

Berkomentar

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
Arnauld
sumber
Terima kasih atas penjelasannya yang mendalam. Pintar menggunakan bitor XOR untuk membalik di antara pengganda.
Pandazoic
3

C # (Visual C # Interactive Compiler) , 97 93 91 90 byte

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

Disimpan 6 byte berkat @Kevin Cruijssen!

Cobalah online!

Perwujudan Ketidaktahuan
sumber
int i=0; ... int j=0;bisa int i=0,j; ... j=0;dan <1&bisa +untuk -4 byte.
Kevin Cruijssen
@KevinCruijssen Untuk deklarasi int, awalnya saya sudah seperti itu sampai saya mengubah fungsi saya ke metode yang berbeda, kemudian mengembalikannya. Yang +satu bagus, terima kasih
Perwujudan Ketidaktahuan
Lain -2 dengan mengganti ((i+j)%2>0?3:5)dengan(5-(i+j)%2*2)
Kevin Cruijssen
2

Stax , 25 byte

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

Jalankan dan debug itu

Ini sebagian besar hanya kekuatan kasar, dengan satu pengamatan yang sedikit pintar. Semua pasukan aneh memiliki 2 atau 4 tetangga aneh. Dan jumlah total ini ditambah solder asli adalah di mana 3patau di 5pmana pkekuatan prajurit. Koefisien (3 atau 5) dapat ditentukan oleh di gcd(2, x, y) * 2 + 1)mana xdan ymerupakan koordinat prajurit.

rekursif
sumber
2

Python 2 , 83 byte

lambda n:[(x,y)for x in R for y in R if~(x*y)*[5,3][x+y&1]%n<1>x*y%2]
R=range(1,24)

Cobalah online!

Terima kasih kepada Arnauld karena telah menghemat satu byte.

Tidak
sumber
Ah, pada dasarnya program yang sama dengan jawaban js saya siap ...
tsh
1

Jelly , 22 byte

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

Cobalah online!

Program lengkap yang mengambil argumen tunggal, nomor kekuatan rahasia, dan secara implisit mencetak daftar [x, y]pasangan. Menggunakan pengamatan yang dilakukan orang lain tentang kelipatan 3 dan 5.

Nick Kennedy
sumber