Tạo một hộp kiểm


51

Viết chương trình tạo hộp kiểm hai trạng thái mà mọi người có thể tương tác bằng chuột.

Cụ thể, chương trình của bạn sẽ đạt được tất cả những điều sau đây:

  1. Có vùng 8 × 8 pixel (hoặc lớn hơn nếu muốn) của màn hình là khu vực có thể nhấp của hộp kiểm. Do đó, khu vực này được gọi đơn giản là hộp kiểm.

  2. Khi con trỏ chuột được di chuyển trong hộp kiểm và nút chuột * mặc định được nhấn, hộp kiểm sẽ chuyển trạng thái.
    Kiểm tra trở thành không được kiểm tra. Không được kiểm tra trở thành kiểm tra.

  3. Hộp kiểm không nên di chuyển khi nó được bật.

  4. Ở trạng thái đã chọn, hộp kiểm có thể là bất kỳ màu nào.

  5. Ở trạng thái không được chọn, hộp kiểm có thể là bất kỳ màu nào miễn là ít nhất 16 pixel khác biệt với trạng thái được chọn .

  6. Trong một trường hợp chương trình duy nhất, tất cả các trạng thái được kiểm tra phải giống hệt nhau và tất cả các trạng thái không được kiểm tra phải giống hệt nhau về mặt trực quan với nhau.

  7. Không kết thúc chương trình cho đến khi chương trình kết thúc rõ ràng (ví dụ: thông qua nút thoát hoặc Alt + F4), vì vậy người dùng có thể nhấp vào hộp kiểm bao nhiêu tùy thích.

* Bạn có thể cho rằng nút chuột mặc định luôn nhấp chuột trái, nhưng cũng tốt khi sử dụng mặc định như được xác định bởi phần mềm chuột hoặc HĐH, có thể không thực sự nhấp chuột trái tùy thuộc vào người dùng.

Ghi chú

  • Không có vấn đề gì bên ngoài khu vực hộp kiểm của bạn. Nó chỉ có thể là máy tính để bàn. Nó có thể là một phần của giao diện điều khiển thay đổi trên mỗi lần chuyển đổi.

  • Không quan trọng hộp kiểm của bạn bắt đầu ở trạng thái nào.

  • Vùng hộp kiểm có thể có bất kỳ kích thước nào ở hoặc trên 8 × 8 pixel. Nó không cần phải là hình vuông.

  • Bạn có thể thực hiện các khoản phụ cấp nhỏ cho các cài đặt ngoài tầm kiểm soát của mình, chẳng hạn như kích thước phông chữ của bảng điều khiển, thu phóng trình duyệt, độ phân giải màn hình, v.v ... Miễn là chương trình của bạn hoạt động trong một cài đặt thử nghiệm hợp lý, nó phải hợp lệ.

  • Nếu chương trình của bạn mở một cửa sổ, bạn có thể cho rằng nó đã được kéo đến một vị trí thích hợp trên màn hình nếu cần thiết (ví dụ góc trên cùng bên trái).

  • Bạn có thể sử dụng các ngôn ngữ đánh dấu như HTML hoặc các ngôn ngữ khác mà chúng tôi thường không coi là ngôn ngữ lập trình chính thức.

  • Hộp kiểm của bạn phải được bật bằng nút chuột mặc định. Sẽ ổn nếu nó cũng bật cho các dạng đầu vào khác (ví dụ: nút chuột phải), ngoại trừ chuyển động của chuột . tức là trạng thái không nên thay đổi nếu chuột chỉ được di chuyển trong hộp kiểm.

  • Ảnh chụp màn hình hộp kiểm của bạn trong hành động rất được khuyến khích!

Chấm điểm

Mã ngắn nhất tính bằng byte thắng.

Thí dụ

Một ví dụ HTML chuẩn trong 23 byte.

<input type="checkbox">

