Parpadea el BLOQ MAYÚS

107

La mayoría de los teclados de computadora cuentan con una pequeña luz LED integrada, que indica el modo de entrada actual, como se controla con el botón BLOQ MAYÚS.

ingrese la descripción de la imagen aquí

Tu tarea es parpadear:

  • Encenderlo;
  • Espere 0.5 (+/- 0.1) segundos;
  • Apágalo de nuevo.

¡Las imágenes de video del parpadeo del LED son muy apreciadas!

Reglas

  • Puede destellar un LED diferente (p. Ej., Scroll Lock, Num Lock, estado de Wi-Fi, etc.), si lo desea, pero debe estar ubicado físicamente en su teclado;

  • Si a su idioma le falta un sleepcomando de un segundo , su programa puede usar un retraso de 1 segundo en su lugar, con una penalización de +2 bytes (eso es para 0.);

  • Su programa debe parpadear al menos una vez, lo que suceda después depende de usted, es decir, puede continuar parpadeando (en cuyo caso debe esperar el mismo retraso, antes de volver a encenderlo), o detenerlo, etc.

  • Si el LED elegido está ENCENDIDO por defecto, en su sistema, puede suponer que se ha apagado explícitamente (por ejemplo, manualmente), antes de ejecutar el programa;

  • Este es el , gana la respuesta más corta en bytes.

Tabla de clasificación

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>

zepelín
fuente
83
Respuesta engañosa que no funciona del todo: en un sistema Linux, bloquea el núcleo intencionalmente. El equivalente de Linux de un BSOD parpadea la luz de Bloqueo de mayúsculas, en caso de que el bloqueo también elimine el hardware de video y no pueda ver el informe BSOD en pantalla. Desafortunadamente, por lo que puedo decir, parpadea un poco demasiado rápido para ser una respuesta elegible. Esto conduciría a una solución (algo maliciosa) de 14 bytes si se permitiera.
57
Ahora parpadee en código Morse: "¡Ayuda, estoy atrapado en una fábrica de teclados!"
mbomb007
12
@ ais523 mi computadora portátil lo hará si lo agito (0 bytes). Demasiado rápido, aunque ...
Tim
18
La tecla de bloqueo de mayúsculas en un C64 es un interruptor mecánico. Parpadeo que podría ser un poco complicado ...
Mark
8
Ahora me pregunto si el LED de batería baja de mi teclado inalámbrico parpadea a la velocidad correcta. Si es así: cero bytes.
Roger Lipscombe

Respuestas:

123

Befunge (BEF32), 390 334 305 bytes

Esto es realmente tonto, pero mientras este sitio acepte la noción de que el intérprete define el idioma , también podría abusar de la regla. Este código solo funciona en la Implementación Win32 Befunge-93 de Kevin Vigor, versión 1.01 (creo que es la única versión disponible). Puedes descargar el binario aquí .

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

Ahora normalmente no esperaría que este tipo de desafío sea posible en un Befunge, pero BEF32 es un puerto Win32 de una versión muy antigua de la implementación de referencia, y en ese entonces no había límites para verificar el pcomando (put). Esto efectivamente nos permite escribir en cualquier ubicación en la memoria, lo que finalmente nos permite obligar al intérprete a ejecutar código máquina arbitrario.

Ahora no podemos alterar ninguno de los códigos existentes, ya que la sección .text del ejecutable no tendrá permisos de escritura. Sin embargo, podemos engañar al sistema para que ejecute una dirección en la sección .data, escribiendo esa dirección en la atexittabla de la biblioteca en tiempo de ejecución (al menos sospecho que es así). El resultado final es que nuestro código se ejecuta automáticamente cuando sale el intérprete.

Esto se basa en el hecho de que el ejecutable se carga en una dirección fija, por lo que sabemos exactamente dónde está todo en la memoria: se supone que no funcionaría si anula la configuración ASLR predeterminada. También se basa en que la sección .data es ejecutable, a pesar de no tener establecido el atributo ejecutable, por lo que es muy probable que no funcione si anula la configuración predeterminada de DEP .

El código en sí es esencialmente una copia de la técnica de Megokeybd_event traducida al 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

