ไม่ได้ทำเครื่องหมายในช่องทำเครื่องหมาย?


65

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

if (!isNotUnchecked()) { ... }

ฉันต้องระดมสมองเป็นเวลา 30 นาทีเพื่อหาสถานะช่องทำเครื่องหมายที่แท้จริงของรหัสที่ต้องการ โปรดเขียนโปรแกรมที่สามารถทำให้การแสดงออกเหล่านี้ง่ายขึ้น!


โปรแกรมที่ควรจะยอมรับเป็น input สตริงเป็นตัวแทนของการแสดงออกเพื่อลดความซับซ้อน (ตัวอย่างเช่น: !isNotUnchecked()) โปรแกรมควรส่งออกเทียบเท่าเหตุผลการแสดงออกที่เรียบง่ายอย่างใดอย่างหนึ่งหรือisChecked()!isChecked()

ชื่อวิธีการในการแสดงออกของการป้อนข้อมูลที่มักจะเริ่มต้นด้วยการisมี 0..n Notและจบลงด้วยหรือChecked() วิธีการที่สามารถนำหน้าด้วยจำนวนใดUnchecked()!

ตัวอย่าง

isChecked() => isChecked()
isUnchecked() => !isChecked()
isNotChecked() => !isChecked()
!isNotChecked() => isChecked()
!!!isNotNotUnchecked() => isChecked()

ข้อความเป็นตัวพิมพ์เล็กหรือตัวพิมพ์ใหญ่เสมอหรือไม่? อินพุตจะเป็นnotunischeckedอย่างไร
stevefestl

1
@SteveFest ไม่คุณสามารถสมมติว่าอินพุตอยู่ในรูปแบบที่ฉันได้อธิบายไว้ข้างต้นเสมอ คุณไม่จำเป็นต้องจัดการisnotuncheckedเช่น
Arnaud

6
ด้วยชื่อฟังก์ชั่นอย่างที่ฉันต้องการให้อัตราต่อรอง 10 ถึง 1 ซึ่งมันไม่ได้ทดสอบเงื่อนไขที่ตรวจสอบแล้วว่าสอดคล้องกับการตั้งชื่อ
Caleb

2
กล่าวอีกนัยหนึ่งคุณรู้ว่ากล่องไม่ถูกตรวจสอบคืออะไรคุณรู้ว่ากล่องที่ไม่ถูกตรวจสอบคืออะไร (ตรวจสอบแล้วถ้า "ตรวจสอบ" และ "ไม่เลือก" เท่านั้นเป็นสองสถานะที่เป็นไปได้มิฉะนั้นจะเป็นอะไรก็ได้ใน ช่องทำเครื่องหมาย: int, sign ... ) และสำหรับช่องทำเครื่องหมายเฉพาะนี้ไม่ใช่ (ไม่ใช่ "check" ไม่ว่าจะเป็นเครื่องหมายถูกหรืออะไรก็ตาม) หากเป็นจริงคุณจะแน่ใจว่ากล่องกาเครื่องหมายไม่ได้ "ตรวจสอบ" โดยอะไร หากเป็นเท็จคุณก็รู้ว่าช่องทำเครื่องหมายเป็นช่องที่ไม่ได้ทำเครื่องหมาย แต่ไม่ได้หมายความว่าจะมีการตรวจสอบเว้นแต่ว่ามีเพียงสองสถานะที่เป็นไปได้ (จากนั้นจะถูกตรวจสอบ)
J Doe

1
@J Doe ขอบคุณสำหรับการชี้แจง!
Arnaud

คำตอบ:


31

Pythonขนาด 51 ไบต์

lambda s:sum(map(s.count,'!NU'))%2*'!'+'isC'+s[-8:]

ลองออนไลน์!


คุณเป็นอัจฉริยะบริสุทธิ์! คงไม่เคยคิดs[-8:]
นาย Xcoder

แน่นอนว่า'isC'+s[-8:]ไบต์ยาวกว่า'isChecked'?
Neil

9
แต่ 1 ไบต์สั้นกว่า 'isChecked ()'
Andrew Smith

