더 크고, 더 나은 (깨진) 지퍼


9

( 이 도전에 크게 영향을 받았습니다 )

원래 도전에서 당신은 수평 지퍼를 만들어야했지만, 내 까마귀를 내려다 보면서 내 지퍼는 훨씬 더 수직적입니다 (그리고 약간 부러졌습니다) : P

입력

모든 형식 의 단일 문자열 ( s)과 정수 쌍 ( ab)이 제공됩니다. 어디:

a < (length-of-s / 2)

b <= ((length-of-s / 2) - (a + 1)) / 6

출력 및 채점

프로그램은 전체 프로그램이거나 올바른 형식의 단일 문자열 또는 선택한 배열 (한 줄에 한 항목)을 생성하는 함수일 수 있습니다. 출력 문자가 모두 정렬되는 경우 선행 및 후행 공백과 줄 바꾸기는 선택 사항입니다. 예.

["f     r"],["u     e"],["l     p"],["l     p"],["y     i"],[" o   z "],["  p n  "],["   e   "]

또는

"f     r\nu     e\nl     p\nl     p\ny     i\n o   z \n  p n  \n   e   "

테스트 케이스 1에 적합한 출력

표준 허점 은 금지되어 있으며 바이트 단위의 가장 짧은 코드가 이깁니다. 설명이없는 답변은 이길 수 없습니다.

설명

지퍼를 만들려면 먼저 문자열에서 공백이나 줄 바꿈 문자를 제거해야합니다. 그런 다음 반으로 접습니다 (자세한 내용은 테스트 사례 1 참조).

abcde fgh ij klmnopqr 아래의 두 줄이됩니다.

abcdefghirqponmlkj

그런 다음 각 문자열의 시작 부분에서 시작하여 다음과 같이 간격을 결정하여 각 하위 문자열에서 동일한 색인 문자를 한 줄에 배치합니다.

[0] a     r -- (a-3) five spaces
[1]  b   q  -- (a-2) three spaces
[2]   c p   -- (a-1) one space
[3]    d    -- (a)
[4]    o
[5]    e
[6]    n
etc...

그것은 우리 지퍼의 기초를 만듭니다. 이제 정수 ab.

a우편 번호입니다. 지퍼의 위치를 ​​결정하기 위해 출력 라인의 색인을 지퍼를 닫는 지점으로 사용합니다. 예를 들어 [3]위의 예제에서 대괄호로 묶인 부분은 지퍼가있는 곳입니다.

지퍼가 닫히기 전에, 위의 지퍼는 a-23 칸에 a-1가까운 곳 과 1 칸에 가까운 곳에 도달 할 때까지 5 칸 간격을 유지해야합니다 . 위의 예에서 명확하게하기 위해 a = 3(0 인덱스)


b내 지퍼 구멍 수입니다. 지퍼에 구멍을 만들기 위해 간격을두고 문자열을 다시 나눕니다.

로 예를 들어 구멍의 인덱스를 시작으로 h우리의 간격을 증가 h-1, 한 칸에 h3 개 공간과 h+1다시 한 공간을 떠나, h-2그리고 h+2그들이 구멍의 일부로 간주되므로 한 줄에 하나의 문자.

지퍼 다음과 각 구멍 사이에는 한 문자의 간격이 있어야 지퍼가 구멍 사이에 완전히 연결되어 보입니다.

구멍의 색인을 선택할 수 있지만 모두 지퍼의 '닫힌'섹션 내에 있어야합니다.

Again using 'abcdefghi' and 'rqponmlkj'

[0] a     r -- (open)
[1]  b   q  -- (closing)
[2]   c p   -- (closing)
[3]    d    -- zip 
[4]    o    -- gap
[5]    e    -- start of hole  (h-2)
[6]   n f   -- one space      (h-1)
[7]  m   g  -- three spaces   (hole h)
[8]   l h   -- one space      (h+1)
[9]    k    -- end of hole    (h+2)
[10]   i    -- gap
[11]   j

묻지 않으면 모든 것이 이해되기를 바라고 있습니다. 질문을 예상하면 p두 번째 예제 의 문자 가 두 번째 하위 문자열에 있음을 알 수 있지만 줄의 시작 부분에 나타납니다. 1-2-1-2-의 순서를 따라야합니다. 1-2, 출력에서의 위치에 관계없이 각 반에서 문자를 가져옵니다.

