ลบการใส่ไฮเฟ็น


15

ถึงเวลาสำหรับความท้าทายการใหม่! เป็นปัญหาที่พบบ่อยเมื่อคัดลอกระหว่างรูปแบบเอกสารต่างๆ: การใส่ยัติภังค์ แม้ว่าจะลดความขรุขระของเลย์เอาต์ที่จัดชิดซ้ายหรือเว้นระยะห่างในเลย์เอาต์ที่เหมาะสม แต่มันก็เป็นความเจ็บปวดที่สมบูรณ์เมื่อ PDF ของคุณไม่ได้ถูกสร้างขึ้นอย่างเหมาะสมและยังคงเครื่องหมายยัติภังค์ในเลย์เอาต์

โชคดีที่ถ้าเราเชื่อว่าหนังสือช่วยตัวเองนับไม่ถ้วนออกไปที่นั่นจะไม่มีปัญหาหากคุณเห็นว่ามันเป็นความท้าทาย ฉันเชื่อว่าหนังสือช่วยตัวเองเหล่านี้ไม่มีข้อยกเว้นอ้างถึง PPCG ซึ่งจะมีการแก้ไขปัญหาใด ๆ หากนำเสนอเป็นความท้าทาย งานของคุณคือการลบการใส่ยติภังค์และการแยกบรรทัดออกจากข้อความเพื่อให้พร้อมที่จะวางในโปรแกรมแก้ไขข้อความใด ๆ

คำอธิบายปัญหา

คุณจะเขียนโปรแกรมหรือฟังก์ชั่นที่ลบการใส่ยัติภังค์และการแบ่งบรรทัดหากมี การป้อนข้อมูลจะเป็นสตริงบนstdin(หรือทางเลือกที่ใกล้เคียงที่สุด) หรือฟังก์ชั่นการป้อนข้อมูล เอาท์พุท (ในstdoutหรืออีกทางเลือกหนึ่งที่อยู่ใกล้หรือเอาท์พุทฟังก์ชั่น) จะเป็น 'แก้ไข' ข้อความ ข้อความนี้ควรคัดลอกได้โดยตรง ซึ่งหมายความว่าการส่งออกชั้นนำหน้าหรือต่อท้ายเป็น OK แต่การส่งออกที่เพิ่มขึ้นครึ่งหนึ่งข้อความแก้ไขของคุณ (เช่นช่องว่างนำในทุกบรรทัด) คือไม่ได้

กรณีพื้นฐานที่สุดคือต่อไปนี้ (หมายเหตุ: ไม่มีช่องว่างต่อท้าย)

Lorem ipsum dolor sit amet, con-
sectetur adipiscing elit. Morbi
lacinia nisi sed mauris rhoncus.

ควรลบยัติภังค์และเส้นแบ่งออกเพื่อให้ได้มา

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi lacinia nisi sed mauris rhoncus.

อย่างไรก็ตามควรมีข้อยกเว้นบางประการ

  • การขึ้นบรรทัดใหม่คู่หมายถึงการแบ่งย่อหน้าและควรจะคงไว้
  • คำนามและชื่อที่เหมาะสมจะไม่ถูกแยกข้ามสองบรรทัดยกเว้นว่ามียัติภังค์อยู่แล้ว (เช่นสมการเนเวียร์สโตกส์) ควรแบ่งเส้นแบ่งออก แต่ยัติภังค์จะคงอยู่ กรณีเหล่านี้สามารถระบุได้โดยมีเพียงอักษรตัวแรกที่เป็นตัวพิมพ์ใหญ่
  • บางครั้งเครื่องหมายยัติภังค์จะระบุกลุ่มคำ (เช่นศตวรรษที่สิบเก้าและยี่สิบ) เมื่อสิ่งนี้เกิดขึ้นกับสองบรรทัดสิ่งนี้จะถูกระบุด้วยช่องว่างนำในบรรทัดถัดไป

ตัวอย่าง: (มุมมองที่แสดงในตัวอย่างนี้เป็นตัวละครและไม่จำเป็นต้องเป็นตัวแทนมุมมองของผู้เขียนฝ่ายตรงข้ามของวิธี Runge-Kutta-Fehlberg ยินดีที่จะเข้าร่วมในการท้าทายนี้เท่า ๆ กัน)

Differential equations can
be solved with the Runge-Kutta-
Fehlberg method.

Developed in the nineteenth-
 or twentieth century, this
method is completely FANTAS-
TIC.

จะกลายเป็น

Differential equations can be solved with the Runge-Kutta-Fehlberg method. 

Developed in the nineteenth- or twentieth century, this method is completely FANTASTIC. 

linebreaks สามารถเป็นได้ทั้ง\nหรือ\r\nจุดโค้ด ASCII ขึ้นอยู่กับความต้องการของคุณและยัติภังค์เป็น ASCII ง่าย-(เครื่องหมายลบ) ไม่จำเป็นต้องรองรับ UTF-8 ความท้าทายนี้เป็นดังนั้นรหัสที่สั้นที่สุดชนะ

คำตอบ:


9

เรติน่า 58 ไบต์

(?<!\n)\n(?!\n)
<space>
- (?! |[A-Z][a-z])| (?= )|(?<=-) (?=[A-Z])
<empty>

<space>แสดงให้เห็นถึงพื้นที่เดียวในบรรทัดของตัวเองและ<empty>เป็นตัวแทนของบรรทัดว่างเปล่าต่อท้าย สำหรับวัตถุประสงค์ในการนับแต่ละบรรทัดจะไปยังไฟล์ที่แยกต่างหากและ\nจะถูกแทนที่ด้วยอักขระตัวป้อนบรรทัดจริง เพื่อความสะดวกคุณสามารถใส่ทุกอย่างในไฟล์เดียวและเรียกใช้ด้วย-sแฟล็ก

ฉันค่อนข้างแน่ใจว่ามีวิธีที่สั้นกว่าในการทำเช่นนี้ดังนั้นฉันจะรอคำอธิบายจนกว่าฉันจะเล่นกอล์ฟเสร็จ


จริง ๆ แล้วฉันต้องการที่จะจัดการกับสิ่งนี้ใน Retina แต่ไม่ต้องการยุ่งกับ Mono :(
orlp

2

GNU Sed, 68

คะแนนรวม 2 สำหรับตัวเลือกการส่งผ่านไปยัง-zrsed

s/\n\n/:/g
s/-\n([A-Z][a-z])/-\1/g
s/-\n /- /g
s/-\n//g
y/\n:/ \n/

สมมติว่าสตรีมอินพุตไม่มี:อักขระใด ๆ หากไม่สามารถยอมรับได้:รหัสในตัวอักษรอาจถูกแทนที่ด้วยอักขระ ASCII ที่ไม่สามารถพิมพ์ได้เช่น 0x7 BEL


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.