Mrugnij CAPS LOCK

107

Większość klawiatur komputerowych ma małe zintegrowane światło LED, wskazujące aktualny tryb wprowadzania, kontrolowany za pomocą przycisku CAPS LOCK.

wprowadź opis zdjęcia tutaj

Twoim zadaniem jest mrugnięcie:

  • Włącz to;
  • Poczekaj 0,5 (+/- 0,1) sekundy;
  • Wyłącz to ponownie.

Bardzo mile widziane są nagrania wideo z miganiem diody LED!

Zasady

  • Możesz mrugać inną diodą LED (np. Scroll Lock, Num Lock, stan Wi-Fi itp.), Jeśli chcesz, ale musi znajdować się fizycznie na klawiaturze;

  • Jeśli w twoim języku brakuje sleeppolecenia drugiej sekundy , twój program może zamiast tego użyć 1-sekundowego opóźnienia, za karą +2 bajtów (to za 0.);

  • Twój program musi migać co najmniej raz, to, co stanie się potem, zależy od Ciebie, tzn. Może nadal mrugać (w takim przypadku musisz poczekać na to samo opóźnienie, zanim ponownie go włączysz) lub zatrzymać itp .;

  • Jeśli wybrana dioda LED jest domyślnie WŁĄCZONA, w systemie można założyć, że została ona wyraźnie wyłączona (np. Ręcznie) przed uruchomieniem programu;

  • To jest , wygrywa najkrótsza odpowiedź w bajtach.

Tabela liderów

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>

zepelin
źródło
83
Oszukująca odpowiedź, która nie do końca działa: w systemie Linux celowo wyłącz jądro. Odpowiednik BSOD w Linuksie miga lampką Caps Lock, na wypadek gdyby awaria spowodowała również uszkodzenie sprzętu wideo i nie widać raportu BSOD na ekranie. Niestety, o ile mogę powiedzieć, miga trochę za szybko, aby można było odpowiedzieć. Doprowadziłoby to do (nieco złośliwego) 14-bajtowego rozwiązania, gdyby było dozwolone.
57
Teraz mrugnij w kodzie Morse'a: „Pomoc, jestem uwięziony w fabryce klawiatur!”
mbomb007
12
@ ais523 mój laptop to zrobi, jeśli potrząśnę (0 bajtów). Za szybko…
Tim
18
Klawisz Capslock w C64 to przełącznik mechaniczny. Mruganie może być nieco podchwytliwe ...
Mark
8
Teraz zastanawiam się, czy dioda LED niskiego poziomu baterii na klawiaturze bezprzewodowej miga z prawidłową częstotliwością. Jeśli tak: zero bajtów.
Roger Lipscombe

Odpowiedzi:

123

Befunge (BEF32), 390 334 305 bajtów

To jest naprawdę głupie, ale dopóki ta strona akceptuje pogląd, że tłumacz określa język , równie dobrze mogę nadużywać reguły. Ten kod działa tylko w implementacji Win32 Befunge-93 Kevina Vigora, wersja 1.01 (chyba jedyna dostępna wersja). Możesz pobrać plik binarny tutaj .

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

Teraz normalnie nie spodziewałbyś się, że tego rodzaju wyzwanie będzie możliwe w Befunge, ale BEF32 to port Win32 bardzo starej wersji implementacji referencyjnej, a wtedy nie było żadnych ograniczeń sprawdzania polecenia p(put). To skutecznie pozwala nam pisać w dowolnym miejscu w pamięci, co ostatecznie pozwala nam zmusić tłumacza do wykonania dowolnego kodu maszynowego.

Teraz nie możemy właściwie zmienić żadnego z istniejących kodów, ponieważ sekcja .text pliku wykonywalnego nie będzie miała uprawnień do zapisu. Możemy jednak nakłonić system do wykonania adresu w sekcji .data, pisząc ten adres w atexittabeli biblioteki wykonawczej (przynajmniej podejrzewam, że tak właśnie jest). W rezultacie nasz kod jest wykonywany automatycznie po wyjściu interpretera.

