비교 체인 확장


9

대부분의 언어와는 달리, 파이썬은 평가 a<b<c부울 비교에 반대가 실제로 세 개의 숫자를 비교, 수학에서 할 것처럼 a<b로를 c. 이것을 C (및 다른 많은 것)로 쓰는 올바른 방법은입니다 a<b && b<c.

이 도전에서, 당신의 임무는 파이썬 / 직관적 인 표현에서 다른 언어로 쓰여지는 방법으로 임의 길이의 비교 체인을 확장하는 것입니다.

명세서

  • 프로그램은 연산자를 처리해야합니다 ==, !=, <, >, <=, >=..
  • 입력에는 정수만 사용하는 비교 체인이 있습니다.
  • 그 과정에서 비교의 진실성에 대해 걱정하지 마십시오. 이것은 순전히 파싱 / 구문 도전입니다.
  • 입력에는 공백을 분할하여 구문 분석을 사소하게하는 답변을 방지하기위한 공백이 없습니다.
  • 그러나 출력에는의 &&또는 공백 또는 비교 연산자와 둘 중 하나를 둘러싸는 단일 공간이있을 수 &&있지만 일관되지는 않습니다.

테스트 사례

Input                  Output
---------------------------------------------------------------

3<4<5                  3<4 && 4<5
3<4<5<6<7<8<9          3<4 && 4<5 && 5<6 && 6<7 && 7<8 && 8<9
3<5==6<19              3<5 && 5==6 && 6<19
10>=5<7!=20            10>=5 && 5<7 && 7!=20
15==15==15==15==15     15==15 && 15==15 && 15==15 && 15==15

이것은 바이트 단위의 가장 짧은 코드가 승리합니다!

code-golf  parsing  conversion  syntax  code-golf  sequence  primes  code-challenge  geometry  optimization  code-golf  graph-theory  code-golf  number-theory  primes  integer  code-golf  source-layout  cops-and-robbers  code-golf  source-layout  cops-and-robbers  code-golf  sequence  primes  integer  code-golf  math  number-theory  primes  rational-numbers  code-golf  math  sequence  number-theory  primes  code-golf  string  code-golf  math  combinatorics  permutations  restricted-complexity  code-golf  array-manipulation  code-golf  number  sequence  code-golf  number  sequence  code-golf  binary-matrix  code-golf  math  tips  javascript  algorithm  code-golf  string  code-golf  number  sequence  code-golf  math  arithmetic  parsing  code-golf  number  sequence  primes  code-golf  string  ascii-art  geometry  integer  code-golf  geometry  code-golf  number  array-manipulation  code-golf  math  geometry  code-golf  number  sequence  arithmetic  integer  code-golf  string  kolmogorov-complexity  code-golf  number  code-golf  number  chess  code-golf  sequence  decision-problem  subsequence  code-golf  math  number  primes  code-golf  primes  permutations  code-golf  integer  probability-theory  statistics  code-golf  string  code-golf  sequence  decision-problem  parsing  board-game  code-golf  binary  graph-theory  code-golf  board-game  classification  tic-tac-toe  code-golf  ascii-art  polyglot  code-golf  date  code-golf  geometry 


양쪽에 두 개의 공백이 &&있습니까?
H.PWiz

@ H.PWiz nope, srry.
Maltysen

답변:



5

껍질 , 16 14 바이트

각 연산자 주위에 공백을 인쇄합니다.

wJ"&&"m←C2X3ġ±

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

설명:

                  Implicit input, e.g            "3<4<5<6"
            ġ±    Group digits                   ["3","<","4","<","5","<","6"]
          X3      Sublists of length 3           [["3","<","4"],["<","4","<"],["4","<","5"],["<","5","<"],["5","<","6"]]
        C2        Cut into lists of length 2     [[["3","<","4"],["<","4","<"]],[["4","<","5"],["<","5","<"]],[["5","<","6"]]]
      m←          Take the first element of each [["3","<","4"],["4","<","5"],["5","<","6"]]
 J"&&"            Join with "&&"                 ["3","<","4","&&","4","<","5","&&","5","<","6"]
w                 Print, separates by spaces

좋은데 공백으로 문자열을 연결하는보다 직접적인 접근 w대신에 사용할 수 있습니다.;
Leo

그래, 어떻게 생각하지 않았어?
H.PWiz

3

레티 나 , 42 47 22 바이트

Kevin Cruijssen 덕분에 대규모 골프

(\D(\d+))(?=\D)
$1&&$2

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


(==|!=|<=?|>=?)할 수 있습니다 \D+
OVS

마찬가지로 (?<!^|\d)될 수 있습니다 (?<=\D). 또한 (?=\d+)불필요합니다. 연산자 뒤에는 항상 피연산자가 +옵니다 \D. 이이기도 $&대신 $1$2하고 추가 바이트 뒤에 캡처 앞서 캡처 뒤에 보는 대신 앞을보고 저장할 수 있습니다.
Neil

