Pisque o CAPS LOCK


107

A maioria dos teclados de computador possui uma pequena luz LED integrada, indicando o modo de entrada atual, conforme controlado com o botão CAPS LOCK.

insira a descrição da imagem aqui

Sua tarefa é piscar:

  • Ligue-o;
  • Aguarde 0,5 (+/- 0,1) segundos;
  • Desligue-o novamente.

As imagens de vídeo do LED piscando são muito apreciadas!

Regras

  • Você pode piscar um LED diferente (por exemplo, Scroll Lock, Num Lock, status de Wi-Fi etc.), se desejar, mas ele deve estar fisicamente localizado no teclado;

  • Se seu idioma não possui um sleepcomando de subsegundo , seu programa pode usar um atraso de 1 segundo, com uma penalidade de +2 bytes (isso é para 0.);

  • Seu programa deve piscar pelo menos uma vez, o que acontece depois depende de você, ou seja, ele pode continuar piscando (nesse caso, você deve esperar pelo mesmo atraso, antes de ligá-lo novamente) ou parar etc;

  • Se o LED escolhido estiver aceso por padrão, no seu sistema, você pode assumir que ele foi explicitamente desligado (por exemplo, manualmente), antes da execução do programa;

  • Isso é , a resposta mais curta em bytes vence.

Entre os melhores

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
Trapaça que não funciona muito bem: em um sistema Linux, intencionalmente trava o kernel. O equivalente do Linux a um BSOD pisca a luz Caps Lock, para o caso de a falha também derrubar o hardware de vídeo e você não conseguir ver o relatório BSOD na tela. Infelizmente, tanto quanto posso dizer, pisca um pouco rápido demais para ser uma resposta elegível. Isso levaria a uma solução (um pouco maliciosa) de 14 bytes, se permitida.

57
Agora pisque no código Morse: "Ajuda, estou preso em uma fábrica de teclados!"
mbomb007

12
@ ais523 meu laptop fará isso se eu apertar (0 bytes). Tho muito rápido ...
Tim

18
A tecla capslock em um C64 é um interruptor mecânico. Piscar isso pode ser um pouco complicado ... #
Mark

8
Agora, estou pensando se o LED de bateria fraca no teclado sem fio pisca na taxa correta. Se sim: zero bytes.
Roger Lipscombe

Respostas:


123

Befunge (BEF32), 390 334 305 bytes

Isso é realmente bobo, mas, enquanto este site aceitar a noção de que o intérprete define o idioma , eu também poderia abusar da regra. Esse código funciona apenas na implementação Win32 Befunge-93 do Kevin Vigor, versão 1.01 (acho que a única versão disponível). Você pode baixar o binário aqui .

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

Agora, normalmente, você não espera que esse tipo de desafio seja possível em um Befunge, mas o BEF32 é uma porta Win32 de uma versão muito antiga da implementação de referência, e naquela época não havia verificação de limites no pcomando (put). Isso efetivamente nos permite gravar em qualquer local na memória, o que nos permite forçar o intérprete a executar código de máquina arbitrário.

Agora não podemos realmente alterar nenhum código existente, pois a seção .text do executável não terá permissões de gravação. No entanto, podemos induzir o sistema a executar um endereço na seção .data, escrevendo esse endereço na atexittabela da biblioteca de tempo de execução (pelo menos suspeito que seja isso). O resultado final é que nosso código é executado automaticamente quando o intérprete sai.

Isso depende do fato de que o executável é carregado em um endereço fixo, para que saibamos exatamente onde tudo está na memória - presumivelmente não funcionaria se você substituísse as configurações padrão do ASLR . Ele também conta com a seção .data sendo executável, apesar de não ter o atributo executável definido, portanto, novamente, provavelmente não funcionaria se você substituísse as configurações padrão da DEP .

O próprio código é essencialmente uma cópia de Mego da keybd_eventtécnica traduzido em código de máquina:

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

