텍스트를 블록에 정렬


10

직무

당신의 임무는 주어진 입력을 주어진 크기의 블록에 맞추는 전체 프로그램을 작성하는 것입니다.

입력:

40
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

산출:

Lorem  ipsum dolor sit amet, consectetur
adipiscing  elit,  sed do eiusmod tempor
incididunt  ut  labore  et  dolore magna
aliqua.  Ut  enim  ad minim veniam, quis
nostrud   exercitation  ullamco  laboris
nisi ut aliquip ex ea commodo consequat.
Duis  aute  irure dolor in reprehenderit
in voluptate velit esse cillum dolore eu
fugiat  nulla  pariatur.  Excepteur sint
occaecat cupidatat non proident, sunt in
culpa  qui  officia deserunt mollit anim
id est laborum.
                <-- note the linebreak

입력 세부 사항

  • 전체 실행 가능 / 해석 가능한 프로그램을 작성해야합니다.
  • 입력에 인쇄 가능한 ASCII 문자 만 포함하고 tab을 포함하지 않는다고 가정 할 수 있습니다 \t.
  • 입력은 줄 바꿈을 포함 할 수 있습니다. 이 때문에, 그들로 주어진 경우 \n, \r또는 \r\n에 따라 당신은 무엇을 기대. 그러나 전체 입력에서 통일됩니다.
  • 입력은 STDIN 또는 명령 행 인수로 제공 될 수 있습니다. 필요에 따라 둘 다 사용할 수 있습니다 (예 : 명령 인수에서 블록 크기를 읽고 stdin으로 입력). 그러나 프로그램의 입력 부분을 하드 코딩 할 수 없습니다.
  • 블록 크기가 유효한 양수 ( > 0) 숫자 라고 가정 할 수 있습니다 .
  • 입력의 줄 바꿈은 공백과 같은 방식으로 처리됩니다 (따라서 단어 구분 기호)
  • 입력에 여러 개의 동시 공간이 포함되어 있으면 하나의 공간으로 처리됩니다.

출력 세부 사항

  • 출력은 주어진 크기의 블록으로 포맷되어야합니다. 서식은 단어 사이에 공백을 추가하여 수행됩니다.
  • 한 줄에서 단어 사이의 공백 수는 해당 줄에서 같아야합니다. 가능하지 않은 경우 왼쪽부터 시작하여 단어 뒤에 공백을 하나씩 추가해야합니다.
  • 단어가 주어진 블록 크기보다 길면 한 줄로 독립되어 블록 크기를 초과합니다.
  • 출력에 단어가 하나만 포함되어 있으면 왼쪽에 정렬됩니다.
  • 출력의 마지막 줄은 단어 사이에 하나의 공백 만두고 왼쪽에 맞춰야합니다. 출력의 마지막 줄은 후행 줄 바꿈으로 끝나야합니다.

얼마 후에 가장 짧은 바이트 수의 응답이 이깁니다.
추가 정보가 필요하면 의견을 남겨주십시오.

테스트 사례

Input:
10
Lorem ipsum dolor sit amet,
consectetur adipiscing elit, sed do eiusmod tempor

Output:
Lorem
ipsum
dolor  sit
amet,
consectetur
adipiscing
elit,  sed
do eiusmod
tempor

Input:
20
Lorem     ipsum

dolor  sit amet,

Output:
Lorem   ipsum  dolor
sit amet,

Input:
1
Lorem ipsum dolor sit amet

Output:
Lorem
ipsum
dolor
sit
amet

관련. (마침내 이미 자동 삭제 된 타이포그래피 태그에 대한 두 번째 과제 입니다.)
Martin Ender

@ MartinBüttner 나는 그런 태그가 존재한다는 것을 몰랐다.
Zereges

@ Vɪʜᴀɴ 당신은 전체 실행 가능한 / 해석 가능한 프로그램을 작성해야합니다.
Dennis


@ppperry 흥미롭게도, 어떤 이유로 든 내 검색 기술을 피했습니다
Zereges

답변:



1

루비, 179 자

n=gets.to_i
s=t=''
$<.read.split.map{|w|if(t+w).size>=n
0while t.size<n&&(1..n).any?{|i|t.sub!(/[^ ]#{' '*i}(?=[^ ])/){|x|x+' '}}
s+=t+?\n
t=w
else
t+=' '+w
t.strip!
end}
puts s,t

너무 오래 ...

멍청한 버전 :

n = gets.to_i
s = t = ''
$<.read.split.map{|w|
    if (t + w).size >= n
        0 while t.size < n && (1..n).any?{|i|t.sub!(/[^ ]#{' '*i}(?=[^ ])/){|x|x+' '}}
        s += t + ?\n
        t = w
    else
        t += ' ' + w
        t.strip!  # this is only necessary because of the very first word >:(
    end
}
puts s,t

0

CJam, 87 바이트

l~:LS*qNSerS%{(2$1$a+_S*,L>{;a\}{\;@;\}?}h;S*a]1>{I1>{LIs,-I,(md1b\aI,(*.+Sf*I.\}I?N}fI

여전히 골프를 타야합니다. CJam 통역사 에서 온라인으로 사용해보십시오 .


0

레티 나 133 바이트

\s+

+`((1)*1 )((?<-2>.)*\S|\S+) 
:$3<LF>$1
m+`^(?=.(.)+$[^<TB>]*^(?>(?<-1>1)+)1)((.*):(\S+ +)|(\S+ +)(.*):)
$3$4$5 :$6
+`:|<LF>1+| (?= .*$)
<empty>

<empty>빈 후행 라인을 나타냅니다. 코드를 실행하려면 각 줄을 별도의 파일에 넣고 <LF>줄 바꿈 문자 (0x0A)와 <TB>탭 (0x09)으로 바꿉니다. 골프를 마치면 설명을 추가하겠습니다.

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