จัดแนวข้อความให้เป็นบล็อก


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 \tเพียงพิมพ์และไม่ได้มีแท็บ
  • อินพุตสามารถมีตัวแบ่งบรรทัด ถ้ามันไม่เช่นนั้นพวกเขาจะได้รับเป็น\n, \rหรือ\r\nขึ้นอยู่กับสิ่งที่คุณคาดหวัง อย่างไรก็ตามจะรวมเข้าด้วยกันตลอดทั้งอินพุต
  • อินพุตสามารถถูกกำหนดใน STDIN หรือเป็นอาร์กิวเมนต์บรรทัดรับคำสั่ง คุณสามารถใช้ทั้งคู่ได้หากมันเหมาะสมกับความต้องการของคุณ (ตัวอย่างเช่นอ่านขนาดบล็อกจากคำสั่ง args และอินพุตเป็น stdin) อย่างไรก็ตามคุณไม่สามารถ hardcode ส่วนใด ๆ ของการป้อนข้อมูลไปยังโปรแกรมของคุณ
  • คุณอาจคิดว่าขนาดบล็อกนั้นได้รับเป็นจำนวนบวก ( > 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

ซ้ำกันแสดงให้เห็นถึงข้อความโดยการเพิ่มช่องว่าง
pppery

@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.