Clignote le verrouillage des majuscules

107

La plupart des claviers d'ordinateur disposent d'un petit voyant à LED intégré, indiquant le mode d'entrée actuel, contrôlé par la touche CAPS LOCK.

entrez la description de l'image ici

Votre tâche est de le faire clignoter:

  • Allume ça;
  • Attendez 0,5 (+/- 0,1) seconde;
  • Éteignez à nouveau.

Les séquences vidéo du clignotement de la LED sont très appréciées!

Règles

  • Vous pouvez faire clignoter une autre LED (par exemple, Scroll Lock, Num Lock, statut Wi-Fi, etc.), si vous le souhaitez, mais elle doit être physiquement située sur votre clavier;

  • S'il manque une sleepcommande d' une seconde à votre langue , votre programme peut utiliser un délai de 1 seconde, avec une pénalité de +2 octets (c'est pour 0.);

  • Votre programme doit clignoter au moins une fois. Ce qui se passe ensuite, vous le souhaitez, c’est-à-dire qu’il peut continuer à clignoter (dans ce cas, vous devez attendre le même délai avant de le rallumer), ou arrêter, etc.

  • Si le voyant choisi est allumé par défaut sur votre système, vous pouvez supposer qu'il a été explicitement désactivé (par exemple, manuellement) avant l'exécution du programme.

  • C'est , la réponse la plus courte en octets gagne.

Classement

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>

Zeppelin
la source
83
Tricher réponse qui ne fonctionne pas tout à fait: sur un système Linux, plantez intentionnellement le noyau. L'équivalent Linux d'un BSOD fait clignoter le voyant Verrouillage des touches, juste au cas où l'incident mettrait également hors service le matériel vidéo et que vous ne puissiez pas voir le rapport BSOD à l'écran. Malheureusement, autant que je sache, il clignote un peu trop vite pour constituer une réponse éligible. Cela conduirait à une solution (quelque peu malveillante) de 14 octets si elle était autorisée.
57
Maintenant clignote en code Morse: "Au secours, je suis coincé dans une fabrique de claviers!"
mbomb007
12
@ ais523 mon ordinateur portable le fera si je le secoue (0 octet). Trop vite ...
Tim
18
La touche de verrouillage sur un C64 est un commutateur mécanique. Cela pourrait être un peu compliqué ...
Mark
8
Je me demande maintenant si le voyant de pile faible de mon clavier sans fil clignote au bon rythme. Si c'est le cas: zéro octet.
Roger Lipscombe

Réponses:

123

Befunge (BEF32), 390 334 305 octets

C'est vraiment idiot, mais tant que ce site accepte la notion que l'interprète définit le langage , je pourrais aussi bien abuser de la règle. Ce code ne fonctionne que dans Win32 Befunge-93 Implementation de Kevin Vigor, version 1.01 (je pense que la seule version disponible). Vous pouvez télécharger le binaire ici .

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

Normalement, vous ne vous attendriez pas à ce que ce type de défi soit possible dans un Befunge, mais BEF32 est un port Win32 d’une très ancienne version de l’implémentation de référence, et à l’époque, il n’y avait pas de limite à la vérification de la pcommande (put). Cela nous permet effectivement d’écrire dans n’importe quel emplacement de la mémoire, ce qui nous permet de forcer l’interprète à exécuter du code machine arbitraire.

Maintenant, nous ne pouvons pas réellement modifier le code existant, car la section .text de l'exécutable n'aura pas les droits d'écriture. Cependant, nous pouvons amener le système à exécuter une adresse dans la section .data en écrivant cette adresse dans la atexittable de la bibliothèque d'exécution (du moins, je suppose que c'est bien ce que c'est). Le résultat final est que notre code est automatiquement exécuté à la sortie de l'interpréteur.

Cela repose sur le fait que l'exécutable est chargé à une adresse fixe. Nous savons donc exactement où tout se trouve en mémoire. Cela ne fonctionnerait normalement pas si vous surchargiez les paramètres ASLR par défaut . Cela suppose également que la section .data soit exécutable, bien que l'attribut exécutable ne soit pas défini. Cela ne fonctionnera donc probablement pas si vous surchargez les paramètres DEP par défaut .

Le code lui-même est essentiellement une copie de la technique de Megokeybd_event traduite en code machine:

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

Cette version du code continue de clignoter pour toujours (ou du moins jusqu'à ce que vous mettiez fin au processus), car il s'est avéré qu'il était plus facile de jouer au golf qu'un seul flash.

Et comme tout le monde publie des animations, voici une approximation de ce à quoi cela ressemble sur mon clavier.

Animation de la lumière capslock clignotante

James Holderness
la source
30
Les gens abusent généralement des règles afin de leur faciliter la vie, mais ce ne sont pas des codeurs Befunge :)
Aaron
21
Jamais attendu une réponse esolang à ce défi +1
zeppelin
9
C'est maintenant ma réponse préférée sur ce site
Cruncher
2
Excellente mise en œuvre!
Daniel
3
@ JamesHolderness Alors? C'est une excellente réponse, même si elle est longue.
NoOneIsHere
72

AutoHotkey, 29 à 26 octets

Merci à @Dane pour avoir économisé 3 octets

Loop{
Send,{VK14}
Sleep,500
}

J'ai initialement choisi NumLockparce que c'est un caractère plus court que CapsLock. Le GIF ci-dessous reflète cette condition. C'est le même effet que le code modifié ci-dessus. J'aurais pu utiliser la méthode VK90ci-dessus pour que le GIF soit toujours précis, mais l'alignement sur le défi initial se sentait mieux.

BlinkingNumLock


En l'honneur du commentaire de mbomb007 , voici un message de code morse sur 239 octets :

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
}

