CAPS LOCK'u yanıp söner


107

Çoğu bilgisayar klavyesi, CAPS LOCK düğmesiyle kontrol edilen geçerli giriş modunu gösteren küçük bir entegre LED ışığa sahiptir.

görüntü tanımını buraya girin

Görevin onu göz kırpmak:

  • Aç onu;
  • 0.5 (+/- 0.1) saniye bekleyin;
  • Tekrar kapat.

Yanıp sönen LED'in video görüntüleri çok beğenildi!

kurallar

  • İsterseniz farklı bir LED'i (örn. Kaydırma Kilidi, Num Kilidi, Wi-Fi durumu vb.) Yanıp sönebilirsiniz, ancak fiziksel olarak klavyenizde bulunmalıdır;

  • Dilinizde sleepbir ikinci komut eksikse , programınız bunun yerine +2 baytlık bir ceza ile 1 saniyelik bir gecikme kullanabilir 0.;

  • Programınız en az bir kez yanıp sönmeli, sonrasında ne olacak size kalmış, yani yanıp sönmeye devam edebilir (bu durumda aynı gecikmeyi beklemelisiniz, yeniden açmadan önce beklemelisiniz), veya

  • Seçilen LED varsayılan olarak AÇIK ise, sisteminizde, programın çalıştırılmasından önce (örneğin manuel olarak) açıkça kapatıldığını varsayabilirsiniz;

  • Bu , bayt cinsinden en kısa cevabı kazanır.

Liderler Sıralaması

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
İşe yaramayan bir hile cevabı: bir Linux sisteminde, kasıtlı olarak çekirdeği çökertmek. Linux’un BSOD’ye eşdeğeri, Lock’un video donanımını da devralması durumunda ekranda Caps Lock ışığı yanıp sönüyor ve BSOD raporunu ekranda göremiyorsunuz. Maalesef, söyleyebileceğim kadarıyla, uygun bir cevap olmak için biraz fazla hızlı yanıp sönüyor. Bu, izin verildiyse (biraz zararlı) 14 baytlık bir çözüme yol açacaktır.

57
Şimdi Mors kodu ile yanıp sönmeye başlayın: "Yardım, klavye fabrikasında mahsur kaldım!"
mbomb007

12
@ ais523 Salladığımda dizüstü bilgisayarım bunu yapacak (0 bytes). Çok hızlı tho ...
Tim

18
Bir C64'teki kapak kilidi tuşu, mekanik bir anahtardır. Yanıp sönen bu biraz zor olabilir ...
Mark

8
Şimdi kablosuz klavyemdeki düşük pil LED'inin doğru oranda yanıp sönmediğini merak ediyorum. Öyleyse: sıfır bayt.
Roger Lipscombe

Yanıtlar:


123

Befunge (BEF32), 390 334 305 bayt

Bu gerçekten aptalca, ancak bu site tercümanın dili tanımladığı fikrini kabul ettiği sürece , kuralı kötüye kullanabilirim. Bu kod yalnızca Kevin Vigor'un Win32 Befunge-93 Uygulamasında, sürüm 1.01'de çalışır (bence yalnızca sürüm mevcut). İkili dosyayı buradan indirebilirsiniz .

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

Şimdi normal olarak bir Befunge'de bu tür bir mücadelenin mümkün olmasını beklemiyorsunuzdur, ancak BEF32 referans uygulamasının çok eski bir versiyonunun Win32 portu ve o zamanlar p(put) komutunda sınır kontrolü yoktu . Bu, yorumlayıcıyı rastgele makine kodunu çalıştırmaya zorlamamıza olanak veren, bellekteki herhangi bir yere yazmamızı sağlar.

Şimdi mevcut kodlardan hiçbirini değiştiremiyoruz, çünkü çalıştırılabilir dosyanın .text bölümü yazma izinlerine sahip olmayacak. Ancak, sistemi .data bölümünde bir adresi yürütmek için kandırabiliriz, bu adresi çalışma zamanı kitaplığının atexittablosuna yazarak (en azından bunun olduğundan şüpheleniyorum). Sonuçta, kodumuz tercüman çıkınca otomatik olarak çalıştırılır.

