텍스트 중심!


40

텍스트 중심!

이 도전에서 당신은 다양한 라인을 중심으로 할 것입니다.

Foo
barbaz

 Foo
barbaz
Hello
World

Hello
World
Programming Puzzles
&
Code Golf

Programming Puzzles
         &
     Code Golf

사양

각 입력 줄에는 항상 공백이 아닌 문자가 하나 이상 있어야합니다. 공백 문자 만 공백 ( )과 줄 바꿈 이라고 가정 할 수 있습니다 . 각 입력 줄에는 후행 및 / 또는 선행 공백이 없습니다 (줄 바꿈 제외). 출력에서 후행 공백은 허용 되지 않습니다.

입력에서 가장 긴 줄 가운데에 있어야합니다. 해당 행의 길이가 짝수 인 경우 프로그램 / 기능이 왼쪽 가운데를 선호합니다. 최대 줄 길이는 언어가 처리 할 수있는 모든 것이지만 프로그램 길이는 500 자 이상이어야합니다.


리더 보드

다음은 일반 리더 보드와 언어 별 수상자 개요를 생성하는 스택 스 니펫입니다.

답변이 표시되도록하려면 다음 마크 다운 템플릿을 사용하여 헤드 라인으로 답변을 시작하십시오.

# Language Name, N bytes

N제출물의 크기는 어디에 있습니까 ? 당신이 당신의 점수를 향상시킬 경우에, 당신은 할 수 있습니다 를 통해 눈에 띄는에 의해, 헤드 라인에 오래된 점수를 유지한다. 예를 들어 :

# Ruby, <s>104</s> <s>101</s> 96 bytes

헤더에 여러 숫자를 포함하려는 경우 (예 : 점수가 두 파일의 합계이거나 인터프리터 플래그 페널티를 별도로 나열하려는 경우) 실제 점수가 헤더 의 마지막 숫자 인지 확인하십시오 .

# Perl, 43 + 2 (-p flag) = 45 bytes

언어 이름을 링크로 만들어 리더 보드 스 니펫에 표시 될 수도 있습니다.

# [><>](http://esolangs.org/wiki/Fish), 121 bytes


이것은 이므로 바이트 단위의 가장 짧은 코드가 승리합니다!


하나 이상의 내부 공간이 없을까요?
cat

이 없을 것 @cat 어떤 라인에 선도적 인 공백 또는 후행 공백 (있는 경우 줄 바꿈에 대한 기대)
Downgoat

예,하지만 단어 사이의 내부 공간을 의미합니다
cat

1
@cat oh, 단어 사이에 공백이 두 개 이상있을 수 있습니다. 예를 들어 foo(space)(space)(space)bar완벽하게 수용 가능한 입력
Downgoat

항상 한 줄 이상이있을 것이라고 가정 할 수 있습니까?
GamrCorps

답변:


15

Pyth, 19 17 바이트

Jakube 덕분에 2 바이트

