Une bataille de tableaux avec d'étranges pouvoirs secrets

11

Voici un défi de tableau bidimensionnel relativement simple.

Imaginez un champ de bataille de 625 fantassins. Vous commandez les troupes impaires , mais malheureusement la force des troupes paires vous submerge. Heureusement, vos soldats ont un pouvoir secret: si le pouvoir de chaque troupe impaire et des autres alliés étranges qui les entourent est divisible par un numéro de pouvoir secret, ils déclenchent leur ultime attaque et gagnent! Vous devez honorer chaque soldat victorieux.

Règles

Étant donné un tableau entier de 25 x 25 où chaque élément contient le produit de sa position x et y plus 1, renvoyer les coordonnées de chaque élément impair "victorieux" qui répond aux critères suivants:

La somme de la valeur de l'élément et de ses éléments impairs adjacents (haut, bas, gauche et droite) est divisible par l'entrée (numéro de pouvoir secret). Il doit avoir des éléments adjacents aux quatre côtés et ne pas être sur un bord.

Les soumissions peuvent être une fonction ou un programme complet qui nécessite une seule entrée. La sortie peut être dans n'importe quel ordre.

Notre tableau 25 x 25, le champ de bataille, ressemble à ceci:

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

Exemple

Voici un exemple 3 x 3:

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

Pour déterminer si un élément (61, au centre) gagne, nous additionnons ses valeurs et les éléments impairs adjacents.

61 + 57 + 65 = 183

Si le total est divisible par l'entrée, la position x et y de l'élément est imprimée. Si notre entrée est 3, parce que 183 est divisible par 3, "1, 1" est imprimé.

Production

Si l'entrée (numéro de pouvoir secret) est 37, les éléments retournés (soldats victorieux à féliciter) doivent être:

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

Si l'entrée est 191, les éléments retournés doivent être:

10, 19
19, 10

Une entrée de 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

Une entrée de 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

C'est le , le code comptant le moins d'octets sans utiliser de failles standard est le gagnant.

Comme il s'agit de ma première soumission, tout conseil est grandement apprécié. Merci!

Pandazoïque
la source
Je suis un peu confus à propos de Étant donné un tableau entier de 25 x 25 . Nos soumissions devraient-elles générer cette liste ou est-elle réellement donnée en entrée?
M. Xcoder
Seule la sortie compte. La génération du tableau réel est facultative.
Pandazoic
"Imaginez un champ de bataille de 625 fantassins" À droite. C'est grand. O_o
Chronocidal

Réponses:

3

JavaScript (ES6),  83 81 80  76 octets

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

Essayez-le en ligne!

Comment?

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

Commenté

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
la source
Merci pour l'explication perspicace. Intelligent en utilisant un XOR au niveau du bit pour basculer entre les multiplicateurs.
Pandazoic
3

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

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 octets enregistrés grâce à @Kevin Cruijssen!

Essayez-le en ligne!

Incarnation de l'ignorance
la source
int i=0; ... int j=0;peut être int i=0,j; ... j=0;et <1&peut être +de -4 octets.
Kevin Cruijssen
@KevinCruijssen Pour les déclarations int, je l'avais à l'origine de cette façon jusqu'à ce que je change ma fonction en une méthode différente, puis que je la revienne. Celui- +là est sympa cependant, merci
Embodiment of Ignorance
Un autre -2 en remplaçant ((i+j)%2>0?3:5)par(5-(i+j)%2*2)
Kevin Cruijssen
2

Stax , 25 octets

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

Exécuter et déboguer

Il s'agit principalement de force brute, avec une observation légèrement intelligente. Toutes les troupes étranges ont 2 ou 4 voisins étranges. Et la somme totale de ces derniers plus la soudure d'origine est soit 3pou 5ppest la puissance du soldat. Le coefficient (3 ou 5) peut être déterminé par gcd(2, x, y) * 2 + 1)xet ysont les coordonnées du soldat.

récursif
la source
2

Python 2 , 83 octets

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)

Essayez-le en ligne!

Merci à Arnauld d'avoir enregistré un octet.

xnor
la source
Ah, essentiellement le même programme que ma réponse js préparée ...
tsh
1

Gelée , 22 octets

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

Essayez-le en ligne!

Un programme complet qui prend un seul argument, le numéro de pouvoir secret, et imprime implicitement une liste de [x, y]paires. Utilise l'observation que d'autres ont faite sur les multiples de 3 et 5.

Nick Kennedy
la source