Pyth , 4 ไบต์
W
~O
ลองออนไลน์!
นี่เป็นพื้นฐานที่ใช้อัลกอริธึม:
Q←inputRepeat1.2.3.temp←QQ←unif{0,Q−1}Print(temp)Untiltemp=0
ในการแปล Pyth ให้เป็นอัลกอริทึมเราสามารถตรวจสอบความหมายของตัวละครแต่ละตัวได้เป็นส่วนใหญ่ เนื่องจาก Pyth ถูกเขียนด้วยสัญลักษณ์นำหน้า (เช่น* + 1 2 3คือ(1 + 2) * 3) เราสามารถเริ่มต้นจากด้านซ้ายและเติมอาร์กิวเมนต์ในขณะที่เราไป
Wเริ่มแบบดั้งเดิมขณะที่วนซ้ำ คำสั่งแรกหลังจากที่มันเป็นเงื่อนไขวงและคำสั่งที่สองหลังจากที่มันเป็นร่างกายห่วง หากคำสั่งที่สองว่างเปล่ามันจะกลายเป็นไม่เลือก ขณะนี้ใช้งานได้เหมือนกับ Python ในขณะนั้นดังนั้นจะประเมินจำนวนเต็มที่ไม่เป็นศูนย์เป็น True และศูนย์เป็นเท็จ
คำสั่งแรกหลังจากในขณะที่เริ่มต้นด้วยตัวอักษรขึ้นบรรทัดใหม่ สิ่งนี้สอดคล้องกับฟังก์ชั่น "การพิมพ์และส่งคืนพร้อมกับการขึ้นบรรทัดใหม่" ของ Pyth ใช้เวลาหนึ่งอาร์กิวเมนต์ซึ่งจะถูกพิมพ์แล้วและส่งกลับยังไม่ได้แก้ไข สิ่งนี้ช่วยให้เราสามารถพิมพ์ขั้นตอนกลางในขณะที่ดำเนินการตามที่จำเป็น
ข้อโต้แย้งที่ส่งผ่านไปยังฟังก์ชั่นการพิมพ์นี้เริ่มต้นด้วย~ซึ่งเป็นบิตพิเศษ หากตัวละครทันทีหลังจาก~เป็นตัวแปรมันจะใช้เวลาสองข้อโต้แย้งมิฉะนั้นจะใช้เวลาหนึ่ง เนื่องจากOไม่ใช่ตัวแปร~จะใช้เพียงอาร์กิวเมนต์เดียวเท่านั้น ~ฟังก์ชั่นบิตเช่น+=ไม่อยู่ในภาษาเดิมหลายแม้ว่าผู้ประกอบการที่อยู่ใกล้ที่สุดจะเป็นผู้ประกอบการโพสต์เพิ่มขึ้นจาก++ Cคุณอาจจะรู้ว่าx++จะเป็นเช่นใช้xเป็นค่าในปัจจุบัน แต่หลังจากนั้นจะเป็นx เป็นความคิดที่เหมือนกัน แต่วางนัยกับสิ่งที่ผลลัพธ์ของการโต้แย้งครั้งแรกคือ วิธีเลือกตัวแปรที่จะกำหนดให้กับจะได้รับการแก้ไขในภายหลังx+1~
อาร์กิวเมนต์ของ~มีที่Oซึ่งเป็นเรื่องง่ายมาก เมื่ออาร์กิวเมนต์หนึ่งเป็นจำนวนเต็มOจะส่งกลับค่าจาก 0 ถึงหนึ่งน้อยกว่าจำนวนเต็มที่สุ่มกัน
ตอนนี้คุณอาจสังเกตเห็นว่าOไม่มีข้อโต้แย้ง นี่ Pyth Qล่ามเติมความกรุณาในการคาดเดาซึ่งที่นี่เป็นตัวแปร Qมีความหมายพิเศษใน Pyth: เมื่อใดก็ตามที่มีอยู่ในโปรแกรมโปรแกรม Pyth เริ่มต้นด้วยการกำหนดQให้กับอินพุตของโปรแกรม เนื่องจากนี่เป็นตัวแปรแรกที่เกิดขึ้นใน~อาร์กิวเมนต์ของQตอนนี้ก็เป็นตัวแปรที่~จะกำหนดค่าให้
สรุปโปรแกรม "ที่อ่านได้" ของเราอาจมีลักษณะดังนี้:
while print_and_return( assign_variable( Q, unif(0, Q-1) ) ):
pass
และตัวอย่างหนึ่ง "การเรียกใช้ผ่าน" อาจมีลักษณะดังนี้:
- Q = 5
Oผลตอบแทน 3, ~ผลตอบแทน 5, \nผลตอบแทนและพิมพ์ 5 ซึ่งเป็นความจริง
- Q = 3
Oผลตอบแทน 0, ~ผลตอบแทน 3, \nผลตอบแทนและพิมพ์ 3 ซึ่งเป็นความจริง
- Q = 0
Oส่งคืนสิ่งที่ไม่เกี่ยวข้อง~ส่งคืน 0 \nส่งคืนและพิมพ์ 0 ซึ่งเป็นเท็จ
- Q = สิ่งที่ไม่เกี่ยวข้อง
- ยุติ