บางคนยืนยันที่จะใช้ช่องว่างสำหรับการจัดระเบียบและการเยื้อง
สำหรับการจัดระเบียบนั่นผิดที่ไม่อาจปฏิเสธได้ ตามคำจำกัดความ tabulators จะต้องใช้สำหรับการทำตาราง
แม้สำหรับการเยื้อง
มีฉันทามติที่ชัดเจนในชุมชน Stack Exchange
การใช้พื้นที่เดียวสำหรับการเยื้องเป็นสิ่งที่ไม่พึงประสงค์ทางสายตา การใช้มากกว่าหนึ่งรายการนั้นสิ้นเปลือง
ทั้งหมดเป็นปลา
จกอล์ฟERS รู้ว่าโปรแกรมที่ควรจะเป็นสั้นที่สุด ไม่เพียงช่วยประหยัดเนื้อที่บนฮาร์ดดิสก์เท่านั้นเวลาในการรวบรวมจะลดลงหากต้องดำเนินการกับไบต์ให้น้อยลงด้วยการปรับความกว้างแท็บ1ไฟล์เดียวกันจะมีลักษณะแตกต่างกันไปในคอมพิวเตอร์แต่ละเครื่องดังนั้นทุกคนสามารถใช้ความกว้างของการเยื้องที่ชื่นชอบโดยไม่ต้องแก้ไขไฟล์จริง
โปรแกรมแก้ไขข้อความที่ดีทั้งหมดใช้ tabulators โดยค่าเริ่มต้น (และคำจำกัดความ)
ฉันพูดอย่างนั้นและฉันก็ถูกเสมอ!
น่าเศร้าที่ทุกคนไม่ฟังเหตุผล มีคนส่งไฟล์ที่ผิดTMและคุณต้องแก้ไข คุณสามารถทำได้ด้วยตนเอง แต่จะมีคนอื่น
มันไม่ดีพอที่ spacers จะเสียเวลาอันมีค่าของคุณดังนั้นคุณตัดสินใจที่จะเขียนโปรแกรมที่สั้นที่สุดเพื่อดูแลปัญหา
งาน
เขียนโปรแกรมหรือฟังก์ชั่นที่ทำสิ่งต่อไปนี้:
อ่านสตริงเดียวจาก STDIN หรือเป็นอาร์กิวเมนต์บรรทัดคำสั่งหรือฟังก์ชั่น
ระบุตำแหน่งที่ตั้งทั้งหมดที่มีการใช้ช่องว่างสำหรับการจัดตารางหรือการเยื้อง
การเว้นวรรคเป็นการเยื้องถ้าเกิดขึ้นที่จุดเริ่มต้นของบรรทัด
การเว้นวรรคตั้งแต่สองช่องขึ้นไปเป็นการจัดเรียงหากไม่มีการเยื้อง
เดียวพื้นที่ที่ไม่ได้อยู่เยื้องอาจจะหรืออาจจะไม่ได้ถูกนำมาใช้สำหรับการจัดระเบียบ อย่างที่คาดไว้เมื่อคุณใช้ตัวละครเดียวกันเพื่อจุดประสงค์ที่แตกต่างกันไม่มีวิธีที่ง่ายที่จะบอกได้ ดังนั้นการที่เราจะบอกว่าพื้นที่ที่มีการใช้ความสับสน
กำหนดความกว้างของแท็บที่ยาวที่สุดที่เป็นไปได้1ซึ่งช่องว่างทั้งหมดที่ใช้สำหรับการจัดระเบียบหรือการเยื้องสามารถถูกแทนที่ด้วย tabulators โดยไม่เปลี่ยนลักษณะที่ปรากฏของไฟล์
หากอินพุตไม่มีทั้งการจัดระเบียบและการเยื้องก็เป็นไปไม่ได้ที่จะกำหนดความกว้างของแท็บ ในกรณีนี้ให้ข้ามขั้นตอนถัดไป
ใช้ความกว้างแท็บที่กำหนดไว้ก่อนหน้านี้แทนที่ช่องว่างทั้งหมดที่ใช้สำหรับการจัดระเบียบหรือการเยื้องกับตัวทำตาราง
นอกจากนี้เมื่อใดก็ตามที่เป็นไปได้โดยไม่ต้องเปลี่ยนลักษณะที่ปรากฏของไฟล์ให้แทนที่ช่องว่างทั้งหมดที่ใช้สำหรับความสับสนด้วย tabulators (หากมีข้อสงสัยให้กำจัดช่องว่าง)
ส่งคืนสตริงที่ถูกดัดแปลงจากฟังก์ชันของคุณหรือพิมพ์ไปที่ STDOUT
ตัวอย่าง
ช่องว่างทั้งหมดของ
a bc def ghij
เป็นตาราง
การเว้นวรรคแต่ละครั้งจะใส่สตริงก่อนหน้าของอักขระที่ไม่ใช่ช่องว่างให้มีความกว้าง 5 ดังนั้นความกว้างแท็บที่ถูกต้องคือ 5 และเอาต์พุตที่ถูกต้อง2คือ
a--->bc-->def->ghij
สองช่องว่างแรกของ
ab cde f ghi jk lm
มีการจัดระเบียบความสับสนอื่น ๆ
ความกว้างแท็บที่ถูกต้องคือ 4 ดังนั้นผลลัพธ์ที่ถูกต้องคือ2
ab->cde>f ghi>jk lm
ช่องว่างสุดท้ายยังคงไม่ถูกแตะต้องเนื่องจากมันจะถูกแสดงผลเป็นสองช่องว่างหากถูกแทนที่ด้วย tabulator:
ab->cde>f ghi>jk->lm
ทั้งหมดยกเว้นหนึ่งช่องว่างของ
int main( ) { puts("TABS!"); }
เป็นการเยื้องและอื่น ๆ ที่มีความสับสน
ระดับการเยื้องคือ 0, 4 และ 8 ช่องว่างดังนั้นความกว้างแท็บที่ถูกต้องคือ 4 และเอาต์พุตที่ถูกต้อง2คือ
int --->main( ) --->{ --->--->puts("TABS!"); --->}
ช่องว่างใน
( )
จะถูกแสดงเป็นช่องว่างสามช่องหากแทนที่ด้วย tabulator ดังนั้นจึงไม่มีการแตะต้องสองช่องว่างแรกของ
x yz w
เป็นการเยื้องและความสับสนอื่น ๆ
ความกว้างแท็บที่เหมาะสมคือ 2 และเอาต์พุตที่ถูกต้องคือ2
->x>yz w
ช่องว่างสุดท้ายจะถูกแสดงเป็นช่องว่างสองช่องหากแทนที่ด้วย tabulator ดังนั้นจึงยังคงไม่มีการแตะต้อง
สองช่องว่างแรกของ
xy zw
เป็นการเยื้องและอีกสามคนเป็นตาราง
เฉพาะความกว้างแท็บ 1 เท่านั้นที่อนุญาตให้กำจัดช่องว่างทั้งหมดดังนั้นผลลัพธ์ที่ถูกต้อง2คือ
>>xy>>>zw
ช่องว่างทั้งหมดของ
a b c d
มีความสับสน
ไม่มีความกว้างแท็บที่ยาวที่สุดที่เป็นไปได้ดังนั้นผลลัพธ์ที่ถูกต้อง2คือ
a b c d
กฎเพิ่มเติม
ข้อมูลที่ป้อนจะประกอบด้วยอักขระ ASCII ที่พิมพ์ได้ทั้งหมดและ linefeeds
คุณอาจคิดว่ามีข้อความไม่เกิน 100 บรรทัดและไม่เกิน 100 ตัวอักษรต่อบรรทัด
หากคุณเลือก STDOUT สำหรับเอาท์พุทคุณอาจพิมพ์บรรทัดป้อนบรรทัดเดียว
ใช้กฎมาตรฐานของกอล์ฟ
1 ความกว้างแท็บถูกกำหนดให้เป็นระยะทางเป็นตัวอักษรระหว่างแท็บสองแท็บติดต่อกันโดยใช้แบบอักษรที่มีช่องว่าง
2 ลูกศรศิลปะ ASCII เป็นตัวแทนของ tabulators Stack Exchange ปฏิเสธที่จะแสดงผลอย่างถูกต้องซึ่งฉันได้ส่งรายงานข้อผิดพลาด เอาท์พุทที่เกิดขึ้นจริงจะต้องมี tabulators จริง
programs should be as short as possible
ฉันเชื่อว่าฉันได้พบกับพี่ชายที่หายไปนานของ Arthur Whitney !!