ฉันได้ยินมาว่าโค้ดของคุณสามารถทำงานได้เร็วขึ้นหากคุณเยื้องในสิ่งที่ตรงกันข้ามเพื่อให้คอมไพเลอร์สามารถประมวลผลมันเหมือนรูปแบบการออกแบบต้นไม้จากส่วนบนสุดของ "สาขา" ลง สิ่งนี้จะช่วยได้เนื่องจากแรงโน้มถ่วงจะช่วยเร่งเวลาที่ต้องใช้ในการรวบรวมรหัสของคุณและปรับปรุงประสิทธิภาพของโครงสร้างข้อมูล นี่คือตัวอย่างในการเขียนสคริปต์ Java:
function fib(n) {
var a = 1, b = 1;
while (--n > 0) {
var tmp = a;
a = b;
b += tmp;
if (a === Infinity) {
return "Error!";
}
}
return a;
}
แต่ด้วยเหตุผลบางอย่าง Notepad ไม่ได้ตั้งค่าให้ทำสิ่งนี้โดยอัตโนมัติดังนั้นฉันต้องการโปรแกรมที่จะทำเพื่อฉัน
ลักษณะ
การส่งต้องใช้ข้อมูลโค้ดเป็นข้อมูลป้อนกลับการเยื้องและส่งออกโค้ดผลลัพธ์
ทำตามขั้นตอนต่อไปนี้:
แยกรหัสออกเป็นเส้น ๆ แต่ละบรรทัดจะเริ่มต้นด้วยศูนย์หรือมากกว่าช่องว่าง (จะไม่มีแท็บ)
ค้นหาระดับการเยื้องที่ไม่ซ้ำกันทั้งหมดในรหัส ตัวอย่างเช่นสำหรับตัวอย่างข้างต้นนี้จะเป็น
0 4 8 12
กลับลำดับของรายการของระดับการเยื้องนี้และแมปรายการที่กลับรายการกับรายการเดิม นี่เป็นการยากที่จะอธิบายในคำพูด แต่สำหรับตัวอย่างมันจะดูเหมือน
0 — 12 4 — 8 8 — 4 12 — 0
ใช้การจับคู่นี้กับรหัสต้นฉบับ ในตัวอย่างบรรทัดที่มี 0-space-เยื้องจะกลายเป็นเยื้องโดย 12 ช่องว่าง 4 ช่องว่างจะกลายเป็น 8 ช่องว่าง ฯลฯ
อินพุต / เอาต์พุต
อินพุตและเอาต์พุตสามารถให้ได้ตามที่คุณต้องการ (STDIN / STDOUT, พารามิเตอร์ฟังก์ชัน / ค่าส่งคืน, ฯลฯ ); หากภาษาของคุณไม่รองรับการป้อนหลาย|
บรรทัด(หรือคุณไม่ต้องการ) คุณสามารถใช้อักขระเพื่อแยกบรรทัดแทน
อินพุตจะประกอบด้วยบรรทัดใหม่ ASCII + ที่พิมพ์ได้เท่านั้นและจะไม่มีบรรทัดว่างเปล่า
กรณีทดสอบ
การป้อนข้อมูล:
function fib(n) {
var a = 1, b = 1;
while (--n > 0) {
var tmp = a;
a = b;
b += tmp;
if (a === Infinity) {
return "Error!";
}
}
return a;
}
ผลลัพธ์: รหัสตัวอย่างด้านบน
การป้อนข้อมูล:
a
b
c
d
e
f
g
h
เอาท์พุท:
a
b
c
d
e
f
g
h
การป้อนข้อมูล:
1
2
3
2
1
เอาท์พุท:
1
2
3
2
1
การป้อนข้อมูล:
foo
เอาท์พุท:
foo