สตริงที่จับคู่ได้


28

สตริงสามารถจับคู่ได้หากสามารถแบ่งออกเป็นรายการย่อยซึ่งแต่ละรายการจะมีสตริงซ้ำกันสองครั้งติดต่อกัน ตัวอย่างเช่นaabaaababbbabaจับคู่ได้ดังนี้:

aaba aaba
b b
ba ba

กำหนดสตริงที่ไม่ว่างเป็นa's และb' ให้ส่งออกค่า Truthy หากสามารถจับคู่ได้และค่า Falsey หากไม่ใช่

Pairable:

aa
abaaba
bbababbb
aabaaababbbaba
babababa
bbbbbbbbbbbb
aaababbabbabbbababbaabaabaababaaba
aaaabaab

ไม่สามารถจับคู่ได้:

a
ba
baab
abaabaaba
bbbbbbbbbbbbbbb
baababbabaaaab
aaaaabbaaaaa

ฉันแนะนำให้คุณหาวิธีแก้ปัญหาที่ไม่ใช้ regex แม้ว่าจะมีคำตอบสั้น ๆ ในภาษาของคุณ คุณสามารถทำเครื่องหมายเป็น "no regex" โดย regex ฉันหมายถึงระบบย่อยการจับคู่รูปแบบสตริงในตัว


ลีดเดอร์บอร์ด:


เราสามารถใช้สิ่งอื่นนอกเหนือจากนี้ได้abหรือไม่?
Erik the Outgolfer

หาก bbababbb สามารถจับคู่ได้ทำไม baab และ aaaaabbaaaaa ถึงไม่ใช่?
rnso

@rnso จากความเข้าใจของฉัน bbababbb สามารถแบ่งออกเป็น 3 คู่: bb, abab และ bb ซึ่งเชื่อมต่อกันเพื่อสร้างสตริงเดิมในขณะที่อีกสองไม่สามารถ
Sunny Pun

โดยคำถาม "แต่ละอัน (ซับสตริง) เป็นสตริงซ้ำสองครั้งอย่างต่อเนื่อง" และที่ไม่พอใจกับ bbababbb มิฉะนั้น baab ยังสามารถแบ่งเป็น baab และ aaaaabbaaaaa ถึง aaaaa bb aaaaa
rnso

@rnso ไม่แน่ใจว่าคุณหมายถึงอะไร ฉันหมายถึงการทำซ้ำสองครั้งติดกัน ใน "baa b" ทั้งสองของ b จะถูกคั่นด้วย a ดังนั้นมันจึงไม่ทำงาน
xnor

คำตอบ:


11

Python 2, 68 63 ไบต์

f=lambda s,n=1:s==2*s[:n]or''<s[n:]>-f(s,n+1)<f(s[n:])*f(s[:n])

ผลตอบแทนที่แท้จริงหรือเท็จ ทดสอบบนIdeone


4
นั่นเป็นการเรียกซ้ำที่สะอาดจริงๆโดยใช้ดัชนีสำหรับทั้งจุดศูนย์กลางของ double และ center to partition มันตลกที่ความจริงถูกตรวจสอบว่าเป็นอะไรที่น้อยกว่า ฉันเห็นการปรับปรุงบางอย่าง ...
xnor

8

เรติน่า 11 ไบต์

^((.+)\2)+$

ลองกรณีทดสอบทั้งหมด สองไบต์แรกทำให้เป็นหลายบรรทัด

การตีความตัวอักษรของกฎค่อนข้างชัดเจนใช้ regex อย่างเช่นโปรแกรม Retina ทั้งหมด


2
Dangit ฉันรอ 3 สัปดาห์เพื่อโพสต์สิ่งนี้ ...
ETHproductions

2
มาร์ตินก็รอเช่นกัน
xnor

5
อ๊ะ! ฉันเอาชนะเขาเพียง 10 วินาทีด้วย ... ฉันแน่ใจว่าถ้าฉันเขียนคำตอบ Hexagony เขาจะยกโทษให้ฉัน!
FryAmTheEggman

5
@FryAmTheEggman ฉันหวังว่าจะได้ :)
Martin Ender

2
มันเหมือนกันกับ Perl:perl -pE '$_=/^((.+)\2)+$/'
Dada

8

เยลลี่ 10 ไบต์

