เมื่อฉันเขียนเอกสารความคิดเห็น ฯลฯ ฉันชอบทำตาราง ASCII พวกเขามักจะจบลงดูสวยดี แต่ฉันมักจะรู้สึกว่าพวกเขาจะดูดียิ่งขึ้น - โดยเฉพาะอย่างยิ่งตั้งแต่ UTF-8 / Unicode รวมถึงตัวละครกล่องวาดภาพ อย่างไรก็ตามตัวละครเหล่านี้มีภาระที่ต้องใช้งานเป็นอย่างมากทำให้ต้องใช้การกดปุ่มหลายครั้งในการแทรก งานของคุณ? เขียนโปรแกรมหรือฟังก์ชั่นที่สามารถแปลงตาราง ASCII โดยอัตโนมัติให้เทียบเท่ากับ UTF-8 / Unicode
ความท้าทายนี้ได้รับการทดลองใช้ผลิตภัณฑ์
ท้าทาย
เขียนโปรแกรมที่ให้ตาราง ASCII เป็นสตริงอินพุตเอาต์พุตตารางที่วาดใหม่ด้วยอักขระการวาดกล่อง Unicode / UTF-8 โดยเฉพาะอย่างยิ่งอักขระที่เป็นส่วนหนึ่งของตารางควรแปลดังนี้:
(Unicode, 3 bytes each in UTF-8)
- to ─ (\u2500)
| to │ (\u2502)
= to ═ (\u2550)
and + to one of:
┌ (\u250C), ┐ (\u2510), └ (\u2514), ┘ (\u2518),
├ (\u251C), ┤ (\u2524), ┬ (\u252C), ┴ (\u2534),
┼ (\u253C)
or, if '=' on either side:
╒ (\u2552), ╕ (\u2555), ╘ (\u2558), ╛ (\u255D),
╞ (\u255E), ╡ (\u2561), ╤ (\u2564), ╧ (\u2567),
╪ (\u256A)
รายละเอียด
I / O:
- อนุญาตให้ใช้I / O เริ่มต้น
- คุณสามารถป้อนข้อมูลในรูปแบบที่เหมาะสมรวมถึงตารางเป็นสตริงหรือเส้นทางไปยังไฟล์ที่มีตาราง
- คุณสามารถส่งออกไปยังไฟล์และใช้ชื่อไฟล์เป็นอาร์กิวเมนต์เพิ่มเติม
- อย่างไรก็ตามคุณไม่สามารถแก้ไขไฟล์อินพุตได้ (ควรเก็บไว้เพื่อความสะดวกในการแก้ไขในอนาคต)
การป้อนข้อมูล:
- คุณอาจจะสมมติว่าอินพุตทุกแถวมีความยาวเท่า
กัน
- คุณไม่สามารถสันนิษฐานได้ว่าตัวอักษรตัวแรกหลังจากขึ้นบรรทัดใหม่เป็นส่วนหนึ่งของเส้นขอบตาราง (เนื่องจากอาจเป็นช่องว่าง)
- อินพุตถือว่าเป็นตารางที่ถูกต้องหากอักขระทั้งหมด (ที่เป็นส่วนหนึ่งของตาราง)
-=|
เชื่อมต่อกับอักขระสองตัวและ+
เชื่อมต่อกับอักขระอย่างน้อยหนึ่งตัวทั้งแนวนอนและแนวตั้ง - โปรแกรมของคุณอาจไม่สร้างข้อผิดพลาดใด ๆ กับอินพุตที่ถูกต้อง
- หากอินพุตไม่ถูกต้องพฤติกรรมจะไม่ได้กำหนดและคุณอาจสร้างเอาต์พุตใด ๆ
- อินพุตอาจมีอักขระ UTF-8 ใด ๆ รวมถึงอักขระวาดกล่อง
เอาท์พุท:
- อักขระใด ๆ
-=|+
ที่ไม่ได้เป็นส่วนหนึ่งของตารางจะต้องถูกทิ้งตามที่เป็น - ในทำนองเดียวกันตัวละครอื่น ๆ จะต้องถูกทิ้งตามที่เป็น
- อนุญาตให้ขึ้นบรรทัดใหม่ชั้นนำและ / หรือต่อท้าย
อื่น ๆ :
- ช่องโหว่มาตรฐานเป็นสิ่งต้องห้ามตามปกติ
- หากภาษาที่คุณต้องการมีบิวท์อินที่สามารถแก้ไขปัญหานี้คุณไม่สามารถใช้งานได้
- นี่หมายถึงโปรแกรมฟังก์ชั่นรูทีนย่อยหรือคำสั่งที่จะเป็นการส่งที่ถูกต้องสำหรับความท้าทายนี้โดยไม่มีการเพิ่มเติม
- อักขระแต่ละตัวที่จำเป็นในการท้าทายนี้มีความยาวสามไบต์เมื่อเข้ารหัสใน UTF-8
อักขระที่เชื่อมต่อ :
อักขระเชื่อมต่อกับอักขระอื่นถ้า:
- เป็น
|
และอยู่เหนือหรือใต้+
หรือ|
; - มันเป็น
-
และเป็นโดยตรงก่อนหรือหลัง+
หรือ-
; - มันเป็น
=
และเป็นโดยตรงก่อนหรือหลัง+
หรือ=
; - มันเป็น
+
และอยู่ตรงด้านบนหรือด้านล่าง|
หรือ+
หรือโดยตรงก่อนหรือหลัง-
, หรือ=
+
อักขระถือเป็นส่วนหนึ่งของตารางหากเชื่อมต่อกับอักขระใด ๆ ที่เป็นส่วนหนึ่งของตาราง ตามคำจำกัดความตัวแรก+
ในอินพุตนั้นเป็นส่วนหนึ่งของตาราง
ตัวอย่าง
ตัวอย่างมีให้ที่นี่เป็นเวอร์ชันที่คัดลอกได้
Input: Output:
+------------------+ ┌──────────────────┐
| Hello+World! | │ Hello+World! │
+==================+ ╞══════════════════╡
| This is+my first | -> │ This is+my first │
|+-+ code|golf +-+| │+-+ code|golf +-+│
|+-+chall|enge! +-+| │+-+chall|enge! +-+│
+------------------+ └──────────────────┘
+===+===+===+ ╒═══╤═══╤═══╕
| 1 | 2 | 3 | │ 1 │ 2 │ 3 │
+---+===+===+===+ ┌───╪═══╪═══╪═══╡
| 1 | 1 | 2 | 3 | │ 1 │ 1 │ 2 │ 3 │
+---+---+---+---+ -> ├───┼───┼───┼───┤
| 2 | 2 | 4 | 6 | │ 2 │ 2 │ 4 │ 6 │
+---+---+---+---+ ├───┼───┼───┼───┤
|-3 |-3 |-6 |-9 | │-3 │-3 │-6 │-9 │
+===+---+---+---+ ╘═══╧───┴───┴───┘
+-----+ -> <Undefined>
+-----+ -> ┌─────┐
+-----+ └─────┘
+-----------------+
| Hello, World! |
| This is invalid | -> <Undefined>
| input |
-----------------+
++++ ┌┬┬┐
++++ -> ├┼┼┤
++++ └┴┴┘
+--+
++++ -> <Undefined>
+--+
สุดท้าย ...
นี่คือโค้ดกอล์ฟดังนั้นจำนวนไบต์ที่น้อยที่สุดจะเป็นผู้ชนะ มีความสุขในการเล่นกอล์ฟ!
Hello World
ตารางแรกตารางภายในจะไม่ถูกพิจารณาให้เป็นตารางเนื่องจากข้อความภายในตารางจะต้องไม่เปลี่ยนแปลงและจะไม่ถือว่าเป็นส่วนหนึ่งของเส้นขอบตารางด้านนอกเนื่องจากไม่ได้เชื่อมต่อกับตารางนั้นอย่างถูกต้อง
+-+
ข้อความที่ตัดตอนมาติดต่อกันจึงไม่ถือว่าเป็นตารางที่เชื่อมต่อ