이상한 비밀의 힘으로 배열 전투


11

다음은 비교적 간단한 2 차원 배열 문제입니다.

625 피트 군인의 ​​전장을 상상해보십시오. 당신은 명령 이상한 군대를하지만, 불행히도의 강도 병력을 압도한다. 고맙게도, 당신의 병사들은 비밀의 힘을 가지고 있습니다 : 각 이상한 병력과 그 주위의 동료 동맹국의 힘이 비밀 힘으로 나눌 수 있다면, 그들은 그들의 궁극적 인 공격 을 펼치고 승리합니다! 승리 한 각 병사를 존중해야합니다.

규칙

각 요소에 x와 y 위치의 곱에 1을 더한 25 x 25 정수 배열이 주어지면 다음 기준을 충족하는 모든 "승리"홀수 요소의 좌표를 반환합니다.

요소 값과 인접한 홀수 요소 (위, 아래, 왼쪽 및 오른쪽)의 합계는 입력 (비밀 전력 번호)으로 나눌 수 있습니다. 4면 모두에 인접한 요소가 있어야하며 가장자리에 있지 않아야합니다.

제출물은 단일 입력이 필요한 기능 또는 전체 프로그램 일 수 있습니다. 출력은 어떤 순서로도 가능합니다.

전장 인 25 x 25 배열은 다음과 같습니다.

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

다음은 3 x 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 정수 배열에 대해 혼란 스럽다 . 제출물 이이 목록을 생성 해야합니까 아니면 실제로 입력시 제공됩니까?
Mr. Xcoder

출력 만 중요합니다. 실제 어레이 생성은 선택 사항입니다.
Pandazoic

"625 발 군인의 전장을 상상해보십시오" 맞습니다. 키가 큽니다. O_o
Chronocidal

답변:


3

자바 스크립트 (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):[]

온라인으로 사용해보십시오!

어떻게?

허락하다 엑스,와이=엑스와이+1 에 위치한 셀의 가치 (엑스,와이).

가장자리의 셀은 설명되지 않으므로 가정합니다. 0<엑스<240<와이<24.

엑스,와이 어느 쪽이든 엑스 또는 와이 짝수 (또는 둘 다)입니다.

만약 엑스 이상하다 엑스1,와이엑스+1,와이이상하다. 그러나이 경우와이 짝수 여야합니다. 엑스,와이1엑스,와이+1. 셀과 주변 홀수의 합은 다음과 같습니다.

에스엑스,와이=엑스,와이+엑스1,와이+엑스+1,와이=엑스,와이

마찬가지로 와이 홀수 :

에스엑스,와이=엑스,와이+엑스,와이1+엑스,와이+1=엑스,와이

둘 다 엑스와이 심지어 주변의 모든 이웃은 홀수입니다.

에스엑스,와이=엑스,와이+엑스1,와이+엑스+1,와이+엑스,와이1+엑스,와이+1=5엑스,와이

이 승수 ( 또는 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을 사용하여 승수 간을 영리하게 전환하십시오.
Pandazoic 2009 년

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

@Kevin Cruijssen 덕분에 6 바이트가 절약되었습니다!

온라인으로 사용해보십시오!


int i=0; ... int j=0;할 수 있습니다 int i=0,j; ... j=0;<1&수 있습니다 +-4 바이트.
Kevin Cruijssen

@KevinCruijssen int 선언의 경우 원래 함수를 다른 메소드로 변경 한 다음 되돌릴 때까지 그렇게했습니다. +하나는 좋은하지만, 덕분에
예 무지의

다음으로 교체 ((i+j)%2>0?3:5)하여 또 다른 -2(5-(i+j)%2*2)
Kevin Cruijssen

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의 배수에 대해 한 관찰을 사용합니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.