Essa versão do código continua piscando para sempre (ou pelo menos até que você interrompa o processo), já que era mais fácil jogar golfe do que um único flash.

E como todo mundo está postando animações, essa é uma aproximação do que parece no meu teclado.

Animação da luz do capslock piscando


30
As pessoas costumam abusar regras, a fim de tornar a vida mais fácil para eles, mas esses não são Befunge codificadores :)
Aaron

21
Nunca esperei uma resposta esolang para este desafio +1
zeppelin

9
Esta é agora a minha resposta favorita neste site
Cruncher

2
Excelente implementação!
Daniel

3
@JamesHolderness Então? Esta é uma ótima resposta, mesmo que seja longa.
NoOneIsHere

72

AutoHotkey, 29 26 bytes

Obrigado a @Dane por salvar 3 bytes

Loop{
Send,{VK14}
Sleep,500
}

Eu originalmente escolhi NumLockporque é um personagem menor que CapsLock. O GIF abaixo reflete essa condição. É o mesmo efeito que o código alterado acima. Eu poderia ter seguido o exemplo VK90acima para tornar o GIF ainda preciso, mas alinhado com o desafio original parecia melhor.

BlinkingNumLock


Em homenagem ao comentário de mbomb007 , aqui está uma mensagem de código morse em 239 bytes :

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
}

Aqui estão os primeiros 30 segundos dessa mensagem:

MorseCodeBlinking


3
Que tal em send,{vk14}vez de raspar 3 bytes? Bônus: você estaria piscando o CapsLock.
Dane

35

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

Esse código fará o LED da unidade de disquete piscar para sempre na taxa necessária ( PAUSE 25= pausa por 25/50 segundos).

Provavelmente seria mais curto na montagem, mas não tenho as ferramentas apropriadas na ponta dos dedos. Esse é o tamanho da listagem do GFA-Basic, uma vez salva no formato .LST e editada manualmente para remover espaços em branco inúteis, renomear instruções para seqüências mais curtas e substituir cada CR+LFuma por uma simples CR. Observe que CRé necessária uma final .

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

Expandirá automaticamente para:

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

SPOKEé uma sobrecarga POKEque primeiro coloca o 68000 no modo supervisor , para que ele possa acessar áreas de memória restritas (aqui: o endereço de gravação do registro do soundchip YM2149, que também é responsável por outras E / S).

E sim: o LED está fisicamente localizado no teclado ... suponho.

ST Floppy LED

Eu não tenho acesso a um ST real agora, então isso é apenas uma maquete.


7
Unidade de disquete! Uau!
David Conrad

12
Círculo vermelho desenhado à mão faltando ...
Hagen von Eitzen

@HagenvonEitzen Felizmente, o círculo vermelho não é mais necessário. :-)
Arnauld 23/02

23

fish + ckb , 56 54 bytes

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

Pisca meu teclado inteiro em cores aleatórias, embora como o número não tenha 6 dígitos hexadecimais, é um pouco limitado.

E sim, esse shell glob é potencialmente perigoso. Funciona na minha máquina ™

Script de bônus, 8 meses depois: isso passará por todas as cores. Não jogou golfe.

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

13
Qual teclado é esse? lol
Mc Kernel

1
@McKernel esbarrar curioso para saber o teclado que é assim
CraigR8806

3
K70 RGB com keycaps personalizados - unascrib.com/f/67209fe8_keyboard_design.svg
Una

6
Pontos de bônus por ir além, fazendo o teclado inteiro piscar.
mastro

tee /d*/*/*/c*? Pontos de bônus por serem susceptíveis de bloquear o computador de alguns pobres no futuro, quando isso inevitavelmente se expandir para algo importante. (EFI variáveis ​​alguém? Talvez haja algo como /dev/efi/vars/cpu_type) #
immibis 17/03

21

Bash + amixer, 45 bytes

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

Pisca a luz muda do meu teclado.