Esta versión del código continúa parpadeando para siempre (o al menos hasta que finalice el proceso), ya que resultó ser más fácil de jugar que un solo flash.

Y como todos están publicando animaciones, esta es una aproximación de cómo se ve en mi teclado.

Animación del parpadeo de la luz del candado

James Holderness
fuente
30
La gente generalmente abusa de las reglas para hacerles la vida más fácil, pero esos no son los codificadores de Befunge :)
Aaron
21
Nunca esperé una respuesta esolang a este desafío +1
zepelín
99
Esta es ahora mi respuesta favorita en este sitio
Cruncher
2
Excelente implementación!
Daniel
3
@JamesHolderness ¿Entonces? Esta es una gran respuesta, incluso si es larga.
NoOneIsHere
72

AutoHotkey, 29 26 bytes

Gracias a @Dane por guardar 3 bytes

Loop{
Send,{VK14}
Sleep,500
}

Originalmente elegí NumLockporque es un personaje más corto que CapsLock. El GIF a continuación refleja esa condición. Es el mismo efecto que el código alterado anterior. Podría haber seguido con lo VK90anterior para hacer que el GIF aún sea preciso, pero alinearse con el desafío original se sintió mejor.

BlinkingNumLock


En honor al comentario de mbomb007 , aquí hay un mensaje de código morse en 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
}

Aquí están los primeros 30 segundos de ese mensaje:

MorseCodeBlinking

Tostadas de ingeniero
fuente
3
¿Qué tal en send,{vk14}lugar de recortar 3 bytes? Bonificación: estarías parpadeando el Bloqueo de mayúsculas.
Dane
35

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

Este código hará que el LED de la unidad de disquete parpadee para siempre a la velocidad requerida ( PAUSE 25= pausa por 25/50 segundos).

Probablemente sea más corto en el ensamblaje, pero no tengo las herramientas adecuadas a mi alcance. Este es el tamaño de la lista GFA-Basic una vez guardada en formato .LST y editada manualmente para eliminar espacios en blanco inútiles, cambiar el nombre de las instrucciones a cadenas más cortas y reemplazar cada CR+LFuna por una simple CR. Tenga en cuenta que CRse requiere una final .

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

Se expandirá automáticamente a:

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

SPOKEes un sobrealimentado POKEque primero pone el 68000 en modo supervisor , de modo que se le permite acceder a áreas de memoria restringidas (aquí: la dirección de escritura de registro del chip de sonido YM2149, que también es responsable de otras E / S).

Y sí: el LED está ubicado físicamente en el teclado ... supongo.

LED de disquete ST

No tengo acceso a un ST real en este momento, así que esto es solo una maqueta.

Arnauld
fuente
77
¡Unidad de disquete! ¡Guauu!
David Conrad
12
Falta un círculo rojo dibujado a mano ...
Hagen von Eitzen
@HagenvonEitzen Con suerte, el círculo rojo ya no es necesario. :-)
Arnauld
23

pez + ckb , 56 54 bytes

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

Parpadea todo mi teclado en colores aleatorios, aunque dado que el número no tiene 6 dígitos hexadecimales, es un poco limitado.

Y sí, ese globo de concha es potencialmente peligroso. Funciona en mi máquina ™

Script adicional, 8 meses después: esto pasará por todos los colores. No golf.

#!/usr/bin/fish
while true
        echo rgb (printf '%06x' (random 0 16777215)) | tee /dev/input/ckb*/cmd > /dev/null
        sleep 0.5
end
Una
fuente
13
¿Qué teclado es? lol
Mc Kernel
1
@McKernel tiene curiosidad sobre qué teclado es ese también
CraigR8806
3
K70 RGB con teclas personalizadas - unascriptions.com/f/67209fe8_keyboard_design.svg
Una
66
Puntos de bonificación por ir más allá haciendo que todo el teclado parpadee.
Mástil
tee /d*/*/*/c*? Puntos de bonificación por ser propensos a bloquear la computadora de algunos pobres en el futuro cuando esto inevitablemente se expande a algo importante. (¿EFI /dev/efi/vars/cpu_type
varía a
21

Bash + amixer, 45 bytes

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

Parpadea la luz de silencio en mi teclado.

Tim
fuente
17
a()(amixer set Master toggle;sleep .5;a)o amixer set Master toggle;sleep .5;$0como programa completo son un poco más cortos.
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();}