Đối với tôi trong Google Chrome, điều này làm cho hộp kiểm 12 × 12 pixel và khoảng 30 pixel thay đổi rõ ràng giữa các trạng thái được kiểm tra và không được kiểm tra.

Tôi cho phép thu phóng trình duyệt ở mức 100%.


2
Hộp kiểm có thể bao phủ toàn bộ màn hình?
Kritixi Lithos

@KritixiLithos Có, điều đó sẽ hợp lệ. Lưu ý rằng bạn có thể, nếu muốn, sẽ tính một vùng 8x8 cụ thể làm hộp kiểm chính thức, ngay cả khi một vùng lớn hơn hoạt động.
Sở thích của Calvin

@Helka Homba - ứng dụng có được phép hiển thị các điều khiển khác, ngoài hộp kiểm tra không?
zeppelin

Có thể cho hộp kiểm tra chuyển đổi các loại đầu vào khác không? (Ví dụ: là một giải pháp đúng nếu hộp kiểm bật trên bất kỳ loại đầu vào nào của người dùng, bất kể đó là nhấp chuột, di chuyển chuột hay nhấn phím? Nó sẽ bật khi nhấp chuột, nhưng nó sẽ bật các kích thích khác nữa.)

1
@zeppelin "Không có vấn đề gì bên ngoài khu vực hộp kiểm của bạn. Nó có thể chỉ là máy tính để bàn. Nó có thể là một phần của bảng điều khiển thay đổi trên mỗi lần chuyển đổi." Vì vậy, miễn là hộp kiểm có ở đó, không có vấn đề gì khác.
Sở thích của Calvin

Câu trả lời:



31

HTML, 20 byte

Không biết làm thế nào hợp lệ này sẽ là một câu trả lời. HTML yêu cầu thẻ phải được đóng để xác thực hợp pháp, nhưng các trình duyệt hiện đại sẽ tự động đóng chúng để có thể thực thi được.

<input type=checkbox


3
Tôi đã xem đây là một lựa chọn trước đó (không có dấu ngoặc kép) nhưng hoàn toàn bỏ lỡ việc đóng cửa >. IMHO +1 và hợp lệ.
ElPedro

1
Trên trang web này, các ngôn ngữ được xác định bởi việc triển khai của chúng, vì vậy điều này có vẻ tốt đối với tôi.
John Gowers

1
Cảm ơn @JohnGowers, tôi đã tự hỏi về định nghĩa mức độ lạm dụng được chấp nhận.
Ngày 1

27

Bash , 67 55 50 35 32 31 byte

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

Mã này chứa một byte CR (dòng mới đầu tiên) và byte CSI (khung góc nhỏ bên phải với mã hóa Windows-1252). Nó yêu cầu xterm (hoặc tương đương) và mã hóa ISO-8859-1 (hoặc tương tự).

Mã xác định một hàm có tên :, lần lượt hiển thị 1 hoặc 0 màu trắng trong hình chữ nhật màu đen. Có chính xác 24 pixel khác nhau với cài đặt mặc định của xterm. ( bằng chứng )

Đối với phiên bản cũ hơn bật màu của toàn bộ thiết bị đầu cuối, hãy kiểm tra phiên bản 10 của câu trả lời này.

Cảm ơn @ ais523 đã gợi ý xterm, giúp tiết kiệm 4 byte!

Làm thế nào nó hoạt động

:(...)tạo một hàm có tên :là thực thi ....