17
a()(amixer set Master toggle;sleep .5;a)ou amixer set Master toggle;sleep .5;$0como um programa completo são um pouco mais curtos.
Dennis

19

C (Windows), 79 bytes

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

Explicação

keybd_eventé uma função da API do Windows (descontinuada) para enviar um evento de teclado (keyup ou keydown). 20é o código da tecla Caps Lock, 69é o código de verificação de hardware (não tenho idéia do que isso significa) e 1significa keydown e 3significa keyup. Um pressionamento de tecla é simulado enviando um evento de pressionamento de tecla imediatamente seguido por um evento de keyup. Um pressionamento de tecla é enviado para ativar o Caps Lock, o programa dorme por 500 milissegundos e, em seguida, outro pressionamento de tecla é enviado para desativar o Caps Lock novamente.

Agradecimentos ao Steadybox por um monte de bytes salvos


1
Dado que este é C, você não pode declarar int keybd_event();?
Neil

@Neil Seria void keybd_event();, e eu também precisa void Sleep();de windows.h. Essas duas declarações juntas são mais longas que a inclusão.
Mego

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

2
Claro, mas para tipos primitivos, C não se importa com a incompatibilidade se você nunca usar o resultado.
Neil

6
Os códigos de digitalização são o que o teclado envia pelo fio no nível mais baixo. Seus valores são baseados em posições em um layout padrão, pois isso deixa o teclado o mais burro possível e sem precisar conectar cada tecla (as limitações desse design fazem parte do motivo pelo qual teclados mais baratos podem retornar apenas algumas teclas simultâneas - o A interface do teclado USB de linha de base incorporou a limitação na grande maioria dos teclados há cerca de 20 anos, projetando para o mínimo padrão) ao custo de descarregar uma etapa de tradução no computador host. en.wikipedia.org/wiki/Scancode
Dan Neely 23/02

16

MATLAB, 146 136 70

Obrigado a @Poke por remover 66 bytes!

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

Isso usa a capacidade do Matlab de chamar classes Java. A luz Num Lock fica intermitente ao pressionar e soltar programaticamente Num Lock.

Vídeo ou não aconteceu .


9
Você pode usar em 144vez de java.awt.event.KeyEvent.VK_NUM_LOCK? CAPS_LOCK seria20
Puxão

2
@Poke Yes! Lá vão 66 bytes !!
Luis Mendo

7
Engraçado que é menor do que a resposta java
Matsemann

15

código de máquina x86 para PC (por exemplo, arquivo COM do MS-DOS), 27 bytes

Este código de máquina (exibido aqui com uma renderização Unicode do CP437 usual do BIOS do PC) piscará o indicador CAPS LOCK para sempre em um PC:

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

O código foi criado para não conter bytes NULL e, portanto, pode ser digitado com o teclado (usando o truque Alt + XXX para caracteres estendidos) para criar um arquivo COM (por exemplo, usando o COPY CON blink.comcomando no MS-DOS, nesse caso o arquivo de saída terá de conter um 28 espúria th byte, o ^Zpersonagem (EOF) necessário para parar a operação de cópia).

O efeito é obtido enviando comandos diretamente ao controlador de teclado do PC (porta 60h) para definir o estado do LED (como efeito colateral, ele pode definir os LEDs Num Lock e Scroll Lock para um estado aleatório sem piscar). O tempo, para minimizar o número de instruções, é alcançado usando o temporizador de contagem regressiva mantido pelo BIOS no endereço 0040:0040(diminui a cada 54.925 ms, com 9 ciclos, o ciclo piscante é de 494,3 ms, o que está dentro da margem permitida) - esse contador é normalmente usado pelo BIOS para parar o motor do disquete; como a unidade de disquete não é usada pelo programa e o código é executado em um ambiente de tarefa única (por exemplo, DOS), jogar com o temporizador do motor de disquete não é um problema.