ẆŒPẋ€€2F€ċ

ไม่มีประสิทธิภาพ ... ลองออนไลน์!

มันทำงานอย่างไร

ẆŒPẋ€€2F€ċ  Main link. Argument: s (string)

Ẇ           Window, generate the array of all substrings of s.
 ŒP         Powerset; generate all subarrays of substrings of s.
   ẋ€€2     Repeat each substring in each subarray twice.
            For example, ["ab", "a", "b"] becomes ["abab", "aa", "bb"].
       F€   Flatten the subarrays by concatenating their strings.
         ċ  Count how many times s appears in the generated strings.

นี่ ... ดูเหมือนจะไม่มีประสิทธิภาพ อินพุตนี้สามารถจัดการกับกรอบเวลาที่เหมาะสมได้นานเท่าใด
John Dvorak

1
ฉันไม่มีประสิทธิภาพมาก ( O (2 ^ n ^ 2) ) ฉันต้องตรวจสอบภายในเครื่อง TIO มีหน่วยความจำไม่เพียงพอสำหรับสตริงที่มีความยาว6
เดนนิส

8
สตริงของความยาว6ใช้เวลา 3:20 นาทีในเครื่องของฉันและต้องใช้หน่วยความจำ 6 GB
เดนนิส

1
@ เดนนิสอย่าป้อนความยาว100แล้วเพราะทุกอย่างจะพัง ใช่แม้กระทั่ง TIO
Erik the Outgolfer

@EriktheGolfer นั่นเป็นความคิดที่ดีเพราะมันจะทำให้ TIO ช้าลงโดยไม่จำเป็นสำหรับการใช้งานอื่น ๆ แต่มันจะไม่ผิดพลาด ทันทีที่ระบบมีหน่วยความจำไม่เพียงพอกระบวนการก็จะถูกสังหารโดย OOM
เดนนิส

5

Haskell, 72 69 ไบต์ (ไม่มี regex)

g(a:b:c)|a==b=g c
g x=x==[]
any(g.words.concat).mapM(\c->[[c],c:" "])

วิธีการที่กำลังดุร้าย ลองบน Ideone

ขอบคุณ BlackCap -3 ไบต์

คำอธิบาย

ฟังก์ชั่นผู้ช่วยที่จะนำรายการของสตริงและตรวจสอบว่ามันประกอบด้วยคู่ของสตริงที่เหมือนกันเช่นg ["aa","aa","bba","bba","ab","ab"]ฟังก์ชั่นหลัก (ไม่ระบุชื่อ) แยกสตริงด้วยวิธีที่เป็นไปได้ทั้งหมดและตรวจสอบว่าอย่างน้อยหนึ่งรายการแยกผลลัพธ์ในรายการที่gยอมรับ

g(a:b:c)                                  g on list with elements a, b and tail c,
        |a==b                              in the case that a==b,
             =g c                          recurses to the tail c.
g x=                                      g on any other list x
    x==[]                                  checks that x is empty.
                                           This includes the case where a is not equal
                                           to b, resulting in False.
any(g.words.concat).mapM(\c->[[c],c:" "]) The main function:
                    mapM(\c->[[c],c:" "])  Replace each letter c with either "c" or "c "
                                           in all possible ways, return list of results.
any(              ).                       Check that at least one result satisfies this:
            concat                          Concatenate the 1- or 2-letter strings,
      words.                                split again at each space,
    g.                                      apply g.

คุณสามารถแทนที่or.mapด้วยany
BlackCap

@ BlackCap แน่นอนขอบคุณ! ตอนแรกฉันมีany g.map(words.concat)และคิดว่า "เฮ้ฉันสามารถเล่นกอล์ฟanyถึงor" ...
Zgarb

5

Python 2, 60 ไบต์

f=lambda s,t='':''<s>f(s[1:],t+s[0])|f(t and s)*f(t)>-(s==t)

ฉันหวังว่านี่ถูกต้อง มันทำงานค่อนข้างช้าและandดูไม่ดีที่สุด


1
ฉันพยายามใช้สตริง แต่ไม่สามารถไปไหนก็ได้ใกล้กับคะแนนตามดัชนีของฉัน นั่นเป็นสิ่งที่ฉลาดสำหรับandคุณ
เดนนิส