Bu, yürütülebilir dosyanın sabit bir adrese yüklenmesine dayanır, bu nedenle her şeyin bellekte tam olarak nerede olduğunu biliyoruz - varsayılan ASLR ayarlarını geçersiz kıldığınız takdirde çalışmaz . Ayrıca, yürütülebilir özellik ayarına sahip olmasa da, .data'nın çalıştırılabilir olmasına güvenir, bu nedenle varsayılan DEP ayarlarını aşarsanız yine büyük olasılıkla işe yaramaz .

Kodunun kendisi aslında bir kopyasıdır Mego 'ın keybd_eventmakine koduna çevrilir tekniği:

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

Kodun bu sürümü sonsuza kadar yanıp sönmeye devam ediyor (ya da en azından süreci öldürene kadar), çünkü golf oynamak tek bir flaştan daha kolaydı.

Ve herkes animasyonlar yayınladığından, bu, klavyemde nasıl göründüğünün bir yaklaşımı.

Capslock ışığının animasyonu yanıp sönüyor


30
İnsanlar genellikle hayatı kolaylaştırmak için kuralları kötüye kullanırlar, ancak bunlar Befunge kodlayıcıları değildir :)
Aaron,

21
Asla beklenmedik bir cevap bu meydan okumaya cevap vermedi +1
zeppelin

9
Bu şimdi bu sitede en sevdiğim cevap
Cruncher

2
Mükemmel uygulama!
Daniel,

3
@JamesHolderness Yani? Uzun olsa bile bu harika bir cevap.
NoOneIsHere

72

AutoHotkey, 29 26 bayt

3 byte tasarruf için @Dane teşekkürler

Loop{
Send,{VK14}
Sleep,500
}

Aslında ben seçtim NumLockçünkü o bir karakterden daha kısa CapsLock. Aşağıdaki GIF bu durumu yansıtmaktadır. Yukarıdaki değiştirilmiş kodla aynı etkiye sahiptir. VK90GIF'in hala doğru olmasını sağlamak için yukarıdan gidebilirdim, ancak orijinal mücadeleyle uyum daha iyi hissettirdi.

BlinkingNumLock


Mbomb007'nin yorumuna şerefine , işte 239 baytta bir mors kodu mesajı :

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
}

İşte bu mesajın ilk 30 saniyesi:

MorseCodeBlinking


3
send,{vk14}Bunun yerine 3 byte'ı kesmeye ne dersin ? Bonus: CapsLock’u göz kırpıyor olmalısınız.
Dane

35

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

Bu kod, disket sürücünün LED'inin istenen hızda sonsuza dek yanıp sönmesini sağlar ( PAUSE 25= 25/50 saniye duraklat).

Bu muhtemelen montajda daha kısa olacaktır, ancak parmak uçlarımda uygun aletler yok. Bu, bir kez .LST biçiminde kaydedilmiş ve işe yaramaz boşlukları kaldırmak, manuel olarak daha kısa dizeler için komutları yeniden adlandırmak ve her birini CR+LFbasit bir şekilde değiştirmek için GFA-Basic listesinin boyutudur CR. Bir finalin CRgerekli olduğunu unutmayın .

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

Otomatik olarak genişleyecektir:

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

SPOKEPOKEilk önce 68000’i denetleyici moduna sokan ve böylece sınırlı bellek alanlarına erişmesine izin verilecek şekilde güçlendirilmiş (burada: YM2149 ses çipinin kayıt yazma adresi, diğer bazı G / Ç’lerden de sorumludur).

Ve evet: LED fiziksel olarak klavyede bulunuyor ... Sanırım.

ST Disket LED'i

Şu anda gerçek bir ST'ye erişimim yok, bu yüzden bu sadece bir mockup.


7
Disket sürücü! Vaov!
David Conrad

12
El çekilmiş kırmızı daire eksik ...
Hagen von Eitzen

@HagenvonEitzen Umarım, kırmızı çember artık gerekli değildir. :-)
Arnauld

