พื้นหลัง:
คณิตศาสตร์การดำเนินงานมาตรฐานเช่นการบวกพื้นฐานและการคูณในโลกแห่งความเป็นจริงการทำงานเช่นนี้:
12 + 123 = 135
และ
12 * 123 = 1476
นั่นไม่น่าสนใจและน่าเบื่อ! โรงเรียนหลายแห่งกำลังตีความสิ่งนี้เป็นแบบฝึกหัดฝึกฝนแบบฝึกหัดที่เป็นทางการ นั่นหมายถึงอาหารทางคณิตศาสตร์ที่แข็งและน่าเบื่อและไม่ใช่สิ่งที่มีไว้สำหรับความท้าทายนี้ เตรียมพร้อมที่จะเล่นสนุก ๆ กับไซต์ที่เราชื่นชอบ
พิจารณากระบวนการเพิ่มตัวเลขจำนวนเต็มบวกสองตัวจากนั้นเพิ่มตัวเลขทั้งหมดของผลลัพธ์อีกครั้ง ทำซ้ำด้วยการเพิ่มจนกว่าจะมีเพียงตัวเลขเดียวเท่านั้น ตัวอย่างเช่น:
- ผลลัพธ์ของ
12 + 123
คือ 135 1 + 3 + 5 = 9
การเพิ่มตัวเลขทั้งหมดของเราได้รับ 135
จำนวนขั้นตอนที่จำเป็นในการรับค่าตัวเลขหลักเดียว 9 ในการเพิ่มซ้ำนี้คือ 2
เช่นเดียวกับกระบวนการก่อนหน้าของการเพิ่มการคูณของจำนวนเต็มบวกสองตัวจะเป็นไปตามกระบวนการเดียวกัน ทวีคูณตัวเลขทั้งหมดของผลลัพธ์จากนั้นทำซ้ำขั้นตอนนี้จนกว่าจะเหลือเพียงตัวเลขเดียว ใช้ตัวอย่างข้างต้น:
- ผลลัพธ์ของ
12 * 123
คือ 1476 - คูณทั้งหมดของตัวเลข 1476
1 * 4 * 7 * 6 = 168
ที่เราได้รับ - คูณตัวเลขทั้งหมดของ 168 ที่เราได้รับ
1 * 6 * 8 = 48
อีกครั้ง - คูณตัวเลขทั้งหมดของ 48 ที่เราได้รับ
4 * 8 = 32
อีกครั้ง - คูณตัวเลขทั้งหมดของ 32 ที่เราได้รับ
3 * 2 = 6
อีกครั้ง
จำนวนขั้นตอนที่จำเป็นในการรับค่าตัวเลขหลักเดียว 6 การคูณซ้ำหลายครั้งคือ 5
เพราะเห็นแก่ความท้าทายนี้และหลีกเลี่ยงการใช้ผิดวัตถุประสงค์ของสัญลักษณ์ทางคณิตศาสตร์ใด ๆ ผมแนะนำทั้งสองสัญลักษณ์หุ่น: (+)
และ(*)
, แต่คุณอาจจะใช้สัญกรณ์คุณต้องการใด ๆซึ่งทำงานเหมือนดังต่อไปนี้:
12 (+) 123 = 9
การดำเนินการของกระบวนการนอกจากนี้ซ้ำแล้วซ้ำอีกที่จะได้รับค่าเดียวคือ12 (*) 123 = 6
การดำเนินการของกระบวนการคูณซ้ำที่จะได้รับค่าเดียวคือ
ท้าทาย:
ความท้าทายคือการเขียนทั้งโปรแกรมหรือฟังก์ชั่นที่สามารถดำเนินการทั้งสองของการดำเนินงานตามที่ได้อธิบายในส่วนพื้นหลัง: และ(+)
(*)
การป้อนข้อมูล:
ปัจจัยการผลิตของโปรแกรมหรือฟังก์ชั่นที่มีจำนวนเต็มบวกและการดำเนินการอย่างใดอย่างหนึ่งอย่างใดอย่างหนึ่งและ(+)
รูปแบบของการป้อนข้อมูลที่เป็นทางเลือกโดยพลการของโปรแกรมเมอร์ คุณอาจจะจัดรูปแบบการป้อนข้อมูลตัวอย่างเช่นหรือหรือรูปแบบที่คุณต้องการ(*)
a (+) b
F(a, (+), b)
เอาท์พุท:
ผลลัพธ์ของโปรแกรมหรือฟังก์ชั่นจะต้องมีผลการดำเนินงานและจำนวนขั้นตอนที่จำเป็นต้องใช้ในรูปแบบฟรีสไตล์ตามที่คุณต้องการ
กรณีทดสอบ (ละเว้นรูปแบบอินพุตและเอาต์พุต):
81 (+) 31 --> (4 ; 2)
351 (+) 14568 --> (6 ; 3)
21 (*) 111 --> (8 ; 3)
136 (*) 2356 --> (0 ; 2)
กฎทั่วไป:
- นี่คือรหัสกอล์ฟดังนั้นคำตอบสั้น ๆ เป็นไบต์จะเป็นผู้ชนะ
อย่าปล่อยให้ esolang กีดกันคุณจากการโพสต์คำตอบด้วยภาษาปกติ สนุกกับความท้าทายนี้ด้วยการให้คำตอบสั้น ๆ กับภาษาโปรแกรมของคุณ หากคุณโพสต์คำตอบที่ฉลาดและคำอธิบายที่ชัดเจนคำตอบของคุณจะได้รับการชื่นชม (ดังนั้น upvotes) โดยไม่คำนึงถึงภาษาการเขียนโปรแกรมที่คุณใช้ - กฎมาตรฐานจะใช้สำหรับคำตอบของคุณดังนั้นคุณจึงได้รับอนุญาตให้ใช้ STDIN / STDOUT ฟังก์ชั่น / วิธีด้วยพารามิเตอร์ที่เหมาะสมโปรแกรมเต็มรูปแบบและอื่น ๆ ทางเลือกเป็นของคุณ
- ถ้าเป็นไปได้โปรแกรมของคุณสามารถจัดการกับจำนวนมากได้อย่างเหมาะสม ถ้าไม่เช่นนั้นจะไม่เป็นไร