Kedipkan CAPS LOCK


107

Sebagian besar keyboard komputer dilengkapi lampu LED terintegrasi kecil, yang menunjukkan mode input saat ini, sebagaimana dikontrol dengan tombol CAPS LOCK.

masukkan deskripsi gambar di sini

Tugas Anda adalah untuk membuatnya berkedip:

  • Hidupkan;
  • Tunggu 0,5 (+/- 0,1) detik;
  • Matikan lagi.

Cuplikan video LED berkedip sangat dihargai!

Aturan

  • Anda dapat mengedipkan LED yang berbeda (mis. Gulir Kunci, Num Lock, status Wi-Fi dll), jika diinginkan, tetapi harus secara fisik terletak di keyboard Anda;

  • Jika bahasa Anda tidak memiliki sleepperintah subsecond , program Anda dapat menggunakan penundaan 1 detik sebagai gantinya, dengan penalti +2 byte (artinya 0.);

  • Program Anda harus berkedip setidaknya sekali, apa yang terjadi sesudahnya adalah terserah Anda, yaitu program itu dapat terus berkedip (dalam hal ini Anda harus menunggu penundaan yang sama, sebelum menyalakannya lagi), atau berhenti dll;

  • Jika LED yang dipilih adalah AKTIF secara default, pada sistem Anda, Anda dapat mengasumsikan bahwa LED telah dimatikan secara eksplisit (misalnya secara manual), sebelum program dijalankan;

  • Ini adalah , jawaban terpendek dalam byte menang.

Papan peringkat

var QUESTION_ID=110974,OVERRIDE_USER=61904;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"https://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr></thead> <tbody id="answers"> </tbody> </table> </div><div id="language-list"> <h2>Winners by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr></thead> <tbody id="languages"> </tbody> </table> </div><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table>


83
Jawaban curang yang tidak bekerja: pada sistem Linux, sengaja merusak kernel. Setara dengan BSOD Linux menyalakan lampu Caps Lock, kalau-kalau crash juga merobohkan perangkat keras video dan Anda tidak dapat melihat laporan BSOD di layar. Sayangnya, sejauh yang saya tahu itu berkedip sedikit terlalu cepat untuk menjadi jawaban yang memenuhi syarat. Ini akan menghasilkan solusi 14-byte (agak berbahaya) jika diizinkan.

57
Sekarang kedipkan dalam kode Morse: "Tolong, aku terjebak di pabrik papan ketik!"
mbomb007

12
@ ais523 laptop saya akan melakukannya jika saya kocok (0 byte). Terlalu cepat ...
Tim

18
Tombol capslock pada C64 adalah sakelar mekanis. Berkedip yang mungkin agak rumit ...
Tandai

8
Sekarang saya bertanya-tanya apakah LED baterai rendah pada keyboard nirkabel saya berkedip pada tingkat yang benar. Jika demikian: nol byte.
Roger Lipscombe

Jawaban:


123

Befunge (BEF32), 390 334 305 byte

Ini benar-benar konyol, tetapi selama situs ini menerima anggapan bahwa penerjemah menentukan bahasa , saya mungkin juga menyalahgunakan aturan. Kode ini hanya berfungsi di Win32 Befunge-93 Implementasi Kevin Vigor, versi 1.01 (saya pikir satu-satunya versi tersedia). Anda dapat mengunduh biner di sini .

p55p99+5p65*5p")"5p"M"3*"I~q"+\3*3445"|"2*"lm"2v
v"y"*3\*2"e/n"4\5"nnIn"*833*2"mn"4\7"nnIn"*833*<
>2*"yO"4"DJG"3*\2*55*3"T"4"DLG"3*\2*55*3"/~M"+\3*4446"~A"+4v
>+00p9p:v:"l'"*2"^D"4"l3"*2"^D"4"l"*54*2"^D"4"l"*2+94*2"^D"<
^1:g00-4_5"u1"*-:1+:1+"@"\0p"%"5*\0p"P"\0p@
Sleep kernel32.dll keybd_event user32.dll

Sekarang biasanya Anda tidak akan mengharapkan tantangan semacam ini dimungkinkan di Befunge, tetapi BEF32 adalah port Win32 dari versi yang sangat lama dari implementasi referensi, dan saat itu tidak ada batasan memeriksa pada perintah p(put). Ini secara efektif memungkinkan kita untuk menulis ke lokasi mana pun dalam memori, yang pada akhirnya memungkinkan kita memaksa penerjemah untuk mengeksekusi kode mesin yang sewenang-wenang.

Sekarang kita tidak dapat benar-benar mengubah kode yang ada, karena bagian .text dari executable tidak akan memiliki izin menulis. Namun, kita bisa mengelabui sistem untuk mengeksekusi alamat di bagian. Data, dengan menuliskan alamat itu ke dalam atexittabel runtime library (setidaknya saya curiga itu memang seperti itu). Hasil akhirnya adalah bahwa kode kami dieksekusi secara otomatis ketika juru bahasa keluar.

