สร้างช่องทำเครื่องหมาย


51

เขียนโปรแกรมที่สร้างช่องทำเครื่องหมายสองสถานะที่ผู้คนสามารถโต้ตอบด้วยการใช้เมาส์

โปรแกรมของคุณควรบรรลุสิ่งต่อไปนี้ทั้งหมด:

  1. มีพื้นที่ 8 × 8 พิกเซล (หรือใหญ่กว่าถ้าต้องการ) ของหน้าจอที่เป็นพื้นที่ที่สามารถคลิกได้ของช่องทำเครื่องหมาย ต่อจากนี้ไปภูมิภาคนี้เรียกว่าช่องทำเครื่องหมาย

  2. เมื่อเคอร์เซอร์ของเมาส์ถูกย้ายภายในช่องทำเครื่องหมายและกดปุ่ม * เมาส์เริ่มต้นช่องทำเครื่องหมายควรสลับสถานะ
    การตรวจสอบจะไม่ถูกตรวจสอบ ไม่ได้ทำเครื่องหมายจะถูกตรวจสอบ

  3. ช่องทำเครื่องหมายไม่ควรย้ายเมื่อมีการสลับ

  4. ในสถานะที่เลือกช่องทำเครื่องหมายอาจมีสีใดก็ได้

  5. อยู่ในสถานะที่ไม่ถูกตรวจสอบช่องอาจจะเป็นสีใด ๆตราบใดที่อย่างน้อย 16 พิกเซลมีสายตาที่แตกต่างกันจากรัฐตรวจสอบ

  6. ในอินสแตนซ์ของโปรแกรมหนึ่งสถานะที่ถูกเลือกทั้งหมดควรเป็นภาพที่เหมือนกันและเป็นสถานะที่ไม่ได้ตรวจสอบทั้งหมดควรจะเหมือนกัน

  7. อย่าปิดโปรแกรมจนกว่าจะถูกยกเลิกอย่างชัดเจน (เช่นผ่านปุ่มออกหรือ Alt + F4) ดังนั้นผู้ใช้สามารถคลิกช่องทำเครื่องหมายได้มากเท่าที่ต้องการ

* คุณอาจสันนิษฐานว่าปุ่มเมาส์เริ่มต้นนั้นเป็นคลิกซ้ายเสมอ แต่ก็ยังสามารถใช้ค่าเริ่มต้นตามที่กำหนดโดยซอฟต์แวร์เมาส์หรือระบบปฏิบัติการซึ่งอาจไม่ได้คลิกซ้ายตามจริงขึ้นอยู่กับผู้ใช้

หมายเหตุ

  • ไม่สำคัญว่าสิ่งที่อยู่นอกภูมิภาคช่องทำเครื่องหมายของคุณ อาจเป็นเพียงเดสก์ท็อป อาจเป็นส่วนหนึ่งของคอนโซลที่เปลี่ยนทุกการสลับ

  • ไม่สำคัญว่าช่องทำเครื่องหมายของคุณเริ่มต้นที่อะไร

  • ภูมิภาคช่องทำเครื่องหมายอาจมีขนาดใด ๆ ที่หรือสูงกว่า 8 × 8 พิกเซล มันไม่จำเป็นต้องเป็นรูปสี่เหลี่ยมจัตุรัส

  • คุณอาจตั้งค่าเผื่อเล็กน้อยสำหรับการตั้งค่าที่อยู่นอกเหนือการควบคุมของคุณเช่นขนาดแบบอักษรของคอนโซลการซูมเบราว์เซอร์ความละเอียดของจอภาพ ฯลฯ ตราบใดที่โปรแกรมของคุณทำงานในการตั้งค่าการทดสอบที่สมเหตุสมผล

  • หากโปรแกรมของคุณเปิดหน้าต่างคุณอาจคิดว่ามันถูกลากไปยังตำแหน่งที่เหมาะสมบนหน้าจอหากจำเป็น (เช่นมุมบนซ้าย)

  • คุณสามารถใช้ภาษามาร์กอัปเช่น HTML หรือภาษาอื่น ๆ ที่เรามักจะไม่ถือว่าเป็นภาษาโปรแกรมเต็มรูปแบบ

  • ช่องทำเครื่องหมายของคุณจะต้องสามารถสลับได้โดยใช้ปุ่มเมาส์เริ่มต้น ไม่เป็นไรถ้ามันยังสลับรูปแบบอื่น ๆ ของการป้อนข้อมูล (เช่นปุ่มเมาส์ขวา) มีข้อยกเว้นของการเคลื่อนไหวของเมาส์ เช่นรัฐไม่ควรเปลี่ยนแปลงหากเมาส์ถูกย้ายภายในช่องทำเครื่องหมายเท่านั้น

  • ภาพหน้าจอของช่องทำเครื่องหมายของคุณได้รับการสนับสนุนอย่างมาก!

เกณฑ์การให้คะแนน

รหัสที่สั้นที่สุดในหน่วยไบต์ชนะ

ตัวอย่าง

ตัวอย่าง HTML แบบบัญญัติใน 23 ไบต์

<input type="checkbox">

สำหรับฉันใน Google Chrome นี่ทำให้ช่องทำเครื่องหมาย 12 × 12 พิกเซลและประมาณ 30 พิกเซลเปลี่ยนอย่างชัดเจนระหว่างสถานะที่ถูกตรวจสอบและไม่ถูกตรวจสอบ