Opiera się to na tym, że plik wykonywalny jest ładowany pod stałym adresem, więc wiemy dokładnie, gdzie wszystko jest w pamięci - prawdopodobnie nie zadziała, jeśli przesłonisz domyślne ustawienia ASLR . Zależy również od tego, że sekcja .data jest wykonywalna, mimo że nie ma ustawionego atrybutu wykonywalnego, więc ponownie najprawdopodobniej nie zadziała, jeśli przesłonisz domyślne ustawienia DEP .

Sam kod jest w zasadzie kopią Mego „s keybd_eventtechniki przetłumaczony na kod maszynowy:

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

Ta wersja kodu nadal miga wiecznie (a przynajmniej dopóki nie zabijesz procesu), ponieważ okazało się, że łatwiej jest grać w golfa niż pojedynczy flash.

A ponieważ wszyscy publikują animacje, jest to przybliżenie tego, jak to wygląda na mojej klawiaturze.

Animacja migającego światła capslock

James Holderness
źródło
30
Ludzie zwykle nadużywają zasad, aby ułatwić im życie, ale nie są to koderzy Befunge :)
Aaron
21
Nigdy nie spodziewałem się esolangowej odpowiedzi na to wyzwanie +1
zeppelin
9
To jest teraz moja ulubiona odpowiedź na tej stronie
Cruncher
2
Doskonałe wdrożenie!
Daniel
3
@JamesHolderness So? To świetna odpowiedź, nawet jeśli jest długa.
NoOneIsHere
72

AutoHotkey, 29 26 bajtów

Dzięki @Dane za oszczędność 3 bajtów

Loop{
Send,{VK14}
Sleep,500
}

Pierwotnie wybrałem, NumLockponieważ jest o jedną postać krótszy niż CapsLock. Poniższy plik GIF odzwierciedla ten warunek. To ten sam efekt, co zmieniony kod powyżej. Mógłbym pójść z VK90powyższym, aby GIF był nadal dokładny, ale dostosowanie do pierwotnego wyzwania było lepsze.

BlinkingNumLock


Na cześć komentarza mbomb007 , oto kod Morse'a w 239 bajtach :

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
}

Oto pierwsze 30 sekund tej wiadomości:

MorseCodeBlinking

Inżynier Toast
źródło
3
A może send,{vk14}zamiast tego zgolić 3 bajty? Bonus: będziesz mrugał CapsLock.
Dane
35

GFA-Basic 3.51 (Atari ST),  61 56 43  35 bajtów

Ten kod spowoduje, że dioda LED napędu dyskietek będzie mrugać wiecznie z wymaganą szybkością ( PAUSE 25= pauza na 25/50 sekund).

Prawdopodobnie byłoby to krótsze w montażu, ale nie mam odpowiednich narzędzi na wyciągnięcie ręki. Jest to rozmiar listy GFA-Basic zapisanej raz w formacie .LST i ręcznie edytowanej w celu usunięcia niepotrzebnych białych znaków, zmiany nazw instrukcji na krótsze ciągi znaków i zastąpienia każdego CR+LFz nich prostym CR. Pamiętaj, że CRwymagany jest finał .

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

Automatycznie rozwinie się do:

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

SPOKEjest doładowaniem, POKEktóre najpierw przełącza 68000 w tryb superwizora , aby umożliwić mu dostęp do ograniczonych obszarów pamięci (tutaj: adres zapisu rejestru układu dźwiękowego YM2149, który jest również odpowiedzialny za niektóre inne wejścia / wyjścia).

I tak: dioda LED jest fizycznie umieszczona na klawiaturze ... tak sądzę.

ST Dyskietka LED

Nie mam teraz dostępu do prawdziwego ST, więc to tylko makieta.

Arnauld
źródło
7
Stacja dyskietek! Łał!
David Conrad
12
Brakujące ręcznie rysowane czerwone kółko ...
Hagen von Eitzen,
@HagenvonEitzen Mam nadzieję, że czerwone kółko nie jest już potrzebne. :-)
Arnauld
23

fish + ckb , 56 54 bajtów

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

Miga całą klawiaturą w przypadkowych kolorach, ale ponieważ liczba nie zawiera 6 cyfr szesnastkowych, jest trochę ograniczona.

I tak, ten globus pocisków jest potencjalnie niebezpieczny. Działa na mojej maszynie ™

