brainfuck , 474 176 154 151 149 137 ไบต์
ใช้สตริงอินพุตแปด 0
และ1
รวมถึงสตริงแรก0
สำหรับจุดทศนิยม
(เหมือนในคอลัมน์ที่สองของตารางในโพสต์)
เอาต์พุตตัวเลขตั้งแต่ 0 ถึง 9
,>,>,>,,,>,>,>+[[->]<++<<<<<<]>[>[>[>[->[>++++++<-<]>[--<]<]>>.>>]<[>
>[>->++<<-]>-[+>++++<]>+.>]]>[>>>+<<<-]>[>>+++.>]]>[>>>[>+++<-]>-.>]
ลองออนไลน์!
ขั้นตอนวิธี
โดยการสังเกตสถานะของกลุ่มเฉพาะเราสามารถแยกชุดของตัวเลขที่เป็นไปได้ออกเป็นชุดย่อยที่เล็กลง ด้านล่างนี้คือแผนผังการค้นหาไบนารีแบบคงที่ที่ใช้ในรหัสของฉัน ทรีย่อยทางซ้ายสอดคล้องกับสถานะเซ็กเมนต์ ON ด้านขวาสอดคล้องกับสถานะเซ็กเมนต์ OFF
0,1,2,3,4,5,6,7,8,9
|
/-------[A]-------------------------\
0,2,3,5,6,7,8,9 1,4
| |
/-------------[B]----------------\ /----[G]----\
0,2,3,7,8,9 5,6 4 1
| |
/--------[E]--------\ /----[E]----\
0,2,8 3,7,9 6 5
| |
/----[F]----\ /----[F]----\
0,8 2 9 3,7
| |
/----[G]----\ /----[G]----\
8 0 3 7
ข้อสังเกตบางอย่างมีประโยชน์สำหรับการเล่นกอล์ฟ
- บิต C และ D ซ้ำซ้อนและสามารถละเว้นได้
- นำหน้าศูนย์ (บิตสำหรับจุดทศนิยม) สามารถใช้ (ab) เป็นค่า 48 ซึ่งสำคัญทั้งสำหรับการแยกวิเคราะห์อินพุตและเตรียมเอาต์พุต
- เมื่อถึงลีฟแล้วพิมพ์ดิจิตเราต้องข้ามเงื่อนไขเพิ่มเติมทั้งหมด สามารถทำได้โดยการย้ายตัวชี้ข้อมูลไปยังพื้นที่ของศูนย์จนไม่สามารถกลับมาได้
- สำหรับความเข้ากันได้จะเป็นการดีกว่าที่จะใช้ศูนย์ทางด้านขวาเนื่องจากการใช้งาน BF บางอย่างไม่สนับสนุนพอยน์เตอร์ข้อมูลเชิงลบ
- ดังนั้นการเก็บค่าเอาท์พุทไว้ในเซลล์ด้านขวาสุดจะดีกว่าดังนั้นเราจึงสามารถเข้าถึงพื้นที่ของศูนย์ไปทางขวาได้อย่างง่ายดาย
- ดังนั้นจึงเป็นการดีกว่าถ้าตรวจสอบบิตจากซ้ายไปขวา: A, B, E, F, G เพื่อให้เราสามารถเข้าถึงเซลล์เอาต์พุตได้ง่ายขึ้น
- ตัวเลขที่ต่างกันอาจใช้รหัสเอาท์พุท ตัวอย่างเช่น 5 และ 6 อยู่ในทรีย่อยเดียวกัน เราอาจทำ
+++++
ทั้งสองค่าแล้ว+
สำหรับหกเท่านั้น
- เราอาจลดจำนวน
+
คำสั่งถ้าเราเพิ่ม 2 ถึงมูลค่าส่งออกล่วงหน้า ในกรณีที่เราจำเป็นต้องลดความมัน0
และ1
เพียงและได้รับประโยชน์สำหรับตัวเลขอื่น ๆ