🐋🚂🍇🐖🅰️➡🚂🍇🍊⬅🐕1🍇🍎1🍉🍮s 0🔂k⏩0🐕🍇🍦t➖🐕k🍮r t🔂i⏩1 t🍇🍊😛🚮t i 0🍇🍮➕r i🍉🍉🍮➕s✖r🅰️k🍉🍎➗s🐕🍉🍉
ลองออนไลน์!
-3 ไบต์โดยใช้ "น้อยกว่าหรือเท่ากับ 1" แทน "น้อยกว่า 2" เนื่องจากอิโมจิ "น้อยกว่า" มีการเข้ารหัส UTF-8 ที่ค่อนข้างยาว ทำให้t
เป็นน้ำแข็งเพื่อปิดเสียงเตือนโดยไม่ส่งผลกระทบต่อจำนวนไบต์
ขยายคลาส integ (จำนวนเต็ม) ด้วยเมธอด🅰️ คุณสามารถเขียนโปรแกรมอย่างง่ายที่รับหมายเลขจากอินพุตโทร🅰️ที่หมายเลขแล้วพิมพ์ผลลัพธ์ดังนี้:
🏁🍇
🍦str🔷🔡😯🔤Please enter a number🔤
🍊🍦num🚂str 10🍇
😀🔡🅰️num 10
🍉🍓🍇
😀🔤Learn what a number is, you moron!🔤
🍉
🍉
ส่วนนี้สามารถเล่นกอล์ฟได้มากโดยการละเว้นข้อความและการจัดการข้อผิดพลาด แต่ไม่รวมอยู่ในคะแนนดังนั้นฉันชอบที่จะแสดงคุณลักษณะเพิ่มเติมของ Emojicode แทนในขณะที่ปรับปรุงการอ่านไปพร้อมกัน
Ungolfed
🐋🚂🍇
🐖🅰️➡🚂🍇
🍊◀️🐕2🍇
🍎1
🍉
🍮sum 0
🔂k⏩0🐕🍇
🍦nmk➖🐕k
🍮sig nmk
🔂i⏩1 nmk🍇
🍊😛🚮nmk i 0🍇
🍮➕sig i
🍉
🍉
🍮➕sum✖sig🅰️k
🍉
🍎➗sum🐕
🍉
🍉
คำอธิบาย
หมายเหตุ:ตัวเลือกอีโมจิจำนวนมากไม่สมเหตุสมผลใน emojicode 0.5 มันคือ 0.x หลังจากทั้งหมด 0.6 จะแก้ไขสิ่งนี้
Emojicode เป็นภาษาการเขียนโปรแกรมเชิงวัตถุที่มี generics, โปรโตคอล, optionals และ closures แต่โปรแกรมนี้ไม่ได้ใช้การปิดและ generics และโปรโตคอลทั้งหมดสามารถพิจารณาได้โดยปริยาย
โปรแกรมดำเนินการเพียงไม่กี่ประเภท: 🚂เป็นประเภทจำนวนเต็ม, 🔡เป็นประเภทสตริงและ⏩เป็นประเภทช่วง บูลีนสองสามตัว (few) ก็ปรากฏเช่นกัน แต่พวกมันจะถูกใช้ในเงื่อนไขเท่านั้น บูลีนสามารถใช้ค่า👍หรือ👎ซึ่งสอดคล้องกับความจริงและเท็จตามลำดับ
ขณะนี้มีผู้ประกอบการในการ Emojicode ดังนั้นนอกจาก comparsions และการดำเนินงานอื่น ๆ ที่เป็นปกติผู้ประกอบการจะดำเนินการตามฟังก์ชั่นได้อย่างมีประสิทธิภาพทำให้การแสดงออกใช้คำนำหน้าสัญกรณ์ ผู้ประกอบการมีการวางแผนใน 0.6
ลองจัดการโปรแกรมทดสอบก่อน
🏁
นี่คือบล็อก, ซึ่งสามารถเปรียบเทียบกับหลักจากภาษาอื่น ๆ
🍇 ... 🍉
องุ่นและแตงโมประกาศบล็อกรหัสในอิโมจิโคด
🍦str🔷🔡😯🔤Please enter a number🔤
สิ่งนี้ประกาศชื่อ "แช่แข็ง" str
และตั้งค่าเป็นสตริงใหม่ที่สร้างขึ้นโดยใช้ initializer (ตัวสร้าง) 😯ซึ่งรับพร้อมท์เป็นสตริงแล้วป้อนบรรทัดจากผู้ใช้ เหตุใดจึงใช้การแช่แข็งแทนตัวแปร? มันจะไม่เปลี่ยนแปลงดังนั้นตัวแปรจะส่งคำเตือน
🍊🍦num🚂str 10
มาทำลายมันกันเถอะ 🚂str 10
เรียกใช้เมธอด frozen บนstr
น้ำแข็งที่มีอาร์กิวเมนต์ 10 ตามระเบียบวิธีการตั้งชื่อด้วยชื่อประเภทแปลงวัตถุเป็นประเภทนั้น 10 คือฐานที่ใช้สำหรับการแปลงจำนวนเต็ม วิธีนี้จะคืนค่าเป็นทางเลือก, 🍬🚂
. ตัวเลือกสามารถมีค่าของประเภทฐานหรือไม่มีอะไร⚡ เมื่อสตริงไม่มีตัวเลขระบบจะส่งคืน⚡ ในการใช้ค่าต้องทำการแกะตัวเลือกโดยใช้🍺ซึ่งทำให้เกิดข้อผิดพลาดขณะใช้งานหากค่าคือ⚡ ดังนั้นจึงเป็นวิธีปฏิบัติที่ดีในการตรวจสอบความว่างเปล่าก่อนที่จะยกเลิกการเลือกใช้ ในความเป็นจริงมันเป็นเรื่องธรรมดาที่ Emojicode มีการจดชวเลข โดยปกติ🍊
คือ "ถ้า"🍊🍦 variable expression
หมายถึง: ประเมินการแสดงออก หากทางเลือกมีความว่างเปล่าเงื่อนไขจะประเมินเป็น👎 (false) มิฉะนั้นชื่อที่variable
ถูกตรึงจะถูกสร้างขึ้นด้วยค่าที่ยังไม่ได้ห่อของตัวเลือกและเงื่อนไขจะประเมินเป็น👍, (จริง) ดังนั้นในการใช้งานปกติ🍇 ... 🍉
บล็อกตามเงื่อนไขจะถูกป้อน
😀🔡🅰️num 10
🅰️เป็นวิธีการที่รหัสหลักเพิ่มเข้ามาโดยใช้🐋ซึ่งคำนวณจำนวนพาร์ติชัน การเรียก🅰️บนnum
น้ำแข็งที่เราประกาศในเงื่อนไขและแปลงผลลัพธ์เป็นสตริงโดยใช้ฐาน 10 โดยวิธี🔡 จากนั้น😀พิมพ์ผลลัพธ์
🍓🍇 ... 🍉
🍓หมายถึง "else" ดังนั้นบล็อกนี้จะถูกป้อนเมื่อผู้ใช้ไม่ได้ป้อนตัวเลขอย่างถูกต้อง
😀🔤Learn what a number is, you moron!🔤
พิมพ์สตริงตัวอักษร
ทีนี้มาดูโปรแกรมหลักกันดีกว่า ฉันจะอธิบายเวอร์ชันที่ไม่ดี เวอร์ชัน golfed เพิ่งลบช่องว่างออกและเปลี่ยนชื่อเป็นชื่อตัวอักษรเดียว
🐋🚂🍇 ... 🍉
ขยายคลาส🚂 นี่คือคุณสมบัติที่ไม่พบบ่อยในภาษาการเขียนโปรแกรม แทนที่จะสร้างคลาสใหม่ด้วย🚂เป็นซูเปอร์คลาส🐋จะปรับเปลี่ยน🚂โดยตรง
🐖🅰️➡🚂🍇 ... 🍉
สร้างวิธีการใหม่ที่ชื่อว่า🅰️ที่คืนค่า🚂 ส่งคืนจำนวนพาร์ติชันที่คำนวณโดยใช้สูตรa(n) = (1/n) * Sum_{k=0..n-1} sigma(n-k)*a(k)
🍊⬅🐕1🍇
🍎1
🍉
🐕คล้ายกับthis
หรือself
มาจากภาษาอื่นและอ้างอิงถึงวัตถุที่วิธีการนั้นถูกเรียกใช้ การใช้งานนี้ซ้ำซ้ำดังนั้นนี่คือเงื่อนไขการยกเลิก: ถ้าจำนวนวิธีการที่เรียกว่ามีค่าน้อยกว่าหรือเท่ากับ 1 กลับ 1
🍮sum 0
สร้างตัวแปรใหม่sum
และตั้งเป็น 0 โดยปริยายถือว่าพิมพ์🚂
🔂k⏩0🐕
🔂วนซ้ำทุกสิ่งที่ใช้โปรโตคอล, ในขณะที่⏩เป็นช่วงตัวอักษรที่เกิดขึ้นเพื่อนำไปใช้🔂🐚🚂 ช่วงมีค่าเริ่มต้นค่าหยุดและค่าขั้นตอนซึ่งจะถือว่าเป็น 1 ถ้าstart < stop
หรือ -1 เป็นอย่างอื่น หนึ่งยังสามารถระบุค่าขั้นตอนโดยใช้⏭เพื่อสร้างช่วงตัวอักษร ค่าเริ่มต้นรวมอยู่ด้วยในขณะที่ค่าหยุดเป็นพิเศษดังนั้นนี่จึงเท่ากับfor k in range(n)
หรือSum_{k=0..n-1}
ในสูตร
🍦nmk➖🐕k
เราจำเป็นต้องคำนวณ sigma (n - k) หรือผลรวมของตัวหารn - k
ในคำอื่น ๆ และอาร์กิวเมนต์ที่จำเป็นสองสามครั้งดังนั้นร้านนี้n - k
ในตัวแปรnmk
เพื่อบันทึกไบต์บางส่วน
🍮sig nmk
🔂i⏩1 nmk
นี้กำหนดsig
ตัวแปรข้อโต้แย้งของซิกและ iterates มากกว่าตัวเลขทั้งหมดตั้งแต่ 1 nmk - 1
ถึง ฉันสามารถเริ่มต้นตัวแปรเป็น 0 และวนซ้ำมากกว่า 1..nmk แต่การทำเช่นนี้จะสั้นกว่า
🍊😛🚮nmk i 0
🚮คำนวณส่วนที่เหลือหรือโมดูลัสและ😛การตรวจสอบเพื่อความเท่าเทียมกันเพื่อให้อยู่ในสภาพที่จะ👍ถ้าi
เป็น divider nmk
ของ
🍮➕sig i
นี่คือการมอบหมายโดยการโทรซึ่งคล้ายกับ+= -= >>=
ตระกูลโอเปอเรเตอร์ในภาษาที่ไม่มีภาษาอิโมจิที่ด้อยคุณภาพ 🍮 sig ➕ sig i
บรรทัดนี้สามารถเขียนยังเป็น ดังนั้นหลังจากวนรอบด้านในเสร็จสิ้นsig
จะมีผลรวมของตัวหารของn - k
หรือsigma(n - k)
🍮➕sum✖sig🅰️k
การมอบหมายอื่นด้วยการโทรดังนั้นสิ่งนี้จะเพิ่มsigma(n - k) * A(k)
ผลรวมเช่นเดียวกับในสูตร
🍎➗sum🐕
ในที่สุดยอดรวมจะถูกหารด้วย n และส่งกลับผลหาร คำอธิบายนี้อาจใช้เวลาสามครั้งในการเขียนโค้ดเอง ...