Skrypt bonusowy, 8 miesięcy później: przejdzie przez wszystkie kolory. Nie grał w golfa.

#!/usr/bin/fish
while true
        echo rgb (printf '%06x' (random 0 16777215)) | tee /dev/input/ckb*/cmd > /dev/null
        sleep 0.5
end
Una
źródło
13
Która to klawiatura? lol
Mc Kernel
1
@McKernel wpadł ciekawy, jaka to też klawiatura
CraigR8806
3
K70 RGB z niestandardowymi nasadkami
Una
6
Punkty bonusowe za wykraczanie poza to, że cała klawiatura mruga.
Maszt
tee /d*/*/*/c*? Punkty bonusowe za możliwość zepsucia komputera jakiegoś biednego darni w przyszłości, kiedy to nieuchronnie rozwinie się w coś ważnego. (EFI zmienia kogoś? Może coś takiego będzie /dev/efi/vars/cpu_type)
immibis
21

Bash + amixer, 45 bajtów

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

Miga lampkę wyciszenia na mojej klawiaturze.

Tim
źródło
17
a()(amixer set Master toggle;sleep .5;a)lub amixer set Master toggle;sleep .5;$0jako pełny program są nieco krótsze.
Dennis
19

C (Windows), 79 bajtów

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

Wyjaśnienie

keybd_eventjest (przestarzałą) funkcją Windows API, która wysyła zdarzenie klawiatury (keyup lub keydown). 20to kod klawisza Caps Lock, 69to sprzętowy kod skanowania (nie mam pojęcia, co to oznacza), i 1oznacza skrót klawiaturowy i klucz 3. Naciśnięcie klawisza jest symulowane poprzez wysłanie zdarzenia keydown, po którym następuje bezpośrednio zdarzenie keyup. Jedno naciśnięcie klawisza jest wysyłane, aby włączyć Caps Lock, następnie program śpi przez 500 milisekund, a następnie wysyłane jest kolejne naciśnięcie klawisza, aby wyłączyć Caps Lock.

Dzięki Steadybox za zaoszczędzoną wiązkę bajtów

Mego
źródło
1
Biorąc pod uwagę, że jest to C, nie możesz zadeklarować int keybd_event();?
Neil
@ Neil Byłoby void keybd_event();, a ja też potrzebuję void Sleep();od windows.h. Te dwie deklaracje razem są dłuższe niż dołączenie.
Mego
1
79 bajtów:#include<windows.h> k(n){keybd_event(20,69,n,0);}f(){k(1);k(3);Sleep(500);f();}
Steadybox
2
Jasne, ale dla prymitywnych typów C nie przejmuje się niedopasowaniem, jeśli nigdy nie użyjesz wyniku.
Neil
6
Kody skanowania są przesyłane przez klawiaturę przewodem na najniższym poziomie. Ich wartości oparte są na pozycjach w standardowym układzie, ponieważ dzięki temu sprawiają, że klawiatura jest tak głupia, jak to możliwe i bez konieczności łączenia każdego klawisza w górę (ograniczenia tego projektu są częścią tego, dlaczego tańsze klawiatury mogą zwrócić tylko kilka jednoczesnych naciśnięć klawiszy - podstawowy interfejs klawiatury USB wprowadził to ograniczenie do zdecydowanej większości klawiatur około 20 lat temu, projektując do minimum) kosztem przeniesienia kroku tłumaczenia na komputer hosta. en.wikipedia.org/wiki/Scancode
Dan Neely
16

MATLAB, 146 136 70

Dzięki @Poke za usunięcie 66 bajtów!

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

Wykorzystuje to zdolność Matlaba do wywoływania klas Java. Lampka Num Lock miga w pętli, programowo naciskając i zwalniając Num Lock.

Wideo lub tak się nie stało .

Luis Mendo
źródło
9
Czy możesz użyć 144zamiast java.awt.event.KeyEvent.VK_NUM_LOCK? CAPS_LOCK będzie20
Poke
2
@Poke Tak! Jest 66 bajtów !!
Luis Mendo
7
Zabawne, że jest krótszy niż odpowiedź java
Matsemann
15

Kod maszynowy x86 na PC (np. plik COM MS-DOS), 27 bajtów