Lệnh đọc thực hiện phép thuật thực tế.

  • -p chỉ định một dấu nhắc đầu vào, được in ra STDOUT.

    • $[i^=1]là một khai triển số học mà XOR biến i với 1 . tôi ban đầu có thể không được đặt; khi điều này xảy ra, nó sẽ được coi là 0 .

    • Vận chuyển trở lại đặt con trỏ trở lại ở đầu dòng.

    • ›?9hbắt chuột trong các thiết bị đầu cuối được hỗ trợ. Mỗi lần nhấp sẽ gửi sáu ký tự đến thiết bị đầu cuối, cụ thể ←[Mbxy, trong đó đại diện cho byte ESC ( 0x1b ). ←[chỉ ra một dãy thoát, Mchuột, bnút ( 0x20 + số nút), xcác x phối hợp của các nhấp chuột ( 0x20 + phối hợp), và ycác y phối hợp.

    • -sn6làm cho đọc im lặng (đầu vào chuột sẽ không được lặp lại thành STDERR) và dừng lại sau khi đọc chính xác 6 byte. Nó lưu đầu vào trong biến REPLY , nhưng chúng tôi không quan tâm đến đầu ra mà nó tạo ra.

Cuối cùng, sau khi đọc xong (sau chính xác một lần nhấp chuột), hãy :gọi đệ quy chính nó, nhập một vòng lặp vô hạn.

Sáng tạo và cầu khẩn

$ 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

Đầu ra

screencast


Tôi đã tự mình thực hiện một giải pháp tương tự cho vấn đề này (mặc dù ở một ngôn ngữ khác, buộc tôi phải từ bỏ vì tôi không thể tìm cách lấy đầu vào mà không có dòng mới). Một cải tiến có khả năng: thay đổi 1000hthành 9h(sự khác biệt là 1000hxử lý cả nhấn và nhả 9hchuột và chỉ xử lý nhả chuột). Điều này có thể hoặc có thể không cần thay đổi ở nơi khác trong mã.

@ ais523 Tôi đã thử điều đó, nhưng ít nhất trình giả lập thiết bị đầu cuối của tôi (Konsole) dường như không hỗ trợ nó. Bạn có biết cái nào không?
Dennis

gnome-terminaldường như hoạt động, đó là những gì tôi đang sử dụng để thử nghiệm (chỉnh sửa: nhưng tôi không nghĩ rằng nó hỗ trợ CSI 1 byte). xtermcũng sẽ hoạt động và có thể dễ cài đặt hơn nếu bạn có hệ thống KDE. (Tôi chỉ tự mình kiểm tra cái này; nó hoạt động với \x1b[nhưng không phải \x9bvì một số lý do, có thể liên quan đến cài đặt stty của tôi hơn là với chính thiết bị đầu cuối.)

@ ais523 Tôi có xterm. Tôi sẽ kiểm tra khi tôi quay lại PC của mình.
Dennis

8
Tôi thích cách nó trở thành :)từ :(cuối
Andras Deak

22

Đang xử lý, 78 66 65 63 61 byte

2 byte được lưu nhờ @TuukkaX bằng cách sử dụng -a%2thay vìa%2*-1

2 byte được lưu nhờ @TuukkaX bằng cách sử dụng a=-a

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

Các hộp kiểm xen kẽ giữa màu đen và trắng.

Giải trình

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

Bây giờ có nhiều lựa chọn thay thế khác như sử dụng câu lệnh if để xử lý điều này, nhưng sau đó nó trở nên kỳ lạ và liên tục thay đổi nền trong khi chuột đang được nhấn. Lần đầu tiên tôi đã thử mouseButton, nhưng sau đó tôi sẽ cần nhiều điều kiện hơn và nhiều mã hơn sẽ kết thúc dài dòng hơn nhiều.

Bây giờ mousePressed()để được gọi là mãi mãi (nếu không nó sẽ chỉ dừng lại sau khi chương trình vừa bắt đầu), chúng ta cần một draw()chức năng.

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
}

nhập mô tả hình ảnh ở đây


Một hộp kiểm nhỏ hơn sẽ là 90 byte (hộp kiểm nằm ở góc trên cùng bên trái, vì vậy chúng tôi có thể xóa một số điều kiện chuột):

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

2
Khéo léo sử dụng cách Xử lý chấp nhận các số nguyên đơn dưới dạng màu thang độ xám!
FlipTack

@FlipTack Dường như màu trắng cũng có thể được thể hiện làfill(-1)
Kritixi Lithos

1
Tôi có ý này. Khởi tạo athành 1 thay vì 0. Thay đổi a++thành a=-a, điều này làm cho -a%2chỉ a. Điều này sẽ chuyển đổi agiữa 1 và -1. Tôi không biết màu 1 tạo ra mặc dù.
Yytsi

@TuukkaX Yup nó hoạt động. color(1)sản xuất #010101rất gần với màu đen
Kritixi Lithos

22

HTML + JavaScript, 32 30 25 ký tự

<p onclick=innerHTML^=1>0


3
thislà ẩn và có thể được gỡ bỏ. Ngoài ra, innerHTMLlà ngắn hơn.
Dennis

@Dennis, lạ với điều này ... Cảm ơn bạn.
Qwertiy

+1 khi không sử dụng <input>phần tử
RedClover

20

Unix Shell (+ x11-apps), 3 byte

Khước từ

Câu trả lời dưới đây là nhàm chán, đường biên và "cảm thấy gian lận" (ít nhất là với tôi).

Tuy nhiên, nó dường như không vi phạm bất kỳ quy tắc thách thức nào "như được viết" hoặc "sơ hở mặc định", vì vậy tôi đang đăng nó.

(Nếu bạn có thể chỉ ra một quy tắc cụ thể mà nó vi phạm, vui lòng bình luận!)

Chơi gôn

xgc

Chương trình xgc thể hiện các tính năng khác nhau của các nguyên hàm đồ họa X.

Các xgc màn hình thực sự là đầy hộp kiểm khác nhau:

nhập mô tả hình ảnh ở đây

và "nút dính" (đủ điều kiện làm hộp kiểm, theo quy tắc thách thức này):

nhập mô tả hình ảnh ở đây


20

Đánh dấu hương vị GitHub - 6 byte

- [ ] 

(Có một dấu cách)

Trong một ý chính: kiểm tra / không kiểm tra


Chắc chắn điều này phù hợp với nửa sau của câu 1, Viết Viết chương trình tạo hộp kiểm hai trạng thái mà mọi người có thể tương tác bằng cách sử dụng chuột .
manatwork

1
Có, nếu bạn dán nó trong một ý chính và tạo ra ý chính (để "biên dịch"), bạn sẽ có thể tương tác với nó.
Axel

Hấp dẫn. Cảm ơn @ Ax31. Tôi không bao giờ sử dụng ý chính.
manatwork

1
Tôi sẽ không mong đợi "Github Flavored Markdown".
Jonas Schäfer



14

Python REPL, 45 byte

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

Tôi không tham gia vào CG và tôi cũng không thường xuyên đọc những bài viết này. Tuy nhiên, điều thực sự làm tôi ngạc nhiên là bạn được phép sử dụng các mô-đun bên ngoài. Đó không phải là gian lận sao? Tôi không biết mã nguồn Tk có bao nhiêu byte, nhưng thực sự không nên thêm các byte này vào số byte của bạn?
FMaz

1
@Krazor tkinterlà một thư viện chuẩn cho Python (nhưng ngay cả khi nó không phải tôi chỉ phải khai báo Python REPL + tkinter). Điều này có nghĩa là tôi có thể sử dụng các tính năng của nó bằng cách nhập nó. Hình phạt mà bạn đề xuất tương tự như yêu cầu người dùng đưa vào byte đếm số byte trong nguồn ngôn ngữ bạn đang viết. Ở đây chúng tôi cho phép bất kỳ ngôn ngữ hoặc mô-đun nào cạnh tranh miễn là nó được viết và xuất bản công khai trước đó các thách thức đã được đăng.
Màu xanh

Được rồi, cảm ơn bạn đã làm rõ.
FMaz

14

GeoGebra , 10 byte

Checkbox[]

Nhập vào thanh đầu vào.

Đây là một gif của việc thực hiện:

Thực hiện chương trình


7
Whoah, GeoGebra. Tôi nhớ điều đó Đã được một lúc rồi.
Nic Hartley

Tôi biết điều này không đúng chủ đề nhưng bạn có đến Viện Đại học Waterloo không? Chỉ vì tò mò, dựa trên tên của bạn. Tôi không phải là kẻ theo dõi đừng lo lắng :)
HyperNeutrino


11

HTML với JavaScript - 136 124 120 115 113 111 109 79 byte

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

-2 cảm ơn @KritixiLithos

Giảm xuống 79 sau khi chơi golf tuyệt vời từ @Jan. Mặc dù phiên bản mới phù hợp với yêu cầu tôi vẫn giữ phiên bản cũ vì lý do tự hào chuyên nghiệp.

Mặc dù việc sử dụng tích hợp sẵn là hoàn toàn hợp lệ, tôi nghĩ sẽ vui hơn khi tự tạo từ đầu. Đã thử nghiệm với Chrome và Firefox. border:solidCó khả năng tương thích IE nhưng tôi không biết liệu nó có thực sự cần thiết trong các phiên bản IE mới hơn không - tôi không có sẵn IE để kiểm tra.

Các pxtrong chiều cao là có vì lợi ích của "đoạn mã Run" vì vậy không được bao gồm trong "thực" đếm byte. Nó hoạt động tốt trong trình duyệt mà không có nó.

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

Phiên bản trước:

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


1
Bạn có thể làm gì id=dđể loại bỏ d=this?
Kritixi Lithos

1
@KritixiLithos - Quả thực tôi có thể. Cảm ơn và phát hiện tốt :)
ElPedro