ฉันตั้งค่าเผื่อการซูมของเบราว์เซอร์ที่ 100%


2
ช่องทำเครื่องหมายสามารถครอบคลุมทั้งหน้าจอได้หรือไม่
Kritixi Lithos

@KritixiLithos ใช่ว่าจะใช้ได้โปรดทราบว่าหากคุณต้องการให้นับพื้นที่ 8x8 เป็นช่องทำเครื่องหมายอย่างเป็นทางการแม้ว่าจะเป็นพื้นที่ขนาดใหญ่กว่าก็ตาม
งานอดิเรกของ Calvin

@Helka Homba - อนุญาตให้แอปแสดงการควบคุมอื่น ๆ นอกเหนือจากช่องทำเครื่องหมายตัวเองหรือไม่
Zeppelin

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

1
@zeppelin "ไม่สำคัญว่าจะอยู่นอกภูมิภาคของช่องทำเครื่องหมายของคุณมันอาจเป็นเดสก์ท็อปมันอาจเป็นส่วนหนึ่งของคอนโซลที่เปลี่ยนทุกการสลับ" ดังนั้นตราบใดที่กล่องกาเครื่องหมายอยู่ที่นั่นมันก็ไม่สำคัญว่าจะเป็นอะไร
งานอดิเรกของ Calvin

คำตอบ:


33

Mathematica ขนาด 10 ไบต์

Checkbox[]

ถือว่า Mathematica ของสภาพแวดล้อมโน๊ตบุ๊ค

ทั้งสองรัฐมีลักษณะดังนี้:

ป้อนคำอธิบายรูปภาพที่นี่


73
แน่ใจ Mathematica โกงอีกครั้ง
Matthew Roh

1
มันตลกดีที่ความคิดเห็นมีผู้
โหวต

4
@ RudolfL.Jelínekมันตลกว่าคำตอบมี upvotes ใด ๆ เลย ...
Martin Ender

31

HTML, 20 ไบต์

ไม่ทราบว่านี่จะเป็นคำตอบที่ถูกต้องหรือไม่ HTML กำหนดให้ปิดแท็กเพื่อตรวจสอบความถูกต้องตามกฎหมาย แต่เบราว์เซอร์สมัยใหม่จะปิดโดยอัตโนมัติเพื่อให้สามารถเรียกใช้งานได้

<input type=checkbox


3
ฉันถูกมองที่นี้เป็นตัวเลือกก่อนหน้านี้ (ไม่ทราบราคา) >แต่อย่างสมบูรณ์พลาดปิด +1 และ IMHO ที่ถูกต้อง
ElPedro

1
ในเว็บไซต์นี้ภาษาต่าง ๆ ถูกกำหนดโดยการนำไปใช้งานดังนั้นนี่จึงเป็นสิ่งที่ดีสำหรับฉัน
John Gowers

1
ขอบคุณ @JohnGowers ฉันสงสัยเกี่ยวกับคำจำกัดความของการละเมิดที่ยอมรับได้
Jan

27

Bash , 67 55 50 35 32 31 ไบต์

:()(read -p$[i^=1]
›?9h -sn6
:)

รหัสประกอบด้วย CR ไบต์ (ขึ้นบรรทัดใหม่ครั้งแรก) และ CSI ไบต์ (วงเล็บมุมเล็ก ๆ ที่มีการเข้ารหัส Windows-1252) ต้องใช้ xterm (หรือเทียบเท่า) และการเข้ารหัส ISO-8859-1 (หรือคล้ายกัน)

รหัสกำหนดฟังก์ชั่นที่มีชื่อ:ซึ่งจะแสดงสีขาว1หรือ0ในสี่เหลี่ยมสีดำ มี 24 พิกเซลที่แตกต่างกันอย่างแน่นอนพร้อมการตั้งค่าเริ่มต้นของ xterm ( พิสูจน์ )

สำหรับเวอร์ชั่นเก่าที่สลับสีของเทอร์มินัลทั้งหมดให้ตรวจสอบการแก้ไข 10ของคำตอบนี้

ขอบคุณ @ ais523 สำหรับการแนะนำ xterm ซึ่งช่วยประหยัด 4 ไบต์!

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

:(...)สร้างฟังก์ชั่นการตั้งชื่อที่รัน:...