Ten kod maszynowy (wyświetlany tutaj z renderowaniem Unicode zwykłego CP437 BIOS komputera) będzie na zawsze mrugał wskaźnik CAPS LOCK na komputerze:

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

Kod został utworzony, aby nie zawierał bajtów NULL, a zatem można go pisać za pomocą klawiatury (używając triku Alt + XXX dla znaków rozszerzonych) w celu utworzenia pliku COM (np. Za pomocą COPY CON blink.compolecenia w MS-DOS, w którym to przypadku plik wyjściowy będzie musiał zawierać fałszywe 28 th bajt, The ^Z(EOF) charakter wymaganej zatrzymać operację kopiowania).

Efekt ten osiąga się poprzez bezpośrednie wysyłanie poleceń do kontrolera klawiatury komputera (port 60h) w celu ustawienia stanu diody LED (efektem ubocznym może być ustawienie losowego braku mrugania diod Num Num i Scroll Lock). Czas, aby zminimalizować liczbę instrukcji, jest osiągany poprzez użycie odliczania czasu utrzymywanego przez BIOS pod adresem 0040:0040(zmniejsza się co 54,925 ms, przy 9 cyklach cykl migania wynosi 494,3 ms, co mieści się w dozwolonym marginesie) - ten licznik jest zwykle używany przez BIOS do zatrzymania silnika dyskietki; ponieważ napęd dyskietek nie jest używany przez program i zakłada się, że kod działa w środowisku jednozadaniowym (np. DOS), gra z timerem silnika napędu dyskietek nie stanowi problemu.

Kod działa poprawnie pod MS-DOS (wypróbowany z VirtualBox, powinien również działać dobrze na prawdziwym sprzęcie, chociaż nie miałem jeszcze czasu, aby zrobić bootowalną pamięć USB MS-DOS do przetestowania). Ponieważ nie opiera się na żadnych funkcjach systemu operacyjnego, może nawet działać bez systemu operacyjnego (np. Umieszczając go w sektorze rozruchowym dysku). Wymaga to uruchomienia co najmniej procesora 80186, ponieważ instrukcje „natychmiastowego wypychania” służą do skrócenia kodu niektórych bajtów.

Kod źródłowy zestawu:

  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

Zrzut szesnastkowy skompilowanego kodu:

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

Oto wynik działający pod MS-DOS w VirtualBox (nie działa z DosBox, prawdopodobnie dlatego, że kontroler klawiatury nie jest całkowicie emulowany):

Miga BLOKADA CAPS

(przepraszam za wstrząsające wideo).

Ale
źródło
Przykład faktycznego użycia copy con program.exe: youtube.com/watch?v=iefuJ_jZAiQ
Jerry Jeremiah
13

SmileBASIC, 36 23 bajtów

XON MIC
WAIT 30XOFF MIC

Miga lampkę stanu mikrofonu. (wideo wkrótce)

12Me21
źródło
12

Python2 - 108 bajtów

Czy klawisz Capslock. Co ciekawe, w rzeczywistości włącza się tylko sama dioda LED bez wpływu na klawiaturę lub naciskanie klawisza. Na 4końcu możesz zmienić na 2numlock. 6robi oba.

import fcntl,os,time;exec"fcntl.ioctl(os.open('/dev/console',os.O_NOCTTY),19250,%d);time.sleep(.5);"*2%(4,0)
Maltysen
źródło
Wygląda na to, że dostałem błąd: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, masz system Windows?
Maltysen
1
Nie, jestem włączony macOS Sierra Version 10.12.1 (16B2555).
haykam
8

shell + numlockx, 40 35 bajtów

[Zaoszczędzono 5 bajtów dzięki Ryanowi.]

Ciągle mruga lampką NumLock w systemach uniksowych.

numlockx toggle;sleep .5;exec sh $0

Pojedyncze mignięcie, 33 bajty

