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


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.