Garip gizli güçlerle dizi savaşı


11

İşte nispeten basit iki boyutlu dizi zorluğu.

625 ayak askerin savaş alanını hayal edin. Sen komuta garip asker, ama ne yazık ki gücü bile birlikleri size ağır. Neyse ki, askerlerin gizli bir gücü var: Eğer her bir tek birliğin ve onları çevreleyen tek müttefiklerin gücü gizli bir güç numarasıyla bölünebilirse, nihai saldırılarını serbest bırakır ve kazanırlar! Her muzaffer askeri onurlandırmalısınız.

kurallar

Her bir öğenin x ve y konum artı 1'in çarpımını içerdiği 25 x 25 tam sayı dizisi verildiğinde, aşağıdaki ölçütleri karşılayan her "muzaffer" tek öğenin koordinatlarını döndürün:

Elemanın değerinin ve bitişik tek elemanlarının (yukarı, aşağı, sola ve sağa) toplamı girişe (gizli güç numarası) bölünebilir. Dört tarafında da bitişik elemanlar olmalı ve kenarda olmamalıdır.

Başvurular, tek bir girdi gerektiren bir işlev veya tam program olabilir. Çıktı herhangi bir sırada olabilir.

25 x 25 dizimiz olan savaş alanı şöyle:

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

Misal

İşte 3 x 3 örneği:

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

Bir öğenin (merkezde 61) kazanıp kazanmadığını belirlemek için, onun ve bitişik tek elemanların değerlerini toplarız.

61 + 57 + 65 = 183

Toplam giriş tarafından bölünebiliyorsa, öğenin x ve y konumu yazdırılır. Girişimiz 3 ise, 183, 3'e bölünebilir olduğu için "1, 1" yazdırılır.

Çıktı

Girdi (gizli güç numarası) 37 ise, iade edilen elemanlar (övgüye değer askerler övülecek):

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

Giriş 191 ise, döndürülen öğeler şöyle olmalıdır:

10, 19
19, 10

3 girişi:

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 girişi:

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

Bu , standart boşlukları kullanmadan en düşük bayt sayımı kodu kazanır.

Bu benim ilk sunumum olduğu için, herhangi bir tavsiye büyük beğeni topluyor. Teşekkürler!


25 x 25 tamsayı dizisi verildiğinde biraz kafam karıştı . Gönderimlerimiz bu listeyi mi oluşturmalı yoksa listeye gerçekten girdi mi verilecek?
Bay Xcoder

Yalnızca çıktı önemlidir. Gerçek dizinin oluşturulması isteğe bağlıdır.
Pandazoic

"625 ayak askerin bir savaş alanını hayal edin" Doğru. Çok uzun. O_o
Kronokidal

Yanıtlar:


3

JavaScript (ES6),  83 81 80  76 bayt

Çıktı, boşlukla sınırlandırılmış bir koordinat dizesidir 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):[]

Çevrimiçi deneyin!

Nasıl?

İzin Vermek cx,y=xy+1 adresinde bulunan hücrenin değeri olmak (x,y).

Kenardaki hücreler hesaba katılmadığından, 0<x<24 ve 0<y<24.

cx,y ikisinden biri garip x veya y eşittir (veya her ikisi de).

Eğer x garip, o zaman cx-1,y ve cx+1,ytuhaf. Ancak bu durumda,y eşit olmalı ve aynı şekilde cx,y-1 ve cx,y+1. Hücrenin ve garip çevreleyen komşularının toplamı:

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

Benzer şekilde, y garip:

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

İkisi de olursa x ve y hatta, çevresindeki tüm komşular tuhaf:

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

Bu çarpan (3 veya 5) adlı k JS kodunda.

Yorumlananlar

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

Anlayışlı açıklama için teşekkürler. Çarpanlar arasında geçiş yapmak için bitsel bir XOR kullanarak akıllıca çalışın.
Pandazoic

3

C # (Görsel C # Etkileşimli Derleyici) , 97 93 91 90 bayt

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

@Kevin Cruijssen sayesinde 6 bayt tasarruf edildi!

Çevrimiçi deneyin!


int i=0; ... int j=0;olabilir int i=0,j; ... j=0;ve <1&olabilir +-4 byte için.
Kevin Cruijssen

@KevinCruijssen Int bildirimleri için, aslında işlevimi farklı bir yönteme değiştirene kadar geri döndüm. +Bir güzel olsa da, sayesinde
Düzenleme Cahiliyye

Başka -2 değiştirerek ((i+j)%2>0?3:5)ile(5-(i+j)%2*2)
Kevin Cruijssen

2

Stax , 25 bayt

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

Çalıştır ve hata ayıkla

Bu çoğunlukla sadece kaba bir kuvvettir ve bir marjinal zekice gözlemdir. Tüm garip birliklerin 2 veya 4 garip komşusu vardır. Ve bunların toplamı ve orijinal lehim, askerin gücü ya 3pda 5pnerede p. Katsayı (3 veya 5) , askerin koordinatları gcd(2, x, y) * 2 + 1)nerede xve nerede olduklarına göre belirlenebilir y.


2

Python 2 , 83 bayt

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)

Çevrimiçi deneyin!

Bayt'ı kurtardığı için Arnauld'a teşekkürler.


Ah, temelde benim hazırlanan js cevap aynı program ...
tsh


1

Jöle , 22 bayt

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

Çevrimiçi deneyin!

Tek bir argümanı, gizli güç numarasını alan ve örtük olarak bir [x, y]çiftler listesi basan tam bir program . Diğerlerinin 3 ve 5'in katları hakkında yaptığı gözlemleri kullanır.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.