numlockx on;sleep .5;numlockx off
Alex Howansky
źródło
1
Możesz użyć exec sh $0zamiast whilezapisać 5 bajtów lub sh $0jeśli tworzenie procesów na zawsze jest uważane za prawidłowe.
Ry-
2
watch -n0.5 numlockx toggle dla 27 bajtów.
Tejas Kale,
Aby uzyskać inny smak powyższego, w interaktywnych powłokach możesz wpisać: numlockx toggle;sleep .5;!#(27 bajtów) dla pojedynczego mrugnięcia. !#to zdarzenie rozszerzenia historii zastąpione przez wszystko wpisane do tej pory w wierszu poleceń.
init_js
w poleceniu pojedynczego mrugnięcia onmożna pominąć. to jest domyślne.
init_js
Przy zadaniach brak lew: f=numlockx;$f;sleep .5;$f off(29). I (gorsza) wersja zapętlona z wykorzystaniem rekurencji: g(){ f=numlockx;$f toggle;sleep .5;g;};g(40).
init_js
8

PowerShell , 71 bajtów

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

Notatki

  • Miga na zawsze
  • Używa NUM LOCKdo zapisania bajtu.
briantist
źródło
„Jeśli w Twoim języku brakuje polecenia drugiego snu ...” - nie brzmi tak, jakby brakowało go w programie PowerShell.
Dane
@Dane Poprosiłem plakat o wyjaśnienia. Jeśli decyzja o przyjęciu kary jest niedozwolona, ​​cofnę ją.
briantist
@ Dane wycofał się.
briantist
Dlaczego sen .5 nie działa tutaj? Próbowałem i wydaje się, że trwa około 5 ms, ale domyślnie pomyślałem, że to (-s), więc będzie to 0,5 s?
Jake Harry
1
@JakeHarry: -SecondsParametr jest int, więc 0.5zostanie przekonwertowany na int, co powoduje 0(domyślnym trybem zaokrąglania jest zaokrąglanie do parzystej). Więc w ogóle nie śpisz (powoduje to opóźnienie o około 1000 tyknięć, więc 10 µs). Dość podstawowe reguły konwersji i wiązania parametrów w PowerShell.
Joey,
7

VBS, 75 bajtów

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

Wielokrotnie miga klawisz Num Lock, ponieważ numlockjest o 1 bajt krótszy niż capslock.

Trelzevir
źródło
7

C #, 215 202 198 195 185 bajtów

Nie zdając sobie sprawy, że zrobiłem „ten sam” kod, co ta odpowiedź @Mego , sprawdź!

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

Zaoszczędź 13 bajtów dzięki @Metoniem
Zaoszczędź 10 bajtów dzięki @VisualMelon

Oto pełna sformatowana wersja pokazująca, że ​​działa:

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

Zmian premia zabawy n++ & 2na n+=2 & 2i oglądać num lock i caps lock klucze zastępcę w migać i wyłączać. Nie mam pojęcia, dlaczego tak się dzieje, ponieważ nie powinno, ale wygląda „fajnie”.

TheLethalCoder
źródło
Zaraz, using System;ale o ile wiem, nie używasz niczego bezpośrednio z przestrzeni nazw Systemu? Myślę, że możesz to usunąć.
Metoniem
@Metoniem Właściwe miejsce to podpis dla keybd_eventmetody void keybd_event(byte bVk, byte bScan, uint dwFlags, UIntPtr dwExtraInfo);. Zwalniam, że mogłem usunąć te UIntPtrpo opublikowaniu i mieć je jako takie int, i po prostu zapomniałem usunąć użycie.
TheLethalCoder
1
Ahh, widzę haha, takie rzeczy się zdarzają! Fajna odpowiedź człowieku :)
Metoniem
Myślę, że naprawdę powinieneś nazwać i wpisać dwie „funkcje”: odnosisz się do kjednej, ale jest ona wyraźnie niezdefiniowana. Nie zaznaczone, ale myślę, że lepiej byłoby mieć jedno wywołanie keybd_event w pętli bez blokady, powinienem pomyśleć: for(int i=0;;...Sleep(250))keybd_event(i++&2)czy coś.
VisualMelon,
@VisualMelon Dzięki, zaktualizowałem kod, musiałem zmienić sen, aby uzyskać właściwy czas :)
TheLethalCoder
6

Java 7, 121 118 113 bajtów

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

Pojedyncze naciśnięcie i zwolnienie wyzwala stan; to nie mruga. Możemy więc zapętlić to i wygląda na to, że rekurencja jest najtańszym sposobem na zrobienie tego.