อ่านคำสั่งไม่มหัศจรรย์ที่เกิดขึ้นจริง

  • -p ระบุอินพุตพร้อมต์ซึ่งถูกพิมพ์ไปยัง STDOUT

    • $[i^=1]คือการขยายตัวทางคณิตศาสตร์ซึ่ง XORs ตัวแปรฉันด้วย1 เริ่มแรกฉันอาจไม่ได้ตั้งค่า; เมื่อนี้เกิดขึ้นก็จะถือว่าเป็น0

    • การขึ้นบรรทัดใหม่จะวางเคอร์เซอร์ไว้ที่จุดเริ่มต้นของบรรทัด

    • ›?9hจับเมาส์ในเทอร์มินัลที่รองรับ การคลิกแต่ละครั้งจะส่งอักขระหกตัวไปยังเทอร์มินัลกล่าวคือ←[Mbxyโดยที่แทน ESC ไบต์ ( 0x1b ) ←[แสดงให้เห็นลำดับหนี, Mเมาส์bปุ่ม ( 0x20 + หมายเลขปุ่ม) xพิกัดของคลิก ( 0x20 + ประสานงาน) และYประสานงานxy

    • -sn6ทำให้การอ่านเงียบ (อินพุตของเมาส์จะไม่ถูกสะท้อนไปยัง STDERR) และหยุดทำงานหลังจากอ่านได้ถึง 6 ไบต์ มันจะบันทึกอินพุตในตัวแปรREPLYแต่เราไม่สนใจเอาต์พุตที่สร้าง

ในที่สุดเมื่ออ่านเสร็จแล้ว (หลังจากคลิกเมาส์หนึ่งครั้ง) :เรียกตัวเองซ้ำ ๆ เข้าสู่วงวนไม่สิ้นสุด

การสร้างและการขอร้อง

$ echo $':()(read -p$[i^=1]\r\x9b?9h -sn6\n:);:' > checkbox.sh
$ xxd -c 17 -g 1 checkbox.sh
0000000: 3a 28 29 28 72 65 61 64 20 2d 70 24 5b 69 5e 3d 31  :()(read -p$[i^=1
0000011: 5d 0d 9b 3f 39 68 20 2d 73 6e 36 0a 3a 29 3b 3a 0a  ]..?9h -sn6.:);:.
$ LANG=en_US xterm -e bash checkbox.sh

เอาท์พุต

screencast


ฉันทำงานเกี่ยวกับวิธีการแก้ปัญหาที่คล้ายกันกับตัวเองนี้ (แม้ว่าในภาษาอื่นบังคับให้ฉันยอมแพ้เพราะฉันไม่สามารถหาวิธีป้อนข้อมูลโดยไม่ต้องขึ้นบรรทัดใหม่) การปรับปรุงที่น่าจะเป็น: เปลี่ยน1000hเป็น9h(ความแตกต่างคือการ1000hจัดการกับการกดและปล่อย9hเมาส์และจัดการเฉพาะการปล่อยเมาส์เท่านั้น) นี่อาจเป็นหรือไม่ต้องการการเปลี่ยนแปลงที่อื่นในรหัส

@ ais523 ฉันลองแล้ว แต่อย่างน้อยเทอร์มินัลอีมูเลเตอร์ (Konsole) ของฉันดูเหมือนจะไม่รองรับ คุณรู้หรือไม่?
Dennis

gnome-terminalดูเหมือนว่าจะใช้งานได้นั่นคือสิ่งที่ฉันใช้สำหรับการทดสอบ (แก้ไข: แต่ฉันไม่คิดว่ามันรองรับ CSI ขนาด 1 ไบต์) xtermควรทำงานได้และอาจจะติดตั้งง่ายกว่าถ้าคุณมีระบบ KDE (ฉันเพิ่งทดสอบตัวเองมันใช้งาน\x1b[ได้ แต่ไม่ได้ด้วย\x9bเหตุผลบางอย่างอาจเกี่ยวข้องกับการตั้งค่า stty ของฉันมากกว่าที่จะเทอร์มินัลเอง)

@ ais523 ฉันมี xterm ฉันจะตรวจสอบเมื่อฉันกลับมาที่พีซีของฉัน
Dennis

8
ฉันรักวิธีที่มันจะกลาย:)จาก:(ปลาย
Andras Deak

22

กำลังประมวลผล, 78 66 65 63 61 ไบต์

บันทึก 2 ไบต์ด้วย @TuukkaX โดยใช้-a%2แทนa%2*-1

บันทึก 2 ไบต์ด้วย @TuukkaX โดยใช้ a=-a

int a=1;void draw(){background(a);}void mousePressed(){a=-a;}

ช่องทำเครื่องหมายสลับระหว่างการเป็นขาวดำ

คำอธิบาย

int a=1;                   //the variable that contains the state of the checkbox
void mousePressed(){a=-a;} //if the mouse is pressed, change the sign of a

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

ตอนนี้เพื่อmousePressed()ให้ถูกเรียกตลอดไป (ไม่เช่นนั้นจะหยุดหลังจากที่โปรแกรมเพิ่งเริ่มทำงาน) เราต้องการdraw()ฟังก์ชั่น

void draw(){               //loop infinitely
  background(a);           //set the sketch's background to -a%2
  //if a ==  1, the background colour is set to almost black
  //if a == -1, the background colour is set to white
}

ป้อนคำอธิบายรูปภาพที่นี่


ช่องทำเครื่องหมายที่มีขนาดเล็กกว่าจะเป็น 90 ไบต์ (ช่องทำเครื่องหมายอยู่ที่มุมบนซ้ายเพื่อให้เราสามารถนำเงื่อนไขเมาส์บางอย่างออก):

int a=1;void draw(){fill(a);rect(0,0,8,8);}void mousePressed(){if(mouseX<9&mouseY<9)a=-1;}

2
การใช้วิธีการประมวลผลอย่างชาญฉลาดยอมรับจำนวนเต็มเดียวเป็นสีเทา!
FlipTack

@FlipTack ดูเหมือนว่าสีขาวสามารถแสดงเป็นfill(-1)
Kritixi Lithos

1
ฉันมีความคิด. เริ่มต้นa1 แทน 0. เปลี่ยนa++ไปa=-aซึ่งทำให้เพียง-a%2 aสิ่งนี้จะสลับaระหว่าง 1 ถึง -1 ฉันไม่ทราบว่าสีที่ 1 ผลิตแม้ว่า
Yytsi

@TuukkaX Yup มันใช้งานได้ color(1)ผลิตผล#010101ซึ่งอยู่ใกล้กับสีดำมาก
Kritixi Lithos

22

HTML + JavaScript, 32 30 25 ตัวอักษร

<p onclick=innerHTML^=1>0


3
thisเป็นนัยและสามารถลบออกได้ นอกจากนี้innerHTMLจะสั้นกว่า
เดนนิส

@Dennis, ประหลาดกับสิ่งนี้ ... ขอบคุณ
Qwertiy

+1 สำหรับการไม่ใช้<input>องค์ประกอบ
RedClover

20

Unix Shell (+ x11-apps) ขนาด 3 ไบต์

คำปฏิเสธ

คำตอบด้านล่างนี้น่าเบื่อเส้นขอบและ "รู้สึกว่าโกง" (อย่างน้อยสำหรับฉัน)

แต่ดูเหมือนว่ามันจะไม่ละเมิดกฎการท้าทายใด ๆ "ตามที่เขียนไว้" หรือ "ช่องโหว่เริ่มต้น" ดังนั้นฉันจึงโพสต์

(หากคุณสามารถชี้กฎเฉพาะที่มันแตกได้โปรดแสดงความคิดเห็นใน!)

แข็งแรงเล่นกอล์ฟ

xgc

โปรแกรม xgc แสดงคุณสมบัติต่าง ๆ ของกราฟิกพื้นฐาน X

xgcหน้าจอเต็มไปจริงกับช่องทำเครื่องหมายต่างๆ:

ป้อนคำอธิบายรูปภาพที่นี่

และ "ปุ่มปักหมุด" (ซึ่งมีคุณสมบัติเป็นช่องทำเครื่องหมายภายใต้กฎการท้าทายนี้):

ป้อนคำอธิบายรูปภาพที่นี่


20

GitHub Flavoured Markdown - 6 ไบต์

- [ ] 

(มีพื้นที่ต่อท้าย)

ในส่วนสำคัญ: ตรวจสอบ / ไม่ตรวจสอบ


แน่ใจว่าสิ่งนี้ตรงกับครึ่งหลังของประโยคที่ 1“ เขียนโปรแกรมที่สร้างช่องทำเครื่องหมายสองสถานะที่ผู้คนสามารถโต้ตอบด้วยการใช้เมาส์ ”?
จัดการ

1
ใช่ถ้าคุณวางลงในส่วนสำคัญและสร้างส่วนสำคัญ (สำหรับ "การรวบรวม") คุณจะสามารถโต้ตอบกับมันได้
Axel

น่าสนใจ ขอบคุณ @ Ax31 ฉันไม่เคยใช้จิสต์
จัดการ

1
ฉันจะไม่คาดหวัง "Github Flavoured Markdown"
Jonas Schäfer



14

Python REPL ขนาด 45 ไบต์

from tkinter import*
Checkbutton(Tk()).pack()

ฉันไม่ได้มีส่วนร่วมใน CG และฉันมักจะอ่านโพสต์เหล่านี้ อย่างไรก็ตามมันทำให้ฉันประหลาดใจจริง ๆ ที่คุณได้รับอนุญาตให้ใช้โมดูลภายนอก นั่นไม่ใช่การโกงใช่ไหม ฉันไม่ทราบว่ามีซอร์สโค้ด Tk กี่ไบต์ แต่จริง ๆ แล้วไม่ควรเพิ่มไบต์เหล่านี้ในการนับไบต์ของคุณ
FMaz

1
@Krazor tkinterเป็นห้องสมุดมาตรฐานสำหรับ Python (แม้ว่ามันจะไม่ใช่ฉันก็แค่ประกาศ Python REPL + tkinter) ซึ่งหมายความว่าฉันสามารถใช้คุณสมบัติของมันได้โดยเพียงแค่นำเข้ามัน การลงโทษที่คุณแนะนำนั้นคล้ายคลึงกับการขอให้ผู้ใช้รวมจำนวนไบต์ในจำนวนของแหล่งที่มาของภาษาที่คุณกำลังเขียนที่นี่เราอนุญาตให้ภาษาหรือโมดูลใด ๆ สามารถแข่งขันได้ตราบใดที่มันถูกเขียนและเผยแพร่ต่อสาธารณะก่อน ความท้าทายถูกโพสต์
บลู

โอเคขอบคุณสำหรับการชี้แจง
FMaz

14

GeoGebraขนาด 10 ไบต์

Checkbox[]

เข้าไปในแถบป้อนข้อมูล

นี่คือ gif ของการประมวลผล:

การทำงานของโปรแกรม


7
โอ้โห GeoGebra ฉันจำได้ สักพักหนึ่ง.
Nic Hartley

ฉันรู้ว่านี่เป็นหัวข้อนอกเรื่อง แต่คุณจะไปที่สถาบันวิทยาลัยวอเตอร์ลู? เพิ่งออกมาจากความอยากรู้อยากเห็นตามชื่อของคุณ ฉันไม่ใช่นัก
ต้มตุ๋น


11

HTML พร้อม JavaScript - 136 124 120 115 113 111 109 79 ไบต์

<p style=height:20;border:solid onClick=t=this;t.innerHTML=(t.e=!t.e)?'x':''>

-2 ด้วยขอบคุณ @KritixiLithos

ลดเหลือ 79 หลังจากเล่นกอล์ฟที่ยอดเยี่ยมจาก @Jan ถึงแม้ว่าเวอร์ชั่นใหม่จะเหมาะกับความต้องการของฉัน แต่ฉันก็ยังคงรักษาเวอร์ชั่นเก่าไว้ด้วยความภาคภูมิใจของมืออาชีพ

ในขณะที่มันใช้งานได้อย่างสมบูรณ์แบบในตัว แต่ฉันคิดว่ามันสนุกกว่าที่จะสร้างของฉันเองตั้งแต่เริ่มต้น ทดสอบกับ Chrome และ Firefox border:solidมีไว้สำหรับความเข้ากันได้กับ IE แต่ฉันไม่รู้ว่ามันจำเป็นจริง ๆ ในเวอร์ชัน IE รุ่นใหม่กว่าหรือไม่ฉันไม่มี IE ให้ทดสอบ

pxในระดับความสูงอยู่ที่นั่นเพื่อประโยชน์ของ "รหัสเรียกใช้ข้อมูลโค้ด" เพื่อที่จะไม่รวมอยู่ใน "ของจริง" นับไบต์ มันทำงานได้ดีในเบราว์เซอร์โดยไม่ได้

<p style=height:20px;border:solid onClick=t=this;t.innerHTML=(t.e=!t.e)?'x':''>

รุ่นก่อนหน้า:

<p id=d style="width:20px;height:20px;border:solid 1px"onClick="d.innerHTML=d.innerHTML=='x'?'':'x'"align=center>


1
คุณสามารถid=dลบออกได้d=thisไหม?
Kritixi Lithos

1
@KritixiLithos - แน่นอนฉันทำได้ ขอขอบคุณและด่างได้ดี :)
ElPedro

1
คุณไม่จำเป็นต้องตั้งค่าความกว้างกฎบอกว่ามันอาจเป็นขนาดใดก็ได้ หากคุณเก็บสถานะไว้ในพร็อพเพอร์ตี้thisคุณจะบันทึกการตั้งค่า ID หากคุณเก็บไว้thisในพร็อพเพอร์ตี้คุณจะประหยัดได้ไม่กี่ไบต์ alignไม่จำเป็น เนื่องจากไม่มีช่องว่างในสตริงแอตทริบิวต์คุณไม่จำเป็นต้องใส่เครื่องหมายคำพูด <p style=height:20px;border:solid onClick=t=this;t.innerHTML=(t.e=!t.e)?'x':''>79 bytes
Jan

@Jan - ขอบคุณ! ความกว้างบิตเป็นความภาคภูมิใจในวิชาชีพของฉันเอง หากฉันไม่ได้ตั้งค่ามันดูน่าเกลียดและเนื่องจากคำตอบนี้จะไม่ชนะและถูกโพสต์เป็นทางเลือกฉันอาจจะทิ้งมันไว้ที่นั่น นอกเหนือจากนั้นคำแนะนำที่ดีบางอย่าง ขอบคุณมาก. จะอัปเดตในวันพรุ่งนี้
ElPedro

ขอบคุณ @ เร็ว อัปเดตรหัส แต่ลืมบิตอื่น ๆ กำลังจะสาย
ElPedro

9

Minecraft 1.0.0, 1 ไบต์

คานใน Minecraft ตรงตามเกณฑ์ทั้งหมดของกล่องกาเครื่องหมาย คำตอบนี้ใช้ได้เฉพาะกับเกมรุ่นเก่าที่ต่อยคันโยกยังคงสลับมัน

ป้อนคำอธิบายรูปภาพที่นี่

ให้คะแนนโดยใช้จำนวนไบต์ที่แนะนำของ @Connor O'Brien


ความแตกต่างของ 3 ระหว่างสองคำตอบแทบจะไม่สร้างหรือทำลายฉันทามติ แต่เมื่อพิจารณาว่าคำตอบของ Conor ค่อนข้างขัดแย้ง (ปัจจุบันอยู่ที่+24 / -10 ) และคำตอบที่ยอมรับนั้นได้รับการตอบรับอย่างดี ( + 17 / -0 ) ควรใช้หลังเพื่อทำคะแนนคำตอบของ Minecraft
เดนนิส

อย่างไรก็ตามไม่มีโครงสร้างบล็อกใน Minecraft 1.0.0
ev3commander

1
มันเป็นหนึ่งnใน Conor, btw :)
Conor O'Brien

หรือคุณสามารถ rebind ปุ่มซ้ายและขวาของเมาส์ในเวอร์ชั่นที่ใหม่กว่าเพื่อให้ใช้ได้; D
seadoggie01

@ ConorO'Brien 1 blockใช่มั้ย ทำไม1 byte? ฉันไม่คิดว่า mc เก็บทุก ๆ บล็อกเป็นหนึ่งไบต์ ...
RedClover

8

TI-Basic, 15 ไบต์

While 1:Shade(0,9:Input :ClrDraw:Input :End

ค่อนข้างตรงไปตรงมา ช่องทำเครื่องหมายครอบคลุมประมาณ 40% ของหน้าจอและสลับระหว่างขาวดำ เมื่อทำเครื่องหมายหน้าจอจะมีลักษณะดังนี้:

จอภาพ


8

บรรทัดคำสั่ง Windows ทุกรุ่นขนาด 3 ไบต์

(cmd.exe, แบทช์, PowerShell, start-> run, อะไรก็ตาม)

osk

เปิดแป้นพิมพ์บนหน้าจอที่มี "ช่องทำเครื่องหมาย" หลายรายการเช่น shift, ctrl, alt, ปุ่ม capslock คล้ายกับคำตอบ xgc และได้รับแรงบันดาลใจจากภาพหน้าจอคำตอบ SmileBASIC


7

อ็อกเทฟ36 36ไบต์

uicontrol('sty','c')

ขอบคุณ @LuisMendo บันทึก 16 ไบต์!


1
uicontrol('sty','c')ยังใช้งานได้
Luis Mendo

@LuisMendo ขอบคุณ! 1/2 ไบต์นับแล้วบันทึก!
rahnema1

7

KV Lang , 8 ไบต์

CheckBox

ป้อนคำอธิบายรูปภาพที่นี่


สมมติว่าเป็นสภาพแวดล้อม Python พื้นฐานจริงๆสำหรับ kv lang เพื่อให้ทำงานได้:

from kivy.app import runTouchApp
from kivy.lang import Builder
runTouchApp(Builder.load_string('CheckBox'))

สิ่งนี้ใช้งานได้เพราะCheckBoxเป็นวิดเจ็ต Kivy ที่รวมอยู่ใน a kivy.Factoryเป็นวิดเจ็ตแต่ละตัวจากไลบรารีมาตรฐาน

สตริงธรรมดานั้นสร้างอินสแตนซ์CheckBoxและเนื่องจากrunTouchAppต้องการให้วิดเจ็ตทำงานฉันสามารถใช้งานBuilder.load_stringได้

พื้นหลังของload_stringจับพื้นสตริงทุก KV และถ้ามีเช่นเดียวของวิดเจ็ตที่กำหนดไว้ (เช่นCheckBox) แล้วมันจะยกระดับเป็นรากตำแหน่งวิดเจ็ตตัวอย่างเช่น:

Application
    openGL Window
        root widget(mostly layout)
            main tree
            and some widgets
            ...

7

SmileBASIC ขนาด 49 ไบต์

@L
O=T
TOUCH OUT T,,
X=T<O!=X
KEY 1,""[X]GOTO@L

และเป็นกล่องเปล่าและกล่องที่เลือกในแบบอักษรของ SB
สลับช่องทำเครื่องหมายโดยแตะที่หน้าจอ (สิ่งที่ใกล้เคียงที่สุดกับการคลิกด้วยเมาส์)

ป้อนคำอธิบายรูปภาพที่นี่ ป้อนคำอธิบายรูปภาพที่นี่

คำตอบที่โกง:

0 ไบต์:

(แป้นพิมพ์บนหน้าจอมีปุ่มที่ทำหน้าที่เหมือนช่องทำเครื่องหมายเช่นปุ่ม Caps Lock และปุ่มแทรก)

14 ไบต์:

EXEC"SYS/SBGED

เปิดตัวแก้ไขกราฟิกในตัวซึ่งมีปุ่มเหมือนช่องทำเครื่องหมายหลายปุ่ม


มันยอดเยี่ยมมากถึงแม้ว่าฉันจะไม่เข้าใจว่าบรรทัดที่ 4 กำลังทำอะไรอยู่ คุณช่วยอธิบายได้ไหม
snail_

T<Oเป็นจริงเมื่อคุณหยุดการสัมผัสหน้าจอและ!=ใช้เป็นโลจิคัล XOR X=X XOR (O && !T)
12Me21

7

C #, 124 120 ไบต์

บันทึกแล้ว 4 ไบต์ขอบคุณที่ช่วยพวกเขา

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

using System.Windows.Forms;class P{static void Main(){var a=new Form();a.Controls.Add(new CheckBox());a.ShowDialog();}}

ungolfed: using System.Windows.Forms; class P{ static void Main(){ var a=new Form(); a.Controls.Add(new CheckBox()); Application.Run(a); a.ShowDialog(); } }


หากคุณไม่พบสิ่งใดในเมตานี้ให้ถามเกี่ยวกับเมตานี้
Matthew Roh

var a = new Form();คุณสามารถกำจัดช่องว่างใน
clismique

@ Qwerp-Derp ฉันลบมันเพื่อนับฉันเพิ่งวางสิ่งผิดขอบคุณ
satibel

คุณสามารถใช้a.ShowDialog();เพื่อบันทึกไม่กี่ไบต์
grabthefish

ขอบคุณ @grabthefish แม้ว่า c # ยังคงสูญเสียจาวา :(
satibel


6

HTML พร้อม JavaScript, 46 33 28 ไบต์

<body onclick=innerHTML^=1>0

v2

<body onclick=this.innerHTML^=1>0

v1

<body onclick=t=this;t.innerHTML=t.e=!t.e||''>

นี้เป็นตัวแปรใน @ คำตอบของ ElPedro: สร้างช่องทำเครื่องหมาย ลดขนาดลงเหลือ 28 ไบต์ด้วยความช่วยเหลือของ @Albert Renshaw มันอาจลดลงได้อีก แต่นั่นจะทำให้เหมือนกันกับสร้างกล่องกาเครื่องหมาย

พื้นที่แอพพลิเคชันทั้งหมดสามารถคลิกได้ มันจะแสดง0ในoffสถานะและ1ในonรัฐ ลองใช้งานได้ที่https://jsbin.com/nuhetiyocu/1/edit


1
นี่คือรูปแบบที่เรียบร้อยที่ 39 ไบต์ <body onclick=t=this;t.innerHTML^=t?1:0กฎ 16 พิกเซลระหว่างการเปลี่ยนสถานะขึ้นอยู่กับการถกเถียงกัน
Albert Renshaw

38<body onclick=this.innerHTML^=this?1:0
Albert Renshaw

1
โอ้ไม่ด้วยความช่วยเหลือของคุณฉันลงวันที่ 33 แล้ว :)
ม.ค.

1
28<body onclick=innerHTML^=1>0
Albert Renshaw

1
ตอนนี้มีค่าอยู่ภายในคอนเทนเนอร์เสมอมันสามารถเปลี่ยนจากbodyเป็นองค์ประกอบอื่นได้ แต่ฉันก็สังเกตเห็นว่าจะทำให้มันเหมือนกันกับคำตอบอื่นcodegolf.stackexchange.com/questions/109155/create-a-checkbox/...ดังนั้นฉันเพียงแค่ปล่อยให้มันเป็นอยู่
ม.ค.

6

Powershell v5 +, 94 Bytes

($a=[Windows.Forms.Form]::new()).Controls.Add([Windows.Forms.Checkbox]::new());$a.ShowDialog()

ป้อนคำอธิบายรูปภาพที่นี่ ป้อนคำอธิบายรูปภาพที่นี่

นี่เป็นเรื่องที่แย่มาก แต่ฉันไม่สามารถทำให้ข้อความสั้นลงด้วยAdd-Typeหรือusing namespace- และต้องการตัวแปรเนื่องจากฉันจำเป็นต้องใช้วัตถุเพื่อแสดงแบบฟอร์มอีกครั้งและControls.Add()ไม่ส่งคืนสิ่งที่ใช้ได้

ShowDialog เป็นสิ่งจำเป็นสำหรับระบบของฉันเพื่อให้กล่องโต้ตอบได้หลังจากใช้คำสั่งนี้มิฉะนั้นรูปแบบจะถูกตรึง

นอกจากนี้ยังSystem.Windows.Forms.Formสามารถย่อให้สั้นลงได้Windows.Forms.Formก่อน (อย่างน้อยฉันเอง) ระบบจะหยุดการทำให้สมบูรณ์โดยอัตโนมัติในเซสชันใหม่


ดี! อาจต้องการเพิ่มว่าต้องใช้เวอร์ชัน 5 ขึ้นไป
นักเทศน์

@ briantist ได้อัปเดตแล้วขอบคุณ
colsw

6

Excel VBA, 38 32 31 29 ไบต์

ฟังก์ชันหน้าต่างแบบทันทีที่แทรกกล่องกาเครื่องหมายความสูง = 9 และความกว้าง = 9 ที่เซลล์A1บนแผ่นงานแรกของโครงการ Excel VBA ที่ใช้งานอยู่

Sheet1.CheckBoxes.Add 0,0,9,9

-6 ขอบคุณที่ pajonk สำหรับการแทนที่[A1],[A1],9,9ด้วย0,0,9,9

-1 สำหรับการแทนที่Sheets(1)ด้วย[Sheet1]

-2 สำหรับการตระหนักถึงข้างต้นคือโง่และใช้Sheet1แทน


ดูเหมือนว่า1,1,9,9เป็นข้อโต้แย้งทำงานเช่นกัน
pajonk

1
คุณไม่ต้องการSheet(1).คุณสามารถเรียกใช้สิ่งนี้ได้อย่างรวดเร็วเพียงพอใน Excel แต่CheckBoxesมีอยู่ในแผ่นงานที่ใช้งานอยู่
Mr.Burns

@ Mr.Burns ฉันได้ตรวจสอบสิ่งนี้ แต่ไม่มีการอ้างอิงโดยตรงกับวัตถุแผ่นงานใด ๆCheckBoxes.Addวิธีการโยนข้อผิดพลาดที่ระบุว่า "วัตถุที่ต้องการ"
เทย์เลอร์สกอตต์

@TaylorScott คุณถูกต้องฉันใส่รหัสในโมดูลชีตแทนที่โมดูลปกติ .. ความผิดพลาดของฉัน xD
Mr.Burns

4

VBA (Word), 74 57 ไบต์

-17 ขอบคุณ Taylor Scott

Sub a()
f = a.FormFields.Add(Selection.Range, 71)
End Sub

ชื่อไฟล์ของเอกสารควรเป็น


1
คุณสามารถแทนที่wdFieldFormCheckBoxด้วย71(ค่าจำนวนเต็มของค่าwdFieldFormCheckBoxคงที่) เพื่อการประหยัด 17 ไบต์
Taylor Scott

ฉันคิดว่าคุณสามารถลบบรรทัดใหม่สำหรับ -2 ไบต์
devRicher

4

ปั๊ก, 20 ไบต์

input(type=checkbox)

นอกจากนี้ที่ฉันนับเป็น 23 ถ้าคุณลบอัญประกาศมันยังคงทำงานบน Firefox และ Chrome (ไม่สามารถทดสอบใน IE) และจะมาที่ 21 ในกรณีที่ฉันจะพิจารณาการปรับปรุงตัวอย่างและถูกต้อง
ElPedro

@heonlygusti - แน่นอน แต่ไม่มีคำพูดฉันจะ upvoted :-) btw, downvote ไม่ใช่ฉัน
ElPedro