23

balık + ckb , 56 54 bayt

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

Klavyemin tamamını rastgele renklerde yanıp söner, ancak sayı 6 onaltılık rakam olmadığından biraz sınırlıdır.

Ve evet, bu kabuk küresi potansiyel olarak tehlikelidir. Makinemde Çalışıyor ™

Bonus yazısı, 8 ay sonra: Bu tüm renklerden geçecek. Golf değil.

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

13
Hangi klavye? lol
Mc Kernel

1
@McKernel de ne klavye olduğunu merak ediyor
CraigR8806


6
Klavyenin tamamını yanıp sönerek yukarıda ve öteye gitmek için bonus puan.
Mast

tee /d*/*/*/c*? Bu, kaçınılmaz olarak önemli bir şeye genişlediğinde, bazı kötü sodların bilgisayarlarını gelecekte tuğlalamakla yükümlü olabileceği için bonus puanları. (? EFI değişkenler kimse Belki böyle bir şey orada olacağım /dev/efi/vars/cpu_type)
immibis

21

Bash + amixer, 45 Bayt

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

Klavyemdeki sessiz ışığı yanıp söner.


17
a()(amixer set Master toggle;sleep .5;a)veya amixer set Master toggle;sleep .5;$0tam bir program olarak biraz daha kısadır.
Dennis,

19

C (Windows), 79 bayt

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

açıklama

keybd_eventBir klavye olayı (keyup veya keydown) göndermek için (kullanımdan kaldırılmış) bir Windows API işlevidir. 20Caps Lock tuşunun 69kodu, donanım tarama kodudur (ne anlama geldiğini bilmiyorum) ve 1keydown ve 3keyup anlamına gelir. Bir tuşa basma olayı hemen ardından bir tuşa basma olayı gönderilerek bir tuşa basma simülasyonu gerçekleştirilir. Caps Lock'u açmak için bir tuşa basılır, ardından program 500 milisaniye boyunca uyur ve Caps Lock'u kapatmak için başka bir tuşa basılır.

Steadybox'a bir sürü bayt kaydedildi


1
Bu C göz önüne alındığında, ilan edemez misin int keybd_event();?
Neil,

@Neil Olurdu void keybd_event();ve ben de ihtiyacım void Sleep();var windows.h. Bu iki beyan bir arada içerdiklerinden daha uzundur.
Mego

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

2
Elbette, ancak ilkel türler için, sonucu hiç kullanmazsanız, C uyumsuzluğa aldırış etmez.
Neil

6
Tarama kodları, klavyenizin kablo üzerinden en düşük düzeyde gönderdiği şeydir. Değerleri standart bir düzende konumlara dayanır, çünkü klavyeyi mümkün olduğunca aptal hale getirmelerine izin vermek ve her bir anahtarı birbirine bağlamak zorunda kalmadan yapmak (bu tasarımın sınırlamaları, daha ucuz klavyelerin yalnızca birkaç eşzamanlı tuşa basabilmesinin bir parçasıdır - temel USB klavye arayüzü daha sonra, klavyelerin büyük çoğunluğuna, yaklaşık 20 yıl önce, asgari std) 'yi tasarlayarak, bir çeviri basamağının ana bilgisayara aktarılması pahasına yapıldı. en.wikipedia.org/wiki/Scancode
Dan Neely

16

MATLAB, 146 136 70

66 baytı kaldırmak için @Poke'a teşekkürler !

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

Bu, Matlab'ın Java sınıflarını çağırma yeteneğini kullanır. Num Lock ışığı programlı olarak basıp bırakarak bir döngüde yanıp söner Num Lock.

Video ya da olmadı .


9
Eğer kullanabilir miyim 144yerine java.awt.event.KeyEvent.VK_NUM_LOCK? CAPS_LOCK olurdu20
Poke

2
@Poke Evet! 66 bayt var !!
Luis Mendo

7
Komik, java cevabından daha kısa
Matsemann 20

15

PC için x86 makine kodu (örneğin, MS-DOS COM dosyası), 27 bayt

