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.
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
sleep
comando de un segundo , su programa puede usar un retraso de 1 segundo en su lugar, con una penalización de +2 bytes (eso es para0.
);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 código de golf , 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>
Respuestas:
Befunge (BEF32),
390334305 bytesEsto 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í .
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
p
comando (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
atexit
tabla 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 Mego
keybd_event
traducida al código de máquina: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.
fuente
AutoHotkey,
2926 bytesGracias a @Dane por guardar 3 bytes
Originalmente elegí
NumLock
porque es un personaje más corto queCapsLock
. El GIF a continuación refleja esa condición. Es el mismo efecto que el código alterado anterior. Podría haber seguido con loVK90
anterior para hacer que el GIF aún sea preciso, pero alinearse con el desafío original se sintió mejor.En honor al comentario de mbomb007 , aquí hay un mensaje de código morse en 239 bytes :
Aquí están los primeros 30 segundos de ese mensaje:
fuente
send,{vk14}
lugar de recortar 3 bytes? Bonificación: estarías parpadeando el Bloqueo de mayúsculas.GFA-Basic 3.51 (Atari ST),
61 56 4335 bytesEste 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+LF
una por una simpleCR
. Tenga en cuenta queCR
se requiere una final .Se expandirá automáticamente a:
SPOKE
es un sobrealimentadoPOKE
que 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.
No tengo acceso a un ST real en este momento, así que esto es solo una maqueta.
fuente
pez + ckb ,
5654 bytesParpadea 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.
fuente
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
Bash + amixer, 45 bytes
Parpadea la luz de silencio en mi teclado.
fuente
a()(amixer set Master toggle;sleep .5;a)
oamixer set Master toggle;sleep .5;$0
como programa completo son un poco más cortos.C (Windows), 79 bytes
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).20
es el código para la tecla Bloq Mayús,69
es el código de escaneo de hardware (no tengo idea de lo que eso significa), y1
significa keydown y3
keyup. 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
fuente
int keybd_event();
?void keybd_event();
, y también necesitovoid Sleep();
dewindows.h
. Esas dos declaraciones juntas son más largas que la inclusión.#include<windows.h> k(n){keybd_event(20,69,n,0);}f(){k(1);k(3);Sleep(500);f();}
MATLAB,
14613670¡Gracias a @Poke por eliminar 66 bytes!
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ó .
fuente
144
lugar dejava.awt.event.KeyEvent.VK_NUM_LOCK
? CAPS_LOCK sería20
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:
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.com
comando 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:
Volcado hexadecimal del código ensamblado:
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):
(Perdón por el tembloroso video).
fuente
copy con program.exe
: youtube.com/watch?v=iefuJ_jZAiQSmileBASIC,
3623 bytesParpadea la luz de estado del micrófono. (video próximamente)
fuente
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 el
4
al final2
para hacer numlock.6
hace las dos cosas.fuente
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[Guardado 5 bytes gracias a Ryan.]
Parpadea continuamente la luz NumLock en sistemas unixish.
Parpadeo simple, 33 bytes
fuente
exec sh $0
lugar dewhile
guardar 5 bytes, osh $0
si crear procesos para siempre se considera correcto.watch -n0.5 numlockx toggle
para 27 bytesnumlockx 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.on
se puede omitir. Es el valor predeterminado.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).PowerShell , 71 bytes
Notas
fuente
-Seconds
parámetro es unint
, por0.5
lo que se convertirá aint
, lo que da como resultado0
(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.VBS, 75 bytes
Parpadea repetidamente la tecla Bloq Num, ya que
numlock
es 1 byte más corto quecapslock
.fuente
C #,
215202198195185 bytesSin darme cuenta de que he hecho el "mismo" código que esta respuesta de @Mego , ¡échale un vistazo!Guardado 13 bytes gracias a @Metoniem
Guardado 10 bytes gracias a @VisualMelon
Aquí hay una versión con formato completo que muestra que funciona:
Para el cambio de diversión bono
n++ & 2
an+=2 & 2
y 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".fuente
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.keybd_event
método es en realidadvoid keybd_event(byte bVk, byte bScan, uint dwFlags, UIntPtr dwExtraInfo);
. Liberé que podía eliminar losUIntPtr
's después de publicarlos y tenerlos comoint
' y simplemente olvidé eliminar el uso.k
en 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í.Java 7,
121118113 bytesUna 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.
fuente
()->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.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.
Su código se veía así
fuente
()
con otro carácter único, como_
o haciendoo
un parámetro con un valor predeterminado, así:(o=new ActiveXObject("WScript.Shell"))=>
.Scala,
848378 bytesEditar: guardado 1 byte gracias a @TheLethalCoder,
Sugirió usar
1>0
en lugar detrue
.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.
Sin golf:
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!
fuente
for(;;)
owhile(1>0)
owhile(1)
en Scala?r keyPress 20
es un byte más corto quer.keyPress(20)
. Lo mismo se aplica a las otras llamadas a métodos, ahorrando 3 bytes en total.Terminal de Linux, 8 + 11 = 19 bytes
Archivo
f
=1B 5B 33 71 1B 5B 30 71
native@shell:~$
pv f -q -L8
WAT?
De acuerdo con ECMA-48 ,
1B
comienza la secuencia de escape del control terminal.Mayúsculas =
1B 5B 33 71
, luego apagado =1B 5B 30 71
pv
vista de progresof
archivo-q
tranquilo-L8
8 bytes / s = 0.5 segundos de retrasoUso
Preparar
Ctrl+ Alt+ F6cambiar a consola nativa
correr
pv f -q -L8
Ctrl+ Alt+ F7cambiar de nuevo
fuente
Bash + Xdotool, 36 bytes
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.
fuente
:
como un aliastrue
en la mayoría de los sistemas.while :;do sth;done
hace lo mismo quewhile true;do sth;done
pero es tres bytes más corto.for((;;)){ sth;}
es aún más corto, sin embargo.xdotool , 20 bytes
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
exec
comando 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
fuente
Python usando pyautogui:
126 143 115103 bytesGracias a @ nedla2004 por guardar 12 bytes
fuente
while 1:keyDown('capslock');time.sleep(.5);keyUp('capslock')
, y puede cambiar la primera línea afrom pyautogui import*
, y la segunda aimport time
.import time;c='capslock' ...
time
completo.from pyautogui import*; while 1:press('capslock',1,.5)
. ymmv. en mi entorno, pyautogui afecta el caso que escribo, pero la luz no parpadea.Bash, 31 bytes
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):
Ejemplo:
blink "...././.-../.-../---//.--/---/.-./.-../-..///"
fuente
Bash + setleds , 43 bytes
Bastante simple. Usos
setleds
para alternar la luz.fuente
Bash, 103 bytes
Debe ejecutarse como root.
¿Funciona el parpadeo de la retroiluminación completa del teclado? (video para cuando llegue a casa)
fuente
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.JavaScript, 90 bytes
Requiere
ActiveX
que 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
fuente
Bash, 33 bytes
Esto supone que Num-Lock está activado antes de ejecutarse. Cambiar
off
y de loon
contrario. Requiere elnumlockx
paquete obviamente;)Editar:
Vi a Alex Howansky ya ha publicado esta solución, pero no la marcó con Bash y simplemente busqué en el sitio "Bash".
fuente
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.Archivo por lotes (con ayuda de vbs), 74 + 2 = 76 bytes
Parcialmente basado en la respuesta de Trelzevir .
.vbs
se incluye automáticamente enPATHEXT
.fuente
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)
Sin golf:
fuente
Python3,
5549 bytes¡Gracias @NoOneIsHere por -4 bytes!
Esto incluye paquetes: pyautogui y
time
módulosCódigo:
¡Gracias @NoOneIsHere por -4 bytes!
La clave en acción:
fuente
while 1
y convirtiéndolo en una línea con un punto y coma. (while 1:pyautogui.press("capslock");time.sleep(.5)
)import pyautogui
al inicio del programa y cambiar el restowhile 1:pyautogui.press("capslock");time.sleep(.5)
, puede hacer que esta sea una respuesta válida.import time
allí.import time
...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)
Declaración de suspensión (Win-64, + 8 bytes)
Función de ventana inmediata anónima VBE
Versión un poco más divertida, 97 Bytes
Un conjunto de subrutinas recursivas que molestan indefinidamente al usuario.
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
fuente