(\D(\d+))(?=\D)1 $1&&$2행에서 2 행으로 충분합니다 ( 22 바이트 ). 여기에서 시도하십시오.
Kevin Cruijssen

2

V , 37 바이트

òͨ䫄0-9& ]«©¨ä«©¨„0-9& ]«©/±² ¦¦ ²³

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

16 진 덤프 :

00000000: f2cd a8e4 ab84 302d 3926 205d aba9 a8e4  ......0-9& ]....
00000010: aba9 a884 302d 3926 205d aba9 2fb1 b220  ....0-9& ]../.. 
00000020: a6a6 20b2 b3                             .. ..

2

클로저, 88 바이트

업데이트 : subs대신 clojure.string/join.

#(subs(apply str(for[p(partition 3 2(re-seq #"(?:\d+|[^\d]+)" %))](apply str" && "p)))4)

2

J , 59 46 바이트

4(}.;)_2{.\3' && '&;\]</.~0+/\@,2~:/\e.&'!<=>'

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

작동 방식

                        (0 , }. ~:&(e.&'!<=>') }:)

우리는 운영자 경계를 찾고 있습니다. "Beheaded"및 "curtailed"문자열은 0과 0이 숫자 인 문자열로 바뀐 다음 함께 정렬됩니다. 길이에 맞게 0을 추가하십시오.

                   +/\                      </. ]     Split on boundaries. 
              ┌──┬──┬─┬─┬─┬──┬──┐
              │10│>=│5│<│7│!=│20│
              └──┴──┴─┴─┴─┴──┴──┘
         3' && '&;\          Add && to infixes of 3.
              ┌────┬──┬──┬──┐
              │ && │10│>=│5 │
              ├────┼──┼──┼──┤
              │ && │>=│5 │< │
              ├────┼──┼──┼──┤
              │ && │5 │< │7 │
              ├────┼──┼──┼──┤
              │ && │< │7 │!=│
              ├────┼──┼──┼──┤
              │ && │7 │!=│20│
              └────┴──┴──┴──┘
    _2{.\                    Take even numbered rows.
;}.,                         Concatenate after dropping the first box.


1

숯, 29 바이트

≔ ηFθ«¿›ι9«F›η!⁺&&η≔ωη»≔⁺ηιηι
≔ ηFθ«F∧›ι9›η!⁺&&η≔⎇›ι9ω⁺ηιηι

동일한 기본 알고리즘의 두 가지 약간 다른 공식. 입력 문자열은 문자별로 반복됩니다. 숫자가 발견되면 변수에 수집됩니다. 숫자와 연산자 사이의 경계가 발견되면 추가 "&&"와 변수가 인쇄되고 변수가 지워집니다. 변수는 처음에 공백으로 초기화되어 첫 번째 경계가 추가 "&&"를 트리거하지 않습니다.


1

젤리 , 16 바이트

e€ØDŒg⁸ṁṡ3m2j⁾&&

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

설명:

e€ØDŒg⁸ṁṡ3m2j⁾&& Uses Jelly stringification, thus full program only
eۯD             For each each char, 1 if it's in '0123456789', otherwise 0
    Œg           Split into longest runs of equal elements
      ⁸ṁ         Reshape original input like the list we just made
                 Reshaping will separate numbers from operators
        ṡ3       Get contiguous sublists of length 3
          m2     Keep every second item, starting from the first
                 This will keep every (number operator number) and
                 remove every (operator number operator) substring
            j⁾&& Join with '&&'

1

자바 8, 46 바이트

s->s.replaceAll("(\\D(\\d+))(?=\\D)","$1&&$2")

설명:

여기에서 시도하십시오.

s->                       // Method with String as both parameter and return-type
   s.replaceAll("(\\D(\\d+))(?=\\D)",
                "$1&&$2") //  Replace the match of the regex
                          //  with the second String
                          // End of method (implicit / single-line return-statement)

정규식 설명 :

(\D(\d+))(?=\D)   # 1) For all matches of this regex
   (\d+)          #  Capture group 2: a number (one or more digits)
(\D \d+ )         #  Capture group 1: anything but a number + the number
                  #   (`\D` will match the `=`, `!`, `<`, or `>`)
         (?=\D)   #  Look-ahead so everything after the match remains as is

 $1&&$2           # 2) Replace it with
 $1               #  Result of capture group 1 (trailing part of the equation + the number)
   &&             #  Literal "&&"
     $2           #  Result of capture group 2 (the number)

교체의 단계별 예 :

Initial:                             10>=5<7!=20
 Match of first replacement:            =5
 Replace with:                          =5&&5
After first replacement:             10>=5&&5<7!=20
 Match of second replacement:                <7
 Replace with:                               <7&&7
After second replacement (result):   10>=5&&5<7&&7!=20



당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.