1
Bạn không cần đặt chiều rộng, các quy tắc nói rằng nó có thể là bất kỳ kích thước nào. Nếu bạn lưu trữ trạng thái trên một thuộc tính trên thisbạn sẽ lưu cài đặt id. Nếu bạn lưu trữ thistrong một tài sản, bạn sẽ tiết kiệm được một vài byte. Điều alignkhông cần thiết. Vì không có khoảng trắng trong chuỗi thuộc tính, bạn không cần dấu ngoặc kép. <p style=height:20px;border:solid onClick=t=this;t.innerHTML=(t.e=!t.e)?'x':''>79 byte
Jan

@Jan - Cảm ơn! Các bit chiều rộng là niềm tự hào chuyên nghiệp của riêng tôi. Nếu tôi không đặt nó, nó trông xấu và vì câu trả lời này sẽ không bao giờ thắng và chỉ được đăng dưới dạng thay thế, có lẽ tôi sẽ để nó ở đó. Khác hơn một số gợi ý tuyệt vời. Cảm ơn nhiều. Sẽ cập nhật vào ngày mai.
ElPedro

Cảm ơn @Easterly. Đã cập nhật mã nhưng quên các bit khác. Sắp muộn rồi.
ElPedro

9

Minecraft 1.0.0, 1 byte