Voici les 30 premières secondes de ce message:

MorseCodeBlinking

Rôti d'ingénieur
la source
3
Que diriez-vous send,{vk14}de raser 3 octets? Bonus: vous feriez clignoter le CapsLock.
Dane
35

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

Ce code fera clignoter à tout jamais le voyant du lecteur de disquette au rythme requis ( PAUSE 25= pause pendant 25/50 secondes).

Ce serait probablement plus court en montage, mais je n'ai pas les outils appropriés à portée de main. Il s'agit de la taille de la liste GFA-Basic une fois enregistrée au format .LST et modifiée manuellement pour supprimer les blancs inutiles, renommer les instructions en chaînes plus courtes et les remplacer CR+LFpar des simples CR. Notez qu'une finale CRest requise.

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

S'étendra automatiquement à:

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

SPOKEest un suralimenté POKEqui met d'abord le 68000 en mode superviseur , de sorte qu'il est autorisé à accéder aux zones de mémoire restreintes (ici: l' adresse d' écriture de registre de la puce audio YM2149, qui est également responsable de certaines autres E / S).

Et oui: la LED est physiquement située sur le clavier ... je suppose.

LED de disquette ST

Je n'ai pas accès à une vraie ST pour le moment, alors ce n'est qu'une maquette.

Arnauld
la source
7
Lecteur de disquette! Hou la la!
David Conrad
12
Cercle rouge dessiné à la main manquant ...
Hagen von Eitzen
@HagenvonEitzen Heureusement, le cercle rouge n'est plus nécessaire. :-)
Arnauld
23

poisson + ckb , 56 54 octets

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

Clignote tout mon clavier en couleurs aléatoires, bien que le nombre de chiffres ne soit pas long de 6 chiffres, il est un peu limité.

Et oui, ce shell glob est potentiellement dangereux. Fonctionne sur ma machine ™