ใครสามารถอธิบายสิ่งที่s[-8:]/ ทำ?
ESR

1
@EdmundReed มันต้องใช้เวลาที่ผ่านมา 8 hecked()ตัวอักษรของท่านซึ่งอยู่เสมอ
xnor

24

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

Unc
!C
Not
!
O`is|!
!!

ลองออนไลน์!

คำอธิบาย

Unc
!C

เลี้ยวเข้าไปUnchecked!Checked

Not
!

เปิดทั้งหมดNots !เข้าไป !!!is!!!!Checked()ตอนนี้เราได้รับสิ่งที่ต้องการ

O`is|!

เรียงแข่งขันทั้งหมดอย่างใดอย่างหนึ่งหรือis !ตั้งแต่! < isนี้ย้ายทั้งหมดไปยังจุดเริ่มต้นของสตริงดังนั้นตัวอย่างข้างต้นจะกลายเป็น!!!!!!!!isChecked()

!!

ลบคู่ของ!เพื่อยกเลิกการปฏิเสธซ้ำ



13

Pythonขนาด 43 ไบต์

lambda s:sum(map(ord,s))%2*'!'+'isC'+s[-8:]

ฟังก์ชั่นที่ไม่มีชื่อการรับสตริงsและส่งคืนสตริง

ลองออนไลน์!

ไม่จำเป็นต้องตรวจสอบสำหรับการดำรงอยู่ของตัวละครเมื่อ!, NotและUnทุกคนมีตรงหนึ่งลำดับคี่ (และcและCมีทั้งคี่) ดังนั้นเพียงแค่สรุปเลขและใช้ค่าโมดูโล 2 ที่จะตัดสินใจว่าเราต้องการ!หรือไม่

นอกจากนั้นรูปแบบนั้นเหมือนกับคำตอบของ xnorเพราะฉันไม่พบสิ่งใดดีกว่า ต่อไปนี้คือ 43:

lambda s:'!isC'[~sum(map(ord,s))%2:]+s[-8:]

10

JavaScript (ES6), 51 50 ไบต์

f=
s=>(s.split(/!|n/i).length%2?'':'!')+'isChecked()'
<input oninput=o.textContent=f(this.value)><pre id=o>

ทำงานโดยการมองหา!, Nและnตัวละครซึ่งกลับรัฐตรวจสอบ splitส่งกลับค่าความยาวอาร์เรย์แบบคี่ตามค่าเริ่มต้นดังนั้นเราจึงเพิ่ม!เมื่อsplitความยาวเท่ากัน แก้ไข: บันทึก 1 ไบต์ขอบคุณ @ETHproductions รุ่นทางเลือกรวมถึง 50 ไบต์:

s=>`${s.split(/!|n/i).length%2?``:`!`}isChecked()`

หืมตอนนี้ฉันกลับไปดูคำตอบอื่น ๆ พวกเขากำลังทำสิ่งนี้อยู่
Neil

คุณควรจะสามารถปล่อยการตั้งค่าสถานะส่วนกลางจาก RegEx เพื่อบันทึกไบต์
Shaggy

@Shaggy ที่จริงความยาวของฉันถูกต้องฉันไม่สามารถลบการgแก้ไขล่าสุดได้
Neil

1
ฉันคิดว่าคุณสามารถบันทึกไบต์ด้วย/!|N/i
ETHproductions

@ETHproductions ฉันคิดว่าคุณหมายความว่า/!|N/ไม่มีiตัวแก้ไข
SplittyDev


7

Java 7, 100 77 ไบต์

String c(String s){return(s.split("[!NU]").length%2<1?"!":"")+"isChecked()";}

Expanation:

String c(String s){  // Method with String parameter and String return-type
  return(s.split("[!NU]").length
                     //  Count the amount of '!', 'N' and 'U' in the input String (+ 1)
    %2<1?            //  and if they are an even number:
     "!"             //   Start with an examination mark
    :                //  Else:
     "")             //   Start with nothing
    +"isChecked()";  //  And append "isChecked()" to that
}                    // End of method

รหัสทดสอบ:

ลองที่นี่