ยินดีด้วย! การเรียกใช้พาร์ติชั่นซ้ำเป็นเคล็ดลับที่ฉันมีอยู่ในใจ
xnor

4

เยลลี่ 12 ไบต์

ŒṖµœs€2ZEµ€S

สองไบต์ยาวกว่าคำตอบอื่น ๆ ของฉันแต่วิธีการนี้มีประสิทธิภาพมากกว่าและจัดการได้ทั้งหมด แต่หนึ่งในกรณีทดสอบ

ลองออนไลน์!

มันทำงานอย่างไร

ŒṖµœs€2ZEµ€S  Main link. Argument: s (string)

ŒṖ            Generate all partitions of s.
  µ      µ€   Map the monadic chain between the µ's over the partitions.
   œs€2         Split each string in the partition into two chunks of equal length.
       Z        Zip/transpose, collecting the first halves in one array and the
                second halves in another.
        E       Test the arrays of halves for equality.
           S  Return the sum of the results, counting the number of different
              ways s can be paired.

3

Pyth - ไม่มี Regex - 13 12 ไบต์

ตรวจสอบว่าพาร์ทิชันใด ๆ ที่ประกอบด้วยสตริงทั้งหมดที่เท่ากับซึ่งกันและกันเมื่อสับเป็นสอง

sm.AqMcL2d./

Test Suite


3

Brachylogขนาด 14 ไบต์ (ไม่มี regex)

lye~l:1j@2zcc?

ลองออนไลน์!

นี่ช้าเกินไปสำหรับบางกรณีทดสอบ

คำอธิบาย

ly                  The list [0, …, length(Input)]
  e~l               A list whose length is an element of the previous list
     :1j            Append itself to this list
        @2zc        Split in half, zip and concatenate so that the list contains pairs of
                      consecutive identical elements
            c?      The concatenation of that list must result in the Input

3

JavaScript (ES6), ไม่มี regexp, 75 74 ไบต์

f=s=>!s|[...s].some((_,i)=>i&&s[e='slice'](0,i)==s[e](i,i+=i)&&f(s[e](i)))

ผลตอบแทน1สำหรับ pairable 0มิฉะนั้น แก้ไข: บันทึก 1 ไบต์ขอบคุณ @ edc65


ดี! นับเดียวกันโดยใช้โดยไม่มีการแก้ไขsubstr iแต่ด้วยการsliceทำซ้ำ 3 ครั้งคุณสามารถบันทึกนามแฝง 1 ไบต์
edc65

@ edc65 คุณจะได้รับจำนวนเดียวกันโดยไม่ต้องแก้ไขiอย่างไร ฉันรู้ว่าs.substr(i,i+i)ผลตอบแทนนั้นเหมือนกันs.slice(i,i+=i)แต่ฉันก็ใช้ค่าที่ปรับเปลี่ยนในiภายหลัง ...
Neil

มันs.substr(i,i)น้อยกว่าs.slice(i+i)2 ไบต์และมากกว่า 2 ไบต์
edc65

@ edc65 โอ้แน่นอนมันคือผมต้องต้องกาแฟมากขึ้น ...
นีล

3

Python 58 ไบต์

f=lambda s,p='':s>''and(f(p)>-(s==p)<f(s))|f(s[1:],p+s[0])

นี้จะขึ้นอยู่กับวิธีการ recursive เดนนิส เคล็ดลับการปฏิเสธบูลีนก็ถูกนำมาจากที่นั่นเช่นกัน

แนวคิดใหม่คือการแบ่งพาร์ทิชัน(p,s)ของสตริงเดิมโดยเริ่มต้นด้วย('',s)การย้ายอักขระตัวแรกของsเป็นอักขระตัวสุดท้ายของpซ้ำ ๆ สิ่งนี้ช่วยให้ชิ้นส่วนถูกอ้างถึงโดยตรงโดยไม่ต้องแบ่งสาย แต่เนื่องจากพาร์ติชันเริ่มต้นด้วยpที่ว่างเปล่าเราจะต้องระมัดระวังเพื่อหลีกเลี่ยงลูปไม่มีที่สิ้นสุดของการโทรf(s)f(s)


2

JavaScript (ES6), 24 ไบต์

x=>/^((.+)\2)+$/.test(x)

อาจไม่สั้นลงกว่านี้


ไม่ควรที่จะเป็น\2อย่างไร
Neil

