Tulis sebuah program yang menciptakan kotak centang dua-negara yang orang dapat berinteraksi dengan menggunakan mouse.
Secara khusus, program Anda harus mencapai semua hal berikut:
Memiliki wilayah layar 8 × 8 piksel (atau lebih besar jika diinginkan) yang merupakan area yang dapat diklik pada kotak centang. Untuk selanjutnya daerah ini hanya disebut kotak centang.
Ketika kursor mouse dipindahkan di dalam kotak centang dan tombol * mouse default ditekan, kotak centang harus berganti status.
Diperiksa menjadi tidak dicentang. Tidak dicentang diperiksa.Kotak centang tidak boleh bergerak saat diaktifkan.
Dalam keadaan dicentang, kotak centang mungkin warna apa saja.
Dalam keadaan tidak dicentang, kotak centang dapat berupa warna apa pun selama setidaknya 16 piksel berbeda secara visual dari kondisi yang dicentang .
Dalam satu contoh program, semua status yang diperiksa harus identik secara visual satu sama lain dan semua status yang tidak diperiksa harus identik secara visual satu sama lain.
Jangan akhiri program sampai program itu dihentikan secara eksplisit (mis. Via tombol keluar atau Alt + F4), sehingga pengguna dapat mengklik kotak centang sebanyak yang mereka inginkan.
* Anda dapat mengasumsikan tombol mouse default selalu klik kiri, tetapi juga boleh menggunakan default seperti yang didefinisikan oleh perangkat lunak mouse atau OS, yang mungkin tidak benar-benar klik kiri tergantung pada pengguna.
Catatan
Tidak masalah apa yang ada di luar wilayah kotak centang Anda. Itu bisa saja desktop. Ini bisa menjadi bagian dari konsol yang berubah di setiap toggle.
Tidak masalah dalam kondisi apa kotak centang Anda mulai.
Wilayah kotak centang mungkin memiliki dimensi pada atau di atas 8 × 8 piksel. Tidak harus persegi.
Anda dapat membuat kelonggaran kecil untuk pengaturan yang di luar kendali Anda seperti ukuran font konsol, zoom browser, resolusi monitor, dll. Selama program Anda bekerja dalam pengaturan pengujian yang masuk akal, itu harus valid.
Jika program Anda membuka jendela, Anda dapat menganggapnya telah diseret ke lokasi yang sesuai di layar jika perlu (mis. Sudut kiri atas).
Anda dapat menggunakan bahasa markup seperti HTML atau bahasa lain yang biasanya tidak kami pertimbangkan sebagai bahasa pemrograman lengkap.
Kotak centang Anda harus dapat diubah menggunakan tombol mouse default. Tidak apa-apa jika juga beralih ke bentuk input lainnya (mis. Tombol kanan mouse), dengan pengecualian gerakan mouse . yaitu negara tidak boleh berubah jika mouse hanya dipindahkan di dalam kotak centang.
Tangkapan layar dari kotak centang Anda dalam aksi sangat dianjurkan!
Mencetak gol
Kode terpendek dalam byte menang.
Contoh
Contoh HTML kanonik dalam 23 byte.
<input type="checkbox">
Bagi saya di Google Chrome, ini membuat kotak centang 12 × 12 piksel dan sekitar 30 piksel jelas berubah antara status dicentang dan tidak dicentang.
Saya membuat kelonggaran bahwa peramban memperbesar 100%.
sumber
Jawaban:
Mathematica, 10 byte
Diasumsikan lingkungan notebook Mathematica .
Kedua negara bagian terlihat seperti ini:
sumber
HTML, 20 byte
Tidak tahu seberapa valid ini sebagai jawaban. HTML mengharuskan tag ditutup untuk memvalidasi secara hukum, tetapi browser modern akan secara otomatis menutupnya sehingga dapat dieksekusi.
sumber
>
. +1 dan IMHO yang valid.Bash ,
675550353231 byteKode berisi byte CR (baris baru pertama) dan byte CSI (braket sudut kanan kecil dengan pengkodean Windows-1252). Ini membutuhkan xterm (atau yang setara) dan penyandian ISO-8859-1 (atau serupa).
Kode mendefinisikan fungsi bernama
:
, yang secara bergantian menampilkan putih 1 atau 0 dalam kotak hitam. Ada persis 24 piksel berbeda dengan pengaturan default xterm. ( bukti )Untuk versi yang lebih lama yang mengubah warna seluruh terminal, periksa revisi 10 dari jawaban ini.
Terima kasih kepada @ ais523 untuk menyarankan xterm, yang menghemat 4 byte!
Bagaimana itu bekerja
:(...)
membuat fungsi bernama:
yang dijalankan...
.The membaca perintah melakukan sihir yang sebenarnya.
-p
menentukan prompt input, yang dicetak ke STDOUT.$[i^=1]
adalah ekspansi aritmatika yang XOR variabel i dengan 1 . saya mungkin awalnya tidak disetel; ketika ini terjadi, itu akan diperlakukan sebagai 0 .Carriage return mengembalikan kursor di awal baris.
›?9h
menangkap mouse di terminal yang didukung. Setiap klik akan mengirim enam karakter ke terminal, yaitu←[Mbxy
, di mana←
merepresentasikan byte ESC ( 0x1b ).←[
menunjukkan urutan escape,M
mouse,b
tombol ( 0x20 + jumlah tombol),x
yang x koordinat klik ( 0x20 + koordinat), dany
yang y koordinat.-sn6
merek membaca diam (masukan mouse tidak akan bergema ke stderr) dan berhenti setelah membaca persis 6 byte. Ini menyimpan input dalam variabel REPLY , tetapi kami tidak tertarik dengan output yang dihasilkannya.Akhirnya, setelah selesai membaca (setelah tepat satu klik mouse),
:
secara rekursif memanggil dirinya sendiri, memasuki loop tak terbatas.Penciptaan dan doa
Keluaran
sumber
1000h
ke9h
(perbedaannya adalah yang1000h
menangani penekanan dan pelepasan tetikus, dan9h
hanya menangani pelepasan tetikus). Ini mungkin atau mungkin tidak perlu perubahan di tempat lain dalam kode.gnome-terminal
tampaknya berfungsi, itulah yang saya gunakan untuk pengujian (edit: tapi saya tidak berpikir itu mendukung CSI 1-byte).xterm
harus juga berfungsi dan mungkin lebih mudah untuk menginstal jika Anda memiliki sistem KDE. (Saya baru saja menguji sendiri; ini bekerja dengan\x1b[
tetapi tidak dengan\x9b
karena alasan tertentu, mungkin terkait dengan pengaturan stty saya daripada ke terminal itu sendiri.):)
dari:(
pada akhirMemproses,
7866656361 byte2 byte disimpan berkat @TuukkaX dengan menggunakan
-a%2
sebagai gantinyaa%2*-1
2 byte disimpan berkat @TuukkaX dengan menggunakan
a=-a
Kotak centang berganti-ganti antara hitam dan putih.
Penjelasan
Sekarang ada banyak alternatif lain seperti menggunakan pernyataan-if untuk memproses ini, tetapi kemudian menjadi aneh dan terus-menerus mengubah latar belakang saat mouse sedang ditekan. Saya pertama kali mencoba
mouseButton
, tetapi kemudian saya akan membutuhkan lebih banyak kondisi dan lebih banyak kode yang hanya akan berakhir dengan lebih banyak verbose.Sekarang untuk
mousePressed()
dipanggil selamanya (jika tidak, program akan berhenti setelah program baru saja dimulai), kita memerlukan sebuahdraw()
fungsi.Kotak centang yang lebih kecil akan menjadi 90 byte (kotak centang di sudut kiri atas, sehingga kami dapat menghapus beberapa kondisi mouse):
sumber
fill(-1)
a
ke 1 bukannya 0. Ubaha++
kea=-a
, yang berarti-a%2
adila
. Ini akan beraliha
antara 1 dan -1. Saya tidak tahu apa yang dihasilkan warna 1.color(1)
menghasilkan#010101
yang sangat dekat dengan hitamHTML + JavaScript,
323025 karaktersumber
this
tersirat dan dapat dihapus. Juga,innerHTML
lebih pendek.<input>
elemenUnix Shell (+ x11-apps), 3 byte
Penolakan
Jawaban di bawah ini membosankan, batas dan "merasa curang" (setidaknya bagi saya).
Namun, sepertinya tidak melanggar aturan tantangan "seperti yang tertulis", atau "celah default", jadi saya mempostingnya.
(Jika Anda dapat menunjukkan aturan tertentu yang dilanggar, silakan komentari!)
Golf
Layar xgc sebenarnya diisi dengan berbagai kotak centang:
dan "tombol lengket" (yang memenuhi syarat sebagai kotak centang, di bawah aturan tantangan ini):
sumber
GitHub Flavoured Markdown - 6 byte
(Ada ruang tambahan)
Dalam inti:
sumber
AHK , 25 byte
Keluaran -
sumber
Gores, 2 blok
Letakkan skrip ini di sprite default (yang dilengkapi dengan 2 kostum)
sumber
Python REPL, 45 byte
sumber
tkinter
adalah pustaka standar untuk Python (tetapi bahkan jika tidak, saya hanya perlu mendeklarasikan Python REPL + tkinter). Ini berarti bahwa saya dapat menggunakan fitur-fiturnya hanya dengan mengimpornya. Hukuman yang Anda sarankan mirip dengan meminta pengguna untuk memasukkan dalam byte yang menghitung jumlah byte dalam sumber bahasa yang Anda tulis. Di sini kami mengizinkan setiap bahasa atau modul untuk bersaing selama itu ditulis dan diterbitkan secara publik sebelum tantangan telah diposting.GeoGebra , 10 byte
Dimasukkan ke dalam bilah masukan.
Berikut adalah gif dari eksekusi:
sumber
Tcl / Tk, 21 byte
Golf
sumber
HTML dengan JavaScript -
13612412011511311110979 byte-2 dengan terima kasih kepada @KritixiLithos
Mengurangi menjadi 79 setelah bermain golf fantastis dari @Jan. Meskipun versi baru sesuai dengan persyaratan, saya telah menyimpan versi lama untuk alasan kebanggaan profesional.
Meskipun sangat valid untuk menggunakan built-in, saya pikir lebih menyenangkan untuk membuat sendiri dari awal. Diuji dengan Chrome dan Firefox.
border:solid
apakah ada untuk kompatibilitas IE tapi saya tidak tahu apakah itu benar-benar diperlukan dalam versi IE yang lebih baru - Saya tidak memiliki IE tersedia untuk diuji.The
px
tinggi yang ada untuk kepentingan "Run potongan kode" sehingga tidak termasuk dalam hitungan byte "nyata". Ini berfungsi dengan baik di browser tanpa itu.Versi sebelumnya:
sumber
id=d
untuk menghapusd=this
?this
Anda akan menyimpan pengaturan id. Jika Anda menyimpanthis
di properti Anda akan menghemat beberapa byte. Itualign
tidak perlu. Karena tidak ada spasi di string atribut, Anda tidak perlu tanda kutip.<p style=height:20px;border:solid onClick=t=this;t.innerHTML=(t.e=!t.e)?'x':''>
79 bytesMinecraft 1.0.0, 1 byte
Tuas di Minecraft memenuhi semua kriteria untuk kotak centang. Jawaban ini hanya berlaku untuk versi gim yang lebih lama di mana tinju masih akan mengaktifkannya.
Mencetak menggunakan hitungan byte yang disarankan @Connor O'Brien.
sumber
n
di Conor, btw :)1 block
? Mengapa1 byte
? Saya tidak berpikir mc menyimpan setiap blok sebagai satu byte ...TI-Basic, 15 byte
Cukup mudah. Kotak centang mencakup sekitar 40% layar dan berganti-ganti antara hitam dan putih. Saat dicentang, layar akan terlihat seperti ini:
sumber
Versi apa pun dari baris perintah Windows, 3 byte
(cmd.exe, batch, PowerShell, start-> run, apa pun)
Membuka keyboard layar yang memiliki beberapa "kotak centang" seperti shift, ctrl, alt, tombol capslock Mirip dengan jawaban xgc, dan terinspirasi oleh screenshot jawaban SmileBASIC.
sumber
Oktaf,
3620 byteBerkat @LuisMendo, tersimpan 16 byte!
sumber
uicontrol('sty','c')
juga berfungsiKV Lang , 8 byte
mengasumsikan lingkungan Python benar-benar dasar untuk kv lang untuk menjalankan:
Ini pada dasarnya berfungsi karena
CheckBox
widget Kivy termasuk dalamkivy.Factory
setiap widget dari pustaka standar.String sederhana itu membuat turunan dari
CheckBox
dan karenarunTouchApp
mengharapkan widget untuk dijalankan dapat saya gunakanBuilder.load_string
.Latar belakang
load_string
pegangan pada dasarnya setiap string kv dan jika ada satu instance widget yang ditentukan (misalnyaCheckBox
), maka ia akan diangkat ke posisi widget root , misalnya:sumber
SmileBASIC, 49 byte
dan
merupakan kotak kosong dan kotak centang dalam font SB.Alihkan kotak centang dengan menyentuh layar (hal yang paling dekat dengan mengklik dengan mouse)
Jawaban curang:
0 byte:
(keyboard di layar memiliki tombol yang berfungsi seperti kotak centang, seperti caps lock dan tombol insert)
14 byte:
Membuka editor grafis bawaan, yang memiliki beberapa tombol mirip kotak centang
sumber
T<O
benar ketika Anda berhenti menyentuh layar, dan!=
digunakan sebagai XOR logis.X=X XOR (O && !T)
C #,
124120 bytedisimpan 4 byte berkat grabthefish.
catatan: karena pengeditan, gambar tidak persis mewakili apa yang dibuat oleh kode, "checkBox1" tidak ditampilkan dengan kode saat ini.
ungolfed:
using System.Windows.Forms; class P{ static void Main(){ var a=new Form(); a.Controls.Add(new CheckBox());
Application.Run(a);a.ShowDialog(); } }sumber
var a = new Form();
.a.ShowDialog();
untuk menyimpan beberapa byteRuby with Shoes, 16 karakter
Output sampel:
sumber
HTML dengan JavaScript,
463328 bytev2
v1
Ini adalah varian dari jawaban @ ElPedro: Buat Kotak Centang . Turun ke 28 byte dengan bantuan @Albert Renshaw Ini bisa dikurangi lebih jauh, tetapi itu akan membuatnya identik dengan Buat Kotak Centang
Seluruh area aplikasi dapat diklik. Ini akan ditampilkan
0
dioff
negara bagian dan1
dion
negara bagian. Cobalah di https://jsbin.com/nuhetiyocu/1/editsumber
<body onclick=t=this;t.innerHTML^=t?1:0
Aturan 16 pixel antara perubahan status siap untuk diperdebatkan.<body onclick=this.innerHTML^=this?1:0
<body onclick=innerHTML^=1>0
body
ke elemen yang berbeda. Tapi saya hanya melihat bahwa akan membuatnya identik dengan jawaban lain codegolf.stackexchange.com/questions/109155/create-a-checkbox/... jadi aku hanya meninggalkannya sepertiPowershell v5 +, 94 Bytes
Ini cukup mengerikan, tapi saya tidak bisa mendapatkan pernyataan yang lebih pendek dengan salah satu
Add-Type
atauusing namespace
- dan variabel diperlukan, karena saya perlu menggunakan kembali objek untuk menunjukkan formulir, danControls.Add()
tidak mengembalikan apa pun yang dapat digunakan.ShowDialog
diperlukan pada sistem saya untuk memiliki kotak menjadi interaktif setelah menjalankan perintah ini, jika tidak, formulir akan dibekukan.juga
System.Windows.Forms.Form
hanya dapat dipersingkatWindows.Forms.Form
sebelum (setidaknya saya sendiri) sistem berhenti secara otomatis menyelesaikannya dalam sesi baru.sumber
Excel VBA,
38323129 BytesFungsi Window langsung yang menyisipkan kotak centang tinggi = 9 dan lebar = 9, di sel
A1
pada lembar pertama proyek Excel VBA aktif-6 Berkat pajonk untuk mengganti
[A1],[A1],9,9
dengan0,0,9,9
-1 untuk mengganti
Sheets(1)
dengan[Sheet1]
-2 untuk menyadari hal di atas adalah bodoh dan menggunakan
Sheet1
sebaliknyasumber
1,1,9,9
argumen juga berfungsi.Sheet(1).
, Anda dapat menjalankan ini cukup cepat di Excel tetapiCheckBoxes
inherint ke lembar aktifCheckBoxes.Add
metode melempar kesalahan yang menyatakan "Obyek Diperlukan"VBA (Word),
7457 byte-17 Terima kasih kepada Taylor Scott
Nama file dokumen harus a.
sumber
wdFieldFormCheckBox
dengan71
(nilai integer dariwdFieldFormCheckBox
konstanta) untuk penghematan 17 bytePug, 20 byte
sumber
Clojure,
201195145127 byte-6 byte dengan menghilangkan kebutuhan
m/fun-mode
.-50 byte dengan menghapus opsi
:setup
dan:size
, karena mereka defaultable dan tidak perlu di non-fun-mode
. Juga menghapus impor yang tidak perlu untuk middleware.-18 byte terima kasih hanya untuk @ ASCII. Berubah menjadi "lebih kecil" warna, dan menghapus ruang yang tidak perlu sebelum operator dereference (
@
).Membuat sketsa Quil (pustaka Clojure yang menyediakan lapisan di atas Pemrosesan), oleh karena itu, ini memerlukan pustaka Quil untuk dijalankan.
sumber
[0 0 99]
begitu? (semacam biru tua)Operasi bahasa scripting Flashpoint , 273 byte
Untuk menampilkan kotak centang:
Tetapi pertama-tama harus didefinisikan:
Simpan yang berikut ke file yang bernama
description.ext
di folder misi:Kotak centang dalam aksi:
sumber
AutoIt , 78 Bytes
Membuka jendela yang dimaksimalkan yang dapat ditutup seperti jendela jendela lainnya. Maksimalisasi dan ... kedudukan tertinggi adalah efek samping dari golf.
sumber
wine AutoIt3.exe script.au3
, tempatscript.au3
file berisi kode ini.Python, 62 byte
sumber