เขียนโปรแกรมเพื่อแปลง
<node> <node level="0" type="c" name="toplevel"/> <node level="1" type="i" name="1. item"/> <node level="1" type="c" name="2. container"/> <node level="2" type="i" name="2.1 item"/> <node level="2" type="i" name="2.2 item"/> <node level="1" type="i" name="3. item"/> <node level="1" type="c" name="4. container"/> <node level="2" type="i" name="4.1 item"/> <node level="2" type="c" name="4.2 container"/> <node level="3" type="i" name="4.2.1 item"/> </node>
เป็น
<node> <node type="c" name="toplevel"> <node type="i" name="1. item"/> <node type="c" name="2. container"/> <node type="i" name="2.1 item"/> <node type="i" name="2.2 item"/> </node> <node type="i" name="3. item"/> <node type="c" name="4. container"> <node type="i" name="4.1 item"/> <node type="c" name="4.2 container"/> <node type="i" name="4.2.1 item"/> </node> </node> </node> </node>
กระทู้เก่าๆ จะย้ายตามไปในภายหลัง ตอนนี้ปิดการโพสต์กระทู้ไว้ เหลือไว้เฉพาะอ้างอิงเท่านั้น
อูย โจทย์นี้ต้อง SAX ซะละมั๊ง มาจองที่ไว้ก่อน
http://codenone.com/node/141
ต้องย่อหน้าถูกด้วยเปล่า?
เพราะไอ้ indent นี่แหละ นั่งแกะโค้ดอยู่นาน ทำไม
_packingต้องเป็น 0 หว่าruby
http://www.codenone.com/node/146
(แบบไม่สนใจย่อหน้า)
โจทย์ผิดนิดนึงหรือปล่าวครับตรง ผลลัพธ์ที่ต้องการนะครับ
บรรทัด
ใช่ครับ เกินมาตัว
ผมยกโจทย์นี้ มาจาก post ของ
HOWTO: convert flat list w/ level information to a hierarchialone?
ในนั้นแสดง algorithm ที่เขียนด้วย haskell
ซึ่งแสดงการใช้ pure functional solve โจทย์ข้อนี้
แกะโปรแกรมแล้วเหนื่อยใจ เพราะ recursive เยอะเหลือเกิน
(สำหรับคนที่จะลองแกะ ,ตัวโปรแกรมเขามี parameter res เกินมาตัว
ignore หรือตัดทิ้งได้เลย)
แต่ที่สนใจก็คือ solution ที่เป็น xsl
เพราะที่เคยใช้ xsl ก็มักจะเป็นงานพื้นๆ ไม่เคยคิดว่า
มันจะ solve โจทย์แบบนี้ได้
แถมยังมี trick แปลกๆ เช่น การใช้ค่า accu ที่ initalize จาก ../
ผมลอง xsl อยู่พักนึงเหมือนกัน แล้วก็ ..... ทำไม่ไหว
ขนาดแกะ code เขา พอจะเข้าใจแล้ว
ถ้าลองให้เขียนเองโดยไม่ดู code เขาเลย ก็คงไม่รอดเหมือนกัน
ถ้ามันยากขนาดนี้ แล้วมันเร็วขนาดไหน
:) เป็นคำถามที่ดีมาก
คำตอบคือ ไม่เร็วเลยครับ
ที่มันยาก เพราะว่า nature ของโจทย์ กับ constrain ของภาษา
+ วิธีคิดของเรา(ที่ยังคิดแบบ recursive ไม่คล่อง)