Explicación

keybd_event es una función de API de Windows (en desuso) para enviar un evento de teclado (activación o desactivación). 20es el código para la tecla Bloq Mayús, 69es el código de escaneo de hardware (no tengo idea de lo que eso significa), y 1significa keydown y 3keyup. Una pulsación de tecla se simula enviando un evento de pulsación de tecla inmediatamente seguido de un evento de activación de tecla. Se envía una pulsación de tecla para activar el bloqueo de mayúsculas, luego el programa duerme durante 500 milisegundos y luego se envía otra pulsación de tecla para desactivar el bloqueo de mayúsculas.

Gracias a Steadybox por un montón de bytes guardados

Mego
fuente
1
Dado que esto es C, ¿no puedes declarar int keybd_event();?
Neil
@Neil Sería void keybd_event();, y también necesito void Sleep();de windows.h. Esas dos declaraciones juntas son más largas que la inclusión.
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
Claro, pero para los tipos primitivos, C no se preocupa por la falta de coincidencia si nunca usa el resultado.
Neil
66
Los códigos de escaneo son los que su teclado envía a través del cable en el nivel más bajo. Sus valores se basan en las posiciones en un diseño estándar porque al hacerlo les permite hacer que el teclado sea lo más tonto posible y sin tener que conectar cada tecla (las limitaciones de este diseño son parte de por qué los teclados más baratos solo pueden devolver unas pocas pulsaciones simultáneas) la interfaz de línea de base del teclado USB luego introdujo la limitación en la gran mayoría de los teclados hace unos 20 años al diseñar al mínimo estándar) a costa de descargar un paso de traducción en la computadora host. en.wikipedia.org/wiki/Scancode
Dan Neely
16

MATLAB, 146 136 70

¡Gracias a @Poke por eliminar 66 bytes!

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

Esto utiliza la capacidad de Matlab para llamar a clases Java. La luz de Bloq Num parpadea en un bucle presionando y soltando programáticamente Num Lock.

Video o no sucedió .

Luis Mendo
fuente
99
¿Se puede usar en 144lugar de java.awt.event.KeyEvent.VK_NUM_LOCK? CAPS_LOCK sería20
Poke
2
@Poke ¡Sí! Ahí van 66 bytes !!
Luis Mendo
77
Es curioso que sea más corto que la respuesta de Java
Matsemann
15

Código de máquina x86 para PC (por ejemplo, archivo COM MS-DOS), 27 bytes

Este código de máquina (que se muestra aquí con una representación Unicode del CP437 habitual de BIOS de PC) parpadeará para siempre el indicador de BLOQ MAYÚS en una PC:

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

El código se ha creado para que no contenga bytes NULL y, por lo tanto, se puede escribir con el teclado (usando el truco Alt + XXX para caracteres extendidos) para crear un archivo COM (por ejemplo, usando el COPY CON blink.comcomando en MS-DOS, en cuyo caso el archivo de salida tendrá que contener una espuria 28 º byte, el^Z (EOF) requerida para detener la operación de copia).

El efecto se logra mediante el envío directo de comandos al controlador del teclado de la PC (puerto 60h) para establecer el estado del LED (como efecto secundario, puede configurar los LED Num Lock y Scroll Lock en un estado aleatorio sin parpadeo). El tiempo, para minimizar el número de instrucciones, se logra utilizando el temporizador de cuenta regresiva mantenido por el BIOS en la dirección 0040:0040(disminuye cada 54.925 ms, con 9 ciclos el ciclo de parpadeo es 494.3 ms, que está dentro del margen permitido) - este contador normalmente lo usa el BIOS para detener el motor del disquete; Como el programa no utiliza la unidad de disquete y se supone que el código se ejecuta en un entorno de tarea única (por ejemplo, DOS), jugar con el temporizador del disquete no es un problema.

El código funciona bien en MS-DOS (probado con VirtualBox, también debería funcionar bien en hardware real, aunque todavía no tuve tiempo para hacer una memoria USB de arranque MS-DOS para probar). Como no se basa en ninguna función del sistema operativo, incluso puede ejecutarse sin el sistema operativo (por ejemplo, colocándolo en el sector de arranque de un disco). Requiere al menos un procesador 80186 para ejecutarse, debido a las instrucciones de "inserción inmediata" utilizadas para acortar el código de algunos bytes.