Một đòn bẩy trong Minecraft đáp ứng tất cả các tiêu chí cho một hộp kiểm. Câu trả lời này chỉ có giá trị cho các phiên bản cũ hơn của trò chơi trong đó việc đấm một đòn bẩy vẫn làm đảo lộn nó.

nhập mô tả hình ảnh ở đây

Được ghi bằng cách sử dụng số byte được đề xuất của @Connor O'Brien.


Sự khác biệt 3 giữa hai câu trả lời hầu như không tạo ra hoặc phá vỡ sự đồng thuận, nhưng tôi nghĩ rằng câu trả lời của Conor khá gây tranh cãi (hiện tại là + 24 / -10 ) và câu trả lời được chấp nhận được đón nhận rất nhiều ( + 17 / -0 ), tôi nghĩ cái sau nên được sử dụng để chấm điểm câu trả lời Minecraft.
Dennis

Tuy nhiên, không có khối cấu trúc nào trong Minecraft 1.0.0
ev3commander 8/2/2017

1
Đó là một ntrong Conor, btw :)
Conor O'Brien

Hoặc bạn có thể buộc lại các nút chuột trái và phải trong bất kỳ phiên bản mới hơn nào để làm cho nó hợp lệ; D
seadoggie01

@ ConorO'Brien Phải không 1 block? Tại sao 1 byte? Tôi không nghĩ mc lưu trữ mỗi khối dưới dạng một byte ...
RedClover

