คุณมีเงื่อนไขที่ยาวและน่าเบื่อในโค้ดของคุณ:
if flag == 1:
while have != needed:
if type == 7:
สิ่งเหล่านี้สามารถเปลี่ยนเป็น<3
สภาพที่น่ารักยิ่งกว่า
if abs(flag - 1) + 2 <3:
while 3 - abs(have - needed) <3:
if 2 + abs(type - 7) <3:
งาน
<3
งานของคุณคือการใช้เงื่อนไขและทำให้มันในแง่ของ ระยะห่างเพียงเรื่องที่เป็นว่าไม่มีผู้ใดระหว่างและ<
3
Conditionals จะมีสองสำนวนที่แยกออกจากกันโดยทั้ง==
, !=
, >
, <
, หรือ>=
นิพจน์จะมีเฉพาะการเพิ่มการลบการปฏิเสธแบบเอกภาพ ( ) ซึ่งมีหนึ่งหรือก่อนแต่ละตัวแปรหรือตัวเลข (ยกเว้นตัวแรกที่ไม่มีอะไรหรือก่อนหน้า)
ตัวเลขจะเป็นและตัวแปรจะเป็น หากคำตอบจำเป็นต้องใช้(ค่าสัมบูรณ์ของ) ให้ใช้ฟังก์ชัน คุณอาจสมมติว่าตัวแปรทั้งหมดเป็นจำนวนเต็มและค่าคงที่จำนวนทั้งหมดในอินพุตคือ <1000<=
-something
+
-
-
[0-9]+
[a-z]+
|x|
x
abs()
เอาต์พุตไม่จำเป็นต้องอยู่ในรูปแบบที่ง่ายที่สุด มันจำเป็นต้องมีเงื่อนไขเหมือนด้านบนซึ่งหมายความว่ามันเป็นเพียงสองนิพจน์คั่นด้วยเครื่องหมายเงื่อนไขเดียว แต่มันยังสามารถใช้abs
ฟังก์ชันล้อมรอบนิพจน์ที่ถูกต้องแล้วก็ทำหน้าที่เหมือนตัวแปรในแง่ของความถูกต้อง
ถ้าใส่ไม่ได้มีการส่งออกสำหรับค่าของตัวแปรสภาพการส่งออกที่อยู่เสมอเท็จใด ๆ <3
แต่ยังคงอยู่ในแง่ของ
ส่วนหนึ่งของความท้าทายคือการหาวิธีที่จะทำ แต่นี่คือขั้นตอนสำหรับhave != needed
ข้างต้น:
have != needed
have - needed != 0
abs(have - needed) > 0
-abs(have - needed) < 0
3 - abs(have - needed) <3
เกณฑ์การให้คะแนน
นี่คือรหัสกอล์ฟดังนั้นรหัสที่ถูกต้องสั้นที่สุดหน่วยเป็นไบต์ชนะ
กรณีทดสอบ
(หมายเหตุผลลัพธ์เหล่านี้ไม่ใช่ผลลัพธ์เพียงอย่างเดียว แต่ฉันพยายามทำให้มันง่ายขึ้น)
flag == 1
abs(flag - 1) + 2 <3
have != needed
3 - abs(have - needed) <3
type == 7
2 + abs(type - 7) <3
x > y
3 - x + y <3
x + 5 < -y
x + 8 + y <3
x + 6 <= y
x + 8 - y <3
-x >= y + 3
x + y + 5 <3
x < x
3 <3
# Unsimplified; both would be valid outputs.
x - x + 3 <3