Pali-n-drome이 목록


13

여기서 과제는 다음과 같이 입력으로 회 문의 구현을 확장하는 것입니다.

  • n > 1그리고 목록 l.

프로그램은 목록을 수직 및 수평으로 회문해야합니다. 즉, 먼저 목록 자체를 회랑으로 표시 한 다음 목록의 각 요소를 먼저 회문해야합니다. 또는 다른 방법. palindromization 전에 모든 요소의 길이가 동일해야합니다. 그 후 회문 동작은 n원하는 출력이 충족 될 때까지 순차적 으로 수행되어야한다 . 예상되는 출력을 표시하는 가장 쉬운 방법은 몇 가지 예를 실행하는 것입니다.


한 번의 반복이 수행되었습니다 [123,456,789].

먼저 목록을에 회고로 넘깁니다 [123,456,789,456,123].

  • 함께 결합하면 회문이 아니지만 목록 측면에서 회문입니다.
  • [a,b,c][a,b,c,b,a]되었으므로 LIST는 회문 처리되었습니다.

그런 다음 각 목록 요소를 palindromize합니다 [12321,45654,78987,45654,12321].

이것은 각 반복이 수행되는 방식이며 본질적으로 전 방향 회문입니다.


주어진 n=1 and l=[123,456,789]:

12321
45654
78987
45654
12321

주어진 n=2 and l=[123,456,789]

123212321
456545654
789878987
456545654
123212321
456545654
789878987
456545654
123212321

주어진 n=1 and l=[3,2,1]:

3
2
1
2
3

주어진 n=2 and l=["hat","mad"," a "]:

hatahatah
madamadam
 a a a a 
madamadam
hatahatah
madamadam
 a a a a 
madamadam
hatahatah

주어진 n=2 and l=[" 3 ","2000"," 100"]:

 3   3 3   3 
2000002000002
100 00100 001
2000002000002
 3   3 3   3 
2000002000002
100 00100 001
2000002000002
 3   3 3   3 

주어진 n=4 and l=["3 ","20","1 "]:

3 3 3 3 3 3 3 3 3
20202020202020202
1 1 1 1 1 1 1 1 1
20202020202020202
3 3 3 3 3 3 3 3 3
20202020202020202
1 1 1 1 1 1 1 1 1
20202020202020202
3 3 3 3 3 3 3 3 3
20202020202020202
1 1 1 1 1 1 1 1 1
20202020202020202
3 3 3 3 3 3 3 3 3
20202020202020202
1 1 1 1 1 1 1 1 1
20202020202020202
3 3 3 3 3 3 3 3 3
20202020202020202
1 1 1 1 1 1 1 1 1
20202020202020202
3 3 3 3 3 3 3 3 3
20202020202020202
1 1 1 1 1 1 1 1 1
20202020202020202
3 3 3 3 3 3 3 3 3
20202020202020202
1 1 1 1 1 1 1 1 1
20202020202020202
3 3 3 3 3 3 3 3 3
20202020202020202
1 1 1 1 1 1 1 1 1
20202020202020202
3 3 3 3 3 3 3 3 3

주어진 n=3 and l=["_|__","__|_","___|"]:

_|___|_|___|_|___|_|___|_
__|_|___|_|___|_|___|_|__
___|_____|_____|_____|___
__|_|___|_|___|_|___|_|__
_|___|_|___|_|___|_|___|_
__|_|___|_|___|_|___|_|__
___|_____|_____|_____|___
__|_|___|_|___|_|___|_|__
_|___|_|___|_|___|_|___|_
__|_|___|_|___|_|___|_|__
___|_____|_____|_____|___
__|_|___|_|___|_|___|_|__
_|___|_|___|_|___|_|___|_
__|_|___|_|___|_|___|_|__
___|_____|_____|_____|___
__|_|___|_|___|_|___|_|__
_|___|_|___|_|___|_|___|_

주어진 n=2 and l=["---|---","__|","___|","____|"]:

---|-----|-----|-----|---
  __|   |__   __|   |__  
 ___|   |___ ___|   |___ 
 ____| |____ ____| |____ 
 ___|   |___ ___|   |___ 
  __|   |__   __|   |__  
---|-----|-----|-----|---
  __|   |__   __|   |__  
 ___|   |___ ___|   |___ 
 ____| |____ ____| |____ 
 ___|   |___ ___|   |___ 
  __|   |__   __|   |__  
---|-----|-----|-----|---

규칙

  • n 항상 1보다 큽니다.
  • l 항상 둘 이상의 요소를 갖습니다.
  • 의 모든 요소는 l길이가 같습니다.
  • 이것은 최단 솔루션으로 승자로 표시됩니다.

9
요소를 채울 필요가 없다면 이것은 더 나은 도전이 될 것입니다.
mbomb007

2
@JonathanAllan 그것은 전 방향 회문 또는 2D 회문입니다. 설명을 업데이트했습니다. 또한, 패딩은 더 작은 줄이 이미 회 문인 이상한 프린지 사례를 방지합니다.
Magic Octopus Urn

1
@JonathanAllan LIST를 palindromized 할 항목으로보고 있다면 목록 측면에서 볼 수 있습니다. [@ 1, @ 2, @ 1]도 요소가 아닌 목록으로 볼 때 회문입니다.
Magic Octopus Urn