8

TI-Basic, 15 byte

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

Khá đơn giản. Hộp kiểm bao gồm khoảng 40% màn hình và xen kẽ giữa đen và trắng. Khi được chọn, màn hình sẽ trông giống như thế này:

màn


8

Bất kỳ phiên bản nào của dòng lệnh Windows, 3 byte

(cmd.exe, batch, powershell, start-> run, sao cũng được)

osk

Mở bàn phím trên màn hình có một số "hộp kiểm" như phím shift, ctrl, alt, phím capslock Tương tự như câu trả lời xgc và lấy cảm hứng từ ảnh chụp màn hình câu trả lời SmileBASIC.


7

Octave, 36 20 byte

uicontrol('sty','c')

Nhờ @LuisMendo lưu 16 byte!


1
uicontrol('sty','c')cũng hoạt động
Luis Mendo

@LuisMendo Cảm ơn! Số lượng 1/2 byte được lưu!
rahnema1

7

KV Lang , 8 byte

CheckBox

nhập mô tả hình ảnh ở đây


giả sử một môi trường Python thực sự cơ bản để kv lang thậm chí chạy:

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

Điều này về cơ bản hoạt động vì CheckBoxlà một tiện ích Kivy được bao gồm trong kivy.Factorymỗi tiện ích từ thư viện tiêu chuẩn.

Chuỗi đơn giản đó tạo ra một thể hiện CheckBoxvà vì runTouchAppmong muốn một widget chạy nên tôi có thể sử dụng Builder.load_string.

Nền của load_stringxử lý về cơ bản mỗi chuỗi kv và nếu có một phiên bản của một widget được xác định (ví dụ CheckBox), thì nó được nâng lên vị trí widget gốc , ví dụ:

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

7

SmileBASIC, 49 byte

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

là một hộp trống và một hộp kiểm tra trong phông chữ của SB.
Chuyển đổi hộp kiểm bằng cách chạm vào màn hình (thứ gần nhất để nhấp bằng chuột)

nhập mô tả hình ảnh ở đây nhập mô tả hình ảnh ở đây

Câu trả lời gian lận:

0 byte:

(bàn phím trên màn hình có các nút hoạt động như các hộp kiểm, chẳng hạn như khóa mũ và phím chèn)

14 byte:

EXEC"SYS/SBGED

Mở trình soạn thảo đồ họa tích hợp, có nhiều nút giống như hộp kiểm


Điều này thật tuyệt vời, mặc dù tôi không thực sự hiểu dòng thứ 4 đang làm gì. Bạn có thể giải thích?
ốc_

T<Olà đúng khi bạn ngừng chạm vào màn hình và !=được sử dụng làm XOR logic. X=X XOR (O && !T)
12Me21

7

C #, 124 120 byte

đã lưu 4 byte nhờ lấy Grabthefish.

hộp kiểm tra và không được kiểm tra lưu ý: vì các chỉnh sửa, hình ảnh không thể hiện chính xác những gì mã tạo ra, "checkBox1" không được hiển thị với mã hiện tại.

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

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


Nếu bạn không tìm thấy bất cứ điều gì về điều này trên meta, hãy hỏi về điều này trên meta.
Matthew Roh

Bạn có thể thoát khỏi không gian trong var a = new Form();.
clismique

@ Qwerp-Derp Tôi đã gỡ bỏ chúng để đếm, tôi chỉ dán những thứ sai, cảm ơn.
satibel

bạn có thể sử dụng a.ShowDialog();để lưu một vài byte
lấy từ

cảm ơn @grabthefish, mặc dù c # vẫn thua java :(
satibel


6

HTML với JavaScript, 46 33 28 byte

