Eksi ve tilde ifadesini değerlendirin


16

Normal ifade ile eşleşen bir ifade verildiğinde, ifade /^[-~]*x$/açısından değerlendirin ve normal ifade ile eşleşen xbir dize çıktısı alın /^-?x[+-]\d+$/.

Örneğin, dize -~xdeğerlendirir için x+1, süre dize -~-xkadar değerlendirir -x+1ve dize -~-~--xdeğerlendirir için x+2.

xSağdan sola dizgiden başlıyor ve değerlendiriyoruz. -iken, terim negates ~dönüştürür yiçin -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

Bu . Bayt cinsinden en kısa cevap kazanır.

Giriş / çıkış formatı katıdır. "x"Zorunludur.


Biz çıkış Can x+010yerine x+10için -~-~-~-~-~-~-~-~-~-~x? İkinci normal ifadeyle eşleşir.

Yapabilirsin, ama nedenini görmüyorum.
Leaky Nun

3
Tilde'nin farklı dillerde farklı bir anlamı vardır. Muhtemelen Python'un anlamını düşündüğünüzü açıklığa kavuşturmalısınız
Luis Mendo

3
@LuisMendo üçüncü paragrafımın son cümlesini okudu
Leaky Nun

1
@LeakyNun Ah, üzgünüm, görmedim. Her neyse, daha önce görünmesi gerektiğini düşünüyorum. İlk iki paragraf ve ~tanımlanmadığı sırada üçüncü konuşmanın bir kısmı
Luis Mendo

Yanıtlar:



7

Retina , 47 44 bayt

+`--|~~

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

Çevrimiçi deneyin! Düzenleme: @MartinEnder sayesinde 3 bayt kaydedildi. bunların açıklaması:

+`--|~~

Bitişik yinelenen çiftleri silin.

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

~Bize terimin büyüklüğünü veren s sayısını sayın .

T`+`-`^~.*

İlk karakter bir ise ~, terim negatif olmalıdır.

~
-
--

Sayısı ise ~s ve -s garip ardından xnegatif olmalıdır.


6

JavaScript, 59 bayt

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

Çevrimiçi deneyin!


2
Beni 16 saniye ve 38 bayt döv. Aferin.
Luke

-Arka arkaya çoklu içeren test senaryolarında başarısız olur . (yani--~-~x )
Luke

@Luke. Ne demek istediğinden emin değilim. Betiğim bu test senaryolarında da çalışır.

Bu benim yeni test çantamda hayatta kalıyor: D
Leaky Nun

@ThePirateBay: oops, nvm sonra ...
Luke



0

Java 8, 186 bayt

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("--","");}

Kesinlikle iyileştirmeler için yer ..

Açıklama:

Burada deneyin.

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.