Bonus script, 8 mois plus tard: Cela passera par toutes les couleurs. Pas de 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
la source
13
De quel clavier s'agit-il? lol
Mc Kernel
1
@ McKernel bosse curieux de savoir quel clavier c'est aussi
CraigR8806 24/02/17
3
K70 RVB avec touches personnalisées - unascribe.com/f/67209fe8_keyboard_design.svg
Una
6
Des points bonus pour aller au-delà en faisant clignoter tout le clavier.
Mât
tee /d*/*/*/c*? Des points de bonus pour le risque de forcer un ordinateur de mauvaise qualité dans le futur, lorsque celui-ci s’agrandit inévitablement en un élément important. (Variables EFI n'importe qui? Peut-être y aura-t-il quelque chose comme /dev/efi/vars/cpu_type)
user253751
21

Bash + Amixer, 45 Octets

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

Clignote la lumière muette sur mon clavier.

Tim
la source
17
a()(amixer set Master toggle;sleep .5;a)ou en amixer set Master toggle;sleep .5;$0tant que programme complet sont un peu plus courts.
Dennis
19

C (Windows), 79 octets

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

Explication

keybd_eventest une fonction API Windows (obsolète) pour envoyer un événement de clavier (keyup ou keydown). 20est le code de la touche Caps Lock,69 le code de balayage matériel (je ne sais pas ce que cela signifie), ainsi 1que keydown et 3keyup. Une pression sur une touche est simulée en envoyant un événement keydown immédiatement suivi d'un événement keyup. Un appui sur la touche est envoyé pour activer le verrouillage majuscule, puis le programme dort pendant 500 millisecondes, puis un autre appui est envoyé pour désactiver le verrouillage majuscule.

Merci à Steadybox pour un tas d'octets sauvés

Mego
la source
1
Étant donné que c'est C, ne pouvez-vous pas déclarer int keybd_event();?
Neil
@ Neil Ce serait void keybd_event();, et j'ai aussi besoin void Sleep();de windows.h. Ces deux déclarations ensemble sont plus longues que l'include.
Mego
1
79 octets:#include<windows.h> k(n){keybd_event(20,69,n,0);}f(){k(1);k(3);Sleep(500);f();}
Steadybox le
2
Bien sûr, mais pour les types primitifs, C ne se soucie pas de la discordance si vous n'utilisez jamais le résultat.
Neil
6
Les codes de numérisation sont ce que votre clavier envoie sur le fil au niveau le plus bas. Leurs valeurs sont basées sur des positions dans une disposition standard car cela leur permet de rendre le clavier aussi bête que possible et sans avoir à câbler chaque touche L’interface de clavier USB de base a ensuite intégré la limitation dans la grande majorité des claviers il ya environ 20 ans en concevant au minimum) au prix du transfert d’une étape de traduction sur l’ordinateur hôte. en.wikipedia.org/wiki/Scancode
Dan Neely
16

MATLAB, 146 136 70

Merci à @Poke d' avoir supprimé 66 octets!

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

Ceci utilise la capacité de Matlab à appeler des classes Java. Le voyant de verrouillage numérique clignote en boucle en appuyant et en relâchant par programmation Num Lock.

La vidéo ou ça ne s'est pas passé .

Luis Mendo
la source
9
Pouvez-vous utiliser 144au lieu de java.awt.event.KeyEvent.VK_NUM_LOCK? CAPS_LOCK serait20
Poke le
2
@Poke Oui! Il y a 66 octets !!
Luis Mendo
7
C'est marrant que ce soit plus court que le java answer
Matsemann
15

Code machine x86 pour PC (par exemple, fichier COM MS-DOS), 27 octets

Ce code machine (affiché ici avec un rendu Unicode du CP437 habituel du BIOS du PC) fera clignoter le voyant CAPS LOCK pour toujours sur un PC:

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

Le code a été créé pour ne contenir aucun octet NULL et peut donc être saisi au clavier (en utilisant l'astuce Alt + XXX pour les caractères étendus) afin de créer un fichier COM (par exemple, en utilisant la COPY CON blink.comcommande sous MS-DOS, auquel cas le fichier de sortie devra contenir un 28 faux e octet, la^Z caractère (EOF) nécessaire pour arrêter l'opération de copie).

L’effet est obtenu en envoyant directement des commandes au contrôleur de clavier du PC (port 60h) pour définir l’état des voyants (en tant qu’effet secondaire, il est possible que les voyants Num Lock et Scroll Lock soient dans un état non clignotant aléatoire). Pour minimiser le nombre d’instructions, le minutage est obtenu en utilisant le compte à rebours géré par le BIOS à l’adresse 0040:0040(il décrémente toutes les 54,925 ms, le cycle de clignotement étant de 494,3 ms, ce qui correspond à la marge autorisée) - ce compteur est normalement utilisé par le BIOS pour arrêter le moteur de la disquette; étant donné que le programme n'utilise pas le lecteur de disquette et que le code est supposé s'exécuter dans un environnement à tâche unique (par exemple, DOS), la lecture avec le minuteur du moteur de disquette n'est pas un problème.

Le code fonctionne correctement sous MS-DOS (essayé avec VirtualBox, il devrait également fonctionner correctement sur du matériel réel, bien que je n’aie pas encore le temps de créer une clé USB amorçable MS-DOS à tester). Comme il ne repose sur aucune fonction du système d'exploitation, il peut même fonctionner sans le système d'exploitation (par exemple, en le plaçant dans le secteur de démarrage d'un disque). Il nécessite au moins un processeur 80186 pour s'exécuter, en raison des instructions "push immédiat" utilisées pour raccourcir le code de certains octets.

Code source de l'assemblage:

  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

Décharge hexadécimale du code assemblé:

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

Voici le résultat de l'exécution sous MS-DOS dans VirtualBox (ne fonctionne pas avec DosBox, probablement parce que le contrôleur de clavier n'est pas complètement émulé):