<body onclick=innerHTML^=1>0

v2

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

v1

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

Đây là một biến thể trên câu trả lời của @ ElPedro: Tạo Hộp kiểm . Giảm xuống còn 28 byte với sự trợ giúp của @Albert Renshaw Nó có thể được giảm thêm, nhưng điều đó sẽ làm cho nó giống hệt với Tạo Hộp kiểm

Toàn bộ khu vực ứng dụng có thể nhấp. Nó sẽ hiển thị 0trong offtrạng thái và 1trong ontrạng thái. Dùng thử tại https://jsbin.com/nuhetiyocu/1/edit


1
Đây là một biến thể gọn gàng ở 39 byte. <body onclick=t=this;t.innerHTML^=t?1:0Quy tắc 16 pixel giữa thay đổi trạng thái là tranh luận mặc dù.
Albert Renshaw

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

1
Ồ không với sự giúp đỡ của bạn tôi xuống trên 33 đã :)
Jan

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

1
Bây giờ luôn có một giá trị bên trong container, nó có thể được thay đổi từ thành bodyphần tử khác. Nhưng tôi chỉ nhận thấy rằng sẽ làm cho nó giống với một câu trả lời codegolf.stackexchange.com/questions/109155/create-a-checkbox/... vì vậy tôi chỉ để lại nó như là
Jan

6

Powershell v5 +, 94 byte

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

nhập mô tả hình ảnh ở đây nhập mô tả hình ảnh ở đây

Điều này khá khủng khiếp, nhưng tôi không thể rút ngắn các câu lệnh bằng Add-Typehoặc using namespace- và biến là bắt buộc, vì tôi cần sử dụng lại đối tượng để hiển thị biểu mẫu và Controls.Add()không trả về bất cứ thứ gì có thể sử dụng được.

ShowDialog được yêu cầu trên hệ thống của tôi để hộp có thể tương tác sau khi chạy lệnh này, nếu không thì biểu mẫu bị đóng băng.

cũng System.Windows.Forms.Formchỉ có thể rút ngắn về Windows.Forms.Formtrước (ít nhất là hệ thống của riêng tôi) tự động dừng hoàn thành nó trong một phiên mới.


Đẹp! Có thể muốn thêm rằng điều này đòi hỏi phiên bản 5+.
nghĩa tự do

@briantist cập nhật, cảm ơn.
colsw

6

VBA Excel, 38 32 31 29 byte

Immediates Hàm cửa sổ chèn một hộp kiểm có chiều cao = 9 và chiều rộng = 9, tại ô A1trên trang đầu tiên của dự án VBA Excel đang hoạt động

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

-6 Cảm ơn pyjama đã thay thế [A1],[A1],9,9bằng0,0,9,9

-1 để thay thế Sheets(1)bằng[Sheet1]

-2 để nhận ra những điều trên là ngu ngốc và sử dụng Sheet1thay thế


Có vẻ 1,1,9,9như là đối số hoạt động là tốt.
pyjama

1
Bạn không cần Sheet(1)., bạn có thể chạy nó đủ nhanh trong Excel nhưng CheckBoxesđược kế thừa vào trang hoạt động
Mr.Burns

@ Mr.Burns Tôi đã kiểm tra điều này, nhưng không tham khảo trực tiếp bất kỳ đối tượng Worksheet nào, CheckBoxes.Addphương thức đưa ra một lỗi cho biết "Yêu cầu đối tượng"
Taylor Scott

@TaylorScott Bạn đã đúng, tôi đặt mã vào mô-đun trang tính chứ không phải mô-đun thông thường .. Lỗi của tôi xD
Mr.Burns

4

VBA (Word), 74 57 byte

-17 cảm ơn Taylor Scott

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

Tên tệp của tài liệu phải là a.


1
Bạn có thể thay thế wdFieldFormCheckBoxbằng 71(giá trị nguyên của wdFieldFormCheckBoxhằng số) để tiết kiệm 17 byte
Taylor Scott

