Mở rộng chuỗi so sánh


9

Không giống như hầu hết các ngôn ngữ, Python đánh giá a<b<cnhư nó sẽ được thực hiện trong toán học, thực sự so sánh ba số, trái ngược với việc so sánh boolean a<bvới c. Cách chính xác để viết điều này trong C (và nhiều người khác) sẽ là a<b && b<c.

Trong thử thách này, nhiệm vụ của bạn là mở rộng các chuỗi so sánh có độ dài tùy ý từ biểu diễn Python / trực quan, đến cách nó sẽ được viết bằng các ngôn ngữ khác.

Thông số kỹ thuật

  • Chương trình của bạn sẽ phải xử lý các toán tử : ==, !=, <, >, <=, >=.
  • Đầu vào sẽ có chuỗi so sánh chỉ sử dụng số nguyên.
  • Đừng lo lắng về tính chân thực của bất kỳ so sánh nào trên đường đi, đây hoàn toàn là một thách thức phân tích cú pháp / cú pháp.
  • Đầu vào sẽ không có bất kỳ khoảng trắng nào để ngăn các câu trả lời phân tích cú pháp tầm thường bằng cách phân tách trên các khoảng trắng.
  • Tuy nhiên, đầu ra của bạn có thể có một không gian duy nhất bao quanh hoặc chỉ các &&toán tử so sánh và cả các toán tử so sánh và &&hoặc, nhưng không nhất quán.

Các trường hợp thử nghiệm

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

Đây là , vì vậy mã ngắn nhất tính bằng byte sẽ thắng!

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 


Tôi có thể có hai không gian hai bên &&không?
H.PWiz

@ H.PWiz không, srry.
Maltysen

Câu trả lời:



5

Husk , 16 14 byte

In một không gian xung quanh mỗi toán tử.

wJ"&&"m←C2X3ġ±

Hãy thử trực tuyến!

Giải trình:

                  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

Đẹp một. Bạn có thể sử dụng wthay vì ;cho cách tiếp cận trực tiếp hơn để nối các chuỗi có khoảng trắng
Leo

Ồ vâng, làm thế nào tôi không nghĩ về điều đó?
H.PWiz

3

Võng mạc , 42 47 22 byte

Chơi golf ồ ạt nhờ Kevin Cruijssen

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

Hãy thử trực tuyến!


(==|!=|<=?|>=?)có thể \D+
OVS

Tương tự (?<!^|\d)có thể được (?<=\D). Ngoài ra, điều (?=\d+)này là không cần thiết, toán tử sẽ luôn được theo sau bởi một toán hạng, tại điểm mà bạn có thể thả +sau \D. Cũng có $&thay vì $1$2, và sau đó một byte nữa có thể được lưu bằng cách chụp phía sau và nhìn về phía trước thay vì bắt trước và nhìn phía sau.
Neil

(\D(\d+))(?=\D)trên dòng 1 và $1&&$2trên dòng hai là đủ ( 22 byte ). Hãy thử nó ở đây.
Kevin Cruijssen

2

V , 37 byte

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

Hãy thử trực tuyến!

Hexdump:

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

Clojure, 88 byte

Cập nhật: substhay vì clojure.string/join.

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

2

J , 59 46 byte

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

Hãy thử trực tuyến!

Làm thế nào nó được sử dụng để làm việc

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

Chúng tôi đang tìm kiếm ranh giới nhà điều hành. Các chuỗi Beheaded và các chuỗi giới hạn của các dòng được chia thành các số 0 và các chuỗi trong đó 0 là các chữ số, sau đó được nối với nhau. Chuẩn bị số không để phù hợp với chiều dài.

                   +/\                      </. ]     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

Than, 29 byte

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

Hai công thức hơi khác nhau của cùng một thuật toán cơ bản. Chuỗi đầu vào được lặp theo ký tự. Khi các chữ số được tìm thấy, chúng được thu thập trong một biến. Khi tìm thấy một ranh giới giữa một số và toán tử, một "&&" cộng với biến được in và biến bị xóa. Biến ban đầu được khởi tạo thành một khoảng trắng để ranh giới đầu tiên không kích hoạt thêm "&&".


1

Thạch , 16 byte

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

Hãy thử trực tuyến!

Giải trình:

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

Java 8, 46 byte

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

Giải trình:

Hãy thử nó ở đây.

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)

Regex giải thích:

(\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)

Từng bước ví dụ về sự thay thế:

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



Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.