Bu makine kodu (burada, PC BIOS'unun olağan CP437'sinin Unicode görüntülenmesiyle görüntülenir) bir PC'de CAPS LOCK göstergesini sonsuza kadar yanıp söner:

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

Kod, NULL bayt içermemesi için yapılmıştır ve böylece bir COM dosyası (örneğin COPY CON blink.comMS-DOS altındaki komutu kullanarak) kullanarak bir COM dosyası oluşturmak için klavyeyle (genişletilmiş karakterler için Alt + XXX numarası kullanılarak) yazılabilir. çıktı dosyası bir sahte 28 içermesi gerekir inci bayt, ^Z) kopyalama işlemini durdurmak için gerekli (EOF) karakteri.

Efekt, LED durumunu (yan etki olarak, Num Lock ve Scroll Lock LED'leri rastgele yanıp sönmeyen bir duruma getirebilir) ayarlamak için doğrudan PC'nin klavye kontrol cihazına (port 60h) komutlar gönderilerek elde edilir. Talimatların sayısını en aza indirmek için zamanlama, BIOS tarafından adreste tutulan geri sayım sayacını kullanarak elde edilir 0040:0040(her 54.925 ms'de bir azalır, 9 döngüde yanıp sönme döngüsü 494.3 ms'dir, bu izin verilen aralıkta) - bu sayaç normalde BIOS tarafından disket motorunu durdurmak için kullanılır; Disket sürücü program tarafından kullanılmadığından ve kodun tek bir görev ortamında (örneğin DOS) çalıştığı varsayıldığı için, disket motorunun zamanlayıcı ile oynaması bir sorun değildir.

Kod MS-DOS altında gayet iyi çalışıyor (VirtualBox ile denenmiş, test etmek için önyüklenebilir bir MS-DOS USB çubuğu yapmak için zamanım olmamasına rağmen, gerçek donanımda da düzgün çalışması gerekiyor). Herhangi bir işletim sistemi işlevine güvenmediğinden, işletim sistemi olmadan da çalışabilir (örn. Diski önyükleme bölümüne yerleştirerek). Bazı baytların kodunu kısaltmak için kullanılan "anında basma" talimatlarından dolayı en az 80186 işlemcinin çalışmasını gerektirir.

Montaj kaynak kodu:

  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

Birleştirilmiş kodun onaltılık dökümü:

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

VirtualBox'ta MS-DOS altında çalışan sonuç (muhtemelen klavye denetleyicisi tamamen taklit edilmediğinden DosBox ile çalışmaz):

Yanıp sönen CAPS LOCK

(titrek video için üzgünüm).


Aslında kullanmanın bir örneği copy con program.exe: youtube.com/watch?v=iefuJ_jZAiQ
Jerry Jeremiah

13

SmileBASIC, 36 23 bayt

XON MIC
WAIT 30XOFF MIC

Mikrofon durum ışığını yanıp söner. (video yakında)


12

Python2 - 108 bayt

Capslock tuşu yapar. İlginçtir ki, bu aslında klavyeyi etkilemeden veya tuşa basmadan yalnızca LED'in kendisini açar. Değişebilirsin 4için sonunda 2numlock'u yapmak. 6her ikisini de yapar.

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

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

@haykam Windows'da mısınız?
Maltysen

1
Hayır, varım macOS Sierra Version 10.12.1 (16B2555).
haykam

8

kabuk + numlockx, 40 35 bayt

[Ryan sayesinde 5 byte kurtarıldı.]

Unixish sistemlerde sürekli NumLock ışığı yanıp söner.

numlockx toggle;sleep .5;exec sh $0

Tek yanıp sönme, 33 bayt

numlockx on;sleep .5;numlockx off

1
5 bayt kaydetmek exec sh $0yerine whileya sh $0da sonsuza kadar süreç oluşturmanın tamam olduğu kabul edilirse bunu kullanabilirsiniz .
Ry

2
watch -n0.5 numlockx toggle 27 bayt için.
Tejas Kale

Yukarıdakilerin farklı bir lezzeti için, etkileşimli kabuklarda, numlockx toggle;sleep .5;!#tek bir yanıp sönme için şunları yazabilirsiniz: (27 bayt). !#Komut satırında şu ana kadar yazılan her şeyle değiştirilen geçmiş genişletme olayı
init_js

tek yanıp sönme komutunda, bu onatlanabilir. bu varsayılan.
init_js

Ödevlerle püf noktaları yok: f=numlockx;$f;sleep .5;$f off(29). Ve (bir alt) özyinelemeyi kullanarak döngü versiyonu: g(){ f=numlockx;$f toggle;sleep .5;g;};g(40).
init_js 17:18

8

PowerShell , 71 bayt

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

notlar

  • Sonsuza dek yanıp söner
  • NUM LOCKBir bayt kaydetmek için kullanır .

"Dilinizde ikinci bir uyku komutu eksikse ..." - PowerShell'den eksik gibi gelmiyor.
Dane,

@Dane Posteri açıklama için istedim. Cezayı kabul etmeyi seçmem izin verilmezse, geri döneceğim.
briantist

@Dane geri alındı.
briantist

Nasıl uyuyalım .5 burada çalışmıyor? Denedim ve 5ms gibi göründüğü halde varsayılan olarak 0s sn olacağını düşündüm.
Jake Harry,

1
@JakeHarry: -SecondsParametre bir int, yani 0.5dönüştürülecek int, sonuçta sonuçlanacaktır 0(varsayılan yuvarlama modu bile yuvarlaktır). Yani hiç uyumuyorsunuz (burada yaklaşık 10 kenenin, yani 10 µs gecikmeyle sonuçlanır). PowerShell'de oldukça basit dönüşüm ve parametre bağlama kuralları.
Joey,

7

VBS, 75 bayt

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

Num Lock'u numlock, 1 bayttan daha kısa süreyle arka arkaya yanıp söner capslock.


7

C #, 215 202 198 195 185 bayt

Farkında olmadan ben bu cevap olarak "Aynı" kodunu yaptım @Mego , gidip kontrol edin !.

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

@Metoniem sayesinde 13 bayt kaydedildi @VisualMelon ile 13 bayt
kaydedildi

İşte çalışmasını gösteren tam formatlı bir sürüm:

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

Bonus eğlenceli değişikliği için n++ & 2için n+=2 & 2ve izle Num Lock ve Caps ve kapalı yanıp sönen anahtarlar alternatif kilitleyin. Bunun neden olduğu hakkında hiçbir fikrim yok çünkü yapmamalı ama "havalı" görünüyor.


Bekle, using System;ama bildiğim kadarıyla aslında doğrudan Sistem ad alanından bir şey kullanmadığını mı söylüyorsun? Sanırım bunu kaldırabilirsin.
Metoniem

@Metoniem Yöntemin imzası keybd_eventaslında iyi void keybd_event(byte bVk, byte bScan, uint dwFlags, UIntPtr dwExtraInfo);. Ben yeniden gönderdikten UIntPtrsonra kaldırabilirim ve onları olduğu gibi intve sadece kullanımı kaldırmak unuttum releasise .
TheLethalCoder

1
Ahh, haha ​​görüyorum, böyle şeyler olur! Nice answer man :)
Metoniem