Código fuente del ensamblaje:

  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

Volcado hexadecimal del código ensamblado:

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

Aquí está el resultado que se ejecuta bajo MS-DOS en VirtualBox (no funciona con DosBox, presumiblemente porque el controlador del teclado no está completamente emulado):

BLOQUEO DE MAYÚSCULAS parpadeante

(Perdón por el tembloroso video).

Cerveza inglesa
fuente
Un ejemplo de uso real copy con program.exe: youtube.com/watch?v=iefuJ_jZAiQ
Jerry Jeremiah
13

SmileBASIC, 36 23 bytes

XON MIC
WAIT 30XOFF MIC

Parpadea la luz de estado del micrófono. (video próximamente)

12Me21
fuente
12

Python2 - 108 bytes

¿La llave de mayúsculas? Curiosamente, esto en realidad enciende solo el LED sin afectar el teclado o presionar la tecla. Puedes cambiar el4 al final 2para hacer numlock. 6hace las dos cosas.

import fcntl,os,time;exec"fcntl.ioctl(os.open('/dev/console',os.O_NOCTTY),19250,%d);time.sleep(.5);"*2%(4,0)
Maltysen
fuente
Parece que recibí un error: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, ¿estás en Windows?
Maltysen
1
No, estoy en macOS Sierra Version 10.12.1 (16B2555).
haykam
8

shell + numlockx, 40 35 bytes

[Guardado 5 bytes gracias a Ryan.]

Parpadea continuamente la luz NumLock en sistemas unixish.

numlockx toggle;sleep .5;exec sh $0

Parpadeo simple, 33 bytes

numlockx on;sleep .5;numlockx off
Alex Howansky
fuente
1
Puede usar en exec sh $0lugar de whileguardar 5 bytes, o sh $0si crear procesos para siempre se considera correcto.
Ry-
2
watch -n0.5 numlockx toggle para 27 bytes
Tejas Kale
Para un sabor diferente de lo anterior, en shells interactivos, puede escribir: numlockx toggle;sleep .5;!#(27 bytes) para un solo parpadeo. !#es el evento de expansión del historial reemplazado por todo lo que se ha escrito hasta ahora en la línea de comando.
init_js
en el comando de parpadeo único, onse puede omitir. Es el valor predeterminado.
init_js
Con tareas, sin trucos: f=numlockx;$f;sleep .5;$f off(29). Y una versión de bucle (inferior) usando recursividad: g(){ f=numlockx;$f toggle;sleep .5;g;};g(40).
init_js
8

PowerShell , 71 bytes

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

Notas

  • Parpadea para siempre
  • Utiliza NUM LOCKpara guardar un byte.
briantista
fuente
"Si a su idioma le falta un comando de suspensión del segundo segundo ...", no parece que falte en PowerShell.
Dane
@Dane Le pedí al cartel que me aclarara. Si elegir aceptar la penalidad no está permitida, la revertiré.
briantist
@Dane retrocedió.
briantist
¿Cómo es que dormir .5 no funciona aquí? Lo probé y parece ir a unos 5 ms, pero pensé que por defecto es (-s), ¿entonces sería 0.5 s?
Jake Harry
1
@JakeHarry: el -Secondsparámetro es un int, por 0.5lo que se convertirá a int, lo que da como resultado 0(redondear a par es el modo de redondeo predeterminado). Así que no estás durmiendo en absoluto (resulta en un retraso de aproximadamente 1000 tics aquí, entonces 10 µs). Bastante conversión básica y reglas de enlace de parámetros en PowerShell.
Joey
7

VBS, 75 bytes

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

Parpadea repetidamente la tecla Bloq Num, ya que numlockes 1 byte más corto que capslock.

Trelzevir
fuente
7

C #, 215 202 198 195 185 bytes

Sin darme cuenta de que he hecho el "mismo" código que esta respuesta de @Mego , ¡échale un vistazo!

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

Guardado 13 bytes gracias a @Metoniem
Guardado 10 bytes gracias a @VisualMelon

