ฉัน <3 เงื่อนไข


11

คุณมีเงื่อนไขที่ยาวและน่าเบื่อในโค้ดของคุณ:

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|xabs()

เอาต์พุตไม่จำเป็นต้องอยู่ในรูปแบบที่ง่ายที่สุด มันจำเป็นต้องมีเงื่อนไขเหมือนด้านบนซึ่งหมายความว่ามันเป็นเพียงสองนิพจน์คั่นด้วยเครื่องหมายเงื่อนไขเดียว แต่มันยังสามารถใช้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

มีช่องว่างหนึ่งเสมอระหว่างโทเค็นอินพุตหรือไม่
Doorknob

@Doorknob ไม่จะมีช่องว่าง 0 หรือ 1
Artyer

คำตอบ:


3

เรติน่า , 95 ไบต์

<=
<1+
>=
>-1+
(.*)(.=)(.*)
$2abs($1-($3))
==
2+
!=
3-
(.*)>(.*)
$2<$1
(.*)<(.*)
$1-($2)+3
$
<3

ลองออนไลน์!

วิธีการแก้ปัญหาที่ค่อนข้างไร้สาระ แต่ฉันไม่สามารถค้นหาการปรับปรุงใด ๆ ได้

นี่เป็นเพียงชุดของการทดแทน:

<=
<1+
>=
>-1+

กำจัด "หรือเท่ากับ" การเปรียบเทียบโดยการแทนที่x <= yด้วยx < 1 + yและมีx >= yx > -1 + y

(.*)(.=)(.*)
$2abs($1-($3))

แทนที่x == yด้วย==abs(x - y)และมีx != y!=abs(x - y)

==
2+
!=
3-

แทนที่==ด้วย2+และ!=ด้วย3-เพื่อให้ทดแทนโดยรวมกลายเป็นx == y2 + abs(x - y)และ→x != y3 - abs(x - y)

(.*)>(.*)
$2<$1

ปกติทิศทางของความไม่เท่าเทียมกันที่เหลือแทนที่ด้วยx > yy < x

(.*)<(.*)
$1-($2)+3

แทนที่ด้วยx < yx - y + 3

$
<3

ผนวกหัวใจต่อท้ายของสตริง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.