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.
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
sleep
comando de subsegundo , seu programa pode usar um atraso de 1 segundo, com uma penalidade de +2 bytes (isso é para0.
);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 é código-golfe , 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>
Respostas:
Befunge (BEF32),
390334305 bytesIsso é 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 .
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
p
comando (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
atexit
tabela 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_event
técnica traduzido em código de máquina: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.
fonte
AutoHotkey,
2926 bytesObrigado a @Dane por salvar 3 bytes
Eu originalmente escolhi
NumLock
porque é um personagem menor queCapsLock
. O GIF abaixo reflete essa condição. É o mesmo efeito que o código alterado acima. Eu poderia ter seguido o exemploVK90
acima para tornar o GIF ainda preciso, mas alinhado com o desafio original parecia melhor.Em homenagem ao comentário de mbomb007 , aqui está uma mensagem de código morse em 239 bytes :
Aqui estão os primeiros 30 segundos dessa mensagem:
fonte
send,{vk14}
vez de raspar 3 bytes? Bônus: você estaria piscando o CapsLock.GFA-Basic 3.51 (Atari ST),
61 56 4335 bytesEsse 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+LF
uma por uma simplesCR
. Observe queCR
é necessária uma final .Expandirá automaticamente para:
SPOKE
é uma sobrecargaPOKE
que 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.
Eu não tenho acesso a um ST real agora, então isso é apenas uma maquete.
fonte
fish + ckb ,
5654 bytesPisca 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.
fonte
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
) #Bash + amixer, 45 bytes
Pisca a luz muda do meu teclado.
fonte
a()(amixer set Master toggle;sleep .5;a)
ouamixer set Master toggle;sleep .5;$0
como um programa completo são um pouco mais curtos.C (Windows), 79 bytes
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) e1
significa keydown e3
significa 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
fonte
int keybd_event();
?void keybd_event();
, e eu também precisavoid Sleep();
dewindows.h
. Essas duas declarações juntas são mais longas que a inclusão.#include<windows.h> k(n){keybd_event(20,69,n,0);}f(){k(1);k(3);Sleep(500);f();}
MATLAB,
14613670Obrigado a @Poke por remover 66 bytes!
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 .
fonte
144
vez dejava.awt.event.KeyEvent.VK_NUM_LOCK
? CAPS_LOCK seria20
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:
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.com
comando no MS-DOS, nesse caso o arquivo de saída terá de conter um 28 espúria th byte, o^Z
personagem (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:
Despejo hexadecimal do código montado:
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):
(desculpe pelo vídeo instável).
fonte
copy con program.exe
: youtube.com/watch?v=iefuJ_jZAiQSmileBASIC,
3623 bytesPisca a luz de status do microfone. (vídeo em breve)
fonte
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
4
no final2
para fazer o numlock.6
faz os dois.fonte
Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<string>", line 1, in <module> IOError: [Errno 25] Inappropriate ioctl for device
macOS Sierra Version 10.12.1 (16B2555)
.shell + numlockx,
4035 bytes[Economizou 5 bytes graças a Ryan.]
Pisca continuamente a luz do NumLock em sistemas unixish.
Piscar único, 33 bytes
fonte
exec sh $0
vez dewhile
salvar 5 bytes oush $0
se a criação de processos para sempre é considerada aceitável.watch -n0.5 numlockx toggle
por 27 bytes.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.on
pode ser omitido. é o padrão.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).PowerShell , 71 bytes
Notas
fonte
-Seconds
parâmetro é umint
, então0.5
será convertido emint
, o que resulta em0
(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.VBS, 75 bytes
Pisca repetidamente a tecla Num Lock, pois
numlock
é 1 byte menor quecapslock
.fonte
C #,
215202198195185 bytesSem perceber, eu fiz o código "mesmo" que esta resposta do @Mego , confira!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:
Para a mudança divertido bônus
n++ & 2
paran+=2 & 2
e 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".fonte
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.keybd_event
método é realmentevoid keybd_event(byte bVk, byte bScan, uint dwFlags, UIntPtr dwExtraInfo);
. Eu libero que poderia remover osUIntPtr
após a publicação e tê-los comoint
estão e apenas esqueci de remover o uso.k
uma, 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.Java 7,
121118113 bytesUma ú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.
fonte
()->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.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 código dele ficou assim
fonte
()
com outro, de caráter único, como_
ou fazendoo
um parâmetro com um padrão, assim:(o=new ActiveXObject("WScript.Shell"))=>
.Scala,
848378 bytesEditar: salvou 1 byte graças a @TheLethalCoder,
Ele sugeriu o uso
1>0
no lugar detrue
.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
Ungolfed:
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!
fonte
for(;;)
ouwhile(1>0)
ouwhile(1)
em Scala?r keyPress 20
é um byte menor quer.keyPress(20)
. O mesmo se aplica às outras chamadas de método, economizando 3 bytes no total.Terminal Linux, 8 + 11 = 19 bytes
Arquivo
f
=1B 5B 33 71 1B 5B 30 71
native@shell:~$
pv f -q -L8
WAT?
De acordo com o ECMA-48 ,
1B
inicia a sequência de escape do controle terminal.Caps on =
1B 5B 33 71
e off =1B 5B 30 71
pv
visão de progressof
Arquivo-q
quieto-L8
8 bytes / s = atraso de 0,5 sUso
Preparar
Ctrl+ Alt+ F6alternar para o console nativo
corre
pv f -q -L8
Ctrl+ Alt+ F7voltar
fonte
Bash + Xdotool, 36 bytes
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.
fonte
:
como um alias paratrue
a maioria dos sistemas.while :;do sth;done
faz a mesma coisa que,while true;do sth;done
mas é três bytes mais curto.for((;;)){ sth;}
ainda é mais curto.xdotool , 20 bytes
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
exec
comando 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
fonte
Python usando pyautogui:
126 143 115103 bytesObrigado a @ nedla2004 por salvar 12 bytes
fonte
while 1:keyDown('capslock');time.sleep(.5);keyUp('capslock')
e a primeira linha parafrom pyautogui import*
e a segunda paraimport time
.import time;c='capslock' ...
time
completamente.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.Bash, 31 bytes
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):
Exemplo:
blink "...././.-../.-../---//.--/---/.-./.-../-..///"
fonte
Bash + setleds , 43 bytes
Bem simples. Usa
setleds
para alternar a luz.fonte
Bash, 103 bytes
Deve ser executado como root.
Piscando toda a luz de fundo do teclado funciona? (vídeo para vir quando eu chegar em casa)
fonte
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.JavaScript, 90 bytes
Requer
ActiveX
significado 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
fonte
Bash, 33 bytes
Isso pressupõe que o Num-Lock esteja ativado antes de ser executado. Alterne
off
eon
caso contrário. Requer onumlockx
pacote obviamente;)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".
fonte
numlockx toggle;sleep .5;!#
(27 bytes).!#
é o evento que se expande para tudo na linha de comando digitada até o momento.Arquivo em lote (com ajuda de vbs), 74 + 2 = 76 bytes
Parcialmente baseado na resposta de Trelzevir .
.vbs
é incluído automaticamente noPATHEXT
.fonte
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)
Ungolfed:
fonte
Python3,
5549 bytesObrigado @NoOneIsHere por -4 bytes!
Isso inclui pacotes: pyautogui e
time
módulosCódigo:
Obrigado @NoOneIsHere por -4 bytes!
A chave em ação:
fonte
while 1
e tornando-o uma linha com um ponto-e-vírgula. (while 1:pyautogui.press("capslock");time.sleep(.5)
)import pyautogui
ao início do programa e alterando o restante,while 1:pyautogui.press("capslock");time.sleep(.5)
você pode fazer disso uma resposta válida.import time
lá.import time
...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)
Declaração de suspensão (Win-64, + 8 bytes)
Função de janela imediata VBE anônima
Versão um pouco mais divertida, 97 bytes
Um conjunto de sub-rotinas mutuamente recursivas que irritam indefinidamente o usuário
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
fonte