Aquí hay una versión con formato completo que muestra que funciona:

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 el cambio de diversión bono n++ & 2a n+=2 & 2y ver el Bloq Num y Bloq teclas alternan en encendiéndose y apagándose. No tengo idea de por qué sucede porque no debería, pero se ve "genial".

TheLethalCoder
fuente
Espera, ¿ using System;pero, por lo que puedo decir, no estás usando nada directamente del espacio de nombres del sistema? Creo que puedes eliminar eso.
Metoniem
@Metoniem Buen lugar, la firma del keybd_eventmétodo es en realidad void keybd_event(byte bVk, byte bScan, uint dwFlags, UIntPtr dwExtraInfo);. Liberé que podía eliminar los UIntPtr's después de publicarlos y tenerlos como int' y simplemente olvidé eliminar el uso.
TheLethalCoder
1
Ahh, ya veo jaja, ¡cosas así pasan! Buena respuesta hombre :)
Metoniem
Creo que realmente debería nombrar y escribir las dos 'funciones': se refiere ken una, pero está claramente indefinido. No está marcado, pero creo que sería mejor tener una llamada a keybd_event en un bucle for no entrecruzado, debería pensar: for(int i=0;;...Sleep(250))keybd_event(i++&2)o algo así.
VisualMelon
@VisualMelon Gracias, he actualizado el código, tuve que alterar el sueño para obtener el momento adecuado :)
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();}

Una sola pulsación y liberación solo activa el estado; No parpadea. Por lo tanto, también podemos repetirlo y parece que la recursión es la forma más barata de hacerlo.

Meter
fuente
1
¡Qué pena que no tenga un intérprete de QBasic aquí! ¡Porque se hace usando una instrucción Poke !
sergiol
¿Esto se optimiza o se supera el límite de la pila de llamadas?
Cyoce
@Cyoce No creo que Java tenga una optimización de llamada de cola hasta Java 9, por lo que eventualmente llega al límite de profundidad de recursión, pero está bien porque solo necesitaba parpadear la luz una vez:]
Empuje
1
Quiero decir que puedes poner todo el código en una lambda, que pierde la sobrecarga de la declaración de función. Algo así como: ()->for(;;){java.awt.Robot r=new java.awt.Robot();r.keyPress(20);r.delay(500);r.keyRelease(20);}que es un ahorro de 18 bytes debido a la sobrecarga de la declaración lambda de 4 caracteres.
Tamoghna Chowdhury
1
¡Una razón más para no volver! ;) Con toda seriedad, simplemente cambie la respuesta a Java 8 y vaya a puntajes de dos dígitos. Instálalo si aún no lo tienes para probar.
Tamoghna Chowdhury
5

JavaScript, 82 bytes

El crédito va a @FinW en realidad, acabo de cambiar la función anterior a la nueva función de flecha ES6 para guardar algunos bytes. Y porque no tengo suficientes puntos para comentar, escribí una nueva respuesta.

Editar: corchetes eliminados para guardar otros 2 bytes.

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

Su código se veía así

o=new ActiveXObject("WScript.Shell");setInterval(function(){o.SendKeys("{NUMLOCK}")},500);
gobernante23
fuente
1
Para la función de flecha no necesita los paréntesis delante de ella.
fəˈnɛtɪk
Se olvidó por completo de esto, gracias.
gobernante23
Me refería a los paréntesis que quedaron cuando
eliminaste la
Oh, pero no puedes hacer eso, no funcionará. Pero se puede quitar los soportes, ya que no se necesitan en las declaraciones de una sola línea (por alguna razón su comentario me recordó a ellos a pesar de que quería decir algo diferente)
ruler23
Guarde un byte reemplazando el ()con otro carácter único, como_ o haciendo oun parámetro con un valor predeterminado, así: (o=new ActiveXObject("WScript.Shell"))=>.
Shaggy
4

Scala, 84 83 78 bytes

Editar: guardado 1 byte gracias a @TheLethalCoder,

Sugirió usar 1>0en lugar de true.

Edición 2: guardado 5 bytes gracias a @ Corvus_192,

Sugirió usar la notación infija y soltar los paréntesis después del constructor.

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

Sin golf:

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

Puerto Scala estándar de la respuesta Java de @Poke . Escríbalo directamente en el indicador del intérprete de Scala.