İki işlevi de gerçekten isimlendirmeniz ve yazmanız gerektiğini düşünüyorum: kbirinde ifade edersiniz , ancak açıkça tanımsızdır. Kontrol edilmedi, ancak bir anahtar döngüsünde keybd_event'e bir çağrı yapmanızın daha iyi olacağını düşünüyorum, düşünmeliyim ki: for(int i=0;;...Sleep(250))keybd_event(i++&2)ya da başka bir şey.
VisualMelon

@VisualMelon Teşekkürler, kodu güncelledim, zamanlamayı doğru olarak alabilmek için uykuyu değiştirmek zorunda kaldım :)
TheLethalCoder

6

Java 7, 121 118 113 bayt

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

Tek bir basma ve bırakma yalnızca durumu tetikler; gözünü kırpmaz. Bu yüzden onu da döngülendirebiliriz ve özyineleme, bunu yapmanın en ucuz yoludur.


1
Ne yazık ki burada bir QBasic tercüman yok! Çünkü bir Poke talimatı kullanılarak yapılır !
sergiol

Bu, kuyruk çağrısı için optimize edilmiş mi yoksa sonunda arama yığını limitini aşacak mı?
Cyoce

Java 9 nedenle bu sonuçta yineleme derinliği limitininin kadar @Cyoce sanmıyorum Java kuyruk çağrı optimizasyonu var ama bir kere ışığı yanıp gerekiyordu çünkü sorun değil:]
Poke

