- /Charcoal/ผู้รวบรวมความจริง
- จำนวนข้อความ : 2222
ชื่อเสียง&น้ำใจ : 171
วันเกิด : 02/03/1920
Brainfuck code
Fri Mar 28, 2014 8:51 am
brainfuck หรือ brainf*ck คือ Turing-complete language มีตัวดำเนินการเพียง 8 ตัว อิงตามภาษา P prime prime (P") ถูกคิดค้นขึ้นโดย Urban Müller ในปี 1993 เป้าหมายเพื่อจะสร้าง Turing-complete language ที่เขาจะสามารถเขียน compiler ที่เล็กที่สุดได้ใน Amiga OS 2.0 compiler ของเขามีขนาดเพียง 240 bytes เท่านั้น แม้ว่าในภายหลังจะมีการพัฒนาทำให้มีขนาดเพิ่มจากนี้เล็กน้อย
Brainfuck program จะดำเนินการกับ byte pointer ซึ่งจะเคลื่อนที่ไปมาใน char array ขนาด 30000 bytes ซึ่งจะมีค่าเป็น 0 ทุกตำแหน่งในตอนเริ่มต้น pointer ในตอนเริ่มก็จะอยู่ที่ตำแหน่งแรกของ array
ภาษา Brainfuck ประกอบด้วยคำสังแปดคำสั่ง โดยแต่ละคำสั่งจะแทนด้วยอักขระเพียงตัวเดียวเท่านั้น
ข้อมูลเพิ่มเติม : http://web.archive.org/web/20120505031152/http://en.wikipedia.org/wiki/Brainfuck
คำสั่งต่างๆของ Brainfuck สามารถแปลงเป็นคำสั่งในภาษา C ได้ตามนี้ (ถือว่า 'p' ถูกประกาศเป็น char*)
เช่น
++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++++++++++ >+<--------.>.+++++++..
แปรผลออกมาได้คำว่า
Hell
อย่างงี้เป็นต้น
ดังนั้น brainfuck เป็นการเข้ารหัสที่ค่อยข้างน่าปวดหัวสมชื่อเลยทีเดียว เนื่องจากข้อความข้อความหนึ่งอาจจะออกมาในรูปแบบไหนก็ได้ ยาวแค่ไหนก็ได้ อาจมีโค้ดสัก 37 หน้ากระดาษ แต่ถอดออกมาได้อักษรเดียวก็ได้ แต่โค้ดหนึ่งๆ สามารถถอดออกมาได้เพียงข้อความเดียวเท่านั้น ดังนั้น รหัสนี้ เป็นการเข้ารหัสที่ผู้ถอดรหัสค่อนข้างจะได้เปรียบกว่าผู้ไขรหัส เพียงแค่ทำความเข้าใจในวิธีการของมันได้แล้ว ก็จะสามารถแก้รหัสได้เลย แต่หากจะเข้ารหัส ต้องมานั่งทำโค้ดออกมา ซึ่งการวางรูปแบบโค้ดเหล่านี้ให้สวยงามและลายตา เป็นความสามารถเฉพาะบุคคลจริงๆ
อาจจะดูมึนไปนิด แต่ถ้ามีอะไรสงสัยถาม fourth ได้เลยครับ :p
Brainfuck program จะดำเนินการกับ byte pointer ซึ่งจะเคลื่อนที่ไปมาใน char array ขนาด 30000 bytes ซึ่งจะมีค่าเป็น 0 ทุกตำแหน่งในตอนเริ่มต้น pointer ในตอนเริ่มก็จะอยู่ที่ตำแหน่งแรกของ array
ภาษา Brainfuck ประกอบด้วยคำสังแปดคำสั่ง โดยแต่ละคำสั่งจะแทนด้วยอักขระเพียงตัวเดียวเท่านั้น
ข้อมูลเพิ่มเติม : http://web.archive.org/web/20120505031152/http://en.wikipedia.org/wiki/Brainfuck
Character | Action |
> | เลื่อน pointer ขึ้น |
< | เลื่อน poiter ลง |
+ | เพิ่มค่า byte ณ จุดที่ pointer ชี้ |
- | ลดค่า byte ณ จุดที่ pointer ชี้ |
. | แสดงค่า byte ที่ pointer ชี้ |
, | รับค่า byte และเก็บค่าไว้ใน byte ที่ pointer ชี้ |
[ | ไปหลัง ] ถ้า byte ที่ pointer ชี้เป็น 0 |
] | ย้อนกลับไปที่ [ จนกว่า byte ที่ pointer ชี้จะเป็น 0 |
Character | Becomes |
> | ++p; |
< | --p; |
+ | ++*p; |
- | --*p; |
. | putchar(*p); |
, | *p = getchar(); |
[ | while (*p) { |
] | } |
++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++++++++++ >+<--------.>.+++++++..
แปรผลออกมาได้คำว่า
Hell
อย่างงี้เป็นต้น
ดังนั้น brainfuck เป็นการเข้ารหัสที่ค่อยข้างน่าปวดหัวสมชื่อเลยทีเดียว เนื่องจากข้อความข้อความหนึ่งอาจจะออกมาในรูปแบบไหนก็ได้ ยาวแค่ไหนก็ได้ อาจมีโค้ดสัก 37 หน้ากระดาษ แต่ถอดออกมาได้อักษรเดียวก็ได้ แต่โค้ดหนึ่งๆ สามารถถอดออกมาได้เพียงข้อความเดียวเท่านั้น ดังนั้น รหัสนี้ เป็นการเข้ารหัสที่ผู้ถอดรหัสค่อนข้างจะได้เปรียบกว่าผู้ไขรหัส เพียงแค่ทำความเข้าใจในวิธีการของมันได้แล้ว ก็จะสามารถแก้รหัสได้เลย แต่หากจะเข้ารหัส ต้องมานั่งทำโค้ดออกมา ซึ่งการวางรูปแบบโค้ดเหล่านี้ให้สวยงามและลายตา เป็นความสามารถเฉพาะบุคคลจริงๆ
อาจจะดูมึนไปนิด แต่ถ้ามีอะไรสงสัยถาม fourth ได้เลยครับ :p
- fourthผู้รวบรวมความจริง
- จำนวนข้อความ : 1812
ชื่อเสียง&น้ำใจ : 94
งานอดิเรก : มองฟ้าตอนกลางคืน
Re: Brainfuck code
Fri Mar 28, 2014 4:11 pm
บอกได้เลยว่าต้องอึดมากกกกกกกกกกกกกกกกกกกกกกกกกกกก ฮ่าๆๆ
- ผู้มาเยือนผู้มาเยือน
Re: Brainfuck code
Sat Mar 29, 2014 10:53 pm
คิดว่ามันยากที่จะเข้าใจในการอ่านครั้งเดียว แต่คนคิดคงเวลาเยอะนะครับ ไว้มาทำความเข้าใจ มันน่าสนุก
ปริศนาเอ่ยจงซับซ่อนยิ่งขึ้น ตามนั้นอะไรอีกไม่รู้
ปริศนาเอ่ยจงซับซ่อนยิ่งขึ้น ตามนั้นอะไรอีกไม่รู้
Permissions in this forum:
คุณไม่สามารถพิมพ์ตอบ
|
|