¡Un video de él parpadeando tanto mi LED de bloqueo de mayúsculas como mi OSD para arrancar!

LED y OSD de bloqueo de mayúsculas parpadeantes

Tamoghna Chowdhury
fuente
¿Se puede hacer for(;;)o while(1>0)o while(1)en Scala?
TheLethalCoder
El segundo es posible. Un ahorro de 1 byte que no se me había ocurrido antes. ¡Gracias!
Tamoghna Chowdhury
Puede usar la notación infija: r keyPress 20es un byte más corto que r.keyPress(20). Lo mismo se aplica a las otras llamadas a métodos, ahorrando 3 bytes en total.
corvus_192
Además, descarte el paréntesis de la llamada al constructor para guardar otros 2 bytes.
corvus_192
4

Terminal de Linux, 8 + 11 = 19 bytes

manifestación

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

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

WAT?

De acuerdo con ECMA-48 , 1Bcomienza la secuencia de escape del control terminal.

Mayúsculas = 1B 5B 33 71, luego apagado =1B 5B 30 71

pv vista de progreso

f archivo

-q tranquilo

-L8 8 bytes / s = 0.5 segundos de retraso

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+ F6cambiar a consola nativa

correr pv f -q -L8

Ctrl+ Alt+ F7cambiar de nuevo

Евгений Новиков
fuente
3

Bash + Xdotool, 36 bytes

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

Simplemente ejecútelo en un bash shell. Tiene que estar en un entorno gráfico. Bucle infinito desde aquí . Cambió Num_Lock a 66 para guardar 6 bytes, y gracias a @Michael Kjörling por 2 bytes.

Feldespato15523
fuente
Puede guardar al menos dos bytes eliminando espacios en blanco innecesarios. No necesita el espacio en blanco antes del cierre del corchete, y no necesita el espacio en blanco que rodea los puntos y comas que separan los comandos. Usted no necesita el espacio en blanco después de los corchetes, sin embargo.
un CVn
Además, con respecto a su revisión inicial: tenga en cuenta que puede usarla :como un alias trueen la mayoría de los sistemas. while :;do sth;donehace lo mismo que while true;do sth;donepero es tres bytes más corto. for((;;)){ sth;}es aún más corto, sin embargo.
un CVn
@Cyoce ¿Dónde? No me funcionó.
Feldspar15523
@Cyoce Creo que solo funciona para declarar funciones.
Feldspar15523
@
Feldspar15523 Ups, no
3

xdotool , 20 bytes

key -delay=500 66 66

Presiona la tecla 66, también conocida como Bloq Mayús , dos veces, con un retraso de 500 ms entre pulsaciones de teclas.

Tenga en cuenta que xdotool es un lenguaje de script; se puede ejecutar desde un archivo e incluso admite shebangs. Dado que su execcomando permite ejecutar programas externos, es capaz de realizar pruebas de adición y primitivas, por lo que satisface nuestra definición de lenguaje de programación.

Prueba de funcionamiento

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

ingrese la descripción de la imagen aquí

Dennis
fuente
3

Python usando pyautogui: 126 143 115 103 bytes

Gracias a @ nedla2004 por guardar 12 bytes

from pyautogui import*
import time
while 1:keyDown('capslock');time.sleep(.5);keyUp('capslock')pslock')
Tiebe Groosman
fuente
1
Puede cambiar el ciclo while a while 1:keyDown('capslock');time.sleep(.5);keyUp('capslock'), y puede cambiar la primera línea a from pyautogui import*, y la segunda a import time.
nedla2004
puedes eliminar el duplicado 'capslock'. import time;c='capslock' ...
init_js
También podría eliminar por timecompleto. from pyautogui import*; while 1:press('capslock',1,.5). ymmv. en mi entorno, pyautogui afecta el caso que escribo, pero la luz no parpadea.
init_js
3

Bash, 31 bytes

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

Funciona en X, sin acceso de root! (Si no funciona para usted, consulte la función de inicio del código a continuación para asegurarse de que xkbcomp esté configurado correctamente)

Y un script adicional para enviar cualquier código morse a través del bloqueo de mayúsculas (no golfizado):

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

Ejemplo: blink "...././.-../.-../---//.--/---/.-./.-../-..///"