Ini bergantung pada fakta bahwa executable dimuat pada alamat tetap, jadi kami tahu persis di mana semuanya berada dalam memori - diasumsikan tidak akan berfungsi jika Anda mengesampingkan pengaturan ASLR default . Itu juga bergantung pada bagian. Data yang dapat dieksekusi, meskipun tidak memiliki set atribut yang dapat dieksekusi, jadi sekali lagi itu kemungkinan besar tidak akan berfungsi jika Anda mengesampingkan pengaturan DEP default .

Kode itu sendiri pada dasarnya adalah salinan Mego 's keybd_eventteknik diterjemahkan ke dalam kode mesin:

6823B84000         push "keybd_event"
682FB84000         push "user32.dll"
6810B84000         push "Sleep"
6816B84000         push "kernel32.dll"
BB02000000         mov  ebx,2
               initloop:
89C7               mov  edi,eax
FF1594D14000       call LoadLibraryA
50                 push eax
FF1590D14000       call GetProcAddressA
4B                 dec  ebx
75EE               jnz  initloop
89C6               mov  esi,eax
               flashloop:
6A00               push 0
6A01               push 1
6A45               push 69
6A14               push 20
FFD6               call esi
6A00               push 0
6A03               push 3
6A45               push 69
6A14               push 20
FFD6               call esi
68F4010000         push 500
FFD7               call edi
EBE3               jmp  flashloop

Versi kode ini terus berkedip selamanya (atau setidaknya sampai Anda mematikan prosesnya), karena itu ternyata lebih mudah untuk bermain golf daripada hanya satu flash.

Dan karena semua orang memposting animasi, ini merupakan perkiraan seperti apa yang terlihat di keyboard saya.

Animasi lampu capslock berkedip


30
Orang-orang biasanya menyalahgunakan aturan untuk membuat hidup mereka lebih mudah, tetapi itu bukan coders Befunge :)
Aaron

21
Tidak pernah mengharapkan jawaban esolang untuk tantangan ini +1
zeppelin

9
Ini sekarang jawaban favorit saya di situs ini
Cruncher

2
Implementasi luar biasa!
Daniel

3
@ JamesHolderness Jadi? Ini adalah jawaban yang bagus, bahkan jika itu panjang.
NoOneIsHere

72

AutoHotkey, 29 26 byte

Terima kasih kepada @Dane karena telah menghemat 3 byte

Loop{
Send,{VK14}
Sleep,500
}

Saya awalnya memilih NumLockkarena satu karakter lebih pendek dari CapsLock. GIF di bawah ini mencerminkan kondisi itu. Efeknya sama dengan kode yang diubah di atas. Saya bisa pergi dengan di VK90atas untuk membuat GIF tetap akurat tetapi menyelaraskan dengan tantangan asli terasa lebih baik.

BlinkingNumLock


Untuk menghormati komentar mbomb007 , berikut adalah pesan kode morse dalam 239 byte :

s:=000090901009011091100110090111109111901090190110901109091000091001101909101191000911190190109100001090191010919111901091011
Loop,123{
StringMid,c,s,A_Index,1
IfEqual,c,9
{
Sleep,2000
Continue
}
Send,{NumLock}
Sleep,%c%500
Send,{NumLock}
Sleep,500
}

Inilah 30 detik pertama dari pesan itu:

MorseCodeBlinking


3
Bagaimana kalau send,{vk14}bukannya mencukur 3 byte? Bonus: Anda akan mengedipkan CapsLock.
Dane

35

GFA-Basic 3.51 (Atari ST),  61 56 43  35 byte

Kode ini akan membuat LED floppy drive berkedip selamanya pada laju yang diperlukan ( PAUSE 25= jeda selama 25/50 detik).

Ini mungkin lebih pendek dalam perakitan, tetapi saya tidak memiliki alat yang tepat di ujung jari saya. Ini adalah ukuran daftar GFA-Basic yang pernah disimpan dalam format .LST dan diedit secara manual untuk menghapus spasi kosong, ganti nama instruksi menjadi string yang lebih pendek dan ganti masing CR+LF- masing dengan yang sederhana CR. Perhatikan bahwa final CRdiperlukan.

DO
i=i XOR2
SP &HFF8802,i
PA 25
LO

Secara otomatis akan berkembang ke:

DO
  i=i XOR 2
  SPOKE &HFF8802,i
  PAUSE 25
LOOP

SPOKEadalah supercharged POKEyang pertama kali menempatkan 68000 dalam mode pengawas , sehingga diizinkan untuk mengakses area memori terbatas (di sini: alamat tulis register dari soundchip YM2149, yang juga bertanggung jawab untuk beberapa I / O lainnya).

Dan ya: LED secara fisik terletak di keyboard ... saya kira.

ST Floppy LED

Saya tidak memiliki akses ke ST nyata sekarang, jadi ini hanya mockup.


7
Floppy drive! Wow!
David Conrad

12
Lingkaran merah yang digambar tangan hilang ...
Hagen von Eitzen

@HagenvonEitzen Semoga lingkaran merah tidak diperlukan lagi. :-)
Arnauld

23

ikan + ckb , 56 54 byte