O código funciona bem no MS-DOS (experimentado com o VirtualBox, ele também deve funcionar bem em hardware real, embora eu ainda não tivesse tempo para fazer um pen drive inicializável do MS-DOS para testar). Como ele não depende de nenhuma função do sistema operacional, ele pode ser executado sem o sistema operacional (por exemplo, colocando-o no setor de inicialização de um disco). Requer pelo menos um processador 80186 para ser executado, devido às instruções de "envio imediato" usadas para reduzir o código de alguns bytes.

Código fonte do assembly:

  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

Despejo hexadecimal do código montado:

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

Aqui está o resultado executado no MS-DOS no VirtualBox (não funciona com o DosBox, presumivelmente porque o controlador do teclado não é completamente emulado):

CAPS LOCK piscando

(desculpe pelo vídeo instável).


Um exemplo de como realmente usar copy con program.exe: youtube.com/watch?v=iefuJ_jZAiQ
Jerry Jeremiah

13

SmileBASIC, 36 23 bytes

XON MIC
WAIT 30XOFF MIC

Pisca a luz de status do microfone. (vídeo em breve)


12

Python2 - 108 bytes

A tecla capslock. Curiosamente, isso realmente acende apenas o próprio LED sem afetar o teclado ou pressionar a tecla. Você pode alterar o 4no final 2para fazer o numlock. 6faz os dois.

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

Parece que eu tenho um erro: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 você está no Windows?
Maltysen 26/02

1
Não, eu estou macOS Sierra Version 10.12.1 (16B2555).
26417 haykam

8

shell + numlockx, 40 35 bytes

[Economizou 5 bytes graças a Ryan.]

Pisca continuamente a luz do NumLock em sistemas unixish.

numlockx toggle;sleep .5;exec sh $0

Piscar único, 33 bytes

numlockx on;sleep .5;numlockx off

1
Você pode usar em exec sh $0vez de whilesalvar 5 bytes ou sh $0se a criação de processos para sempre é considerada aceitável.
Ry-

2
watch -n0.5 numlockx toggle por 27 bytes.
Tejas Kale

Para um sabor diferente do descrito acima, em shells interativos, você pode digitar: numlockx toggle;sleep .5;!#(27 bytes) para um único piscar de olhos. !#é o evento de expansão do histórico substituído por tudo digitado até o momento na linha de comando.
23318 init_js

no comando piscar único, onpode ser omitido. é o padrão.
23318 init_js

Com tarefas, sem truques: f=numlockx;$f;sleep .5;$f off(29). E (uma versão inferior) de loop usando recursão: g(){ f=numlockx;$f toggle;sleep .5;g;};g(40).
23318 init_js

8

PowerShell , 71 bytes

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

Notas

  • Pisca para sempre
  • Usa NUM LOCKpara salvar um byte.

"Se o seu idioma está faltando um comando de suspensão de subsegundo ..." - não parece estar faltando no PowerShell.
Dane

@ Dan, pedi esclarecimentos ao pôster. Se optar por aceitar a penalidade não for permitido, eu a reverterei.
Briantist

@Dane revertido.
Briantist

Como é que o sono .5 não funciona aqui? Eu tentei e parece ir em 5ms, mas eu pensei que por padrão é (-s), então seria 0,5 s?
Jake Harry

1
@JakeHarry: o -Secondsparâmetro é um int, então 0.5será convertido em int, o que resulta em 0(arredondar para par é o modo de arredondamento padrão). Portanto, você não está dormindo (resulta em um atraso de cerca de 1000 carrapatos aqui, 10 µs). Regras de conversão e associação de parâmetros bastante básicas no PowerShell.
Joey28 de

7

VBS, 75 bytes

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

Pisca repetidamente a tecla Num Lock, pois numlocké 1 byte menor que capslock.


7

C #, 215 202 198 195 185 bytes

Sem perceber, eu fiz o código "mesmo" que esta resposta do @Mego , confira!

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

Guardou 13 bytes graças a @Metoniem Guardou
10 bytes graças a @VisualMelon