Blinking CAPS LOCK

(désolé pour la vidéo tremblante).

Ale
la source
Voici un exemple d'utilisation de copy con program.exe: youtube.com/watch?v=iefuJ_jZAiQ
Jerry Jeremiah
13

SmileBASIC, 36 23 octets

XON MIC
WAIT 30XOFF MIC

Clignote le voyant d'état du microphone. (vidéo à venir)

12Me21
la source
12

Python2 - 108 octets

Est-ce que la touche majuscule. Fait intéressant, cela allume en fait uniquement la DEL sans affecter le clavier ni appuyer sur la touche. Vous pouvez changer le 4à la fin 2pour faire numlock. 6fait les deux.

import fcntl,os,time;exec"fcntl.ioctl(os.open('/dev/console',os.O_NOCTTY),19250,%d);time.sleep(.5);"*2%(4,0)
Maltysen
la source
On dirait que j'ai eu une erreur: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 êtes-vous sur Windows?
Maltysen
1
Non, je suis sur macOS Sierra Version 10.12.1 (16B2555).
haykam
8

shell + numlockx, 40 à 35 octets

[5 octets sauvés grâce à Ryan.]

Clignote continuellement le voyant NumLock sur les systèmes unix.

numlockx toggle;sleep .5;exec sh $0

Un clignotement, 33 octets

numlockx on;sleep .5;numlockx off
Alex Howansky
la source
1
Vous pouvez utiliser exec sh $0au lieu de whilepour sauvegarder 5 octets, ou sh $0si la création de processus pour toujours est considérée comme acceptable.
Ry-
2
watch -n0.5 numlockx toggle pour 27 octets.
Tejas Kale
Pour une autre saveur de ce qui précède, sur les coques interactives, vous pouvez taper: numlockx toggle;sleep .5;!#(27 octets) pour un clignotement unique. !#est l'événement d'évolution de l'historique remplacé par tout ce qui est entré jusqu'à présent dans la ligne de commande.
init_js
Dans la commande Single Blink, le onpeut être omis. c'est le défaut.
init_js
Avec des affectations, pas de trucs: f=numlockx;$f;sleep .5;$f off(29). Et (une version inférieure) en boucle utilisant la récursivité: g(){ f=numlockx;$f toggle;sleep .5;g;};g(40).
init_js
8

PowerShell , 71 octets

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

Remarques

  • Clignote pour toujours
  • Utilise NUM LOCKpour sauvegarder un octet.
briantiste
la source
"Si votre langue manque une commande de veille inférieure à une seconde ...", cela ne semble pas manquer à PowerShell.
Dane
@ Dan J'ai demandé à l'affiche pour des éclaircissements. Si le choix d'accepter la pénalité n'est pas autorisé, je l'inverserai.
Briantist
@ Dane est revenu en arrière.
Briantist
Comment se fait-il que dormir ne fonctionne pas ici? Je l'ai essayé et il semble aller comme 5 ms mais je pensais que par défaut c'est (-s) donc ce serait 0.5 s?
Jake Harry
1
@JakeHarry: Le -Secondsparamètre est un int, il 0.5sera donc converti en int, ce qui entraîne 0(arrondi à pair est le mode d'arrondi par défaut). Donc, vous ne dormez pas du tout (il y a un retard d'environ 1000 ticks ici, donc 10 µs). Règles de conversion et de liaison de paramètres relativement basiques dans PowerShell.
Joey
7

VBS, 75 octets

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

Clignote de manière répétée sur la touche Verr Num, tout comme numlockun octet plus court que capslock.

Trelzevir
la source
7

C #, 215 202 198 195 185 octets

Sans me rendre compte que j'ai fait le "même" code que cette réponse de @Mego , allez y faire un tour !.

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

Économisé 13 octets grâce à @Metoniem
Économisé 10 octets grâce à @VisualMelon

Voici une version complète formatée montrant son fonctionnement:

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