tourdetour
fuente
2

Bash + setleds , 43 bytes

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

Bastante simple. Usos setledspara alternar la luz.

Rɪᴋᴇʀ
fuente
2

Bash, 103 bytes

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

Debe ejecutarse como root.

¿Funciona el parpadeo de la retroiluminación completa del teclado? (video para cuando llegue a casa)

Tyzoid
fuente
1
Does flashing the entire keyboard backlight work?Bueno, si lo piensas, el resaltado del teclado es un indicador de que el resaltado del teclado está activado o desactivado, y definitivamente está "físicamente ubicado en el teclado", así que sí, creo que cuenta.
zepelín
2

JavaScript, 90 bytes

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

Requiere ActiveXque solo se ejecute en IE ( sin embargo, Edge no lo admite). Parpadea la tecla BLOQ NUM porque, como con otras respuestas, es más corta que BLOQ MAYÚS o BLOQUEO DE DESPLAZAMIENTO.

Sin golf

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

Bash, 33 bytes

Esto supone que Num-Lock está activado antes de ejecutarse. Cambiar offy de lo oncontrario. Requiere el numlockxpaquete obviamente;)

numlockx off;sleep .5;numlockx on

Editar:

Vi a Alex Howansky ya ha publicado esta solución, pero no la marcó con Bash y simplemente busqué en el sitio "Bash".

DBX12
fuente
+1, no tienes que parpadear repetidamente (creo).
NoOneIsHere
Si está en un shell interactivo, puede escribir en la línea de comando: numlockx toggle;sleep .5;!# (27 bytes). !#es el evento que se expande a todo en la línea de comando que se ha escrito hasta ahora.
init_js
2

Archivo por lotes (con ayuda de vbs), 74 + 2 = 76 bytes

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

Parcialmente basado en la respuesta de Trelzevir .

.vbsse incluye automáticamente en PATHEXT.

no1xsyzy
fuente
1

Kotlin Script, 72 bytes

Aunque no es el más pequeño, sigue siendo bastante bueno. Me encanta la carrera de Kotlin por algunas cosas, y esta es una de ellas (más pequeña que val r = java.awt.Robot () porque no necesitamos tanto r. Como val r =. Aún así, es más largo que MathLab)

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

Sin golf:

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

Python3, 55 49 bytes

¡Gracias @NoOneIsHere por -4 bytes!

Esto incluye paquetes: pyautogui y timemódulos
Código:

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

¡Gracias @NoOneIsHere por -4 bytes!
La clave en acción:
Bloq Mayús

Rahul Bharadwaj
fuente
3
Bienvenido al sitio! :)
DJMcMayhem
Puede guardar bastantes bytes utilizando while 1y convirtiéndolo en una línea con un punto y coma. ( while 1:pyautogui.press("capslock");time.sleep(.5))
NoOneIsHere
1
Desafortunadamente, esto también es un fragmento, pero al agregarlo import pyautoguial inicio del programa y cambiar el resto while 1:pyautogui.press("capslock");time.sleep(.5), puede hacer que esta sea una respuesta válida.
caird coinheringaahing
@cairdcoinheringaahing También es necesario que haya un import timeallí.
FlipTack
@cairdcoinheringaahing Exactamente, por eso necesitas un import time...
FlipTack
1

VBA, 82 bytes

Función de ventana inmediata anónima VBE que no toma ninguna entrada y molesta al usuario indefinidamente. Dependiendo de la función de suspensión kernel32 de Windows que se declara a continuación.

Declaración de suspensión (Win-32)

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

Declaración de suspensión (Win-64, + 8 bytes)

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

Función de ventana inmediata anónima VBE

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

Versión un poco más divertida, 97 Bytes

Un conjunto de subrutinas recursivas que molestan indefinidamente al usuario.

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

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

Versión cuestionable, 66 + 2 bytes

No estoy seguro de si tener que declarar una función desde un dll cuenta como tener una función incorporada, por lo que, en el caso de que no lo haga, aquí hay una versión de 66 + 2 bytes que espera 1 segundo

Do:DoEvents:Application.Wait Now+#0:0:1#:SendKeys"{CAPSLOCK}":Loop
Taylor Scott
fuente