Aqui está uma versão formatada completa mostrando que está funcionando:

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

Para a mudança divertido bônus n++ & 2para n+=2 & 2e ver o num lock e Caps Lock chaves alternam em acender e apagar. Eu não tenho idéia do por que isso acontece porque não deveria, mas parece "legal".


Espere, você está using System;tão longe quanto eu posso dizer que você não está usando nada diretamente do espaço para nome System? Eu acho que você pode remover isso.
Metoniem 23/02

@ Metoniem Bom ponto a assinatura para o keybd_eventmétodo é realmente void keybd_event(byte bVk, byte bScan, uint dwFlags, UIntPtr dwExtraInfo);. Eu libero que poderia remover os UIntPtrapós a publicação e tê-los como intestão e apenas esqueci de remover o uso.
TheLethalCoder

1
Ahh, eu vejo haha, coisas assim acontecem! Boa resposta, cara :) :)
Metoniem

Eu acho que você realmente deve nomear e digitar as duas 'funções': você se refere a kuma, mas é claramente indefinido. Não verificado, mas acho que seria melhor você ter uma chamada para keybd_event em um loop for unbraced, devo pensar: for(int i=0;;...Sleep(250))keybd_event(i++&2)ou algo assim.
Visual Febon 23/02

@VisualMelon Obrigado, eu tenho atualizado o código, teve que alterar o sono para obter o timing certo embora :)
TheLethalCoder

6

Java 7, 121 118 113 bytes

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

Uma única imprensa e release apenas acionam o estado; não pisca. Assim, podemos fazer um loop e parece que a recursão é a maneira mais barata de fazer isso.


1
Que pena que eu não tenha um intérprete QBasic aqui! Porque isso é feito usando uma instrução Poke !
sergiol 23/02

Isso é otimizado para a chamada final ou eventualmente excederá o limite da pilha de chamadas?
Cyoce 24/02

@ Cyy Eu não acho que o Java tenha otimização de chamada de cauda até o Java 9, então isso finalmente atinge o limite de profundidade da recursão, mas tudo bem, porque eu só precisei piscar a luz uma vez:]
Poke

1
Quero dizer que você pode colocar o código inteiro em um lambda, que perde a sobrecarga da declaração de função. Tipo como:, ()->for(;;){java.awt.Robot r=new java.awt.Robot();r.keyPress(20);r.delay(500);r.keyRelease(20);}que é uma economia de 18 bytes devido à sobrecarga da declaração lambda de 4 caracteres.
Tamoghna Chowdhury

1
Mais uma razão para não voltar! ;) Com toda a seriedade, basta alterar a resposta para Java 8 e obter pontuações de dois dígitos. Instale-o se ainda não o tiver para teste.
Tamoghna Chowdhury 24/02

5

JavaScript, 82 bytes

O crédito vai para o @FinW , na verdade, eu mudei a função antiga para a nova função de seta ES6 para salvar alguns bytes. E, como não tenho pontos suficientes para comentar, escrevi uma nova resposta.

Editar - colchetes excluídos para salvar outros 2 bytes.

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

O código dele ficou assim

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

1
Para a função de seta, você não precisa dos parênteses à sua frente.
27417

Esqueci completamente disso, obrigado.
ruler23

Eu tinha a intenção dos parênteses que sobraram de quando você removido function ()
fənɛtɪk

Ah, mas você não pode fazer isso, não vai funcionar. Mas você pode remover os suportes como eles não são necessários em declarações de uma linha (por algum motivo o seu comentário me fez lembrar deles, mesmo que você queria dizer algo diferente)
ruler23

Salvar um byte quer substituindo o ()com outro, de caráter único, como _ou fazendo oum parâmetro com um padrão, assim: (o=new ActiveXObject("WScript.Shell"))=>.
Shaggy

4

Scala, 84 83 78 bytes

Editar: salvou 1 byte graças a @TheLethalCoder,

Ele sugeriu o uso 1>0no lugar de true.

