ขยายเครือข่ายเปรียบเทียบ


9

ซึ่งแตกต่างจากภาษาส่วนใหญ่งูหลามประเมินa<b<cเท่าที่จะทำได้ในคณิตศาสตร์จริงเปรียบเทียบตัวเลขสามเมื่อเทียบกับการเปรียบเทียบแบบบูลไปa<b cวิธีที่ถูกต้องในการเขียนใน C (และอื่น ๆ อีกมากมาย) a<b && b<cจะเป็น

ในความท้าทายนี้งานของคุณคือการขยายเครือข่ายการเปรียบเทียบที่มีความยาวตามอำเภอใจจากการเป็นตัวแทนของ Python / การใช้งานง่ายไปจนถึงการเขียนในภาษาอื่น

ข้อมูลจำเพาะ

  • ==, !=, <, >, <=, >=โปรแกรมของคุณจะต้องมีการจัดการกับผู้ประกอบการ:
  • อินพุตจะมีกลุ่มการเปรียบเทียบโดยใช้จำนวนเต็มเท่านั้น
  • ไม่ต้องกังวลเกี่ยวกับความแท้จริงของการเปรียบเทียบใด ๆ ระหว่างทางนี่เป็นความท้าทายที่แยกวิเคราะห์ / สร้างประโยคอย่างแท้จริง
  • อินพุตจะไม่มีช่องว่างใด ๆ เพื่อป้องกันคำตอบที่ทำให้การแยกวิเคราะห์เป็นเรื่องเล็กน้อยโดยแบ่งช่องว่างออก
  • อย่างไรก็ตามผลลัพธ์ของคุณอาจมีพื้นที่เดียวโดยรอบไม่ว่าจะเป็น&&'s หรือทั้งสองตัวดำเนินการเปรียบเทียบและ&&' s หรือไม่ก็ตาม แต่ก็มีความสอดคล้องกัน

กรณีทดสอบ

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 ไม่ srry
Maltysen

คำตอบ:


6

เรติน่า , 33 22 17 ไบต์

-5 ไบต์ขอบคุณ @MartinEnder

-2`\D(\d+)
$&&&$1

ลองออนไลน์!


@MartinEnder น่าเสียดายที่1>-2ไม่สามารถ จำกัด จากปลายทั้งสองได้ในครั้งเดียว ...
Neil

@ ใช่ใช่ Retina 1.0 จะได้รับขีด จำกัด ไวยากรณ์ใหม่ที่เป็นไปได้
Martin Ender

คุณช่วยโพสต์คำอธิบายได้ไหม?
James

5

Husk , 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 ไบต์

ต้องขอบคุณนักกอล์ฟอย่างมากกับเควินครุซเซ่น

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

ลองออนไลน์!


(==|!=|<=?|>=?)สามารถ \D+
ovs

ในทำนองเดียวกันสามารถ(?<!^|\d) (?<=\D)นอกจากนี้ยังมี(?=\d+)ความจำเป็นผู้ประกอบการมักจะตามมาด้วยการถูกดำเนินการจุดที่คุณสามารถวางหลัง+ \Dนอกจากนี้ยังมี$&แทน$1$2และจากนั้นสามารถบันทึกไบต์เพิ่มเติมได้โดยการจับด้านหลังและมองไปข้างหน้าแทนที่จะจับล่วงหน้าและมองไปข้างหลัง
Neil

(\D(\d+))(?=\D)บรรทัดที่ 1 และ$1&&$2บรรทัดที่สองเพียงพอ ( 22 ไบต์ ) ลองที่นี่
Kevin Cruijssen


2

Clojure, 88 ไบต์

ปรับปรุง: แทนsubsclojure.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 เป็นตัวเลขแล้วจึงรวมเข้าด้วยกัน เตรียมศูนย์ให้ตรงกับความยาว

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

Java 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)

คำอธิบาย Regex:

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