테스트 사례

"fully open zipper", 7, 0                     | "fully closed zipper", 0, 0
fullyope reppizn                              | fullyclos reppizde
                                              |
f     r   *Note: i particularly like this     | f
u     e     example as it shows the reversing | r
l     p     of the second half of the string  | u
l     p     causes the words to wrap from top | e
y     i     left to the  bottom and back up   | l
 o   z      the right side                    | p
  p n                                         | l
   e                                          | p
                                              | y
                                              | i
                                              | c
                                              | z
                                              | l
                                              | d
                                              | o
                                              | e
                                              | s
  • 1 열 : "어느 정도 까마귀에도 존재하지 않아야하는 매우 길지 않은 긴 지퍼", 24, 0
  • 2 열 : "Lorem ipsum dolor 앉은 자세, 헌신적 인 지방 제거 elit. Mauris faucibus molestie mi. Aliquam nec fringilla ipsum", 15, 5

:

s     e          |          L     m
t     i          |          o     u
u     d          |          r     s
p     o          |          e     p
i     o          |          m     i
d     h          |          i     a
l     t          |          p     l
y     n          |          s     l
l     e          |          u     i
o     c          |          m     g
n     e          |          d     n
g     d          |          o     i
u     y          |          l     r
n     n          |           o   f
b     a          |            r c
r     n          |             s
o     o          |             e
k     t          |             i
e     s          |            n t
n     i          |           m   a
z     x          |            a m
i     e          |             u
 p   t           |             e
  p n            |             q
   e             |             t
   d             |             i
   r             |             ,
   l             |            l c
   t             |           A   o
   u             |            . n
   h             |             i
   o             |             s
   a             |             m
   h             |            e e
   t             |           c   i
   s             |            t t
                 |             e
                 |             s
                 |             t
                 |             s
                 |             u
                 |             l
                 |             r
                 |             o
                 |             a
                 |             m
                 |             d
                 |             s
                 |             i
                 |             u
                 |             p
                 |            b i
                 |           i   s
                 |            c c
                 |             u
                 |             i
                 |             a
                 |             n
                 |             f
                 |             g
                 |             s
                 |             e
                 |             i
                 |            l r
                 |           i   u
                 |            t a
                 |             .
                 |             M

편집 : 추가 테스트 사례

"abcde fgh ij klmnopqr","3","1"

a     r
 b   q
  c p
   d
   o
   e
  n f
 m   g
  l h
   k
   i
   j

1
나는이 도전이 마음에 드는 것 같지만 그것을 세 번 읽었으며 정확히 내가해야 할 일에 대해 100 %가 아닙니다. 규칙과 사양을 전체 단락보다 짧고 명확하게 만드는 것이 좋습니다.
TheLethalCoder

나는 그것을 줄 수있다 : P
MysticVagabond

더 명확 해? @TheLethalCoder
MysticVagabond

안녕하세요, 나는 인쇄 가능한 ASCII 태그를 제거했습니다. 출력 태그가 아닌 제한된 소스 문제에 사용되었습니다.
AdmBorkBork

@AdmBorkBork 덕분에 문자의 출처를 더 명확하게 알 수 있도록 설명을 알파벳순으로 다시 편집 한 것을 보았습니다.
MysticVagabond

답변:


1

PHP 7.1, 421412218195192191195 바이트

for([,$s,$a,$b]=$argv;$i-$k<strlen($s=strtr($s,[" "=>""]));$p=0)for($t=++$y>$a-2?$y>=$a?$y>$a?$b-->0?_4_4_4_31_23_31:_4:_31:_23:_15;$c=$t[$p++];)echo$c<_?str_pad("",$c).$s[++$f&1?$i++:$k-=1]:"
";

온라인으로 실행 -nr하거나 사용해보십시오 .
행간을 선행하지만 후행 줄 바꿈 및 행당 하나의 공백을 인쇄합니다.


TIO는이 오류를 알려줍니다 :<br /> <b>Parse error</b>: syntax error, unexpected ',', expecting ']' in <b>[...][...]</b> on line <b>7</b><br />
MysticVagabond

@Xynos PHP 버전을 7.1로 설정
Titus

당신의 대답은 :) 병이 테스트 케이스로 입력에 대한 올바른 출력을 추가, 너무 가까이 우편에 구멍을 배치
MysticVagabond

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