1
@JonathanAllan 네, 기본적으로 원한다면 그렇게 볼 수 있습니다.
Magic Octopus Urn

1
마지막 예에는 패딩이 필요합니다.
Jonathan Allan

답변:


9

05AB1E , 4 바이트

단일 반복 만 필요한 경우 ( n=1), 프로그램은 회문이 û€û됩니다.

Fû€û

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

F       Do n times
 û      Palindromize the list
  €û    Palindromize each element in the list

입력이 여전히 프로그램의 필수 부분 인 경우 (11 바이트) :

€R.B€RIFû€û

오른쪽으로 정당화하는 더 짧은 방법을 찾을 수 없었습니다. 왼쪽 정렬 및 중심 조정은 모두 쉽지만 어떤 이유로 더 길었습니다. E또는 ²대신 사용 하거나 I작동합니다.


7

파이썬 2 , 71 63 바이트

lambda x,n,f=lambda x:x+x[-2::-1]:eval('f(map(f,'*n+`x`+'))'*n)

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

하는 회문 기능을 할당 f, 생성 (위해 다음과 같은 패턴을 평가 n=4)
f(map(f,f(map(f,f(map(f,f(map(f,<input>))))))))


1
당신이 assign 을 의미한다고 생각 합니다 . 나는 생각하지 않는다 assing가 롤 동사입니다.
mbomb007

@ mbomb007 웰프, 커피를 더 많이 먹을 시간 ~
Rod

6

젤리 , 6 바이트

ŒḄŒB$¡

Dyadic 링크 또는 전체 프로그램 목록 및 n.

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

Lynn의 환상적인 내장 "바운스"버전을 모두 사용합니다.

ŒḄŒB$¡ - Main link: l, n
     ¡ - repeat n times
    $  -     last two links as a monad (firstly with l then the result...)
ŒḄ     -         bounce ("palindromise") the list
  ŒB   -         bounce the elements

5

파이썬 2 , 64 바이트

h=lambda a:a+a[-2::-1]
f=lambda a,n:n and f(h(map(h,a)),n-1)or a

온라인으로 사용해보십시오! -바닥 글은 결과 목록의 각 요소를 한 줄에 하나씩 "예쁜 인쇄"로 인쇄합니다.

h palindomisation 함수이며, 마지막-하나 색인 -2에서 목록 -1의 단계에 이르기까지 목록의 모든 요소를 ​​입력에 추가합니다.

f전화 h호출의 결과와 h차례로 각 요소는 감소 n하나 때까지 자신을 호출 n하는 시점에 도달하면 0, a완성 된 제품이다.


... 그리고 나는 f=기억력이있는 재귀 함수에 대해 여전히 잊고 있습니다.
Jonathan Allan

2

APL, 15 바이트

(Z¨Z←⊢,1↓⌽)⍣⎕⊢⎕

설명:

  • (... )⍣⎕⊢⎕: 목록을 읽고 N입력으로 실행 N시간 :
    • ⊢,1↓⌽:리스트 다음에 반전 된리스트의 꼬리
    • Z←:이 기능을 Z
    • : 목록의 각 요소에도 적용

테스트:

          (Z¨Z ← ⊢, 1 ↓ ⌽) ⍣⎕⊢⎕ 
    ⎕ :
          'hat' 'mad' 'a'
    ⎕ :
          2
    ┌─────────┬─────────┬─────────┬┬─────────┬────────── ┬─────────┬─────────┬──────────┬─────────┐
    │ 하타 하타 │ 마담 다담 │ 아아아 │ 마담 다담 │ 하타 하타 │ 마담 다담 │ 아아아 │ 마담 다담 │ 하타 하타 │
    └─────────┴─────────┴─────────┴┴─────────┴────────── ┴─────────┴─────────┴──────────┴─────────┘


1

하스켈, 51 바이트

x%n=iterate((++)<*>reverse.init)x!!n
x?n=(%n)<$>x%n

사용 예 : ["123","456","789"] ? 1-> ["12321","45654","78987","45654","12321"]. 온라인으로 사용해보십시오! .

(++)<*>reverse.init회문을 목록 밖으로 만들고, iterate(...)x이것을 반복해서 반복 하고 목록 에서 중간 결과를 수집하고, !!n이 목록의 n 번째 요소를 선택합니다. (%n)<$>x%n의 n-palindrome의 각 요소의 n-palindrom을 x만듭니다.


1

JavaScript (ES6), 87 바이트

f=(n,l,r=l=>[...a].reverse().slice(1))=>n--?f(l.concat(r(l)).map(s=>s+r(s).join``),n):l

1

, 25 바이트

24 바이트 코드, -l플래그는 +1

Lq{gM:_.@>RV_gAL:@>RVg}g

목록을 명령 행 인수로 사용하고 stdin 에서 숫자 n을 가져옵니다. 온라인으로 사용해보십시오!

설명

                          g is list of cmdline args (implicit)
Lq{                   }   Read a line of input and loop that many times:
      _.@>RV_             Lambda function: take all but the first character (@>) of the
                           reverse (RV) of the argument (_), and concatenate that (.) to
                           the argument (_)
   gM:                    Map this function to g and assign the result back to g
                 @>RVg    Take all but the first element of the reverse of g
             gAL:         Append that list to g and assign the result back to g
                       g  After the loop, print g (each item on its own line due to -l)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.