1
Demek istediğim, kodun tamamını, fonksiyon bildirimini genel olarak kaybeden bir lambdaya koyabilirsiniz. Gibi tür:, ()->for(;;){java.awt.Robot r=new java.awt.Robot();r.keyPress(20);r.delay(500);r.keyRelease(20);}yükü 4 karakterlik lambda beyanı nedeniyle 18 bayt bir tasarruf.
Tamoghna Chowdhury

1
Bir neden daha geri dönmüyorum! ;) Tüm ciddiyetle, cevabı sadece Java 8 olarak değiştirin ve çift haneli skorlara geçin. Zaten sınama için sahip değilseniz yükleyin.
Tamoghna Chowdhury

5

JavaScript, 82 bayt

Credit aslında @FinW'a gider , bazı baytları kaydetmek için eski işlevimi yeni ES6 ok işleviyle değiştirdim. Ve çünkü yorum yapmak için yeterli puanım yok Yeni bir cevap yazdım.

Düzenleme - başka 2 bayt kaydetmek için parantez silindi.

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

Onun kodu böyle görünüyordu

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

1
Ok işlevi için önündeki parantezlere ihtiyacınız yoktur.
fəˈnəˈtɪk

Bunu tamamen unuttum, teşekkürler.
cetvel23

Fonksiyonu kaldırdığınızda bırakılan parantezleri kastediyordum ()
fəˈnɛtɪk

