ประเมินการแสดงออกของลบและตัวหนอน


16

ได้รับการแสดงออกที่ตรงกับ regex ไม่/^[-~]*x$/, ประเมินในแง่ของxและเอาท์พุทจับคู่สาย /^-?x[+-]\d+$/regex

ยกตัวอย่างเช่นสตริง-~xประเมินx+1ในขณะที่สตริง-~-xประเมิน-x+1และสตริงประเมิน-~-~--xx+2

เราเริ่มต้นxและประเมินสตริงจากขวาไปซ้าย -ขัดแย้งกับคำในขณะที่~แปลงไปy-y-1

Testcases:

    x  x+0
   ~x -x-1
  -~x  x+1
 ~-~x -x-2
-~-~x  x+2
--~~x  x+0
  ~-x  x-1
 -~-x -x+1

นี่คือรหัสกอล์ฟคำตอบที่สั้นที่สุดในการชนะไบต์

รูปแบบอินพุต / เอาต์พุตมีความเข้มงวด "x"มีผลบังคับใช้


เราสามารถส่งออกx+010แทนx+10สำหรับ-~-~-~-~-~-~-~-~-~-~x? มันตรงกับ regex ที่สอง

คุณทำได้แม้ว่าฉันจะเห็นเหตุผลว่าทำไม
Leun Nun

3
เครื่องหมายตัวหนอนมีความหมายแตกต่างกันในภาษาที่แตกต่างกัน คุณควรชี้แจงว่าคุณตั้งใจใช้ความหมายของ Python
Luis Mendo

3
@LuisMendo อ่านประโยคสุดท้ายของย่อหน้าที่สามของฉัน
Leaky Nun

1
@LeakyNun Ah ขอโทษฉันไม่เห็นว่า อย่างไรก็ตามฉันคิดว่ามันควรจะปรากฏขึ้นก่อนหน้านี้ สองย่อหน้าแรกและส่วนหนึ่งของการพูดคุยที่สาม~ในขณะที่ยังไม่ได้กำหนด
Luis Mendo

คำตอบ:



7

เรติน่า47 47ไบต์

+`--|~~

((~)|-)*x
$&+$#2
T`+`-`^~.*
~
-
--

ลองออนไลน์! แก้ไข: บันทึกแล้ว 3 ไบต์ด้วย @MartinEnder Expanation:

+`--|~~

ลบคู่ที่ซ้ำกันที่อยู่ติดกัน

((~)|-)*x
$&+$#2

นับจำนวน~s ที่ให้ขนาดของเทอม

T`+`-`^~.*

หากตัวอักษรตัวแรกเป็นคำ~นั้นควรจะเป็นเชิงลบ

~
-
--

หากจำนวน~s และ-s เป็นคี่แล้วxควรจะเป็นเชิงลบ


6

JavaScript ขนาด 59 ไบต์

x=>['-'[x.length&1]]+'x'+['+'[(x=eval(x.join` `))<0^0]]+~~x

ลองออนไลน์!


2
เอาชนะฉันได้ 16 วินาทีและ 38 ไบต์ ทำได้ดี.
ลุค

ล้มเหลวสำหรับกรณีทดสอบที่มีหลายรายการ-ในหนึ่งแถว (เช่น--~-~x)
ลุค

@Luke ฉันไม่แน่ใจว่าคุณหมายถึงอะไร สคริปต์ของฉันใช้ได้กับกรณีทดสอบเหล่านี้ด้วย

สิ่งนี้มีชีวิตรอดพ้นจากงานทดสอบใหม่ของฉัน: D
Leun Nun

@ThePirateBay: โอ๊ะแล้ว nvm ...
ลุค



0

Java 8, 186 ไบต์

s->{s=s.replaceAll("--|~~","");int l,i=(s.length()-(l=(s=s.replaceAll("-~","")).length()))/2,j=l-(s=s.replaceAll("~","")).length();return(j>0?"-"+s+"-"+-~i:s+"+"+i).replaceAll("--","");}

ห้องพักสำหรับการปรับปรุงอย่างแน่นอน ..

คำอธิบาย:

ลองที่นี่

s->{                              // Method with String as both parameter and return-type
  s=s.replaceAll("--|~~","");     //  Remove all "--" and "~~"
  int l,                          //  Temp integer to reduce bytes
      i=(s.length()-(l=(s=s.replaceAll("-~","")).length()))/2,
                                 //  Remove all "-~" and save count in `i`
      j=l-(s=s.replaceAll("~","")).length();
                                 //  Remove all remaining "~" and save count in `j`
   return(j>0?                   //  If `j` is larger than 0:
           "-"                   //   Start with a minus sign
           +s                    //   followed by the remaining `s`
           +"-"                  //   followed by another minus sign
           +-~i                  //   followed by `i+1`
          :                      //  Else:
           s                     //   Start with the remaining `s`
           +"+"                  //   followed by a plus sign
           +i                    //   followed by `i`
         ).replaceAll("--","");  //  And then remove all "--"
}                                // End of method
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.