ฉันชอบเล่นกอล์ฟdc
แต่บางครั้งฉันก็รู้สึกท้อแท้เพราะdc
ไม่มีปฏิบัติการในระดับบิต
ท้าทาย
ให้สี่ฟังก์ชั่นการตั้งชื่อที่ใช้เทียบเท่าของการดำเนินงานคบิต&
, |
, ~
และ^
(บิต AND, OR, NOT และแฮคเกอร์) แต่ละฟังก์ชันจะใช้ตัวถูกดำเนินการสองตัว ( ~
รับเพียงตัวเดียว) ซึ่งเป็นจำนวนเต็มอย่างน้อย 32 บิตที่ไม่ได้ลงชื่อ แต่ละฟังก์ชั่นจะคืนค่าจำนวนเต็มที่ไม่ได้ลงนามซึ่งมีความกว้างบิตเท่ากับตัวถูกดำเนินการ
การ จำกัด
คุณสามารถใช้การดำเนินการที่ได้รับการสนับสนุนdc
เท่านั้น เหล่านี้คือ:
+
-
*
/
การบวกการลบการคูณและการหารทางคณิตศาสตร์~
modulo (หรือ divmod หากภาษาของคุณรองรับ)^
การยกกำลัง|
การยกกำลังแบบแยกส่วนv
รากที่สอง>
>=
==
!=
<=
<
ผู้ประกอบการความเสมอภาค / ความไม่เท่าเทียมกันมาตรฐาน>>
<<
ผู้ประกอบการเปลี่ยนบิตdc
ไม่มีสิ่งเหล่านี้ แต่เนื่องจากมีการใช้งานเพียงเล็กน้อยในแง่ของการหาร / การคูณด้วยพลังของ 2 ดังนั้นฉันจะอนุญาตสิ่งเหล่านี้
โครงสร้างการควบคุมในการdc
สร้างของฉันอย่างงุ่มง่ามโดยใช้มาโคร (แบบเรียกซ้ำ) และการดำเนินการที่เท่าเทียมกัน คุณสามารถใช้โครงสร้างการควบคุมที่มีอยู่ในภาษาของคุณ
คุณยังอาจจะใช้ดำเนินการทางตรรกะ แม้ว่าเหล่านี้ไม่ได้โดยตรงที่มีอยู่ใน&&
||
!
dc
คุณต้องไม่ใช้ผู้ประกอบการระดับบิต &
, |
, ~
และ^
หรือฟังก์ชั่นใด ๆ ที่นิด ๆ ใช้พวกเขา
นอกจากนี้คุณต้องไม่ใช้ตัวดำเนินการหรือฟังก์ชันการแปลงเบสสตริงในตัว
โปรดลองเสนอโปรแกรมทดสอบหรือตัวอย่างข้อมูลคอมไพเลอร์ออนไลน์ (ไม่รวมอยู่ในคะแนนกอล์ฟ) เพื่อช่วยยืนยันคำตอบของคุณ