Oh, ama bunu yapamazsın, işe yaramaz. Ancak parantezleri tek satırlık ifadelerde gerekmedikleri için kaldırabilirsiniz (nedense farklı bir şey ifade
etseniz de

Değiştirilmesi ya bir byte tasarruf ()başkasıyla gibi tek bir karakter, _ya da yaparak oşöyle bir varsayılan bir parametre: (o=new ActiveXObject("WScript.Shell"))=>.
Shaggy,

4

Scala, 84 83 78 bayt

Düzenleme: @TheLethalCoder sayesinde 1 bayt kaydedildi,

O kullanılarak önerdi 1>0yerine true.

Düzenleme 2: @ Corvus_192 sayesinde 5 bayt kaydedildi,

Yapıştırıcı notasyonu kullanmayı ve parantezleri kurucudan sonra bırakmayı önerdi.

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

Ungolfed:

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

@Poke 'in Java cevabının standart Scala portu . Doğrudan Scala tercüman istemine yazın.

Bir video hem Caps Lock LED'imi hem de OSD'imi önyükleme için yanıp sönüyor!

Yanıp Sönen Caps Lock LED ve OSD


Yapabilir misin for(;;)ya while(1>0)ya while(1)Scala?
TheLethalCoder

İkincisi mümkün. Daha önce başıma gelmeyen 1 baytlık bir tasarruf. Teşekkürler!
Tamoghna Chowdhury

İnfix notasyonunu kullanabilirsiniz: r keyPress 20ondan daha kısa bir bayttır r.keyPress(20). Aynısı, diğer yöntem çağrıları için de geçerlidir ve toplamda 3 bayt tasarruf sağlar.
corvus_192

Ayrıca, başka 2 baytı kaydetmek için parantezi yapıcı çağrısından düşürün.
corvus_192

4

Linux terminali, 8 + 11 = 19 bayt

gösteri

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

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

WAT?

Göre , ECMA-48 , 1Bterminal kontrol kaçış dizisini başlatır.

Büyük harf açık = 1B 5B 33 71sonra kapalı =1B 5B 30 71

pv ilerleme görünümü

f dosya

-q sessiz

-L8 8 bayt / s = 0.5 sn gecikme

kullanım

Hazırlamak

#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+ F6yerel konsola geç

Çalıştırmak pv f -q -L8

Ctrl+ Alt+ F7geri dönüş


3

Bash + Xdotool, 36 bayt

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

Sadece bir bash kabuğunda yürütün. Grafiksel bir ortamda olması gerekir. Buradan sonsuz döngü . 6 byte tasarruf etmek için Num_Lock'ı 66 olarak ve 2 byte @Michael Kjörling sayesinde değiştirin.


Gereksiz boşlukları kaldırarak en az iki byte tasarruf edebilirsiniz. Kıvrımlı parantez içindeki boşluğa ihtiyacınız yok ve komutları ayıran noktalı virgülleri çevreleyen boşluğa ihtiyacınız yok. Sen do olsa açılış kıvırcık parantez sonra boşluk gerekir.
CVn

Ayrıca ilk revizyonunuzla ilgili olarak: Çoğu sistem :için takma ad olarak kullanabileceğinizi unutmayın true. while :;do sth;doneaynı şeyi yapar while true;do sth;doneancak üç bayt daha kısadır. for((;;)){ sth;}yine de daha kısa.
CVn

@Cyoce Nerede? Benim için işe yaramadı.
Feldspat15523

@Cyoce Bunun sadece işlevleri bildirmek için işe yaradığını düşünüyorum.
Feldspat15523


3

xdotool , 20 bayt

key -delay=500 66 66

Tuşlara basıldığında 500 ms'lik bir gecikmeyle, 66 aka Büyük Harf tuşuna iki kez basın.

Xdotool'un bir betik dili olduğunu unutmayın; bir dosyadan çalıştırılabilir ve hatta shebang'ları bile destekler. Onun bu yana execkomutu harici programları çalıştıran izin, bu ek ve Asallık testi yeteneğine sahiptir, bu nedenle programlama dili tanımımızı karşılar.

Test sürüşü

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

görüntü tanımını buraya girin


3

Pyautogui kullanarak Python: 126 143 115 103 bayt

12 byte tasarruf için @ nedla2004 sayesinde

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

1
While döngüsünü while 1:keyDown('capslock');time.sleep(.5);keyUp('capslock')değiştirebilir, ilk satırı from pyautogui import*ve ikinciyi değiştirebilirsiniz import time.
nedla2004

yinelenen 'capslock' kaldırabilirsiniz. import time;c='capslock' ...
init_js 17:18

ayrıca timetamamen kaldırabilirsiniz . from pyautogui import*; while 1:press('capslock',1,.5). YMMV. çevremde pyautogui yazdığım davayı etkiliyor, ancak ışık yanıp sönmüyor.
init_js 17:18

3

Bash, 31 bayt

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

X'de çalışıyor, root erişimi yok! (Sizin için işe yaramazsa, xkbcomp öğesinin doğru yapılandırıldığından emin olmak için aşağıdaki kodun başlangıç ​​işlevine bakın)

Ve büyük harf kilidinden herhangi bir mors kodu göndermek için bir bonus script (golf atılmadı):

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

Örnek: blink "...././.-../.-../---//.--/---/.-./.-../-..///"


2

Bash + setleds , 43 bayt

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

Oldukça basit. Kullanımları setledsışığı geçiş yapmak için.


2

Bash, 103 bayt

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

Kök olarak çalıştırılmalıdır.

Tüm klavye arka ışığının yanıp sönmesi çalışıyor mu? (eve geldiğimde gelecek olan video)


1
Does flashing the entire keyboard backlight work?Peki, bunu düşünürseniz, klavye vurgusu, klavye vurgusunun açık veya kapalı olduğunu gösterir ve kesinlikle "fiziksel olarak klavyenin üzerinde bulunur", bu yüzden, evet, sanırım sayılır.
zeplin

2

JavaScript, 90 bayt

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

ActiveXYalnızca IE'de çalışacağı anlamını gerektirir ( Yine de, Edge bunu desteklemiyor). NUMLOCK tuşunu yanıp söner çünkü diğer cevaplarda olduğu gibi CAPSLOCK veya SCROLLLOCK'tan daha kısadır.

Ungolfed

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

2

Bash, 33 Bayt

Bu, Num Lock'un çalıştırılmadan önce açık olduğunu varsayar. Geçiş offve onaksi halde. numlockxAçıkçası paketi gerektirir ;)

numlockx off;sleep .5;numlockx on

Düzenle:

Saw Alex Howansky bu çözümü çoktan gönderdi, ancak Bash ile işaretlemedi ve ben sadece "Bash" için siteyi aradım.


+1, art arda göz kırpmanıza gerek yok (sanırım).
NoOneIsHere

Etkileşimli bir kabuk kullanıyorsanız, komut satırına şunu yazabilirsiniz: numlockx toggle;sleep .5;!# (27 bayt). !#Şimdiye kadar yazılmış olan komut satırındaki her şeye genişleyen olaydır.
init_js

2

Toplu İş Dosyası (vbs yardımıyla), 74 + 2 = 76 bayt

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

Kısmen Trelzevir'in cevabına dayanıyor .

.vbsotomatik olarak dahil edilir PATHEXT.


1

Kotlin Betiği, 72 bayt

En küçük olmasa da, yine de oldukça iyi. Ben KOTLIN en bayılıyorum çalıştırmak bazı şeyler için ve bu onlardan biri (biz de r gerekmez çünkü val r = java.awt.Robot daha küçük (). Val r =. Yine de, uzun MathLab daha var)

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

Ungolfed:

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

1

Python3, 55 49 bayt

-4 bayt için @ NoOneIsHere teşekkür ederiz!

Bu paketleri içerir: pyautogui ve timemodüller
Kod:

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

-4 bayt için @ NoOneIsHere teşekkür ederiz!
Eylemdeki anahtar:
Caps Lock


3
Siteye Hoşgeldiniz! :)
DJMcMayhem