while cd;echo rgb (random)|tee /d*/*/*/c*;sleep .5;end

Berkedip seluruh keyboard saya dalam warna acak, meskipun karena jumlahnya tidak 6 digit hex panjang itu agak terbatas.

Dan ya, gumpalan shell itu berpotensi berbahaya. Bekerja Pada Mesin Saya ™

Skrip bonus, 8 bulan kemudian: Ini akan melewati semua warna. Tidak golf.

#!/usr/bin/fish
while true
        echo rgb (printf '%06x' (random 0 16777215)) | tee /dev/input/ckb*/cmd > /dev/null
        sleep 0.5
end

13
Keyboard apa itu? lol
Mc Kernel

1
@McKernel bertemu penasaran seperti apa keyboard itu juga
CraigR8806

3
K70 RGB dengan keycaps khusus - unascribed.com/f/67209fe8_keyboard_design.svg
Una

6
Poin bonus untuk melampaui dan melampaui dengan membuat seluruh keyboard berkedip.
Tiang

tee /d*/*/*/c*? Poin bonus karena bertanggung jawab untuk memblokir beberapa komputer yang buruk di masa depan ketika hal ini tidak dapat dihindari meluas ke sesuatu yang penting. (EFI variabel siapa? Mungkin akan ada sesuatu seperti /dev/efi/vars/cpu_type)
immibis

21

Bash + amixer, 45 Bytes

a() { amixer set Master toggle
}
a;sleep .5;a

Mengedipkan lampu bisu pada keyboard saya.


17
a()(amixer set Master toggle;sleep .5;a)atau amixer set Master toggle;sleep .5;$0sebagai program lengkap sedikit lebih pendek.
Dennis

19

C (Windows), 79 byte

#include<windows.h>
k(n){keybd_event(20,69,n,0);}f(){k(1);k(3);Sleep(500);f();}

Penjelasan

keybd_eventadalah fungsi Windows API (yang tidak digunakan lagi) untuk mengirim acara keyboard (keyup atau keydown). 20adalah kode untuk tombol Caps Lock, 69adalah kode pindaian perangkat keras (saya tidak tahu apa artinya), dan 1berarti keydown dan 3berarti keyup. Sebuah penekanan tombol disimulasikan dengan mengirimkan acara keydown segera diikuti oleh acara keyup. Satu penekanan tombol dikirim untuk mengaktifkan Caps Lock, kemudian program tidur selama 500 milidetik, dan kemudian penekanan tombol lain dikirim untuk mematikan Caps Lock.

Terima kasih kepada Steadybox untuk banyak byte yang disimpan


1
Mengingat ini adalah C, tidak bisakah Anda mendeklarasikan int keybd_event();?
Neil

@ Neil Itu akan void keybd_event();, dan saya juga perlu void Sleep();dari windows.h. Kedua deklarasi tersebut bersama-sama lebih panjang dari yang disertakan.
Mego

1
79 byte:#include<windows.h> k(n){keybd_event(20,69,n,0);}f(){k(1);k(3);Sleep(500);f();}
Steadybox

2
Tentu, tetapi untuk tipe primitif, C tidak peduli dengan ketidakcocokan jika Anda tidak pernah menggunakan hasilnya.
Neil

6
Kode pindai adalah apa yang dikirimkan keyboard Anda melalui kabel pada level terendah. Nilai-nilai mereka didasarkan pada posisi dalam tata letak standar karena melakukan hal itu membuat mereka membuat keyboard sebodoh mungkin dan tanpa harus memasang setiap tombol (keterbatasan desain ini adalah bagian dari mengapa keyboard yang lebih murah hanya dapat mengembalikan beberapa penekanan tombol secara bersamaan - the antarmuka USB keyboard dasar kemudian memanggang batasan ke sebagian besar keyboard sekitar 20 tahun yang lalu dengan mendesain ke min std) dengan mengorbankan langkah terjemahan ke komputer host. en.wikipedia.org/wiki/Scancode
Dan Neely

16

MATLAB, 146 136 70

Terima kasih kepada @Poke untuk menghapus 66 byte!

r=java.awt.Robot;while 1
r.keyPress(20)
r.keyRelease(20)
pause(.5);end

Ini menggunakan kemampuan Matlab untuk memanggil kelas Java. Lampu Num Lock berkedip dalam satu lingkaran dengan menekan dan melepaskan secara terprogram Num Lock.

Video atau itu tidak terjadi .


9
Bisakah Anda menggunakan 144bukan java.awt.event.KeyEvent.VK_NUM_LOCK? CAPS_LOCK akan menjadi20
Poke

2
@ Poke Ya! Ada 66 byte !!
Luis Mendo

7
Lucu bahwa itu lebih pendek daripada jawaban java
Matsemann

15

kode mesin x86 untuk PC (mis. file MS-DOS COM), 27 byte

Kode mesin ini (ditampilkan di sini dengan render Unicode dari CP437 BIOS PC yang biasa) akan berkedip indikator CAPS LOCK selamanya pada PC:

j@▼î▐j`Z░φεê╪εÇ≤♦╞♦◙Ç<☺t∩δ∙

Kode telah dibuat sehingga tidak mengandung byte NULL, dan dengan demikian dapat diketik dengan keyboard (menggunakan trik Alt + XXX untuk karakter yang diperluas) untuk membuat file COM (misalnya, menggunakan COPY CON blink.comperintah di bawah MS-DOS, dalam hal ini file keluaran harus mengandung byte ke- 28 palsu , karakter ^Z(EOF) yang diperlukan untuk menghentikan operasi penyalinan).

Efeknya dicapai dengan mengirim perintah secara langsung ke pengontrol keyboard PC (port 60h) untuk mengatur status LED (sebagai efek samping, ini mungkin mengatur Num Lock dan Scroll Lock LEDs ke keadaan acak yang tidak berkedip). Pengaturan waktu, untuk meminimalkan jumlah instruksi, dicapai dengan menggunakan penghitung waktu mundur yang dikelola oleh BIOS di alamat 0040:0040(mengurangi setiap 54,925 ms, dengan 9 siklus siklus berkedip adalah 494,3 ms, yang berada dalam margin yang diizinkan) - penghitung ini biasanya digunakan oleh BIOS untuk menghentikan motor floppy disk; karena floppy drive tidak digunakan oleh program dan kode diasumsikan berjalan dalam lingkungan tugas tunggal (misalnya DOS), bermain dengan timer motor floppy tidak menjadi masalah.

Kode berjalan dengan baik di bawah MS-DOS (dicoba dengan VirtualBox, itu juga harus berjalan dengan baik pada perangkat keras nyata, meskipun saya belum punya waktu untuk membuat tongkat USB MS-DOS bootable untuk menguji). Karena tidak bergantung pada fungsi OS, ia bahkan dapat berjalan tanpa sistem operasi (misalnya, dengan meletakkannya di sektor boot disk). Ini membutuhkan setidaknya prosesor 80186 untuk dijalankan, karena instruksi "dorongan langsung" yang digunakan untuk mempersingkat kode beberapa byte.

Kode sumber perakitan:

  PUSH 0x40               ; pushes 0x0040 (BIOS data segment) on the stack
  POP DS                  ; pops it into DS segment selector
  MOV SI, DS              ; copies DS to SI (timer counter is nicely placed at 40:40)
  PUSH 0x60               ; pushes 0x0060 (kbd controller port) on the stack
  POP DX                  ; pops it to DX
loop:
  MOV AL, 0xED            ; 8042 keyboard controller 'set mode indicators' command
  OUT DX, AL              ; outputs the command to the keyboard contr oller
  MOV AL, BL              ; copy BL register to AL
  OUT DX, AL              ; outputs LED state to keyboard controller
  XOR BL, 4               ; toggles bit 2 (CAPS LOCK) for next iteration
  MOV BYTE PTR[SI], 0x0A  ; sets floppy motor countdown timer to 10
wait:
  CMP BYTE PTR[SI], 0x01  ; checks if timer reached 1
  JE loop                 ; if yes, time for next iteration
  JMP wait                ; if not, checks again

Pembuangan hexadecimal dari kode yang dirakit:

6A 40 1F 8C DE 6A 60 5A B0 ED EE 88 D8 EE 80 F3 04 C6 04 0A 80 3C 01 74 EF EB F9

Berikut adalah hasil yang berjalan di bawah MS-DOS di VirtualBox (tidak bekerja dengan DosBox, mungkin karena pengontrol keyboard tidak sepenuhnya ditiru):

Berkedip CAPS LOCK

(maaf untuk video yang goyah).


Sebuah contoh untuk benar-benar menggunakan copy con program.exe: youtube.com/watch?v=iefuJ_jZAiQ
Jerry Jeremiah

13

SmileBASIC, 36 23 byte

XON MIC
WAIT 30XOFF MIC

Berkedip lampu status mikrofon. (video segera hadir)


12

Python2 - 108 byte

Apakah tombol capslock. Menariknya, ini sebenarnya hanya menyalakan LED itu sendiri tanpa mempengaruhi keyboard atau menekan tombol. Anda dapat mengubah 4di akhir 2untuk melakukan numlock. 6melakukan keduanya.

import fcntl,os,time;exec"fcntl.ioctl(os.open('/dev/console',os.O_NOCTTY),19250,%d);time.sleep(.5);"*2%(4,0)

Sepertinya saya mendapat kesalahan:Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<string>", line 1, in <module> IOError: [Errno 25] Inappropriate ioctl for device
haykam

@haykam, apakah Anda di Windows?
Maltysen

1
Tidak, saya aktif macOS Sierra Version 10.12.1 (16B2555).
haykam

8

shell + numlockx, 40 35 byte

[Disimpan 5 byte berkat Ryan.]

Berkedip terus menerus lampu NumLock pada sistem yang tidakix.

numlockx toggle;sleep .5;exec sh $0

Kedip tunggal, 33 byte

numlockx on;sleep .5;numlockx off

1
Anda dapat menggunakan exec sh $0daripada whilemenyimpan 5 byte, atau sh $0jika membuat proses selamanya dianggap baik-baik saja.
Ry-

2
watch -n0.5 numlockx toggle selama 27 byte.
Tejas Kale

Untuk rasa berbeda di atas, pada cangkang interaktif, Anda dapat mengetik: numlockx toggle;sleep .5;!#(27 byte) untuk satu kedipan. !#adalah peristiwa ekspansi sejarah digantikan oleh semua yang diketik sejauh ini di baris perintah.
init_js

dalam perintah blink tunggal, ondapat dihilangkan. itu adalah default.
init_js

Dengan tugas, tidak ada trik: f=numlockx;$f;sleep .5;$f off(29). Dan (lebih rendah) versi perulangan menggunakan rekursi: g(){ f=numlockx;$f toggle;sleep .5;g;};g(40).
init_js

8

PowerShell , 71 byte

for(){(New-Object -c WScript.Shell).SendKeys('{NUMLOCK}');sleep -m 500}

Catatan

  • Berkedip selamanya
  • Menggunakan NUM LOCKuntuk menyimpan satu byte.

"Jika bahasa Anda tidak ada perintah tidur subsecond ..." - tidak terdengar seperti itu hilang dari PowerShell.
Dane

@Dane Saya sudah meminta poster untuk klarifikasi. Jika memilih untuk menerima penalti tidak diizinkan, saya akan mengembalikannya.
briantist

@Dane memutar kembali.
briantist

Kenapa tidur .5 tidak bekerja di sini? Saya mencobanya dan sepertinya berjalan dengan kecepatan 5 ms tapi saya pikir secara default (-s) jadi 0,5 s?
Jake Harry

1
@ JakeHarry: -SecondsParameternya adalah int, jadi 0.5akan dikonversi menjadi int, yang menghasilkan 0(putaran ke even adalah mode pembulatan default). Jadi Anda tidak tidur sama sekali (menghasilkan penundaan sekitar 1000 kutu di sini, jadi 10 μs). Konversi yang cukup mendasar dan aturan pengikatan parameter di PowerShell.
Joey

7

VBS, 75 byte

do
wscript.sleep 500
Createobject("wscript.shell").sendkeys"{numlock}"
loop

Berkedip berulang kali tombol Num Lock, seperti numlock1 byte lebih pendek dari capslock.


7

C #, 215 202 198 195 185 byte

Tanpa sadar saya telah melakukan kode "sama" dengan jawaban ini oleh @Mego , silakan cek!

[System.Runtime.InteropServices.DllImport("user32")]static extern void keybd_event(int v,int s,int f,int e);n=>{for(n=0;;System.Threading.Thread.Sleep(125))keybd_event(20,69,n++&2,0);};

Disimpan 13 byte berkat @Metoniem
Disimpan 10 byte berkat @VisualMelon

Berikut ini adalah versi lengkap yang diformat dan menunjukkannya berfungsi:

class P
{
    [System.Runtime.InteropServices.DllImport("user32")]
    static extern void keybd_event(int v, int s, int f, int e);

    static void Main()
    {
        System.Action<int> a = n =>
        {
            for (n = 0; ; System.Threading.Thread.Sleep(125))
                keybd_event(20, 69, n++ & 2, 0);
        };

        a(0);
    }
}

Untuk perubahan bonus menyenangkan n++ & 2untuk n+=2 & 2dan menonton num lock dan caps lock kunci alternatif di berkedip dan mematikan. Saya tidak tahu mengapa itu terjadi karena seharusnya tidak tetapi terlihat "keren".


Tunggu, Anda hanya using System;sejauh yang saya tahu Anda tidak benar-benar menggunakan sesuatu langsung dari namespace Sistem? Saya pikir Anda bisa menghapusnya.
Metoniem

@Metoniem Tempat yang bagus tanda tangan untuk keybd_eventmetode ini sebenarnya void keybd_event(byte bVk, byte bScan, uint dwFlags, UIntPtr dwExtraInfo);. Saya merilis saya bisa menghapus UIntPtrsetelah posting dan memilikinya sebagai intdan hanya lupa untuk menghapus menggunakan.
TheLethalCoder

1
Ahh, aku melihat haha, hal-hal seperti itu terjadi! Nice answer man :)
Metoniem

Saya pikir Anda benar-benar harus memberi nama dan mengetikkan dua 'fungsi': Anda merujuk kpada satu, tetapi jelas tidak terdefinisi. Tidak dicentang, tapi saya pikir Anda akan lebih baik memiliki satu panggilan ke keybd_event dalam loop yang belum di-unbrace, saya harus berpikir: for(int i=0;;...Sleep(250))keybd_event(i++&2)atau sesuatu.
VisualMelon

@VisualMelon Terima kasih, saya telah memperbarui kode, harus mengubah waktu tidur untuk mendapatkan pengaturan waktu yang tepat :)
TheLethalCoder

6

Java 7, 121 118 113 byte

void a()throws Exception{java.awt.Robot r=new java.awt.Robot();r.keyPress(20);r.delay(500);r.keyRelease(20);a();}

Satu pers dan rilis hanya memicu negara; itu tidak berkedip. Dengan demikian kita bisa memutarnya dan sepertinya rekursi adalah cara termurah untuk melakukannya.


1
Sayang sekali saya tidak punya juru bahasa QBasic di sini! Karena itu dilakukan menggunakan instruksi Poke !
sergiol

Apakah ini mendapatkan tail-call dioptimalkan atau pada akhirnya ini akan melebihi batas tumpukan panggilan?
Cyoce

@Cyoce Saya tidak berpikir Java memiliki optimasi panggilan ekor sampai Java 9 jadi ini akhirnya mencapai batas kedalaman rekursi tapi itu ok karena saya hanya perlu mengedipkan cahaya sekali:]
Poke

1
Maksud saya, Anda dapat memasukkan seluruh kode ke dalam lambda, yang kehilangan fungsi deklarasi fungsi. Jenis suka:, ()->for(;;){java.awt.Robot r=new java.awt.Robot();r.keyPress(20);r.delay(500);r.keyRelease(20);}yang merupakan penghematan 18 byte karena overhead karakter lambda 4-karakter.
Tamoghna Chowdhury

1
Satu lagi alasan saya tidak akan kembali! ;) Dengan sangat serius, ubah saja jawaban ke Java 8 dan masuk ke skor dua digit. Instal jika Anda belum memilikinya untuk pengujian.
Tamoghna Chowdhury

5

JavaScript, 82 byte

Kredit pergi ke @FinW sebenarnya, saya baru saja mengubah fungsi lama ke fungsi panah ES6 baru untuk menghemat beberapa byte. Dan karena saya tidak punya cukup poin untuk berkomentar saya menulis balasan baru.

Edit - tanda kurung yang dihapus untuk menyimpan 2 byte lainnya.

o=new ActiveXObject("WScript.Shell");setInterval(()=>o.SendKeys("{NUMLOCK}"),500);

Kode-nya terlihat seperti ini

o=new ActiveXObject("WScript.Shell");setInterval(function(){o.SendKeys("{NUMLOCK}")},500);

1
Untuk fungsi panah, Anda tidak perlu tanda kurung di depannya.
fəˈnɛtɪk

Benar-benar lupa tentang ini, terima kasih.
ruler23

Saya maksudkan tanda kurung yang tersisa dari ketika Anda menghapus fungsi ()
fəˈnɛtɪk

Oh, tapi kamu tidak bisa melakukan itu, itu tidak akan berhasil. Tetapi Anda dapat menghapus tanda kurung karena tidak diperlukan dalam pernyataan satu baris (karena alasan tertentu komentar Anda mengingatkan saya pada mereka meskipun Anda bermaksud sesuatu yang berbeda)
ruler23

Simpan byte dengan baik mengganti ()dengan yang lain, karakter tunggal, seperti _atau dengan membuat oparameter dengan default, seperti: (o=new ActiveXObject("WScript.Shell"))=>.
Shaggy

4

Scala, 84 83 78 byte

Sunting: Disimpan 1 byte berkat @TheLethalCoder,

Dia menyarankan menggunakan 1>0di tempat true.

Sunting 2: Disimpan 5 byte berkat @ Corvus_192,

Dia menyarankan menggunakan notasi infiks dan menjatuhkan tanda kurung setelah konstruktor

while(1>0){val r=new java.awt.Robot;r keyPress 20;r keyRelease 20;r delay 500}

Tidak Terkumpul:

while(1>0) {
    val r=new java.awt.Robot()
    r.keyPress(20)
    r.keyRelease(20)
    r.delay(500)
}

Port Scala standar untuk jawaban Java @ Poke . Ketik langsung ke prompt juru bahasa Scala.

Sebuah video yang berkedip LED Caps Lock dan OSD saya untuk boot!

Berkedip LED Caps Lock dan OSD


Dapat Anda lakukan for(;;)atau while(1>0)atau while(1)di Scala?
TheLethalCoder

Yang kedua adalah mungkin. Penghematan 1 byte yang tidak pernah terpikir oleh saya sebelumnya. Terima kasih!
Tamoghna Chowdhury

Anda dapat menggunakan notasi infiks: r keyPress 20byte lebih pendek dari r.keyPress(20). Hal yang sama berlaku untuk panggilan metode lain, menghemat total 3 byte.
corvus_192

Juga, lepaskan tanda kurung dari panggilan konstruktor untuk menyimpan 2 byte lainnya.
corvus_192

4

Terminal Linux, 8 + 11 = 19 byte

demo

File f=1B 5B 33 71 1B 5B 30 71

native@shell:~$ pv f -q -L8

WAT?

Menurut ECMA-48 , 1Bmemulai urutan pelepasan kontrol terminal.

Tutup = 1B 5B 33 71, lalu mati =1B 5B 30 71

pv tampilan kemajuan

f mengajukan

-q diam

-L8 8 byte / s = keterlambatan 0,5 detik

Pemakaian

Mempersiapkan

#Create file
echo "1B 5B 33 71 1B 5B 30 71"|xxd -r -p > f 

#Install progress view utility
sudo apt install pv

Ctrl+ Alt+ F6beralih ke konsol asli

Lari pv f -q -L8

Ctrl+ Alt+ F7beralih kembali


3

Bash + Xdotool, 36 byte

for((;;)){ xdotool key 66;sleep .5;}

Cukup jalankan di bash shell. Itu harus dalam lingkungan grafis. Loop tak terbatas dari sini . Mengubah Num_Lock menjadi 66 untuk menghemat 6 byte, dan terima kasih kepada @Michael Kjörling untuk 2 byte.


Anda dapat menyimpan setidaknya dua byte dengan menghapus spasi yang tidak perlu. Anda tidak memerlukan spasi putih sebelum braket keriting penutup, dan Anda tidak perlu spasi putih di sekitar titik koma yang memisahkan perintah. Anda memang membutuhkan spasi setelah braket keriting pembuka.
CVn

Juga, mengenai revisi awal Anda: Ingatlah bahwa Anda dapat menggunakan :sebagai alias untuk truedi sebagian besar sistem. while :;do sth;donemelakukan hal yang sama seperti while true;do sth;donetetapi tiga byte lebih pendek. for((;;)){ sth;}masih lebih pendek.
CVn

@Cyoce Where? Itu tidak berhasil untuk saya.
Feldspar15523

@Cyoce Saya pikir itu hanya berfungsi untuk mendeklarasikan fungsi.
Feldspar15523

@ Feldspar15523 oops nevermind then
Cyoce

3

xdotool , 20 byte

key -delay=500 66 66

Menekan tombol 66 alias Caps Lock dua kali, dengan jeda 500 ms di antara penekanan tombol.

Perhatikan bahwa xdotool adalah bahasa scripting; itu dapat dijalankan dari file dan bahkan mendukung shebang. Karena execperintahnya memungkinkan menjalankan program eksternal, ia mampu melakukan pengujian penjumlahan dan primality, sehingga memenuhi definisi bahasa pemrograman kami.

Uji coba

$ cat blink.xdo; echo
key -delay=500 66 66
$ xdotool blink.xdo

masukkan deskripsi gambar di sini


3

Python menggunakan pyautogui: 126 143 115 103 byte

Terima kasih kepada @ nedla2004 untuk menghemat 12 byte

from pyautogui import*
import time
while 1:keyDown('capslock');time.sleep(.5);keyUp('capslock')pslock')

1
Anda bisa mengubah loop while menjadi while 1:keyDown('capslock');time.sleep(.5);keyUp('capslock'), dan Anda bisa mengubah baris pertama menjadi from pyautogui import*, dan yang kedua menjadi import time.
nedla2004

Anda dapat menghapus duplikat 'capslock'. import time;c='capslock' ...
init_js

Anda juga bisa menghapus timesemuanya. from pyautogui import*; while 1:press('capslock',1,.5). ymmv. pada lingkungan saya pyautogui memang mempengaruhi case yang saya ketik, tetapi cahayanya tidak berkedip.
init_js

3

Bash, 31 byte

xset led 1;sleep .5;xset -led 1

Bekerja di X, tanpa akses root! (Jika tidak berhasil untuk Anda, lihat fungsi init dari kode di bawah ini untuk memastikan xkbcomp dikonfigurasi dengan benar)

Dan skrip bonus untuk mengirim kode morse apa pun melalui caps lock (bukan golf):

unit=0.15
id=1
function init {
        file=/tmp/blink_tmp
        xkbcomp $DISPLAY $file
        sed -i 's/!allowExplicit/allowExplicit/' $file
        xkbcomp $file $DISPLAY &>/dev/null
        rm $file
}
if [[ -z $1 ]]; then
        echo "Usage : blink [message]"
        exit 1
fi
init
function finish {
        off
}

function on {
#su -c 'setleds -L +caps < /dev/console'
xset led $id
}
function off {
#su -c 'setleds -L -caps < /dev/console'
xset -led $id
}
function slp {
        sleep $(echo "$unit*$1" | bc)
}
function dot {
on
slp 1
off
slp 1
}
function dash {
on
slp 3
off
slp 1
}
function gap {
        slp 3
}
function morse {
        msg=$1
        for (( i=0; i<${#msg}; i++ )); do
                char=${msg:$i:1}
                if [[ $char == "-" ]]; then
                dash
                elif [[ $char == "." ]]; then
                dot
                elif [[ $char == "/" ]]; then
                gap
                fi
        done
}
while true; do
        morse $1
done

Contoh : blink "...././.-../.-../---//.--/---/.-./.-../-..///"


2

Bash + setleds , 43 byte

setleds -D +caps;sleep 0.5;setleds -D -caps

Cukup mudah. Menggunakan setledsuntuk menyalakan lampu.


2

Bash, 103 byte

cd /sys/class/leds/asus\:\:kbd_backlight;while true;do echo 3;sleep .5;echo 0;sleep .5;done>brightness

Harus dijalankan sebagai root.

Apakah mem-flash seluruh lampu latar keyboard berfungsi? (video yang akan datang ketika saya sampai di rumah)


1
Does flashing the entire keyboard backlight work?Nah, jika Anda memikirkannya, highlight keyboard adalah indikator dari highlight keyboard yang hidup atau mati, dan itu pasti "secara fisik terletak di keyboard", jadi, ya, saya pikir itu penting.
zeppelin

2

JavaScript, 90 byte

o=new ActiveXObject("WScript.Shell");setInterval(function(){o.SendKeys("{NUMLOCK}")},500);

Itu membutuhkan ActiveXarti itu hanya akan berjalan pada IE (Edge tidak mendukungnya, meskipun). Itu mem-flash kunci NUMLOCK karena, seperti dengan jawaban lain, itu lebih pendek dari CAPSLOCK atau SCROLLLOCK.

Tidak disatukan

shell = new ActiveXObject("WScript.Shell");
setInterval(
    function(){
        shell.SendKeys("{NUMLOCK}")
    }
,500);

2

Bash, 33 Bytes

Ini mengasumsikan Num-Lock menyala sebelum dijalankan. Beralih offdan onsebaliknya. Membutuhkan numlockxpaket jelas;)

numlockx off;sleep .5;numlockx on

Sunting:

Melihat Alex Howansky telah memposting solusi ini, namun belum menandainya dengan Bash dan saya baru saja mencari situs untuk "Bash".


+1, Anda tidak perlu berulang kali mengerjapnya (saya pikir).
NoOneIsHere

Jika Anda menggunakan shell interaktif, Anda bisa mengetik di baris perintah: numlockx toggle;sleep .5;!# (27 byte). !#adalah peristiwa yang meluas ke segala sesuatu di baris perintah yang telah diketik sejauh ini.
init_js

2

File Batch (Dengan bantuan vbs), 74 + 2 = 76 byte

echo Createobject("wscript.shell").sendkeys"{numlock}">z.vbs&z&timeout 1&z

Sebagian didasarkan pada jawaban Trelzevir .

.vbssecara otomatis termasuk dalam PATHEXT.


1

Script Kotlin, 72 byte

Meskipun bukan yang terkecil, tetap saja itu cukup bagus. Saya suka menjalankan kotlin untuk beberapa hal, dan ini adalah salah satu dari mereka (lebih kecil dari val r = java.awt.Robot () karena kita tidak membutuhkan keduanya r dan val r =. Namun, ini lebih panjang dari MathLab)

java.awt.Robot().run{while(1>0){keyPress(20);keyRelease(20);delay(500)}}

Tidak Terkumpul:

java.awt.Robot().run {
    while(1>0) {
        keyPress(20)
        keyRelease(20)
        delay(500)
    }
}

1

Python3, 55 49 byte

Terima kasih @NoOneIsHere untuk -4 byte!

Ini termasuk paket: pyautogui and timemodules
Code:

while(1):pag.press("capslock");time.sleep(0.5)  

Terima kasih @NoOneIsHere untuk -4 byte!
Kunci dalam aksi:
Kunci huruf kapital


3
Selamat datang di situs ini! :)
DJMcMayhem

Anda dapat menyimpan beberapa byte dengan menggunakan while 1, dan menjadikannya satu-liner dengan tanda titik koma. ( while 1:pyautogui.press("capslock");time.sleep(.5))
NoOneIsHere

1
Sayangnya, ini juga cuplikan tetapi dengan menambahkan import pyautoguike awal program dan mengubah sisanya while 1:pyautogui.press("capslock");time.sleep(.5)Anda dapat membuat ini jawaban yang valid.
caird coinheringaahing

@cairdcoinheringaahing Juga harus ada di import timesana.
FlipTack

@cairdcoinheringaahing Persis, itulah sebabnya Anda membutuhkan import time...
FlipTack

1

VBA, 82 Bytes

VBE Anonim Fungsi jendela langsung yang tidak mengambil input dan mengganggu pengguna tanpa batas. Tergantung pada fungsi sleep kernel32 windows yang dinyatakan di bawah ini.

Deklarasi Tidur (Win-32)

Declare Sub Sleep Lib "kernel32" (ByVal M&)

Deklarasi Tidur (Win-64, + 8 Bytes)

Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal M&)

Fungsi jendela langsung VBE anonim

Do:SendKeys"{CAPSLOCK}":Sleep 500:DoEvents:Loop

Versi yang sedikit lebih menyenangkan, 97 Bytes

Seperangkat subrutin yang saling rekursif yang mengganggu pengguna tanpa batas

Sub A
Application.OnTime Now+5.8E-6,"B"
End Sub

Sub B
DoEvents
SendKeys"{CAPSLOCK}"
A
End Sub

Versi yang dipertanyakan, 66 + 2 Bytes

Saya tidak yakin jika harus mendeklarasikan fungsi dari dll dianggap memiliki fungsi inbuilt jadi, dalam hal tidak, maka di sini adalah versi 66 + 2 byte yang menunggu 1 detik

Do:DoEvents:Application.Wait Now+#0:0:1#:SendKeys"{CAPSLOCK}":Loop
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.