Tôi nghĩ rằng bạn có thể loại bỏ các dòng mới cho -2 byte.
devR Rich

4

Pug, 20 byte

input(type=checkbox)

Ngoài ra, tôi tính là 23. Nếu bạn xóa các trích dẫn, nó vẫn hoạt động trên Firefox và Chrome (không thể kiểm tra trên IE) và sẽ đến vào lúc 21 trong trường hợp tôi sẽ coi đó là một cải tiến trong ví dụ và do đó hợp lệ.
ElPedro

@heonlygusti - thực sự nhưng không có trích dẫn tôi sẽ nêu lên :-) btw, downvote không phải là tôi.
ElPedro

Tôi đã bỏ phiếu nếu không có những trích dẫn đó, không cần thiết.
NightSkyCode

@theonlygusti hoàn toàn không. Hãy thử một lần.
NightSkyCode

4

Clojure, 201 195 145 127 byte

(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 byte bằng cách loại bỏ nhu cầu m/fun-mode.

-50 byte bằng cách loại bỏ các tùy chọn :setup:size, vì chúng có thể mặc định và không cần thiết trong không fun-mode. Cũng loại bỏ nhập khẩu không cần thiết cho phần mềm trung gian.

-18 byte chỉ nhờ @ ASCII. Thay đổi thành màu "nhỏ hơn" và xóa một khoảng trắng không cần thiết trước toán tử quy ước ( @).

Tạo một bản phác thảo Quil (thư viện Clojure cung cấp một lớp trên Xử lý), do đó, điều này đòi hỏi thư viện Quil phải chạy.

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

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây


Bạn không thể thay thế 255 bằng 99? Ngoài ra, tôi sẽ thử xóa khoảng trắng trước / sau các ký hiệu và xem liệu nó có còn hoạt động không
ASCII chỉ có

@ ASCII-chỉ có, tôi có thể. Nó tạo ra một màu sắc xấu xí mặc dù iirc, và vì một số lý do tôi đã ưu tiên điều đó vào thời điểm đó. Và không, đây là không gian nhiều như tôi có thể loại bỏ không may.
Carcigenicate

Chỉ có ASCII Vấn đề là các biểu tượng có thể chứa hầu hết mọi ký tự, vì vậy thực sự "hàng xóm an toàn" duy nhất mà bạn có thể xóa khoảng trắng xung quanh là bất kỳ loại dấu ngoặc hoặc dấu ngoặc kép nào. May mắn thay, đây là một điều không thể thiếu trước đây là khá phổ biến.
Carcigenicate

Hmm có lẽ [0 0 99]sau đó? (một số loại màu xanh đậm)
Chỉ có ASCII vào

@ Chỉ ASCII Trên thực tế, tôi nghĩ rằng tôi có thể bỏ số 0 bây giờ mà tôi nghĩ về nó. Tôi nghĩ Quil tự động đệm phía trước với 0s nếu vectơ ngắn. Nếu tôi nhớ mới nhất tôi sẽ sửa nó. Cảm ơn đã khiến tôi suy nghĩ.
Carcigenicate

4

Hoạt động ngôn ngữ kịch bản Flashpoint , 273 byte

Để hiển thị hộp kiểm:

createDialog"b"

Nhưng trước tiên nó phải được xác định:

Lưu các mục sau vào một tệp có tên description.exttrong thư mục nhiệm vụ:

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;}}}

Các hộp kiểm trong hành động:


3

AutoIt , 78 byte

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

Mở một cửa sổ tối đa có thể được đóng lại như bất kỳ cửa sổ cửa sổ nào khác. Tối đa hóa và ... trên đỉnh là một tác dụng phụ của việc chơi golf.

nhập mô tả hình ảnh ở đây


Làm thế nào tôi có thể chạy nó trên Linux?
dkudriavtsev

@wat wine AutoIt3.exe script.au3, nơi script.au3tập tin chứa mã này.
mınxomaτ

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.