Edição 2: salvou 5 bytes graças a @ Corvus_192,

Ele sugeriu o uso de notação infix e a remoção dos parênteses após o construtor

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

Porta Scala padrão da resposta Java do @Poke . Digite-o diretamente no prompt do interpretador Scala.

Um vídeo piscando no meu Caps Caps LED e no meu OSD para inicializar!

LED piscando Caps Lock e OSD


Você pode fazer for(;;)ou while(1>0)ou while(1)em Scala?
TheLethalCoder

O segundo é possível. Uma economia de 1 byte que não havia me ocorrido antes. Obrigado!
Tamoghna Chowdhury 24/02

Você pode usar a notação infix: r keyPress 20é um byte menor que r.keyPress(20). O mesmo se aplica às outras chamadas de método, economizando 3 bytes no total.
corvus_192 26/02

Além disso, solte os parênteses da chamada do construtor para salvar outros 2 bytes.
corvus_192 26/02

4

Terminal Linux, 8 + 11 = 19 bytes

demonstração

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

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

WAT?

De acordo com o ECMA-48 , 1Binicia a sequência de escape do controle terminal.

Caps on = 1B 5B 33 71e off =1B 5B 30 71

pv visão de progresso

f Arquivo

-q quieto

-L8 8 bytes / s = atraso de 0,5 s

Uso

Preparar

#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+ F6alternar para o console nativo

corre pv f -q -L8

Ctrl+ Alt+ F7voltar


3

Bash + Xdotool, 36 bytes

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

Basta executá-lo em um shell bash. Ele precisa estar em um ambiente gráfico. Loop infinito daqui . Alterou o Num_Lock para 66 para salvar 6 bytes e obrigado a @Michael Kjörling por 2 bytes.


Você pode salvar pelo menos dois bytes removendo espaços em branco desnecessários. Você não precisa do espaço em branco antes do colchete de fechamento e não precisa do espaço em branco ao redor dos pontos e vírgulas que separam os comandos. Você não precisa do espaço em branco após o colchete de abertura, no entanto.
a CVn

Além disso, em relação à sua revisão inicial: Lembre-se de que você pode usar :como um alias para truea maioria dos sistemas. while :;do sth;donefaz a mesma coisa que, while true;do sth;donemas é três bytes mais curto. for((;;)){ sth;}ainda é mais curto.
um CVn 23/02

@Cyoce Where? Não funcionou para mim.
precisa

@ Cyoce Eu acho que só funciona para declarar funções.
Feldspar15523

@ Feldspar15523 oops nevermind then
Cyoce

3

xdotool , 20 bytes

key -delay=500 66 66

Pressiona a tecla 66, também conhecida como Caps Lock , duas vezes, com um atraso de 500 ms entre as teclas pressionadas.

Observe que xdotool é uma linguagem de script; ele pode ser executado a partir de um arquivo e suporta até shebangs. Como seu execcomando permite a execução de programas externos, ele é capaz de realizar testes de adição e primalidade, satisfazendo nossa definição de linguagem de programação.

Execução de teste

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

insira a descrição da imagem aqui


3

Python usando pyautogui: 126 143 115 103 bytes

Obrigado a @ nedla2004 por salvar 12 bytes

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

1
Você pode alterar o loop while para while 1:keyDown('capslock');time.sleep(.5);keyUp('capslock')e a primeira linha para from pyautogui import*e a segunda para import time.
Ndla2004

você pode remover o 'capslock' duplicado. import time;c='capslock' ...
23318 init_js

você também pode remover timecompletamente. from pyautogui import*; while 1:press('capslock',1,.5). ymmv. no meu ambiente, o pyautogui afeta o caso em que digito, mas a luz não pisca.
23318 init_js

3

Bash, 31 bytes

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

Funciona em X, sem acesso root! (Se não funcionar para você, consulte a função init do código abaixo para garantir que o xkbcomp esteja configurado corretamente)

