สลับวิธีการจัดรูปแบบ
Formatวิธีการของการเรียน String (หรือ equivallent เช่นsprintf) มีให้บริการในภาษามากที่สุด โดยทั่วไปจะใช้สตริง "รูปแบบ" ซึ่งอาจมีตัวยึดตำแหน่งที่มีการจัดรูปแบบพิเศษบางอย่างและจะแทรกค่าเป็นศูนย์หรือมากกว่านั้นแทนตัวยึดตำแหน่งเหล่านั้น
งานของคุณคือการใช้ฟังก์ชั่นผกผันในภาษาที่คุณเลือก
API
ชื่อวิธีที่ควรจะเป็นอย่างใดอย่างหนึ่งหรือformat1deformat
อินพุต : พารามิเตอร์ที่ 1 จะเป็นสตริง "รูปแบบ" เช่นเดียวกับในรูปแบบวิธีดั้งเดิม พารามิเตอร์ที่สองจะเป็นสตริงการแยกวิเคราะห์ (ดูตัวอย่างด้านล่าง) ไม่มีพารามิเตอร์อื่น ๆ ที่จำเป็นและไม่ได้รับอนุญาต
เอาท์พุท : อาร์เรย์ (หรือค่าที่เทียบเท่ากับภาษาที่คุณเลือก) ซึ่งแตกออกมาอย่างสอดคล้องกับตัวยึดตำแหน่งในรูปแบบ
ตัวยึดตำแหน่งมี{0}, {1}, {2}ฯลฯ
ในกรณีที่รูปแบบไม่ดีคุณอาจโยนข้อผิดพลาดหรือคืนสิ่งที่คุณต้องการ
ในกรณีที่อินพุตไม่ถูกต้องคุณอาจโยนข้อผิดพลาดหรือคืนสิ่งที่คุณต้องการ การป้อนข้อมูลที่ไม่ถูกต้องเป็นเช่นนั้นไม่สามารถสร้างขึ้นโดยใช้ String.Format '{0}{0}', 'AAB'สตริงรูปแบบเดียวกันตัวอย่างเช่น:
ตัวอย่าง
deformat('{0} {1}', 'hello world') => ['hello', 'world']
deformat('http{0}://', 'https://') => ['s']
deformat('http{0}://', 'http://') => [''] // array of one item which is an empty string
deformat('{0}{1}{0}', 'ABBA') => ['A', 'BB']
ความคลุมเครือ
ในกรณีที่มีความกำกวมคุณอาจส่งคืนคำตอบที่เหมาะสม ตัวอย่างเช่น:
deformat('{0} {1}', 'Edsger W. Dijkstra')
// both ['Edsger', 'W. Dijkstra'] and ['Edsger W.', 'Dijkstra'] are applicable.
บางกฎเพิ่มเติม
- เพื่อให้ง่ายขึ้นคุณไม่จำเป็นต้องรองรับการฟอร์แมต คุณสามารถลืมทั้งหมดเกี่ยวกับศูนย์นำหน้าจุดทศนิยมหรือปัญหาการปัดเศษ เพียงสร้างค่าเป็นสตริง
- ที่จะทำให้มันไม่น่ารำคาญนิพจน์ปกติไม่ได้รับอนุญาต
- คุณไม่จำเป็นต้องดูแลวงเล็บปีกกาในอินพุต (เช่นพารามิเตอร์อินพุตที่ 2 จะไม่มี
{s หรือ s ใด ๆ})
การชนะ
นี่คือรหัสกอล์ฟ ! (ควรอ่านว่า "นี่คือสปาร์ตา!") ฟังก์ชั่นที่ถูกต้องซึ่งมีความยาวชนะสั้นที่สุด ช่องโหว่มาตรฐานเป็นสิ่งต้องห้าม
['', 'AAAA'], ['A', 'AA'],['AA', '']
deformat('{0}{1}{0}', 'ABBA') => ['', 'ABBA']? ถ้าเป็นเช่นนั้นจะมีวิธีแก้ปัญหาราคาถูกเว้นแต่ว่าทุกสตริงปรากฏอย่างน้อยสองครั้ง
deformat('{0}_{1}_{0}', 'A_BB_A')หรือไม่
deformat('{0}{1}{0}', 'ABBA') => ['A', 'BB']เกิดอะไรขึ้นถ้าเราได้รับแทนdeformat('{0}{1}{0}', 'AAAA')?