Pour le changement amusant bonus n++ & 2à n+=2 & 2et regarder le verrouillage numérique et verrouillage des majuscules clés alternatives en clignotant et hors tension. Je ne sais pas pourquoi cela se produit parce que cela ne devrait pas, mais ça a l'air "cool".

TheLethalCoder
la source
Attendez, vous êtes, using System;mais pour autant que je sache, vous n'utilisez rien directement à partir de l'espace de noms System? Je pense que vous pouvez enlever ça.
Metoniem
@ Metoniem Bon spot, la signature de la keybd_eventméthode est en réalité void keybd_event(byte bVk, byte bScan, uint dwFlags, UIntPtr dwExtraInfo);. Je relâche je pourrais enlever les UIntPtraprès la publication et les avoir comme intet j'ai juste oublié de supprimer les utiliser.
TheLethalCoder
1
Ahh, je vois haha, il se passe des choses comme ça! Belle réponse homme :)
Metoniem
Je pense que vous devriez vraiment nommer et taper les deux «fonctions»: vous faites référence à kune, mais c'est clairement indéfini. Non cochée, mais je pense que vous feriez mieux d'avoir un seul appel à keybd_event dans une boucle non bridée, je devrais penser: for(int i=0;;...Sleep(250))keybd_event(i++&2)ou quelque chose du genre .
VisualMelon
@VisualMelon Merci, j'ai mis à jour le code, il a fallu modifier le sommeil pour obtenir le bon timing :)
TheLethalCoder 23/02/2017
6

Java 7, 121 118 113 octets

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

Un simple appui et relâchement ne fait que déclencher l'état; ça ne cligne pas des yeux. Ainsi, nous pouvons aussi bien le boucler et il semble que la récursivité soit la manière la moins chère de le faire.

Poussée
la source
1
Quel dommage que je n'ai pas d'interprète QBasic ici! Parce que c'est fait en utilisant une instruction Poke !
sergiol
Cela optimise-t-il l'appel final ou finira-t-il par dépasser la limite de la pile d'appels?
Cyoce
@Cyoce Je ne pense pas que Java offre l'optimisation des appels en queue avant Java 9, ce qui a finalement atteint la limite de profondeur de récursivité, mais ce n'est pas grave, je n'avais besoin que de faire clignoter la lumière une fois:]
Poke
1
Je veux dire que vous pouvez mettre tout le code dans un lambda, qui perd la surcharge de la déclaration de fonction. Kind of like:, ()->for(;;){java.awt.Robot r=new java.awt.Robot();r.keyPress(20);r.delay(500);r.keyRelease(20);}qui représente une économie de 18 octets en raison de la surcharge de déclaration lambda à 4 caractères.
Tamoghna Chowdhury le
1
Une raison de plus pour que je ne retourne pas! ;) Très sérieusement, changez simplement la réponse en Java 8 et entrez dans des scores à deux chiffres. Installez-le si vous ne l'avez pas déjà testé.
Tamoghna Chowdhury le
5

JavaScript, 82 octets

Le crédit va à @FinW fait, je viens de changer l'ancienne fonction en nouvelle fonction de flèche ES6 afin d'économiser quelques octets. Et parce que je n'ai pas assez de points pour commenter, j'ai écrit une nouvelle réponse.

Modifier - Supprimez les crochets pour enregistrer 2 octets supplémentaires.

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

Son code ressemblait à ceci

o=new ActiveXObject("WScript.Shell");setInterval(function(){o.SendKeys("{NUMLOCK}")},500);
règle23
la source
1
Pour les flèches, vous n'avez pas besoin de parenthèses.
fnɛtɪk
Totalement oublié à ce sujet, merci.
Ruler23
Je voulais dire les parenthèses qui ont été laissés de quand vous avez supprimé function ()
fnɛtɪk
Oh, mais tu ne peux pas faire ça, ça ne marchera pas. Mais vous pouvez supprimer les crochets car ils ne sont pas nécessaires dans les déclarations sur une ligne (pour une raison quelconque, votre commentaire me les a rappelées même si vous vouliez dire autre chose)
souverain 29
Enregistrer un octet soit en remplaçant le ()par un autre, le caractère unique, par exemple _ou en faisant oun paramètre avec une valeur par défaut, comme suit: (o=new ActiveXObject("WScript.Shell"))=>.
Shaggy
4

Scala, 84 83 78 octets

Edit: 1 octet enregistré grâce à @TheLethalCoder,

