"풀린"횟수를 출력하는 사각형 프로그램을 작성하십시오.


22

1보다 큰 홀수 정수 N에 대해 N 문자 너비 N 높이의 텍스트의 정사각형 블록을 고려하십시오.

예를 들어 N = 5이고 텍스트는 다음과 같습니다.

MLKJI
NWVUH
OXYTG
PQRSF
ABCDE

왼쪽 하단에서 시계 반대 방향으로 나선형으로 표시된 알파벳 (Z 제외)입니다. 그것은 롤업 카펫과 같습니다.

나선형 알파벳

텍스트를 시계 방향으로 1/4만큼 "압축 해제"하면 FGHI다음과 같은 수준이됩니다 ABCDE.

     PONM
     QXWL
     RYVK
     STUJ
ABCDEFGHI

이 언 롤링은 텍스트가 한 줄이 될 때까지 7 번 더 수행 할 수 있습니다.

         SRQP
         TYXO
         UVWN
ABCDEFGHIJKLM

             UTS
             VYR
             WXQ
ABCDEFGHIJKLMNOP

                WVU
                XYT
ABCDEFGHIJKLMNOPQRS

                   XW
                   YV
ABCDEFGHIJKLMNOPQRSTU

                     YX
ABCDEFGHIJKLMNOPQRSTUVW

                       Y
ABCDEFGHIJKLMNOPQRSTUVWX

ABCDEFGHIJKLMNOPQRSTUVWXY

도전

문제는 언 롤링 패턴으로 재 배열되어 실행될 때 1/4 회전만큼 "언 롤링"된 횟수를 출력하는 N × N 텍스트 블록 인 프로그램을 작성하는 것입니다.

여기에는 실제로 두 가지 콘테스트가 있습니다. (아마도 너무 지저분하지 않습니다)

  1. 가장 작은 N을 사용 하여이 작업을 수행하십시오 (N = 3의 한계까지)
  2. 가장 큰 N으로이 작업을 수행하십시오 (제한 없음).

허용되는 답변은 없지만 각 범주의 승자는 최소 50 개의 현상금 담당자를받습니다. 동맹의 경우 가장 오래된 답변이 이깁니다.

코드 블록이

MyP
rog
ram

그대로 실행하면 0이 출력됩니다.

달리는

   rM
   oy
ramgP

1을 출력해야합니다.

달리는

     or
ramgPyM

2를 출력해야합니다.

달리는

       o
ramgPyMr

출력해야합니다 3.

마지막으로 running ramgPyMro은 4를 출력해야합니다.

세부

  • 출력은 자체적으로 stdout (또는 가장 가까운 대안)으로 인쇄되어야합니다. 입력이 없습니다.
  • 코드 에는 인쇄 가능한 ASCII (공백이 포함 된 16 진 코드 20-7E) 만 사용할 수 있습니다 .
  • 공간은 언 롤링 배열에서 빈 공간을 채 웁니다. (왼쪽으로 풀지 않는 한)
  • 완전히 정사각형에서 완전히 평평한 배열에만 유효한 출력이 필요합니다. 다른 준비는 진행되지 않습니다.
  • 당신은 당신의 자신의 소스를 읽을 수 없습니다.
  • 당신은 의견을 사용할 수 있습니다.
  • 많은 언어에서 프로그램 0이 작동 하므로 N = 1은 제외됩니다 .
  • 원하는 경우 오른쪽이 아닌 왼쪽으로 굴릴 수 있습니다. 예를 들어

    MyP
    rog
    ram
    

    된다

    Pg
    yo
    Mrram
    

    등등. 이 방법으로 굴릴 때 추가 공간이 추가되지 않습니다. 줄 끝

(관련 : 회전 횟수를 출력하는 직사각형 프로그램 작성 )


"도전"단락을 읽기 전에 스스로 출력 된 프로그램을 작성하는 데 어려움을 겪고있었습니다
John Dvorak

1
왜 N은 홀수 여야합니까?
John Dvorak

1
@ JanDvorak N이 홀수 일 필요는 없지만 나선이 더 표준화되어 있다고 가정합니다. 그런 식으로 머물러 있지만 N = 2를 찾으면 자유롭게 의견으로 게시하십시오.
Calvin 's Hobbies

8
아이디어 : 오른쪽으로 "카펫"을 풀면 공백으로 시작하는 많은 줄이 만들어져 파이썬과 같은 언어는 제거됩니다. 왼쪽으로 롤링을 허용하면 추가 공백이 필요하지 않으며 파이썬은 (이론적으로) 가능합니다.
Falko

5
당신은 무한한 위대한 도전 아이디어를 가진 마법의 책을 가지고 있습니까? 그와 같은 흥미로운 도전을 어떻게 계속합니까?
저스틴

답변:


27

골프 스크립트, N <-[5,7 ..]

.   .
 . . 
 ..  
.  .#
],9\-

완전히 풀었다 :

],9\-#  .   .  .  . . ...

