Valuta un'espressione di meno e tilde


16

Data un'espressione corrispondente al regex /^[-~]*x$/, valutalo in termini di xe genera una stringa corrispondente al regex /^-?x[+-]\d+$/.

Ad esempio, la stringa -~xrestituisce x+1, mentre la stringa -~-xvaluta -x+1e la stringa -~-~--xvaluta x+2.

Partiamo da xe valutiamo la stringa da destra a sinistra. -annulla il termine, mentre viene ~convertito yin -y-1.

Casi test:

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

Questo è . Vince la risposta più breve in byte.

Il formato di input / output è rigoroso. Il "x"è obbligatoria.


Possiamo produrre x+010invece che x+10per -~-~-~-~-~-~-~-~-~-~x? Corrisponde alla seconda regex.

Puoi, anche se non vedo alcun motivo per cui.
Leaky Nun,

3
La tilde ha un significato diverso in diverse lingue. Probabilmente dovresti chiarire che intendi il significato di Python
Luis Mendo,

3
@LuisMendo ha letto l'ultima frase del mio terzo paragrafo
Leaky Nun,

1
@LeakyNun Ah, scusa, non l'ho visto. Comunque, penso che dovrebbe apparire prima. I primi due paragrafi e parte del terzo parlano ~mentre non è stato definito
Luis Mendo,

Risposte:



7

Retina , 47 44 byte

+`--|~~

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

Provalo online! Modifica: salvato 3 byte grazie a @MartinEnder. expanation:

+`--|~~

Elimina le coppie di duplicati adiacenti.

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

Conta il numero di ~s che ci dà l'entità del termine.

T`+`-`^~.*

Se il primo carattere è a, ~il termine dovrebbe essere negativo.

~
-
--

Se il numero di ~s ed -è dispari s allora la xdovrebbe essere negativo.


6

JavaScript, 59 byte

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

Provalo online!


2
Battimi di 16 secondi e 38 byte. Molto bene.
Luca,

Non riesce per i casi di test contenenti più -di una riga. (es. --~-~x)
Luca,

@Luke. Non sono sicuro di cosa intendi. La mia sceneggiatura funziona anche per questi casi di test.

Questo sopravvive al mio nuovo testcase: D
Leaky Nun,

@ThePirateBay: oops, nvm poi ...
Luca,



0

Java 8, 186 byte

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

Sicuramente margini di miglioramento ..

Spiegazione:

Provalo qui.

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.