Szturchać
źródło
1
Jaka szkoda, że ​​nie mam tu tłumacza QBasic! Ponieważ odbywa się to za pomocą instrukcji Poke !
sergiol
Czy to zostanie zoptymalizowane wywołanie ogona, czy może ostatecznie przekroczy limit stosu wywołań?
Cyoce
@Cyoce Nie sądzę, że Java ma optymalizację wywołania ogona do Java 9, więc ostatecznie osiąga limit głębokości rekurencji, ale to jest w porządku, ponieważ musiałem tylko mrugnąć światłem raz:]
Poke
1
Mam na myśli, że możesz umieścić cały kod w lambda, który traci narzut deklaracji funkcji. Coś w rodzaju: ()->for(;;){java.awt.Robot r=new java.awt.Robot();r.keyPress(20);r.delay(500);r.keyRelease(20);}co oznacza oszczędność 18 bajtów ze względu na 4-znakowy narzut deklaracji lambda.
Tamoghna Chowdhury
1
Jeszcze jeden powód, dla którego nie wrócę! ;) Z całą powagą po prostu zmień odpowiedź na Javę 8 i przejdź do dwucyfrowych wyników. Zainstaluj go, jeśli jeszcze go nie masz do testowania.
Tamoghna Chowdhury
5

JavaScript, 82 bajty

Podziękowania należą się @FinW , właśnie zmieniłem starą funkcję na nową funkcję strzałki ES6, aby zaoszczędzić trochę bajtów. Ponieważ nie mam wystarczającej liczby punktów do skomentowania, napisałem nową odpowiedź.

Edytuj - usunięte nawiasy, aby zapisać kolejne 2 bajty.

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

Jego kod wyglądał tak

o=new ActiveXObject("WScript.Shell");setInterval(function(){o.SendKeys("{NUMLOCK}")},500);
władca23
źródło
1
Do funkcji strzałki nie potrzebujesz nawiasów przed nią.
fəˈnɛtɪk
Całkowicie o tym zapomniałem, dzięki.
władca
Miałem na myśli nawiasy, które pozostały po usunięciu funkcji ()
fəˈnɛtɪk
Och, ale nie możesz tego zrobić, to nie zadziała. Ale możesz usunąć nawiasy, ponieważ nie są one potrzebne w oświadczeniach
jednowierszowych
Zapisać bajt albo przez zastąpienie ()innym, pojedynczym znakiem, jak _i poprzez oparametr z wartością domyślną, tak: (o=new ActiveXObject("WScript.Shell"))=>.
Kudłaty
4

Scala, 84 83 78 bajtów

Edycja: Zapisano 1 bajt dzięki @TheLethalCoder,

Zasugerował użycie 1>0zamiast true.

Edycja 2: Zaoszczędź 5 bajtów dzięki @ Corvus_192,

Zasugerował użycie notacji infiksowej i upuszczenie nawiasów za konstruktorem

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

Nie golfowany:

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

Standardowy port Scala w odpowiedzi Java @Poke . Wpisz go bezpośrednio w monicie interpretera Scala.

Film z jego miganiem zarówno mojej diody LED Caps Lock, jak i mojego OSD do uruchomienia!

Migające diody LED Caps Lock i OSD

Tamoghna Chowdhury
źródło
Można zrobić, for(;;)albo while(1>0)czy while(1)w Scala?
TheLethalCoder
Drugi jest możliwy. 1-bajtowe oszczędności, które wcześniej mi się nie zdarzały. Dzięki!
Tamoghna Chowdhury
Możesz użyć notacji infix: r keyPress 20jest to bajt krótszy niż r.keyPress(20). To samo dotyczy innych wywołań metod, oszczędzając w sumie 3 bajty.
corvus_192
Usuń także nawias z wywołania konstruktora, aby zapisać kolejne 2 bajty.
corvus_192
4

Terminal Linux, 8 + 11 = 19 bajtów

próbny

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

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

WAT

Według ECMA-48 , 1Brozpoczyna się końcową sekwencję sterowania ucieczki.

Caps on = 1B 5B 33 71, a następnie off =1B 5B 30 71

pv widok postępu

f plik

-q cichy

-L8 8 bajtów / s = 0,5 s opóźnienia