class M{
  static String c(String s){return(s.split("[!NU]").length%2<1?"!":"")+"isChecked()";}

  public static void main(String[] a){
    System.out.println(c("isChecked()"));
    System.out.println(c("isUnchecked()"));
    System.out.println(c("isNotChecked()"));
    System.out.println(c("!isNotChecked()"));
    System.out.println(c("!!!isNotNotUnchecked()"));
  }
}

เอาท์พุท:

isChecked()
!isChecked()
!isChecked()
isChecked()
isChecked()

7

Aceto , 49 ไบต์

&M"pp"
L!)(de
&c;`Che"
`!d!sick
!',@p"!'
'N'U`!Lu

เส้นโค้ง yadda yadda Hilbert

ก่อนอื่นเรากดอักขระที่สำคัญสามตัวลงบนสแต็ก:

!'
'N'U

จากนั้นเราตั้งเครื่องหมายจับและเริ่มต้นด้วยการอ่านตัวอักษรเดียว เราduplicate มันและลบล้างมันและถ้าผลลัพธ์ของสิ่งนี้เป็นความจริง (ดังนั้นถ้าสตริงว่างเปล่าดังนั้นอินพุตสิ้นสุด) เราจะข้ามไปยังจุดสิ้นสุด:

;`
d!
,@

ด้วยสำเนาที่เหลือของอักขระอินพุตเราตรวจสอบว่ามีอยู่ในสแต็กที่เหลือหรือไม่ (เช่นถ้าเป็นหนึ่งใน!, N, U) หากไม่เป็นเช่นนั้นเราแจ้งข้อผิดพลาดให้เรากลับไปที่เครื่องหมายที่เราอ่านตัวละครอื่น:

&c
`!

มิฉะนั้นเราจะโหลดสิ่งที่อยู่ในที่จัดเก็บข้อมูลอย่างรวดเร็ว (โดยปกติแล้วการลงทะเบียนที่เริ่มต้นเป็นสตริงว่างเปล่าเป็นเท็จ) คัดค้านและส่งกลับไปที่ที่จัดเก็บข้อมูลด่วนจากนั้นเพิ่มข้อผิดพลาดด้วย (กลับไปอ่านตัวอักษร)

&M
L!

เมื่ออินพุตหยุดลงเราจะถูกส่งไปยังจุดสิ้นสุด ที่นั่นเรากลับทิศทางกดเครื่องหมายอัศเจรีย์และโหลดที่เก็บข้อมูลอย่างรวดเร็วและคัดค้าน ถ้านั่นคือความจริง (เช่นเรามีจำนวนของสิ่งที่ปฏิเสธ) เราพิมพ์เครื่องหมายอัศเจรีย์ที่เราผลัก:

p !'
`!Lu

สุดท้ายเราดันสตริงออกเป็นสองส่วนและพิมพ์ (เพื่อเหตุผลในการประหยัดพื้นที่):

"pp"
)(de
  Che"
  sick
   "

หลังจากนั้นโปรแกรมยังคงทำงานกลับไปที่จุดเริ่มต้นดั้งเดิม แต่เนื่องจากไม่มีคำสั่งใดที่ให้ผลลัพธ์หรือมีพฤติกรรมแบบวนรอบซึ่งไม่สำคัญ ที่จริงแล้วคำสั่งที่ไม่มีการใช้คำสั่งแรกที่เราเข้าถึงนั้นทำให้เกิดข้อยกเว้นโดยข้ามรหัสส่วนใหญ่เพราะเราข้ามไปที่เครื่องหมาย catch หมายถึง Aceto ทั้งหมดที่เห็นในส่วนนั้นคือ:

&



!' @
'N'U

ตั้งแต่Uอยู่ในขณะนี้ไม่ได้นำหน้าด้วยตัวอักษรอ้างเดียวและดังนั้นจึงไม่เห็นเป็นตัวอักษรตัวอักษรที่จะได้รับการตีความว่าเป็นคำสั่ง: Uฝืนองค์ประกอบทั้งหมดที่อยู่ในสแต็ค (ตอนนี้ก็!, N, Uจากบน) และ'Nและ'!ผลักดันมากขึ้น ตัวอักษรหมายถึงเราจบด้วยสแต็[U, N, !, N, !]

บันทึก Side: นี่เป็นครั้งแรกที่โปรแกรม Aceto เขียน (บางส่วน) ด้วยความช่วยเหลือของแก้ไขใหม่ Aceto ของ


6

C, 78 70 68 Bytes

ขอบคุณคริสโตฟ!

c;f(char*s){for(c=1;*s;)c^=!!strchr("!NU",*s++);s="!isChecked()"+c;}

ลองออนไลน์

เอาท์พุท:

isChecked() => isChecked()
isUnchecked() => !isChecked()
isNotChecked() => !isChecked()
!isNotChecked() => isChecked()
!!!isNotNotUnchecked() => isChecked()

1
c;f(char*s){for(c=1;*s;)c^=!!strchr("!NU",*s++);s="!isChecked()"+c;}ใช้ xor เพื่อพลิกcบันทึก 2 ไบต์
Christoph

6

Perl 5 , 31 ไบต์

-2 ไบต์ขอบคุณที่@Dom เฮสติ้งส์

30 ไบต์ของรหัสเมือง + -pธง

/c/i;$_="!"x(y/UN!//%2).isC.$'

ลองออนไลน์!

y/UN!//นับจำนวนของการเกิดขึ้นของUn, และNot !ผลที่ตามมาก็คือว่าหลาย!แบบโมดูโล 2 isChecked()ตามมาด้วย


ความพยายามอื่นโดยยึดตาม regex เป็นเวลา 38 ไบต์ (Dom Hastings บันทึก 1 ไบต์ต่อหนึ่ง):

s/isNot|isUn(c)/!is\u$1/?redo:s/!!//g

ลองออนไลน์!


รุ่น regex ของคุณไม่ทำงานเพราะมีสองในc Unchecked
Neil

1
@Neil regex จะแทนที่อันแรกเท่านั้น (เนื่องจากฉันไม่ได้ใช้/gแฟล็ก) กรณีทดสอบดูดีสำหรับฉัน (cf ลิงก์ TryItOnline) ดังนั้นฉันไม่เห็นว่าคุณหมายถึงอะไรจริงๆ ...
Dada

ขออภัยเหตุผลที่ถูกต้องว่ารุ่น regex ของคุณไม่ทำงานคือว่าถึงแม้จะมีcในUncheckedนอกจากนี้ยังเป็นหนึ่งในCheckedดังนั้นเมื่อคุณ Subsitute CheCkedมันคุณจะจบลงด้วย
Neil

1
เฮ้หวังว่าคุณจะสบายดี! ฉันไม่ได้อยู่ที่นี่มาซักพักแล้ว แต่ฉันก็เคยเล่นกับเหล่านี้มาก่อนสำหรับ-2 ในวันแรกและอีก -1 ในวันที่สอง
Dom Hastings

1
@ DomHastings เฮ้! เยี่ยมมากขอบคุณมาก! มีความสุขที่ได้เห็นคุณกลับมา :-)
Dada

6

Scala , 39 30 ไบต์

s=>"!"*(s.sum%2)+"isChecked()"

ลองออนไลน์!

น่าเสียดายที่ฉันไม่สามารถรับมันเพื่ออนุมานประเภทของ

แก้ไข: ย้ายการประกาศประเภทไปที่ส่วนหัว (ฉันคิดว่าสิ่งนี้ได้รับอนุญาตถ้าไม่ใช่ฉันจะนำมันกลับมา)




3

05AB1E , 16 ไบต์

ÇOÉ'!×…isCyR8£RJ

ลองออนไลน์!

เคล็ดลับของการใช้ข้อสรุปเลขจากคำตอบหลามโจนาธานอัลลัน

คำอธิบาย

 ÇO                # sum of ascii values of input
   É               # is odd
    '!×            # repeat "!" that many times
       …isC        # push the string "isC"
           IR8£R   # push the last 8 chars of input
                J  # join everything to string

3

Japt , 24 23 ไบต์

o"!N" l u)ç'! +`‰C”×B()