설명:

  • . (복수)-입력을 복제
  • ] -스택을 단일 배열로 수집
  • , -길이를
  • 9\- -9에서 빼기
  • # -라인 코멘트

공백은 NOP이지만 다른 NOP도 마찬가지로 작동했을 것입니다.

완전히 롤업되면 9 개의 입력 사본 (내용은 무시 됨)을 스택으로 사용합니다. 9-9 = 0; 풀리지 않았습니다.

각 언롤은 주석 뒤에 하나 이상의 점 (중복)을 숨기고 스택을 한 번 축소하여 출력을 증가시킵니다.

완전히 풀면 입력으로 만 내용을 무시합니다 9-1 = 8; 8 번 풀 렸습니다.

동일한 접근 방식은 모든 N> 4에서 작동합니다. 92 * N + 1의 적절한 값으로 변경 한 다음 동일한 나선형 패턴을 사용하여 도트 패턴을 확장하여 각 언롤 중에 정확히 하나의 도트가 풀리도록합니다.


글쎄, 누군가가 N = 3을 찾지 못하면, 이것은 두 범주 모두에서 승리의 답이 될 것입니다.
Calvin 's Hobbies

3
@ Calvin'sHobbies 나는 총 딕이어야하고 왼쪽 풀린 솔루션을 게시해야합니까? :-)
John Dvorak

왜 안돼? 또 다른 대답은 그렇지 않을 것 같습니다 : P
Calvin 's Hobbies

1
양방향으로 풀릴 수있는 제품을 선택해보십시오. :)
Beta Decay

@BetaDecay hmm ... :-)
John Dvorak

13

GolfScript, N = 4

이것은 원래 사양으로 롤백됩니다.

.. . 
...# 
.#.~
],8-

언롤은 다음과 같습니다.

    ...
    #..
    ..
],8-~#.

       .#.
       ...
],8-~#. ..

          ..
          .#
],8-~#. ....

            ..
],8-~#. ....#.

              .
],8-~#. ....#..

],8-~#. ....#...

여기 사용해보십시오


이 배열에 대해 어떻게 생각하셨습니까?
자랑스러운 Haskeller

3
@proudhaskeller 당신이 모른다면 더 낫다 ...
Optimizer

8
솔루션을 무차별 적으로 탐색 했습니까?
자랑스러운 Haskeller

특별한 도전 : 당신은 .S와 #S 중 하나를 만들 수 있습니까?
John Dvorak

나는 후행을 좋아한다 ~. 어쩌면 내가 N = 3을 훔칠 수 있습니까?
John Dvorak

9

APL, N = 3

201
340
5|0

풀림 :

   32
   40
5|001

     43
5|00102

       4
5|001023

5|0010234

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

해당 숫자의 나머지를 5로 나눈 값을 계산합니다. 마지막 행의 결과 만 인쇄됩니다.

APL, N = 2

⍬∞
≡0

풀림 :

  ⍬
≡0∞

≡0∞⍬

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

배열의 깊이 (차원 또는 길이와 혼동하지 않아야 함)를 반환합니다.

  • 0배열이 아닙니다. 깊이는 0입니다.
  • 0∞두 개의 항목 0(무한대) 의 배열입니다 . 깊이는 1입니다.
  • 0∞⍬깊이가 1 인 빈 배열 인 다른 item 이 0∞⍬있습니다. 깊이가 2입니다.

이 두 프로그램은 온라인 통역사에서도 작동합니다. 나중의 것이 구문 적으로 정확한지 확실하지 않습니다.

⍬0
≡∞


⍬¯
≡0

N> = 4 인 경우 APL

N = 4 인 경우

∞  ∞
 ∞∞
∞ ∞
⍴1↓∞

완전히 풀었다 :

⍴1↓∞  ∞  ∞ ∞ ∞∞∞

N = 5 인 경우 :

∞   ∞
 ∞ ∞
 ∞∞
∞  ∞
⍴1↓ ∞

완전히 풀었다 :

⍴1↓ ∞   ∞   ∞  ∞  ∞ ∞ ∞∞∞

1↓배열에서 항목을 제거합니다. 또한 인수가 스칼라 인 경우 빈 배열을 반환합니다. 배열 길이를 가져옵니다.


어떤 설명이 있습니까?
자랑스런 Haskeller

@proudhaskeller 편집했습니다.
jimmy23013

모든 N에 대해 동일한 깊이 논리를 이상적으로 사용할 수 있습니다. APL 덕분에
Optimizer

@Optimizer 그렇게 쉬운 일이 아닙니다. 마지막 줄 이전의 내용은 여전히 ​​구문 상 정확해야합니다. 따라서 대부분의 기능이나 다른 문장 부호 문자를 ()[]원치 않는 곳에 표시 할 수 없습니다 .
jimmy23013

`⍬ \ n⍬⍬0 \ n≡ ∞` (정확히는 아니지만 아이디어를 얻습니다)
Optimizer
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.