Il a suggéré d'utiliser 1>0à la place de true.

Edit 2: 5 octets enregistrés grâce à @ Corvus_192,

Il a suggéré d'utiliser la notation infixe et de supprimer les parenthèses après le constructeur

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

Port Scala standard de la réponse Java de @Poke . Tapez-le directement dans l'invite de l'interprète Scala.

Une vidéo montre le clignotement de ma DEL Caps Lock et de mon OSD pour démarrer!

Voyant de verrouillage majuscule et OSD clignotant

Tamoghna Chowdhury
la source
Pouvez-vous faire for(;;)ou while(1>0)ou while(1)en Scala?
TheLethalCoder
La seconde est possible. Une économie de 1 octet qui ne m'était pas venue auparavant. Merci!
Tamoghna Chowdhury le
Vous pouvez utiliser la notation infixe: r keyPress 20est un octet plus court que r.keyPress(20). Il en va de même pour les autres appels de méthode, économisant au total 3 octets.
corvus_192
En outre, supprimez les parenthèses de l'appel du constructeur pour enregistrer 2 octets supplémentaires.
corvus_192
4

Terminal Linux, 8 + 11 = 19 octets

démo

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

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

WAT?

Selon ECMA-48 , 1Bcommence la séquence d'échappement de contrôle terminal.

Caps on = 1B 5B 33 71, alors off =1B 5B 30 71

pv vue d'avancement

f fichier

-q silencieux

-L8 8 octets / s = délai de 0,5 seconde

Usage

Préparer

#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+ F6passer à la console native

courir pv f -q -L8

Ctrl+ Alt+ F7revenir

Вгений Новиков
la source
3

Bash + Xdotool, 36 octets

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

Il suffit de l'exécuter dans un shell bash. Il doit être dans un environnement graphique. Boucle infinie d' ici . Num_Lock changé à 66 pour économiser 6 octets, et grâce à @Michael Kjörling pour 2 octets.

Feldspath15523
la source
Vous pouvez enregistrer au moins deux octets en supprimant les espaces inutiles. Vous n'avez pas besoin d'espaces avant l'accolade fermante ni d'espaces entourant les points-virgules séparant les commandes. Vous avez besoin de l'espace après l'accolade d' ouverture, cependant.
un CVn
En outre, concernant votre révision initiale: N'oubliez pas que vous pouvez utiliser :un alias pour la trueplupart des systèmes. while :;do sth;donefait la même chose que while true;do sth;donemais est plus court de trois octets. for((;;)){ sth;}est encore plus courte, cependant.
un CVn
@Cyoce Où? Cela n'a pas fonctionné pour moi.
Feldspar15523
@ Cyoce Je pense que cela ne fonctionne que pour déclarer des fonctions.
Feldspar15523
@ Feldspar15523 oups alors tant pis
Cyoce
3

xdotool , 20 octets

key -delay=500 66 66

Appuie deux fois sur la touche 66, également appelée Verrouillage majuscule , avec un délai de 500 ms entre les appuis.

Notez que xdotool est un langage de script. il peut être exécuté à partir d'un fichier et prend même en charge les shebangs. Depuis sesexec commande permet d’exécuter des programmes externes, il est capable de tester les additions et les primalités. Il est donc conforme à notre définition du langage de programmation.

Essai

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

entrez la description de l'image ici

Dennis
la source
3

Python utilisant pyautogui: 126 143 115 103 octets

Merci à @ nedla2004 pour avoir économisé 12 octets

from pyautogui import*
import time
while 1:keyDown('capslock');time.sleep(.5);keyUp('capslock')pslock')
Tiebe Groosman
la source
1
Vous pouvez changer la boucle while en while 1:keyDown('capslock');time.sleep(.5);keyUp('capslock'), et vous pouvez changer la première ligne en from pyautogui import*et la seconde en import time.
nedla2004
vous pouvez supprimer le doublet 'capslock'. import time;c='capslock' ...
init_js
vous pouvez également supprimer timecomplètement. from pyautogui import*; while 1:press('capslock',1,.5). ymmv. sur mon environnement, pyautogui a une incidence sur le cas que je tape, mais la lumière ne clignote pas.
init_js
3

Bash, 31 octets

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

Fonctionne en X, sans accès root! (Si cela ne fonctionne pas pour vous, consultez la fonction init du code ci-dessous pour vous assurer que xkbcomp est configuré correctement)