Kullanarak while 1ve birkaç noktalı virgül kullanarak bir liner yaparak epeyce bayt kaydedebilirsiniz . ( while 1:pyautogui.press("capslock");time.sleep(.5))
NoOneIsHere

1
Ne yazık ki, bu aynı zamanda bir pasajdır ancak import pyautoguiprogramın başlangıcına ekleme yaparak ve gerisini while 1:pyautogui.press("capslock");time.sleep(.5)sizin için değiştirerek bunu geçerli bir cevap haline getirebilirsiniz.
caird coinheringaahing

@cairdcoinheringaahing Bir de orada olmanız gerekir import time.
FlipTack

@cairdcoinheringaahing Kesinlikle, bu yüzden ihtiyacın olan import time...
FlipTack

1

VBA, 82 Bayt

Anonim VBE Giriş yapmayan ve kullanıcıyı süresiz olarak kızdıran acil pencere işlevi. Windows kernel32 fonksiyonuna bağlı olarak aşağıda belirtilen uyku fonksiyonu.

Uyku Bildirimi (Kazan-32)

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

Uyku Bildirimi (Win-64, + 8 Bayt)

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

Anonim VBE acil pencere işlevi

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

Biraz daha eğlenceli sürüm, 97 Bayt

Kullanıcıya süresiz olarak rahatsızlık veren, karşılıklı olarak özyinelemeli alt yordamlar kümesi

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

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

Şüpheli sürüm, 66 + 2 Bayt

Bir dll'den bir fonksiyon tanımlamak zorunda kaldığımdan eminim, yerleşik bir fonksiyona sahip sayılır, bu durumda yapmazsa, o zaman 1 saniye bekleyen 66 + 2 baytlık bir versiyondur.

Do:DoEvents:Application.Wait Now+#0:0:1#:SendKeys"{CAPSLOCK}":Loop
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.