Stosowanie

Przygotować

#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+ F6przełącz na natywną konsolę

biegać pv f -q -L8

Ctrl+ Alt+ F7przełącz z powrotem

Евгений Новиков
źródło
3

Bash + Xdotool, 36 bajtów

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

Po prostu uruchom go w powłoce bash. Musi być w środowisku graficznym. Nieskończona pętla stąd . Zmieniono Num_Lock na 66, aby zaoszczędzić 6 bajtów, a dzięki @Michael Kjörling za 2 bajty.

Skaleń15523
źródło
Możesz zapisać co najmniej dwa bajty, usuwając niepotrzebne białe znaki. Nie potrzebujesz białych znaków przed zamykającym nawiasami klamrowymi i nie potrzebujesz białych znaków otaczających średniki oddzielające polecenia. Państwo nie potrzebują spacje po otwarciu nawias klamrowy, choć.
CVn
Również w odniesieniu do pierwszej wersji: pamiętaj, że możesz używać jej :jako aliasu truew większości systemów. while :;do sth;donerobi to samo, while true;do sth;doneale ma trzy bajty krótsze. for((;;)){ sth;}jest jednak jeszcze krótszy.
CVn
@Cyoce Gdzie? Nie działało to dla mnie.
Feldspar15523
@Cyoce Myślę, że działa tylko w przypadku deklarowania funkcji.
Feldspar15523
@ Feldspar15523 oops nieważne wtedy
Cyoce
3

xdotool , 20 bajtów

key -delay=500 66 66

Naciśnięcie klawisza 66 aka Caps Lock dwukrotnie, z opóźnieniem 500 ms między naciśnięciami klawiszy.

Zauważ, że xdotool jest językiem skryptowym; można go uruchomić z pliku, a nawet obsługuje shebangs. Ponieważ jego execpolecenie pozwala na uruchamianie programów zewnętrznych, jest w stanie dodawać i testować pierwszeństwo, więc spełnia naszą definicję języka programowania.

Testowe uruchomienie

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

wprowadź opis zdjęcia tutaj

Dennis
źródło
3

Python korzystający z pyautogui: 126 143 115 103 bajtów

Dzięki @ nedla2004 za oszczędność 12 bajtów

from pyautogui import*
import time
while 1:keyDown('capslock');time.sleep(.5);keyUp('capslock')pslock')
Tiebe Groosman
źródło
1
Możesz zmienić pętlę while na while 1:keyDown('capslock');time.sleep(.5);keyUp('capslock')i możesz zmienić pierwszą linię na from pyautogui import*, a drugą na import time.
nedla2004
możesz usunąć duplikat „capslock”. import time;c='capslock' ...
init_js
możesz również timecałkowicie usunąć . from pyautogui import*; while 1:press('capslock',1,.5). ymmv. w moim otoczeniu pyautogui ma wpływ na pisaną przeze mnie skrzynkę, ale światło nie miga.
init_js
3

Bash, 31 bajtów

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

Działa w X, bez dostępu do roota! (Jeśli to nie działa, zobacz funkcję init poniższego kodu, aby upewnić się, że xkbcomp jest poprawnie skonfigurowany)

Dodatkowy skrypt do wysyłania dowolnego kodu Morse'a przez Caps Lock (nie golfa)

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

Przykład: blink "...././.-../.-../---//.--/---/.-./.-../-..///"

tourdetour
źródło
2

Bash + setleds , 43 bajty

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

Dość proste. Używa setledsdo przełączania światła.

Rɪᴋᴇʀ
źródło
2

Bash, 103 bajty

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

Musi być uruchomiony jako root.

Czy flashowanie całego podświetlenia klawiatury działa? (wideo, które przyjdzie, kiedy wrócę do domu)

Tyzoid
źródło
1
Does flashing the entire keyboard backlight work?Cóż, jeśli o tym pomyślisz, podświetlenie klawiatury jest wskaźnikiem włączenia lub wyłączenia podświetlenia klawiatury i zdecydowanie jest „fizycznie umiejscowione na klawiaturze”, więc tak, myślę, że to się liczy.
zeppelin
2

JavaScript, 90 bajtów

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

