Una battaglia a schiera con strani poteri segreti


11

Ecco una sfida di matrice bidimensionale relativamente semplice.

Immagina un campo di battaglia di 625 fanti. Vi comando la dispari truppe, ma purtroppo la forza dei persino soldati ti travolge. Per fortuna, i tuoi soldati hanno un potere segreto: se il potere di ogni truppa dispari e dei compagni dispari alleati che li circondano è divisibile per un numero di potere segreto, scatenano il loro ultimo attacco e vincono! Devi onorare ogni soldato vittorioso.

Regole

Dato un array di 25 x 25 in cui ogni elemento contiene il prodotto della sua posizione xey più 1, restituisce le coordinate di ogni elemento dispari "vittorioso" che soddisfa i seguenti criteri:

La somma del valore dell'elemento e dei suoi elementi dispari adiacenti (su, giù, sinistra e destra) è divisibile per l'input (numero di potenza segreta). Deve avere elementi adiacenti su tutti e quattro i lati e non essere su un bordo.

Gli invii possono essere una funzione o un programma completo che richiede un singolo input. L'output può essere in qualsiasi ordine.

Il nostro array 25 x 25, il campo di battaglia, è simile al seguente:

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

Esempio

Ecco un esempio 3 x 3:

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

Per determinare se un elemento (61, al centro) vince, sommiamo i valori di esso e gli elementi dispari adiacenti.

61 + 57 + 65 = 183

Se il totale è divisibile per l'input, viene stampata la posizione xey dell'elemento. Se il nostro input è 3, poiché 183 è divisibile per 3, viene stampato "1, 1".

Produzione

Se l'ingresso (numero di potere segreto) è 37, gli elementi restituiti (soldati vittoriosi da lodare) devono essere:

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

Se l'input è 191, gli elementi restituiti devono essere:

10, 19
19, 10

Un input di 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

Un input di 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

Questo è , il codice conteggio dei byte più basso senza usare scappatoie standard è il vincitore.

Dato che questa è la mia prima proposta, ogni consiglio è molto apprezzato. Grazie!


Sono un po 'confuso riguardo a dato un array intero 25 x 25 . Le nostre proposte dovrebbero generare questo elenco o è effettivamente fornito in input?
Mr. Xcoder

Solo l'output conta. La generazione dell'array effettivo è facoltativa.
Pandazoic,

"Immagina un campo di battaglia di 625 fanti" Giusto. È alto. O_o
Chronocidal

Risposte:


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

Provalo online!

Come?

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

Commentate

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

Grazie per la spiegazione approfondita. Intelligente usando un XOR bit a bit per passare da un moltiplicatore all'altro.
Pandazoic,

3

C # (compilatore interattivo Visual C #) , 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));}

6 byte salvati grazie a @Kevin Cruijssen!

Provalo online!


int i=0; ... int j=0;può essere int i=0,j; ... j=0;e <1&può essere +per -4 byte.
Kevin Cruijssen,

@KevinCruijssen Per le dichiarazioni int, inizialmente l'avevo fatto in quel modo fino a quando non ho cambiato la mia funzione con un metodo diverso, quindi l'ho ripristinata. L' +uno è bello, però, grazie
incarnazione di ignoranza

Un altro -2 sostituendo ((i+j)%2>0?3:5)con(5-(i+j)%2*2)
Kevin Cruijssen

2

Stax , 25 byte

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

Esegui ed esegui il debug

Questa è principalmente solo una forza bruta, con un'osservazione leggermente intelligente. Tutte le truppe dispari hanno 2 o 4 vicini dispari. E la somma totale di questi più il soldato originale è 3po 5pdove pè il potere del soldato. Il coefficiente (3 o 5) può essere determinato da gcd(2, x, y) * 2 + 1)dovex e ysono le coordinate del soldato.


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)

Provalo online!

Grazie ad Arnauld per aver salvato un byte.


Ah, fondamentalmente lo stesso programma per la mia risposta js preparata ...
19-19


1

Gelatina , 22 byte

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

Provalo online!

Un programma completo che accetta un singolo argomento, il numero di potere segreto, e stampa implicitamente un elenco di [x, y]coppie. Utilizza l'osservazione che altri hanno fatto sui multipli di 3 e 5.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.