E um script de bônus para enviar qualquer código morse através do caps lock (não jogado):

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

Exemplo: blink "...././.-../.-../---//.--/---/.-./.-../-..///"


2

Bash + setleds , 43 bytes

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

Bem simples. Usa setledspara alternar a luz.


2

Bash, 103 bytes

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

Deve ser executado como root.

Piscando toda a luz de fundo do teclado funciona? (vídeo para vir quando eu chegar em casa)


1
Does flashing the entire keyboard backlight work?Bem, se você pensar bem, o destaque do teclado é um indicador de que o destaque do teclado está ativado ou desativado e é definitivamente "localizado fisicamente no teclado", então, sim, acho que conta.
Zeppelin

2

JavaScript, 90 bytes

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

Requer ActiveXsignificado que só será executado no IE (o Edge não suporte). Ele pisca a tecla NUMLOCK porque, como em outras respostas, é mais curta que CAPSLOCK ou SCROLLLOCK.

Ungolfed

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

2

Bash, 33 bytes

Isso pressupõe que o Num-Lock esteja ativado antes de ser executado. Alterne offe oncaso contrário. Requer o numlockxpacote obviamente;)

numlockx off;sleep .5;numlockx on

Editar:

Vi Alex Howansky já postou esta solução, mas ainda não a marcou com Bash, e eu apenas procurei no site por "Bash".


+1, você não precisa piscar repetidamente (eu acho).
NoOneIsHere 28/02

Se você estiver em um shell interativo, poderá digitar na linha de comando: numlockx toggle;sleep .5;!# (27 bytes). !#é o evento que se expande para tudo na linha de comando digitada até o momento.
23318 init_js

2

Arquivo em lote (com ajuda de vbs), 74 + 2 = 76 bytes

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

Parcialmente baseado na resposta de Trelzevir .

.vbsé incluído automaticamente no PATHEXT.


1

Script Kotlin, 72 bytes

Embora não seja o menor, ainda é muito bom. Estou amando a corrida de kotlin para algumas coisas, e essa é uma delas (menor que val r = java.awt.Robot () porque não precisamos de r e val r =. Ainda assim, é mais longo que MathLab)

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 bytes

Obrigado @NoOneIsHere por -4 bytes!

Isso inclui pacotes: pyautogui e timemódulos
Código:

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

Obrigado @NoOneIsHere por -4 bytes!
A chave em ação:
Caps Lock


3
Bem vindo ao site! :)
DJMcMayhem

Você pode salvar alguns bytes usando while 1e tornando-o uma linha com um ponto-e-vírgula. ( while 1:pyautogui.press("capslock");time.sleep(.5))
NoOneIsHere

1
Infelizmente, esse também é um trecho, mas, adicionando import pyautoguiao início do programa e alterando o restante, while 1:pyautogui.press("capslock");time.sleep(.5)você pode fazer disso uma resposta válida.
caird coinheringaahing

@cairdcoinheringaahing Também é preciso estar import timelá.
FlipTack

@cairdcoinheringaahing Exatamente, é por isso que você precisa de um import time...
FlipTack

1

VBA, 82 bytes

Função de janela imediata VBE anônima que não recebe entrada e irrita o usuário indefinidamente. Dependente da função kernel32 do Windows, que está declarada abaixo.

Declaração de suspensão (Win-32)

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

Declaração de suspensão (Win-64, + 8 bytes)

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

Função de janela imediata VBE anônima

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

Versão um pouco mais divertida, 97 bytes

Um conjunto de sub-rotinas mutuamente recursivas que irritam indefinidamente o usuário

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

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

Versão questionável, 66 + 2 bytes

Não tenho certeza se a necessidade de declarar uma função de uma dll conta como tendo uma função embutida, portanto, no caso de não existir, aqui está uma versão de 66 + 2 bytes que aguarda 1 segundo

Do:DoEvents:Application.Wait Now+#0:0:1#:SendKeys"{CAPSLOCK}":Loop
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.