คำอธิบาย

 o"!N" l u)ç'! +`‰C”×B()
Uo"!N" l u)ç'! +`‰C”×B()`
Uo"!N"                     # Only keep "!", "n" and "N" from the input
           ç'!             # Repeat the string "!" by
       l u)                # the parity of the length of the newly formed string
               +`‰C”×B()` # and concatenate with the string "isChecked()"

ลองออนไลน์!


1
เดี๋ยวก่อน ... ทำไม ... ทำไม ... เป็นoตัวพิมพ์เล็กหรือใหญ่? ฉันไม่รู้ว่า ...
ETHproductions

ฉันไม่รู้เหมือนกัน แต่ฉันค้นพบเมื่อฉันทดสอบด้วย "! NU" พิมพ์เล็ก "n" ใน "ไม่ได้ตรวจสอบ" ก็ยังคงอยู่ดังนั้นฉันสามารถวาง "U")
ลุค

3

PHP (5.5 - 5.6), 52 50 49 ไบต์

<?='!'[count(spliti('!|N',$argn))%2]?>isChecked()

ลองมันนี่

-2 Bytes by @Titus. Ty :)
-1 Byte  by @ETHproductions. Ty :)

PHP (> = 5.5), 66 65 61

for($b=b;$a=$argn[$i++];)$b^=$a;echo$b&"!"|" ","isChecked()";