V.ztr+1.[l.T.zNd6

데모

센터 패드 기능 .[이 처음으로 유용하다고 생각합니다. 가장 긴 줄의 길이는 잘리지 않는 조옮김 ( .T)을 사용하여 찾습니다 .

공백이 아닌 문자를 앞에 추가하고 공백을 제거한 다음 추가 된 문자를 제거하면 후행 공백이 제거됩니다.


1
아마도 배열의 최대 길이가 필요할 것입니다. 너무 자주 나타납니다. +1
Maltysen

사양에 따르면 "출력에서 공백을 사용할 수 없습니다." 이것은 출력의 각 짧은 줄에 공백이있는 것으로 보이므로 확실하지 않습니다.
potato

@ potato Thanks-대답 한 후에 추가되었습니다.
isaacg

31

vim, 43 36 35 바이트

VGrx:sor
G:let &tw=col("$")
uu:%ce

게시하지 않는 것이 좋습니다. 후행 줄 바꿈에 유의하십시오. 중요합니다.

캐릭터를 저장 해준 @Marth 에게 감사합니다 !

vim 친화적 인 형식 :

VGrx:sor<cr>G:let &tw=col("$")<cr>uu:%ce<cr>

설명:

VGrx                   replace every character with an "x"
:sor<cr>               sort (since all chars are now same, sorts by line length)
G                      go to the very last line
:let &tw=col("$")<cr>  set &tw to column number of last char on this line
                         "let &tw" is equivalent to "set tw"
                         tw is short for textwidth, used in :center
uu                     undo the sort, and the replacing-with-x too
:%ce<cr>               center over entire file (%), using textwidth set earlier

1
확실히 이것은 모두 삽입 모드에서 수행되어야합니다.
Alex A.

9
@AlexA. 삽입 모드에서는 수행 되지 않습니다 . ಠ_ಠ
손잡이

sor!정렬 순서를 역전시키는 데 사용 하는 경우을 사용 col("$")하는 대신 첫 번째 줄의 길이 (순서가 역순이므로 가장 긴 길이)를 가져와 G$총 1 바이트를 절약 할 수 있습니다! 편집 : 또는 정렬 순서를 유지하고 G:let &tw=col("$")대신 사용할 수 있습니다 .
Marth December

@Marth 감사합니다! 나는 후자를 선택했다 (특별한 이유는 없다).
Doorknob

통해 찾고 :h :sort난 당신이 사용할 수 있도록, 정렬에 일치하는 텍스트를 건너 뛸 정규식을 통과 할 수 있다는 것을 발견 :sor /./길이 (4 바이트) 정렬 제거 할 수있는의 VGrx(-4 바이트)와 두 번째 실행 취소 ( -1 바이트). 또한 명령을 연결하는 |대신 구분 기호를 사용 <cr>하여 :이전 let(-1 바이트) 을 건너 뛸 수 있습니다 (해당 sor!솔루션 을 사용해야하는 G경우 ex 명령이 아님). 따라서 :sor! /./|let &tw=col("$")|u|%ce (후행으로 <CR>) 2 바이트를 절약해야합니다.
Marth December

23

수학, 96 바이트

StringRiffle[#~StringPadLeft~Floor[Max@(l=StringLength)@a/2+l@#/2]&/@(a=#~StringSplit~"
"),"
"]&

그것이 어떻게 작동했는지 묻지 말고 올바른 출력을 생성 할 때까지 나는 그것을 사용했습니다.


27
+1 "어떻게 작동하는지 물어 보지 말고, 올바른 출력을 생성 할 때까지 그냥 소리내어 보았습니다"
cat

4
@cat 이것이 제가 골프를하는 방법입니다.
lirtosiast

11

비 경쟁적 인 Funciton

이 과제는 게으른 시퀀스에 대한 "최대 값"(및 최소값) 기능의 아픈 부족을 강조 했으므로 핵심 라이브러리에 추가했습니다 (각각 ⊤ 및 ⊥). 따라서 나는 이것을 골치 아픈 답변 으로 제출하지 않았으며 (valid 함수 선언을 유효하게 포함해야 함) 여기에 주요 프로그램이 있습니다.

(function(){$('pre,code').css({lineHeight:5/4,fontFamily:'DejaVu Sans Mono'});})()더 나은 렌더링을 위해 브라우저 콘솔에서 실행 하십시오.

   ╓───╖         ╔════╗  ┌───╖  ╔═══╗
 ┌─╢ ‡ ╟─┐       ║ 10 ╟──┤ ǁ ╟──╢   ║
 │ ╙───╜ │       ╚════╝  ╘═╤═╝  ╚═══╝
 │ ┌───╖ │  ┌──────────────┴──────────────────┐
 └─┤ ‼ ╟─┘┌─┴─╖ ┌───╖ ┌───╖ ┌───╖ ┌───╖       │     │
   ╘═╤═╝  │ ɱ ╟─┤ ⊤ ╟─┤ + ╟─┤ ~ ╟─┤ ℓ ╟───┐ ┌─┴─╖ ┌─┴─╖ ╔════╗
     │    ╘═╤═╝ ╘═══╝ ╘═╤═╝ ╘═══╝ ╘═══╝   │ │ ɱ ╟─┤ ʝ ╟─╢ 10 ║
    ┌───╖ ╔═╧═╕ ╔═══╗ ┌─┴──╖ ┌───╖ ╔════╗ │ ╘═╤═╝ ╘═══╝ ╚════╝
  ┌─┤ ℓ ╟─╢   ├─╢ 1 ║ │ >> ╟─┤ … ╟─╢ 32 ║ │   │
  │ ╘═══╝ ╚═╤═╛ ╚═╤═╝ ╘═╤══╝ ╘═╤═╝ ╚════╝ │ ╔═╧═╕ ╔═══╗
  └─────────┘     └─────┘      │   ┌───╖  ├─╢   ├─╢ 0 ║
                               └───┤ ‡ ╟──┘ ╚═╤═╛ ╚═══╝
                                   ╘═╤═╝      │
                                     └────────┘

설명

나는 이것이 람다 식을 사용하는이 사이트의 첫 번째 Funciton 답변 일 것이라고 생각합니다.

  • 먼저, 줄 ǁ바꾸기에서 입력 문자열을 분할하는 데 사용 합니다 (ASCII 10). 게으른 시퀀스를 반환합니다.
  • 이 시퀀스를 ɱ(맵)에 전달하여 각 문자열의 길이를 계산하는 람다를 제공 한 다음 최종 시퀀스를 통과 하여 가장 긴 행의 길이를 얻습니다.
  • 우리는 또한 그 시퀀스를 다른 것을 통해 전달 ɱ하여 각 문자열의 길이를 계산하고 이전에 계산 된 최대 줄 길이에서 빼고 2를 (실제로 오른쪽으로 1로) 나누고 많은 공간을 생성하는 람다를 제공합니다 (ASCII 32) 그런 다음 문자열을 해당 공간에 연결합니다. (기하학적 이유로 매개 변수를 반대로 사용하여 (문자열 연결) 함수를 선언했습니다 .)
  • 마지막으로 ʝ개행 (ASCII 10)을 구분 기호로 사용하여 모든 문자열을 다시 합치는 데 사용합니다.

이게 얼마나 대단한지 +1 716 자, 총 1,508 바이트 "
cat

9

망막 , 54 52 바이트

+m`^(.)+$(?<=(?=[^\t]*^..(?<-1>.)+(?(1)^))[^\t]*)
 $0 

\t의 실제 탭으로 대체 할 수 있지만, 내가 사용했던 \t다른 SE 공백을 탭으로 변환하기 때문에, 여기. 두 번째 줄에는 선행 공간이 있습니다.

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

설명

기본 아이디어는 가장 긴 줄보다 최소 2 자 이상 (또는 기술적으로는 다른 어떤 줄 보다 짧은 2 줄) 인 줄을 일치시키고 두 칸을 둘러싸는 것입니다. 이 줄을 더 이상 찾을 수 없을 때까지 반복됩니다. 즉, 모든 줄은 최대 길이의 한 문자 내에 있습니다 (한 문자는 패리티 불일치를 설명하고 이러한 줄이 왼쪽으로 이동합니다). 센터).

실제 정규식은 다음과 같습니다.

^(.)+$

1각 캐릭터마다 한 장의 캡처를 그룹으로 밀면서 한 줄만 일치시킵니다 .

(?<=...[^\t]*)

오른쪽에서 왼쪽으로 일치하는 lookbehind이며 커서를 문자열의 시작 부분으로 이동하여 lookahead 내부가 전체 문자열을 확인할 수 있습니다. 앵커가 없기 때문에 다른 위치에서 미리보기를 적용 할 수 있지만 추가 일치 항목은 생성되지 않습니다. 공백에 관한 한 입력에는 공백과 줄 바꿈 만 포함되어 있기 때문에 문자열의 모든 문자 [^\t]와 항상 일치 한다는 것을 알고 있습니다.

(?=[^\t]*^..(?<-1>.)+(?(1)^))

이 미리보기는 현재 일치하는 것보다 2 자 이상 긴 줄을 찾습니다. [^\t]*모든 줄과 일치시킬 수 있도록 문자열을 통해 이동합니다. ^우리는 라인의 시작부터 시작합니다. ..더 긴 줄에 필요한 두 개의 추가 문자와 일치합니다. 이제 (?<-1>.)+그룹에서 터지는 동안 그 라인에서 개별 문자와 일치 1(주 .이 한 줄에 구속되도록하는 줄 바꿈과 일치하지 수 있습니다.) 마지막으로 (?(1)^)전체 그룹을 비운다고 주장합니다 1. 줄이 필요한 것보다 짧으면 줄에 그룹 1에서 팝업하기에 충분한 문자가 없어서 비울 수 없기 때문에 불가능합니다.


7

Jolf , 3 바이트

비경쟁, 업데이트 날짜 이후 질문.

여기 사용해보십시오! .

pci
pc  center
  i  string input

¯ \ _ (ツ) _ / ¯ 유용한 기능 인줄 알았습니다.


1
이것은 표준 허점이며 명시 적으로 허용되지는 않지만 사용자가 만든 언어가 아닌 사용자가 찾은 언어로 작성되지 않는 한 잘못된 형식입니다.
Elias Benevedes

3
@EliasBenevedes 대회 전에 기능을 추가했습니다. 코드가 관련성이 될 때까지 코드를 자주 업데이트하지 않습니다.
Conor O'Brien

7

자바 스크립트 (ES6), 93 91 바이트

s=>(m=l=s.split`
`).map(x=>(v=x.length/2)<m?v:m=v).map((x,i)=>" ".repeat(m-x)+l[i]).join`
`

@ edc65 덕분에 2 바이트가 절약 되었습니다 !

설명

s=>(
  m=                // m = max line length (divided by 2)
    l=s.split`
`)                  // l = array of lines
.map(x=>            // for each line
  (v=x.length/2)    // v = current line length / 2
    <m?v:m=v        // set m to the max line length and return v
)
.map((x,i)=>        // for each line length / 2
  " ".repeat(m-x)   // add spaces before
    +l[i]           // add line text
)
.join`
`                   // return lines as a newline-separated string

테스트


.repeat정수가 아닌 값을 받아들이고 자르기 때문에 필요하지 않습니다|0
edc65

7

CJam, 26 23 19 바이트

qN/_z,f{1$,m2/S*\N}

CJam을 처음 사용했습니다! Martin Büttner 덕분에 4 바이트가 절약되었습니다. 온라인으로 사용해보십시오.

설명

qN/    e# Read input and split each line
_z,    e# Transpose a copy and get its length to find the longest line
f{     e# For each line...
  1$,- e# Subtract its length from the longest length
  2/   e# Divide by two to get just the spaces to add to the left
  S*\  e# Add a string with that many spaces to the beginning
  N    e# Add a newline to go on to the next line
}

1
다음은 몇 가지 제안입니다 :)qN/_z,f{1$,m2/S*\N}
Martin Ender

6

LabVIEW, 3 또는 35 LabVIEW 프리미티브

아무 것도 남지 않을 때까지 줄을 찾은 다음 추가 할 공간의 수를 계산하고 모든 것을 합칩니다.

또는 문자열 표시기의 내장 중앙 정렬을 사용할 수 있지만 속임수처럼 느껴집니다.


6

파이썬 2, 83 81 바이트

def f(s):
 t=s.split('\n')
 for y in t:print(max(len(f)for f in t)-len(y))/2*' '+y  

2 개의 문자를 저장 한 @xnor에게 감사합니다

입력 예 :

f("""Programming Puzzles
&
Code Golf""")

출력 예 :

Programming Puzzles
         &
     Code Golf

그리고 str.center () 및 str.rstrip (@JF 덕분에)을 사용하여 84 바이트로 2 위로 끝납니다.

def f(s):
 t=s.split('\n')
 for y in t:print y.center(max(len(f)for f in t)).rstrip()

len두 번 사용하는 변수 에 할당 하기 위해 문자를 저장하지 않으며 5 자 (예 :)에서도 끊어집니다 range. 또한 map목록 광고에 사용할 수 있습니다 .
xnor

@ 빌렘, 당신은 후행 공간을 제거하기 위해 str.rstrip()전화 후 사용할 수 있습니다 center.
JF

당신은 전체 프로그램을 7 바이트를 저장하고 사용 할 수 있습니다 len(max(a,key=len)), 이 참조 .
ბიმო

5

티 스크립트 , 24 바이트

£p.R((aßln)¯-ln)/2)+l,§)

라인을 통해 루프, 추가 floor((max line length - line length) / 2) 하고 시작 부분에 공백을 합니다.

언 골프

£   p.R((aß  ln)¯  -ln)/2)+l,§   )
xl(#p.R((am(#ln)X()-ln)/2)+l,`\n`)

xl(#    // Loops through newlines
    p.R(   // Repeats spaces
      (
       am(#ln)    // Map all line lengths
              X() // Get largest line length
       -ln)       // Subtract current line length
      /2)  // Divide by two
      +l,  // Add current line text
`\n`)

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


5
왜 내 답변이 다운 다운 되는가? 사용자 이름 / 아바타를 변경할 때가되었다고 생각합니다 : p
Downgoat

2016-07-27 현재 수정되었습니다. : P
user48538

5

PowerShell, 58 67 바이트

@mazzy의 의견 덕분에 58 바이트까지 줄였습니다.

param($a)$a|%{$_|% *ft(($a|% le*|sort)[-1]/2+$_.length/2)}


# It takes an array of strings as input
PS C:\Temp> .\center.ps1 'aaa','bb','c'
aaa
bb
 c


# Or here, read from a file
PS C:\Temp> .\center.ps1 (gc t.txt)
info0:info1:info2:info3
      info0:info1
          ttt
          tt
           t
  • 문자열 배열을로 사용 $a하고을 사용하여 각 문자열을 반복합니다 |%{...}.
  • 원하는 마지막 줄 길이를 매개 변수로 사용하는 바로 가기 string.padleft()를 통해 각 문자열 에서 메서드를 호출합니다 % -member.
    • 우리는 필요하다 array_longest_line_length/2 + current_line_length/2
    • 끝 부분은 current_line_length/2->$_.length/2
    • 다른 부분은 루프를 통해 매번 배열의 최대 선 길이를 다시 계산하고 중첩 된 루프를 사용하여 행 길이 배열을 만들고 정렬 한 다음 마지막 행을 가져옵니다.


1
@mazzy 더 낫다! 답변으로 게시하지 않았으므로 크레딧으로 답변으로 편집했습니다.
TessellatingHeckler

3

이맥스 리스프, 203 바이트

(let((f 0)(l 0))(dolist(s(split-string(buffer-string)"\n"))(set'l(string-width s))(when(> l f)(set'f l)))(let((fill-column f))(goto-char(point-min))(while(<(point)(point-max))(center-line)(next-line)))))

언 골프 드 :

(let ((f 0) (l 0))
  (dolist (s (split-string(buffer-string) "\n"))
    (set 'l (string-width s))
    (when (> l f)
      (set 'f l)))
    (let ((fill-column f))
      (goto-char (point-min))
      (while (< (point) (point-max))
        (center-line)
        (next-line)))))

중심 :

               (let ((f 0) (l 0))
 (dolist (s (split-string(buffer-string) "\n"))
           (set 'l (string-width s))
                 (when (> l f)
                  (set 'f l)))
             (let ((fill-column f))
            (goto-char (point-min))
         (while (< (point) (point-max))
                 (center-line)
                (next-line)))))

3

HTML, 40 바이트

<xmp style=float:left;text-align:center>

조각은 포함 </xmp>코드 조각 뷰어 내 태그 균형을 원하기 때문에 태그를.


2

MATL , 22 31 바이트

`jtYz~]xXhc4X4H$ZuZ{Zv

각 줄에는 후행 줄 ( enter키 입력) 이 입력됩니다. 빈 줄 (두 번의 enter키 입력)은 입력의 끝을 나타냅니다.

>> matl `jtYz~]xXhc4X4H$ZuZ{Zv
> foo
> barbaz
> 
 foo
barbaz

설명

`          % do...
  j        % input one string
  tYz~     % is it not empty?
]          % ...while
x          % delete last input (empty string)
Xh         % concatenate all inputs into a cell array
c          % convert to char (2D array). This fills with spaces to the right
4X4H$Zu    % center justify
Z{         % convert to cell array of strings
Zv         % remove trailing blanks of each string

2

루비, 76 68 61 바이트

->t{(s=t.split$/).map{|l|l.center(s.map(&:size).max).rstrip}}

샘플 실행 :

2.1.5 :001 > puts ->t{(s=t.split$/).map{|l|l.center(s.map(&:size).max).rstrip}}["Programming Puzzles\n&\nCode Golf"]
Programming Puzzles
         &
     Code Golf

53 바이트 :->t{(s=t.split$/).map{|l|l.center s.map(&:size).max}}
daniero

나는 또한 center먼저 길 을 시도 했지만, 내가 이해하는 것처럼 "출력에서 트레일 링 공백은 허용되지 않습니다"라는 규칙을 깨뜨릴 것입니다. 그 &:size부분에 감사드립니다 – 나는 또한 그것을 시도했지만, 나는 구문에 대해 무언가를 부딪쳤다.
manatwork

2

하스켈, 111 81 77 바이트

l=length
f s|q<-lines s=unlines[([1..div(maximum(l<$>q)-l w)2]>>" ")++w|w<-q]

f 기능에 입력하면 출력이 인쇄되지 않습니다.

사용법 : 인터프리터에로드 ghci center.hs한 다음 주어진 문자열에 f 출력을 인쇄하려면putStr$f"Programming Puzzles\n&\nCode Golf"

편집 : 34 바이트의 nimi 덕분에 훌륭했습니다! :디


두 가지 더 : Prelude의 최신 버전에는 map: 의 접두사 버전이 포함되어 <$>있습니다. replicate(...)' '로 대체 할 수 있습니다 [1.. ...]>>" ". 전체적으로 : unlines[([1..div(maximum(l<$>q)-l w)2]>>" ")++w|w<-q].
nimi

아 네, 제가 이전에 제출 한 제출물에서 새로운지도 접두사를 언급 한 것을 기억합니다. 복제 트릭은 어떻게 작동합니까?
basile-henry

l1 >> l2l2의 (길이 l1) 복사본을 만들어 연결합니다. 예를 들어 "abcd" >> [1,2]-> [1,2,1,2,1,2,1,2](단일 목록에 1-2 개의 <-4 사본). 우리의 경우 그것은 [1..n]>>" "공간의 n 사본입니다 replicate.
nimi

설명 감사합니다! :)
basile-henry

2

R, 126 바이트

암호

for(z in 1){l=scan(,"");m=sapply(l,nchar);t=max(m[m==max(m)]);for(i in 1:length(m))cat(rep(" ",(t-m[i])/2),l[i],"\n", sep="")}

언 골프

for(z in 1){                          # any way to get rid of this?
  l=scan(,"")
  m <- sapply(l,nchar)
  t <- max(m[m==max(m)])
  for(i in 1:length(m)){
    cat(rep(" ",(t-m[i])/2),l[i],"\n", sep="")
  }
}

아마도이 작업을 수행하는 더 좋은 방법이있을 수 있습니다.


1

Gema, 160 바이트

\L<T>=@push{i;$0}@set{m;@cmpn{@length{$0};${m;};$m;$m;@length{$0}}}
?=
\Z=@repeat{@sub{@line;1};@set{o;@right{@div{@add{$m;@length{$i}};2};$i}\n${o;}}@pop{i}}$o

적절한 배열 구조와 적절한 루프 명령없이 언어로 수행 할 수있는 작업을보고 싶어하는 호기심을 위해 주로 작성되었습니다.

샘플 실행 :

bash-4.3$ gema '\L<T>=@push{i;$0}@set{m;@cmpn{@length{$0};${m;};$m;$m;@length{$0}}};?=;\Z=@repeat{@sub{@line;1};@set{o;@right{@div{@add{$m;@length{$i}};2};$i}\n${o;}}@pop{i}}$o' <<< $'Programming Puzzles\n&\nCode Golf'
Programming Puzzles
         &
     Code Golf

1

펄 6 , 61 바이트

$/=(my@l=lines)».chars.max;for @l {put ' 'x($/-.chars)/2~$_} # 61 bytes

용법:

$ perl6 -e '$/=(my@l=lines)».chars.max;for @l {put " "x($/-.chars)/2~$_}' <<< \
'Programming Puzzles
&
Code Golf'
Programming Puzzles
         &
     Code Golf

Perl 5를 사용하면 for @l {2 바이트를 면도 하는 등의 공백을 제거하고 다른 바이트를 면도 로 변경할 put " "put" "있습니다. 펄 6도 마찬가지입니까? (Perl 6을 모르겠습니다.) 또한 여기에 표시된 출력이 필요한 출력과 일치하지 않습니다. 오타입니까?
msh210

@ msh210 Perl 6은 문법이 조금 더 제한적입니다. 그래도 다른 분야에서 그것을 보완하는 것 이상입니다.
Brad Gilbert b2gills

1

apt, 28 25

¡V=VwXl}R;¡Sp½*(V-Xl¹+X}R

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

작동 원리

¡     V=VwXl}R;¡     Sp½*(V-Xl¹ +X}R
UmXYZ{V=VwXl}R;UmXYZ{Sp½*(V-Xl) +X}R

           // Implicit: U = input string, V = 0
UmXYZ{  }  // Map each item X in U through this function,
         R // splitting U at newlines beforehand:
  V=VwXl   //  Set V to max(X, Y.length).
           // V is now set to the length of the longest line.

UmXYZ{  }  // Map each item X in U with this function,
         R // again splitting U at newlines beforehand:
 ½*(V-Xl)  //  Take V minus X.length, and multiply by 1/2.
Sp         //  Repeat a space that many times.
        +X //  Concatenate X to the end.

0

PHP , 98 바이트

function($s){foreach($a=explode("
",$s)as$l)echo str_pad($l,max(array_map(strlen,$a)),' ',2),"
";}

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

언 골프 드 :

function str_center( $s ) {
    $a = explode( PHP_EOL, $s );
    $m = max( array_map( 'strlen', $a ) );
    foreach( $a as $l ) {
        echo str_pad( $l, $m, ' ', STR_PAD_BOTH ), PHP_EOL;
    }
}

산출:

Programming Puzzles
         &         
     Code Golf   


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