Et un script bonus pour envoyer n'importe quel code Morse via majuscule (pas joué au golf):

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

Exemple: blink "...././.-../.-../---//.--/---/.-./.-../-..///"

tourdetour
la source
2

Bash + setleds , 43 bytes

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

Assez simple. Utilise setledspour basculer la lumière.

Rɪᴋᴇʀ
la source
2

Bash, 103 octets

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

Doit être exécuté en tant que root.

Le clignotement de tout le rétroéclairage du clavier fonctionne-t-il? (vidéo à venir quand je rentre à la maison)

Tyzoid
la source
1
Does flashing the entire keyboard backlight work?Eh bien, si vous y réfléchissez, la surbrillance du clavier est un indicateur de la surbrillance du clavier, et il est définitivement "physiquement situé sur le clavier", alors, oui, je pense que ça compte.
Zeppelin
2

JavaScript, 90 octets

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

Cela ActiveXsignifie que cela ne fonctionnera que sur IE (Edge ne le prend pas en charge, cependant). La touche NUMLOCK clignote car, comme pour les autres réponses, elle est plus courte que CAPSLOCK ou SCROLLLOCK.

Ungolfed

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

Bash, 33 octets

Cela suppose que Num-Lock soit activé avant son exécution. Changer offet onautrement. Requiert le numlockxpaquet évidemment;)

numlockx off;sleep .5;numlockx on

Modifier:

Saw Alex Howansky a déjà posté cette solution, mais ne l’a pas marquée avec Bash et je viens de chercher le site pour "Bash".

DBX12
la source
+1, vous n'avez pas à le faire clignoter à plusieurs reprises (je pense).
NoOneIsHere
Si vous êtes dans un shell interactif, vous pouvez taper sur la ligne de commande: numlockx toggle;sleep .5;!# (27 octets). !#est l'événement qui étend à tout ce qui se trouve dans la ligne de commande.
init_js
2

Fichier de commandes (avec l'aide de vbs), 74 + 2 = 76 octets

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

Partiellement basé sur la réponse de Trelzevir .

.vbsest automatiquement inclus dans PATHEXT.

no1xsyzy
la source
1

Script Kotlin, 72 octets

Bien que ce ne soit pas le plus petit, c'est quand même assez bon. J'adore la course de kotlin pour certaines choses, et c'est l'une d'entre elles (plus petite que val r = java.awt.Robot () car nous n'avons pas besoin à la fois de r. Et de val r =. Pourtant, c'est plus long 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)
    }
}
Qertu Uerty
la source
1

Python3, 55 à 49 octets

Merci @NoOneIsHere pour -4 octets!

Cela inclut les paquets: pyautogui et les timemodules
Code:

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

Merci @NoOneIsHere pour -4 octets!
La clé en action:
verrouillage des majuscules

Rahul Bharadwaj
la source
3
Bienvenue sur le site! :)
DJMcMayhem
Vous pouvez économiser pas mal d’octets en l’utilisant while 1et en le transformant en une ligne avec un point-virgule. ( while 1:pyautogui.press("capslock");time.sleep(.5))
NoOneIsHere le
1
Malheureusement, il s'agit également d'un extrait de code, mais en ajoutant import pyautoguiau début du programme et en modifiant le reste, while 1:pyautogui.press("capslock");time.sleep(.5)vous pouvez en faire une réponse valide.
Caird coinheringaahing
@cairdcoinheringaahing Il doit également y en avoir un import time.
FlipTack
@cairdcoinheringaahing Exactement, c'est pourquoi vous avez besoin d'un import time...
FlipTack
1

VBA, 82 octets

VBE anonyme Fonction de fenêtre immédiate qui ne prend aucune entrée et gêne l'utilisateur indéfiniment. Dépendant de la fonction windows kernel32 qui est déclarée ci-dessous.

Déclaration de sommeil (Win-32)

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

Déclaration de veille (Win-64, + 8 octets)

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

Fonction de fenêtre immédiate VBE anonyme

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

Version légèrement plus amusante, 97 octets

Un ensemble de sous-programmes mutuellement récursifs qui dérangent indéfiniment l'utilisateur

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

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

Version discutable, 66 + 2 octets

Je ne sais pas si le fait de devoir déclarer une fonction à partir d'une dll compte comme une fonction intégrée. Dans le cas contraire, voici une version de 66 + 2 octets qui attend 1 seconde

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