โดยไม่ต้อง regex จะได้รับ COMPEX อีกเล็กน้อย :) ลองมันนี่

-4 Bytes by @Titus. Ty :)

1
error_reportingE_ALL&~E_NOTICE&~E_STRICT&~E_DEPRECATEDค่าเริ่มต้นคือ
ติตัส

1
@Titus ชนะ JS ในการแข่งขัน regex yay!
Christoph

$b^=$aหาดีมาก! คุณสามารถทำได้โดยไม่มีแท็ก PHP ในขนาดเดียวกัน
ติตัส

1
61 ไบต์หากอนุญาตให้นำช่องว่างนำหน้าได้:for($b=b;$a=$argn[$i++];)$b^=$a;echo$b&"!"|" ","isChecked()";
ติตัส

@Titus ฉันต้องยอมรับว่ามันเป็นแรงบันดาลใจจากคำตอบนี้
Christoph

3

เยลลี่ ,  16  15 ไบต์

OSḂ⁾!iṫ⁾sCø³ṫ-7

โปรแกรมเต็มรูปแบบที่รับสตริงเป็นอาร์กิวเมนต์บรรทัดคำสั่งและพิมพ์ผลลัพธ์

ลองออนไลน์!

OSḂ⁾!iṫ-7³ṫṭ⁾sCหรือOSḂ⁾!iṫ-7³ṫ⁾sC;ทั้งคู่ก็สามารถทำงานได้ 15 คน

อย่างไร?

ใช้แนวคิดเดียวกันกับคำตอบ Python ของฉันแต่บันทึกเป็นไบต์โดยใช้โครงสร้างที่แตกต่างกันของ!isCหรือisCและการพิมพ์โดยนัยใน Jelly ...

OSḂ⁾!iṫ⁾sCø³ṫ-7 - Main link: s
O               - cast to ordinals
 S              - sum
  Ḃ             - mod 2
   ⁾!i          - literal ['!','i']
      ṫ         - tail -> ['i'] if OSḂ was 0; ['!','i'] if OSḂ was 1
                - this is printed due to the following starting a new leading
                - constant chain. Printing smashes so either "i" or "!i" is printed.
       ⁾sC      - literal ['s','C']
                - this is printed (as "sC") due to the following niladic chain.
          ø     - start a new niladic chain
           ³    - program's first input (3rd command line argument), s
            ṫ-7 - tail from index -7 = ['h','e','c','k','e','d','(',')']
                - implicit print (of "hecked()")

ก่อนหน้า @ 16 ไบต์ 9 (ใช้การต่อข้อมูลและการจับคู่กับแนวคิดพื้นฐานเดียวกัน):

OSḂ⁾!iṫ;⁾sC,ṫ€-7