@ Neil ด้วยเหตุผลบางอย่างฉันคิดว่ามันทำงานได้\1แต่aabกลับtrue... ขอบคุณสำหรับการแก้ไข
ETHproductions



1

แร็กเก็ต 230 ไบต์

(let((sl string-length)(ss substring))(if(odd?(sl s))(printf ".~n")(begin(let p((s s))(if(equal? s "")(printf "!")
(for((i(range 1(add1(/(sl s)2)))))(when(equal?(ss s 0 i)(ss s i(* 2 i)))(p(ss s(* 2 i)(sl s)))))))(printf ".~n"))))

พิมพ์ '!' สำหรับแต่ละวิธีที่สตริงสามารถจับคู่ได้ พิมพ์ '.' ในตอนท้าย

Ungolfed:

(define (f s)
  (let ((sl string-length)                              ; create short names of built-in fns
        (ss substring))
    (if (odd? (sl s))  (printf ".~n")                   ; odd length strings cannot be pairable; end here.
        (begin
          (let loop ((s s))                             ; start testing here
            (if (equal? s "") (printf "!")              ; if no remaining string, it must be pairable
                (for ((i (range 1 (add1 (/(sl s)2)))))  ; ch lengths varying from 1 to half of string length
                  (when (equal? (ss s 0 i)              ; ch if substrings are same
                                (ss s i (* 2 i)))
                    (loop (ss s (* 2 i) (sl s) ))))))   ; if yes, loop to check remaining string.
          (printf ".~n")))))                            ; End of testing.

การทดสอบ:

(println "Following should be pairable")
(f "bbaabbaa")            ; should produce 2 '!' since 2 ways are possible.
(f "aa")
(f "abaaba")
(f "bbababbb")
(f "aabaaababbbaba")
(f "babababa")                    ; should be pairable in 2 ways.
(f "bbbbbbbbbbbb")                ; should be pairable in many ways.
(f "aaababbabbabbbababbaabaabaababaaba")
(f "aaaabaab")
(println "Following should be unpairable")
; (f "a")
(f "ba")
(f "baab")
(f "abaabaaba")
(f "bbbbbbbbbbbbbbb")
(f "baababbabaaaab")
(f "aaaaabbaaaaa")

เอาท์พุท:

"Following should be pairable"
!!.
!.
!.
!.
!.
!!.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!.
!.
!.
"Following should be unpairable"
.
.
.
.
.
.

1

Perl, 16 +2 = 18 ไบต์ (พร้อม regex)

วิ่งด้วย-nlธง -Eฟรี

say/^((.+)\2)+$/

ทำงานเป็น:

perl -nlE 'say/^((.+)\2)+$/'

ส่งคืนรายการของกลุ่มการดักจับ (ความจริง) หากจับคู่ได้สตริง null หากไม่สามารถจับคู่ได้

คำอธิบาย

-nlธงจะเรียกใช้รหัสในวง ( -n) วางอินพุท (ต่อท้ายด้วยการขึ้นบรรทัดใหม่เอาออกเพราะ-l) ลงในตัวแปร$_ในแต่ละครั้งแล้วประเมินรหัสการป้อนข้อมูลแต่ละครั้งที่มีการป้อนจนกว่าโปรแกรมถูกยกเลิกด้วยตนเอง การ-Eตั้งค่าสถานะช่วยให้คุณประเมินโค้ดบนบรรทัดคำสั่งและเปิดใช้งานsayคำสั่ง

say/^((.+)\2)+$/

   /^((.+)\2)+$/  #The regex engine
      (.+)\2      #Find any set of at least one character, followed by itself
     (      )+    #Do this at least one time
   /^         $/  #Make sure that this matches the entire string from start to end
say               #Output the result of the regex

หากพบการแข่งขัน (เช่นถ้าสตริงสามารถจับคู่ได้) แล้ว regex จะส่งกลับรายการของกลุ่มการดักจับซึ่งจะประเมินความจริงซึ่งจะถูกส่งผ่านไปยังsayและเอาต์พุต หากไม่พบการจับคู่ regex จะส่งคืนสตริงว่างซึ่งประเมินว่าเป็นเท็จซึ่งจะถูกส่งผ่านไปยังsayและเอาต์พุต

ตัวอย่าง:

$ perl -nlE 'say/^((.+)\2)+$/'
aaababbabbabbbababbaabaabaababaaba
baababaababaaba                      #Truthy
baababbabaaaab
                                     #Falsy
bbababbb
bbb                                  #Truthy
aabaaababbbaba
bababa                               #Truthy
abaabaaba
                                     #Falsy

1

อารัมภบท GNU, 49 46 ไบต์

อาจใช้งานได้ในสายพันธุ์อื่นเช่นกันแม้ว่าจะไม่ได้แสดงถึงสายอักขระในลักษณะเดียวกัน การเป็นตัวแทนของ GNU Prolog เป็นประโยชน์อย่างหนึ่งสำหรับปัญหานี้

ไม่ชัดเจนว่าจะถือว่าเป็นการใช้ regex หรือไม่ มันไม่ได้ใช้คุณสมบัติเหมือน regex ใด ๆ แต่ความหมายทั้งหมดของภาษานั้นคล้ายคลึงกับ regex

เวอร์ชันใหม่ (ใช้เคล็ดลับการเรียกซ้ำที่เห็นในคำตอบอื่น ๆ ):

s(X):-append(A,B,X),(A=B;A\=X,B\=X,s(A),s(B)).

รุ่นเก่ากว่า:

s(X):-X=[];append(A,B,X),B\=X,append(C,C,A),s(B).

นี่คือเพรดิเคต (เทียบเท่าฟังก์ชันของ Prolog) ที่เรียกว่าsไม่ใช่โปรแกรมที่สมบูรณ์ ใช้มันแบบนี้:

| ?- s("aa").
true ?
yes
| ?- s("aaababbabbabbbababbaabaabaababaaba").
true ?
yes
| ?- s("baababbabaaaab").
no
| ?- s("bbbbbbbbbbbbbbb").
no

คุณลักษณะที่น่าสนใจของโซลูชันที่เก่ากว่าคือถ้าคุณถามล่ามว่า "มีวิธีแก้ไขเพิ่มเติมหรือไม่" ผ่านการใช้งาน;ที่true ?พรอมต์ (แทนที่จะถามว่า "มีวิธีแก้ปัญหาใด ๆ หรือไม่" ผ่านการกดส่งคืนที่พรอมต์เหมือนกับที่ฉันทำด้านบน) จะส่งกลับ "จริง" จำนวนครั้งเท่ากับจำนวนวิธีที่แตกต่างกัน ในรูปแบบที่กำหนด (เช่นมันจะส่งกลับ "จริง" สองครั้งด้วยs("aaaa").เช่นนี้สามารถแยกเป็น(a a)(a a)หรือเป็น(aa aa))

โปรแกรมเปิดฉากมักจะพลิกกลับ (ให้sเพื่อสร้างรายการของสตริงที่มีคุณสมบัติที่กำหนด) อันที่เก่ากว่านั้นไม่ใช่ (มันจะเข้าสู่วงวนไม่ จำกัด ) แต่นั่นเป็นเพราะวิธีการตีกอล์ฟที่ฉันใช้เพื่อให้แน่ใจว่า C นั้นไม่ว่างเปล่า ถ้าคุณเขียนโปรแกรมใหม่เพื่อระบุ C เป็น nonempty อย่างชัดเจนมันจะสร้างสตริงของแบบฟอร์ม "aa", "aabb", "aabbcc" และอื่น ๆ (Prolog เป็น Prolog มันไม่ได้ระบุตัวตนของตัวละครที่ทำให้พวกเขา ขึ้นเพียงสเปคของตัวละครที่เหมือนกัน) ใหม่กว่าสร้างสตริงของฟอร์ม "aa", "abab", "abcabc" และอื่น ๆ ; นี่คือวงวนไม่สิ้นสุดในสิทธิของตนเองและดังนั้นจึงไม่เคยเจอจุดที่มันติดเนื่องจากไม่สามารถตรวจจับสายอักขระที่มีความยาวเป็นศูนย์


1

Brainfuck, 177 ไบต์

+[<<<<,]>>>>[>+[>+[[>>]<+<[<<]>+>-]<[>+<-]>>>,>>[>>]+<<[<+>>-<-]<[>+<-]>>[,>[-<<
<<]<[<<<<]>]<[[<<]>]>>]>>[[>+>>>]>>>[>]<<<<[>+[-<<<,<]<[<<<[[<<<<]>>]<]>]>>]<[[-
>>>>]>>[<]<]<<]<.

