빼기와 물결표의 표현을 평가하십시오


16

정규식 /^[-~]*x$/과 일치하는 표현식이 주어지면 정규식 x과 비교하여 문자열을 출력하십시오 /^-?x[+-]\d+$/.

예를 들어, 문자열 -~x들을 평가하는 x+1반면, 문자열 -~-x로 평가 -x+1하고, 문자열 -~-~--x평가됩니다에 x+2.

우리 x는 문자열을 오른쪽에서 왼쪽으로 시작 하고 평가합니다. 로 변환 하는 -동안 용어를 무시합니다 .~y-y-1

테스트 케이스 :

    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? 두 번째 정규식과 일치합니다.

이유는 보이지 않지만 당신은 할 수 있습니다.
Leaky Nun

3
물결표는 언어마다 다른 의미를 갖습니다. 당신은 아마도 파이썬의 의미를 의도한다는 것을 분명히해야합니다.
Luis Mendo

3
@LuisMendo는 세 번째 단락의 마지막 문장을 읽었습니다
Leaky Nun

1
@LeakyNun 아, 미안, 나는 그것을 보지 못했습니다. 어쨌든, 나는 그것이 이전에 나타나야한다고 생각합니다. ~정의되지 않은 동안 처음 두 단락과 세 번째 이야기의 일부
Luis Mendo

답변:



7

망막 , 47 44 바이트

+`--|~~

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

온라인으로 사용해보십시오! 편집 : @MartinEnder 덕분에 3 바이트가 절약되었습니다. 확장 :

+`--|~~

인접한 중복 쌍을 삭제하십시오.

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

~항의 크기를 나타내는 s 의 개수를 세십시오 .

T`+`-`^~.*

첫 번째 문자가 a ~이면 용어는 음수 여야합니다.

~
-
--

~s와 -s 의 수가 홀수이면 x음수 가 되어야합니다.


6

자바 스크립트, 59 바이트

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

온라인으로 사용해보십시오!


2
16 초 38 바이트 날 이길. 잘 했어.
누가 복음

여러 -행을 포함하는 테스트 케이스에 실패합니다 . (예 --~-~x)
누가 복음

@ 루크. 무슨 뜻인지 잘 모르겠습니다. 내 스크립트는 이러한 테스트 사례에서도 작동합니다.

이것은 내 새로운 테스트 케이스에서 살아 남았습니다 : D
Leaky Nun

@ThePirateBay : 죄송합니다, nvm 그리고 ...
Luke Luke



0

자바 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.