อ่าฉันคิดว่าฉันจะทำอะไรกับเคล็ดลับ mod 2 จากนั้นฉันพบสิ่งนี้: PI มีสิ่งนี้สำหรับ 18 ไบต์บางทีมันอาจช่วยได้:OS1&”!x;“isC”;ṫ-7$
Conor O'Brien

2

Perl 6 ,  35  31 ไบต์

{'!'x m:g/<[!NU]>/%2~'isChecked()'}

ลองมัน

{'!'x tr/!NU//%2~'isChecked()'}

ลอง
(ต้องใช้สตริงอินพุตที่ไม่แน่นอนซึ่งจะถูกทำให้พิการ)

ขยาย:

{
  #(
    '!'
  x               # string repeat

    # m:g/<[!NU]>/
    tr/!NU//      # find the number of negatives
      % 2         # modulus 2
  #)

  ~                # string concat

    'isChecked()'
}

2

Sed, 36 ไบต์

แนวคิดเช่นเดียวกับคำตอบการแทนที่โดยตรงอื่น ๆ ทั้งหมด

:
s/Unc/NotC/
s/isNot/!is/
s/!!//
t

2

sed, 37 38 ไบต์

:;s/is(Not|Un)/!is/;s/!!//;t;s/ch/Ch/

37 + 1 สำหรับ-rสวิตช์:

sed -r ':;s/is(Not|Un)/!is/;s/!!//;t;s/ch/Ch/'

1
ที่ผ่านมาs/c/C/ก่อให้เกิดปัญหา Perl 5 คำตอบ ...
นีล

ใช่ดูเหมือนว่าs/c/C/จะเป็น "c" ตัวที่สองในกรณีที่ไม่มี "Un"
Kevin

1
นอกจากนี้คุณยังสามารถบันทึกไบต์ด้วยการปล่อยgและย้ายs/!!//วงใน
เควิน

2

Mathematica, 82 61 60 ไบต์

ปรับแต่งขนาดเล็กเพิ่มตัวดำเนินการมัดอีกหนึ่ง:

"!"~Table~Mod[#~StringCount~{"o","n","!"},2]<>"isChecked()"&

ก่อนหน้านี้:

"!"~Table~Mod[StringCount[#,{"o","n","!"}],2]<>"isChecked()"&

นับโอทั้งหมดของ n และ! จากนั้น mod 2 แล้วใส่มันลงไปมากมาย! ข้างหน้า.

เวอร์ชั่นเก่า:

"!"~Table~Mod[StringCount[StringReplace[#,{{"o","n"}->"!"}],"!"],2]<>"isChecked()"&


2

Windows Batch ขนาด 120 ไบต์

ก่อนหน้านี้268 257 253 245 239 221 182 176 169 123ไบต์

@set a=%1
@set s=#%a:~,-2%
@set s=%s:!=N#%
@for %%a in (%s:N= %)do @set/ac+=5
@if %c:~-1%==0 cd|set/p=!
@echo isC%a:~-8%

โปรแกรมแทนที่ทั้งหมดเข้า! N#เพราะตอนนี้สัญญาณปฏิเสธทั้งหมด! (ตอนนี้ก็คือN#) NotและUnมีNโปรแกรมสามารถนับจำนวนลักษณะที่ปรากฏNและพิจารณาว่า!จำเป็นต้องมีผู้นำหรือไม่

แต่ละครั้งที่โปรแกรมนับNตัวนับจะถูกเพิ่มด้วย 5 เหตุผลในการเพิ่ม 5 คือเพราะแต่ละค่าที่สลับกันเมื่อเพิ่ม 5 สิ้นสุดใน 0 หรือ 5 ทั้งนี้สามารถใช้เพื่อกำหนดว่าค่าเป็นคี่หรือคู่และนำ!เราเพิ่มถ้าจำเป็น

นอกจากนี้ยังมีการใช้เคล็ดลับอักขระแปดตัวสุดท้ายของ xnor


ใครจะคิดว่าการเขียนโปรแกรมในหน้าต่างของชุดจะเป็นไปไม่ได้ ...
NieDzejkob

แน่นอน ...... การเขียนสคริปต์เป็นเรื่องเหลวไหล ....
stevefestl

1

เยลลี่ , 29 28 25 21 ไบต์

f“NU!”LḂ”!x;“µịÆẹṠƊẹ»

ลองออนไลน์!

f“NU!”LḂ”!x;“µịÆẹṠƊẹ»  Main link, argument is z
f“NU!”                 Filter to only keep "NU!"
      LḂ”!x            Repeat exclamation mark by the parity of the length
           ;“µịÆẹṠƊẹ»  Concatenate to "isChecked()"

-4 ไบต์ขอบคุณ Jonathan Allan!
-4 ไบต์ขอบคุณ Jonathan Allan! (โดยใช้สตริงที่บีบอัด)


ประหยัดค่าใช้อินเตอร์เฟซลินน์ทำที่นี่เป็นโมดูล (พูด jellyCompress.py) jellyCompress.Compress().string("is").dictionary("Checked").string("()").go()แล้วที่จะได้รับการสร้างขึ้นด้วย (หากคุณใช้ Windows cmd ติดตั้งและเปลี่ยนเป็นแบบอักษร DejaVu Sans Mono และเปลี่ยนเพจเพจด้วยคำสั่งchcp 65001ก่อนเปิดตัว Python เพื่อให้ตัวอักษรปรากฏขึ้น)
Jonathan Allan

@JanathanAllan โอ้ไม่เป็นไร ขอบคุณ!
HyperNeutrino

1

PHP, 55 ไบต์

<?=preg_match_all("#!|N#i",$argn)&1?"!":""?>isChecked()

ลองออนไลน์!

PHP, 58 ไบต์

<?=preg_match_all("#[!NU]#",$argn)%2?"!":"","isChecked()";

"#[!NU]#"คุณสามารถใช้แทน"#[!N]#i"

ลองออนไลน์!

PHP, 68 ไบต์

รุ่นที่ไม่มี Regex

for(;$c=$argn[$i++];)$d^=!trim($c,"UN!");echo"!"[!$d],"isChecked()";

ลองออนไลน์!


3
<?=preg_match_all("#[!UN]#",$argn)&1?"!":""?>isChecked()-2 bytes
Titus

มีคำตอบเดียวกันก่อนที่ฉันจะเริ่มด้วยcount(split()): D @Titus เป็นความคิดที่ดี!
Christoph

1
" !"[$d&1]บันทึกไบต์อื่นถ้าช่องว่างนำหน้าก็โอเค $d^=!trim($c,"UN!")บันทึก 3 ไบต์ (เพราะคุณไม่ต้องการ&1อีกต่อไป)
ติตัส

1
@Titus ใช่อีกตัวอย่างหนึ่งที่คุณมีความรู้มากขึ้นแล้วตัวเอง ขอบคุณและสำหรับปัญหาช่องว่างท้ายฉันได้ทำ"!"[!$d]แทน
JörgHülsermann

1
@ Christoph คุณถูกต้องฉันลืมมันเสียใจเกี่ยวกับเรื่องนั้น
JörgHülsermann

1

Japt , 19 ไบต์

`‰C”×B()`i'!pU¬xc u

ลองออนไลน์!

เอาออกแล้วมันทำงานอย่างไร

`‰C”×B()`i'!pUq xc u

`‰C”×B()`   Compressed string for "isChecked()"
i     Insert the following string at the beginning...
'!p     "!" repeated the following number of times...
Uq        Split the input into chars
xc        Sum the charcodes
u         Modulo 2

ใช้เคล็ดลับ charcode ผลรวมจากการแก้ปัญหาหลามโจนาธานอัลลัน


1

Pascal (FPC) , 119 ไบต์

var s:string;j:word;c:char;begin read(s);for c in s do j:=j+ord(c);if 1=j mod 2then write('!');write('isChecked()')end.

ลองออนไลน์!

การใช้วิธีการที่เกือบทุกคำตอบทำได้ด้วยการรวมจุดรวมของตัวอักขระในอินพุตจากนั้นตรวจสอบพาริตีของผลรวม

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.