ฉันจะได้รับการโหวตถ้ามันไม่ได้สำหรับคำพูดเหล่านั้นซึ่งไม่จำเป็น
NightSkyCode

@ theonlygusti ไม่ได้เลย ให้มันลอง.
NightSkyCode

4

Clojure, 201 195 145 127 bytes

(ns c(:require[quil.core :as q]))(def a(atom nil))(q/defsketch b :draw #(q/background(if@a 0 99)):mouse-clicked #(swap! a not))

ไบต์ -6 m/fun-modeโดยการกำจัดความจำเป็นในการ

-50 ไบต์โดยการลบ:setupและ:sizeตัวเลือกตั้งแต่พวกเขาเป็น defaultable fun-modeและไม่จำเป็นในการที่ไม่ใช่ ลบการนำเข้าที่ไม่จำเป็นสำหรับมิดเดิลแวร์ออกด้วย

-18 ไบต์ขอบคุณ @ ASCII-only เปลี่ยนเป็นสี "เล็กลง" และลบพื้นที่ที่ไม่จำเป็นออกก่อนตัวดำเนินการตรวจสอบ ( @)

สร้างQuil sketch (ไลบรารี Clojure ที่มีเลเยอร์เหนือการประมวลผล) ดังนั้นสิ่งนี้ต้องการให้ Quil library รัน

(ns bits.golf.checkbox
  (:require [quil.core :as q]))

; Mutable global variable to hold the toggle state
(def a (atom nil))

(q/defsketch b
         ; Draw the background color to be either black or red depending on the toggle state.
         :draw #(apply q/background (if @a [0 0 0] [255 0 0]))

         ; Negate the state on mouse click
         :mouse-clicked #(swap! a not))

ป้อนคำอธิบายรูปภาพที่นี่

ป้อนคำอธิบายรูปภาพที่นี่


คุณไม่สามารถแทนที่ 255 ด้วย 99 ได้หรือไม่ นอกจากนี้ฉันจะลองลบช่องว่างก่อน / หลังสัญลักษณ์และดูว่ายังใช้งานได้หรือไม่
ASCII เท่านั้น

@ ASCII เท่านั้นใช่ฉันทำได้ มันทำสีอาละวาดน่าเกลียดแม้ว่า iirc และด้วยเหตุผลบางอย่างฉันจัดลำดับความสำคัญในเวลานั้น และไม่นี่เป็นพื้นที่มากพอที่ฉันสามารถลบได้อย่างน่าเสียดาย
Carcigenicate

@ ASCII-only ปัญหาคือสัญลักษณ์สามารถมีได้เกือบทุกตัวอักษรดังนั้นจริงๆ "เพื่อนบ้านที่ปลอดภัย" เท่านั้นที่คุณสามารถลบช่องว่างรอบ ๆ ได้คือวงเล็บหรือเครื่องหมายคำพูด โชคดีที่นี่เป็นเสียงกระเพื่อมที่อดีตค่อนข้างแพร่หลาย
Carcigenicate

อืม[0 0 99]ถ้างั้น? (สีน้ำเงินเข้มบางชนิด)
เฉพาะ ASCII เท่านั้น

@ ASCII- เท่านั้นจริง ๆ แล้วฉันคิดว่าฉันสามารถวาง 0s ได้แล้วตอนนี้ที่ฉันคิดเกี่ยวกับมัน ฉันคิดว่า Quil วางแผ่นด้านหน้าอัตโนมัติด้วย 0 หากเวกเตอร์นั้นสั้น ถ้าฉันจำล่าสุดฉันจะแก้ไขมัน ขอบคุณที่ทำให้ฉันคิด
Carcigenicate

4

ภาษาสคริปต์การทำงานของ Flashpointขนาด 273 ไบต์

หากต้องการแสดงช่องทำเครื่องหมาย:

createDialog"b"

แต่ก่อนอื่นจะต้องมีการกำหนด:

บันทึกสิ่งต่อไปนี้ไปยังไฟล์ที่มีชื่อdescription.extในโฟลเดอร์ภารกิจ:

class b{idd=999;movingEnable=1;class controls{class c{idc=457;x=0.1;y=0.1;w=0.1;h=0.1;text="";action="if(ctrlText 457=={})then{ctrlSetText[457,{V}]}else{ctrlSetText[457,{}]}";type=1;style=2;colorText[]={1,1,1,1};font="tahomaB36";sizeEx=0.1;}}}

ช่องทำเครื่องหมายในการดำเนินการ:


3

AutoIt , 78 ไบต์

GUICreate(0)
GUISetState(GUICtrlCreateCheckbox(0,0,0))
Do
Until GUIGetMsg()=-3

เปิดหน้าต่างขยายใหญ่สุดที่สามารถปิดได้เหมือนหน้าต่างหน้าต่างอื่น ๆ การขยายให้ใหญ่สุดและ ... การขึ้นบนเป็นผลข้างเคียงของการตีกอล์ฟ

ป้อนคำอธิบายรูปภาพที่นี่


ฉันจะรันบน Linux ได้อย่างไร
dkudriavtsev

@wat wine AutoIt3.exe script.au3ที่script.au3ไฟล์มีรหัสนี้
mınxomaτ

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