จัดรูปแบบ:

+[<<<<,]
>>>>
[
  >+
  [
    >+
    [
      [>>]
      <+<[<<]
      >+>-
    ]
    <[>+<-]>
    >>,>>[>>]
    +<<[<+> >-<-]
    <[>+<-]>
    >
    [
      not equal
      ,>[-<<<<]
      <[<<<<]
      >
    ]
    <
    [
      equal
      [<<]
      >
    ]
    >>
  ]
  >>
  [
    mismatch
    [>+>>>]
    >>>[>]
    <<<<
    [
      backtrack
      >+[-<<<,<]
      <
      [
        not done yet
        <<<
        [
          [<<<<]
          >>
        ]
        <
      ]
      >
    ]
    >>
  ]
  <
  [
    match
    [->>>>]
    >>[<]
    <
  ]
  <<
]
<.

ต้องการอินพุตโดยไม่ขึ้นบรรทัดใหม่ พิมพ์\x00เป็นเท็จและ\x01เป็นจริง

ลองออนไลน์

การค้นหานี้ดำเนินการเชิงลึกครั้งแรก โดยเฉพาะอย่างยิ่ง: ตรวจสอบคำนำหน้าซ้ำของความยาวที่เพิ่มขึ้นเริ่มต้นจากคำต่อท้ายปัจจุบันแล้วย้ายไปยังคำต่อท้ายถัดไปหากพบการแข่งขันมิฉะนั้นย้อนกลับ

ในตอนต้นสตริงจะถูกย้อนกลับและ\x01วางSentinel ไว้ที่ส่วนท้าย

เทปแบ่งออกเป็นโหนด 4 เซลล์ เค้าโครงหน่วยความจำของโหนดคือ:

c h x 0

โดยที่cตัวละครhเป็นธงสำหรับตัวละครที่อยู่ในครึ่งแรกของคำนำหน้าซ้ำและxเป็นธงเพื่อติดตามคู่ของตัวละครปัจจุบันที่มีการเปรียบเทียบ hธงอยู่ในสถานที่ในขณะที่xธงรูปแบบหน้าต่างเคลื่อนที่

หากสตริงสามารถจับคู่ได้ตัวชี้จะเลื่อนไปข้างๆ Sentinel ที่ส่วนท้ายของลูปหลัก มิฉะนั้นตัวชี้จะตกลงไปทางด้านซ้ายของสตริงในขณะที่ย้อนรอย


1

Brachylogขนาด 5 ไบต์

~c~jᵐ

ลองออนไลน์!

โปรดทราบว่าขั้นตอนวิธีนี้อาจใช้เวลามากเวลานานโดยเฉพาะอย่างยิ่งในกรณีที่ falsey เนื่องจากมันจะตรวจสอบทุกพาร์ทิชันที่เป็นไปได้ของสายป้อน

คำอธิบาย

~c     Reversed concatenate: find a list that, when concatenated, results in the input string
       This examines all partitions of the input
  ~jᵐ  Map reversed juxtapose: for each string in that list, is it the result of concatenating
       a string to itself?

สำหรับสตริงอินพุต"ababcc"ให้~cลองพาร์ติชันที่แตกต่างกันจนกว่าจะถึง["abab", "cc"]จุดที่~jประสบความสำเร็จสำหรับรายการทั้งสองรายการผลลัพธ์["ab", "c"]และภาคแสดงผล



0

Lithp , 57 ตัวอักษร

#S::((? (!= (null) (match S "^((.+)\\2)+$")) true false))

ตัวอย่างการใช้งาน:

% pairable_strings.lithp
(
    (def f #S::((? (!= (null) (match S "^((.+)\\2)+$")) true false)))
    (print (f "aa"))
    (print (f "aabaaababbbaba"))
    (print (f "aaababbabbabbbababbaabaabaababaaba"))
    (print (f "ba"))
)

# ./run.js pairable_strings.lithp
AtomValue { value: 2, type: 'Atom', name: 'true' }
AtomValue { value: 2, type: 'Atom', name: 'true' }
AtomValue { value: 2, type: 'Atom', name: 'true' }
AtomValue { value: 3, type: 'Atom', name: 'false' }
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.