Wymaga ActiveXto oznaczenia, że ​​będzie działał tylko w IE (Edge go nie obsługuje). Miga klawisz NUMLOCK, ponieważ, podobnie jak w przypadku innych odpowiedzi, jest krótszy niż CAPSLOCK lub SCROLLLOCK.

Nie golfił

shell = new ActiveXObject("WScript.Shell");
setInterval(
    function(){
        shell.SendKeys("{NUMLOCK}")
    }
,500);
FinW
źródło
2

Bash, 33 bajtów

Zakłada się, że Num-Lock jest włączony przed uruchomieniem. Przełącz offi oninaczej. Wymaga numlockxoczywiście paczki;)

numlockx off;sleep .5;numlockx on

Edytować:

Zobaczyłem Alexa Howansky'ego, który opublikował już to rozwiązanie, ale nie oznaczył go Bash, a ja właśnie przeszukałem witrynę pod kątem „Bash”.

DBX12
źródło
+1, nie musisz wielokrotnie mrugać (myślę).
NoOneIsHere
Jeśli jesteś w interaktywnej powłoce, możesz wpisać w wierszu poleceń: numlockx toggle;sleep .5;!# (27 bajtów). !#to zdarzenie, które rozszerza się na wszystko w dotychczasowym wierszu poleceń.
init_js
2

Plik wsadowy (z pomocą vbs), 74 + 2 = 76 bajtów

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

Częściowo oparty na odpowiedzi Trelzevira .

.vbsjest automatycznie uwzględniany w PATHEXT.

no1xsyzy
źródło
1

Skrypt Kotlin, 72 bajty

Chociaż nie jest najmniejszy, wciąż jest całkiem niezły. Uwielbiam bieg kotlina dla niektórych rzeczy i jest to jedna z nich (mniejsza niż val r = java.awt.Robot (), ponieważ nie potrzebujemy zarówno r., Jak i val r =. Mimo to jest dłuższa niż MathLab)

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

Nie golfowany:

java.awt.Robot().run {
    while(1>0) {
        keyPress(20)
        keyRelease(20)
        delay(500)
    }
}
Qertu Uerty
źródło
1

Python3, 55 49 bajtów

Dziękuję @NoOneIsHere za -4 bajty!

Obejmuje to pakiety: pyautogui i timemoduły
Kod:

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

Dziękuję @NoOneIsHere za -4 bajty!
Klucz w akcji:
Duże litery

Rahul Bharadwaj
źródło
3
Witamy na stronie! :)
DJMcMayhem
Możesz zaoszczędzić sporo bajtów, używając while 1i czyniąc go jednowierszowym z średnikiem. ( while 1:pyautogui.press("capslock");time.sleep(.5))
NoOneIsHere
1
Niestety jest to także fragment kodu, ale dodając import pyautoguido początku programu i zmieniając resztę while 1:pyautogui.press("capslock");time.sleep(.5), możesz uczynić to poprawną odpowiedzią.
caird coinheringaahing
@cairdcoinheringaahing Trzeba też import timetam być .
FlipTack,
@cairdcoinheringaahing Dokładnie, dlatego potrzebujesz import time...
FlipTack
1

VBA, 82 bajty

Anonimowa funkcja natychmiastowego okna VBE, która nie pobiera danych i denerwuje użytkownika w nieskończoność. Zależnie od stanu uśpienia funkcji jądra systemu Windows zadeklarowanego poniżej.

Deklaracja snu (Win-32)

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

Deklaracja snu (Win-64, + 8 bajtów)

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

Anonimowa funkcja bezpośredniego okna VBE

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

Nieco bardziej zabawna wersja, 97 bajtów

Zestaw wzajemnie rekurencyjnych podprogramów, który w nieskończoność denerwuje użytkownika

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

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

Wątpliwa wersja, 66 + 2 bajtów

Nie jestem pewien, czy konieczność zadeklarowania funkcji z biblioteki DLL liczy się jako posiadająca funkcję wbudowaną, więc w przypadku, gdy tak nie jest, oto wersja 66 + 2 bajtów, która czeka 1 sekundę

Do:DoEvents:Application.Wait Now+#0:0:1#:SendKeys"{CAPSLOCK}":Loop
Taylor Scott
źródło