Blinke mit der FESTSTELLTASTE

107

Die meisten Computertastaturen verfügen über eine kleine integrierte LED-Anzeige, die den aktuellen Eingabemodus anzeigt und mit der Feststelltaste gesteuert wird.

Bildbeschreibung hier eingeben

Ihre Aufgabe ist es, es zu blinken:

  • Mach es an;
  • Warten Sie 0,5 (+/- 0,1) Sekunden.
  • Schalte es wieder aus.

Videomaterial des LED-Blinkens wird sehr geschätzt!

Regeln

  • Sie können eine andere LED blinken lassen (z. B. Scroll Lock, Num Lock, WLAN-Status usw.), die sich jedoch physisch auf Ihrer Tastatur befinden muss.

  • Wenn in Ihrer Sprache ein untergeordneter sleepBefehl fehlt , verwendet Ihr Programm möglicherweise stattdessen eine Verzögerung von 1 Sekunde mit einer Strafe von +2 Byte (das ist für 0.).

  • Ihr Programm muss mindestens einmal blinken, was danach passiert, liegt an Ihnen, dh es kann weiterhin blinken (in diesem Fall müssen Sie auf die gleiche Verzögerung warten, bevor Sie es wieder einschalten) oder anhalten usw .;

  • Wenn die ausgewählte LED standardmäßig AN ist, können Sie auf Ihrem System davon ausgehen, dass sie explizit ausgeschaltet wurde (z. B. manuell), bevor das Programm ausgeführt wird.

  • Dies ist , die kürzeste Antwort in Bytes gewinnt.

Bestenliste

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
quelle
83
Cheating Antwort, die nicht ganz funktioniert: Auf einem Linux-System absichtlich den Kernel zum Absturz bringen. Linuxs BSOD-Äquivalent blinkt die Feststelltaste, nur für den Fall, dass der Absturz auch die Video-Hardware zum Erliegen gebracht hat und Sie den BSOD-Bericht nicht auf dem Bildschirm sehen können. Leider blinkt es, soweit ich das beurteilen kann, etwas zu schnell, um eine in Frage kommende Antwort zu sein. Dies würde zu einer (etwas böswilligen) 14-Byte-Lösung führen, wenn dies zulässig wäre.
57
Jetzt blink es in Morsecode: "Hilfe, ich bin in einer Tastaturfabrik gefangen!"
mbomb007
12
@ ais523 mein laptop macht das wenn ich es schüttle (0 bytes). Zu schnell, aber ...
Tim
18
Die Feststelltaste eines C64 ist ein mechanischer Schalter. Blinkt das könnte ein bisschen schwierig sein ...
Mark
8
Jetzt frage ich mich, ob die LED für niedrigen Batteriestand auf meiner drahtlosen Tastatur mit der richtigen Geschwindigkeit blinkt. Wenn ja: null Bytes.
Roger Lipscombe

Antworten:

123

Befunge (BEF32), 390 334 305 Bytes

Das ist wirklich albern, aber solange diese Seite die Vorstellung akzeptiert, dass der Dolmetscher die Sprache definiert , könnte ich die Regel genauso gut missbrauchen. Dieser Code funktioniert nur in Kevin Vigors Win32 Befunge-93-Implementierung, Version 1.01 (ich denke, die einzige verfügbare Version). Sie können die Binärdatei hier herunterladen .

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

Normalerweise würden Sie nicht erwarten, dass diese Art von Herausforderung in einer Befunge möglich ist, aber BEF32 ist ein Win32-Port einer sehr alten Version der Referenzimplementierung, und damals gab es keine Einschränkungen beim p(put) -Befehl. Auf diese Weise können wir effektiv an eine beliebige Stelle im Speicher schreiben, wodurch der Interpreter letztendlich gezwungen wird, beliebigen Maschinencode auszuführen.

Jetzt können wir den vorhandenen Code nicht mehr ändern, da der .text-Abschnitt der ausführbaren Datei keine Schreibrechte hat. Wir können das System jedoch dazu verleiten, eine Adresse im Abschnitt .data auszuführen, indem wir diese Adresse in die Tabelle der Laufzeitbibliothek schreiben atexit(zumindest vermute ich, dass dies der Fall ist). Das Endergebnis ist, dass unser Code automatisch ausgeführt wird, wenn der Interpreter beendet wird.

Dies beruht auf der Tatsache, dass die ausführbare Datei an einer festen Adresse geladen wird, sodass wir genau wissen, wo sich alles im Speicher befindet - es würde vermutlich nicht funktionieren, wenn Sie die Standard- ASLR- Einstellungen überschreiben . Es hängt auch davon ab, dass der Abschnitt .data ausführbar ist, obwohl das Attribut executable nicht festgelegt ist. Daher würde es höchstwahrscheinlich nicht funktionieren, wenn Sie die Standard- DEP- Einstellungen überschreiben .

Der Code selbst ist im Wesentlichen eine Kopie von Mego ‚s keybd_eventTechnik in Maschinencode übersetzt:

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

Diese Version des Codes blinkt für immer weiter (oder zumindest bis Sie den Vorgang beenden), da sich herausstellte, dass das Golfen einfacher ist als ein einziger Blitz.

Und da jeder Animationen veröffentlicht, ist dies eine Annäherung an das, was auf meiner Tastatur aussieht.

Animation des Capslock-Lichts blinkt

James Holderness
quelle
30
Die Leute missbrauchen normalerweise Regeln, um ihnen das Leben zu erleichtern, aber das sind keine Befunge-Programmierer :)
Aaron
21
Nie erwartet eine Antwort von Esolang auf diese Herausforderung +1
Zeppelin
9
Dies ist jetzt meine Lieblingsantwort auf dieser Seite
Cruncher
2
Hervorragende Umsetzung!
Daniel
3
@ JamesHolderness Also? Dies ist eine großartige Antwort, auch wenn es lang ist.
NoOneIsHere
72

AutoHotkey, 29 26 Bytes

Vielen Dank an @Dane für das Speichern von 3 Bytes

Loop{
Send,{VK14}
Sleep,500
}

Ich habe ursprünglich gewählt, NumLockweil es ein Zeichen kürzer ist als CapsLock. Das unten stehende GIF gibt diesen Zustand wieder. Es ist der gleiche Effekt wie der geänderte Code oben. Ich hätte mit dem VK90oben Gesagten weitermachen können, um das GIF noch genauer zu machen, aber die Ausrichtung auf die ursprüngliche Herausforderung fühlte sich besser an.

BlinkingNumLock


Zu Ehren des Kommentars von mbomb007 ist hier eine Morsecode- Nachricht in 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
}

Hier sind die ersten 30 Sekunden dieser Nachricht:

MorseCodeBlinking

Ingenieur Toast
quelle
3
Wie wäre es send,{vk14}stattdessen 3 Bytes zu rasieren? Bonus: Sie würden die Feststelltaste blinken.
Däne
35

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

Mit diesem Code blinkt die LED des Diskettenlaufwerks für immer mit der erforderlichen Geschwindigkeit ( PAUSE 25= Pause für 25/50 Sekunden).

Dies wäre wahrscheinlich kürzer in der Montage, aber ich habe nicht die richtigen Werkzeuge zur Hand. Dies ist die Größe der GFA-Basic-Auflistung, die einmal im LST-Format gespeichert und manuell bearbeitet wurde, um nutzlose Leerzeichen zu entfernen, Anweisungen in kürzere Zeichenfolgen umzubenennen und durch CR+LFeinfache zu ersetzen CR. Beachten Sie, dass ein Finale CRerforderlich ist.

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

Wird automatisch erweitert auf:

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

SPOKEist ein Kompressor POKE, der den 68000 zuerst in den Supervisor- Modus versetzt, damit er auf eingeschränkte Speicherbereiche zugreifen kann (hier: die Registerschreibadresse des YM2149-Soundchips, der auch für andere E / A verantwortlich ist).

Und ja: Die LED befindet sich physisch auf der Tastatur ... nehme ich an.

ST Floppy LED

Ich habe momentan keinen Zugang zu einem echten ST, das ist also nur ein Modell.

Arnauld
quelle
7
Diskettenlaufwerk! Beeindruckend!
David Conrad
12
Handgezeichneter roter Kreis fehlt ...
Hagen von Eitzen
@HagenvonEitzen Hoffentlich wird der rote Kreis nicht mehr benötigt. :-)
Arnauld
23

fish + ckb , 56 54 bytes

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

Blinkt meine gesamte Tastatur in zufälligen Farben, obwohl die Zahl nicht 6 Hexadezimalziffern lang ist, ist sie ein bisschen begrenzt.

Und ja, dieser Shell Glob ist potenziell gefährlich. Funktioniert auf meiner Maschine ™

Bonus-Skript, 8 Monate später: Dies wird durch alle Farben gehen. Nicht golfen.

#!/usr/bin/fish
while true
        echo rgb (printf '%06x' (random 0 16777215)) | tee /dev/input/ckb*/cmd > /dev/null
        sleep 0.5
end
Una
quelle
13
Um welche Tastatur handelt es sich? lol
Mc Kernel
1
@ McKernel bump neugierig, welche Tastatur das auch ist
CraigR8806
3
K70 RGB mit benutzerdefinierten Tastenkappen - unascribed.com/f/67209fe8_keyboard_design.svg
Una
6
Bonuspunkte für das Weiterkommen, indem die gesamte Tastatur zum Blinken gebracht wird.
Mast
tee /d*/*/*/c*? Bonuspunkte für die Gefahr, dass in Zukunft der Computer eines armen Mannes gemauert wird, wenn dies unweigerlich zu etwas Wichtigem wird. (EFI-Variablen jemand? Vielleicht gibt es so etwas wie /dev/efi/vars/cpu_type)
immibis
21

Bash + Amixer, 45 Bytes

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

Blinkt die Stummschaltung auf meiner Tastatur.

Tim
quelle
17
a()(amixer set Master toggle;sleep .5;a)oder amixer set Master toggle;sleep .5;$0als volles Programm etwas kürzer.
Dennis
19

C (Windows): 79 Byte

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

Erläuterung

keybd_eventist eine (veraltete) Windows-API-Funktion zum Senden eines Tastaturereignisses (Hoch- oder Herunterfahren). 20ist der Code für die Feststelltaste, 69ist der Hardware-Scan-Code (ich habe keine Ahnung, was das bedeutet) und 1bedeutet Tastendruck und 3bedeutet Tastendruck. Ein Tastendruck wird simuliert, indem ein Tastendruckereignis unmittelbar gefolgt von einem Tastendruckereignis gesendet wird. Ein Tastendruck wird gesendet, um die Feststelltaste einzuschalten, dann ruht das Programm für 500 Millisekunden, und ein weiterer Tastendruck wird gesendet, um die Feststelltaste wieder auszuschalten.

Danke an Steadybox für eine Menge gespeicherter Bytes

Mego
quelle
1
Kannst du das nicht deklarieren, wenn dies C ist int keybd_event();?
Neil
@Neil Es wäre void keybd_event();, und ich brauche auch void Sleep();aus windows.h. Diese beiden Deklarationen zusammen sind länger als das Include.
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
Sicher, aber für primitive Typen interessiert C die Nichtübereinstimmung nicht, wenn Sie das Ergebnis nie verwenden.
Neil
6
Scan-Codes werden von Ihrer Tastatur auf der untersten Ebene über das Kabel gesendet. Ihre Werte basieren auf Positionen in einem Standardlayout, da sie dadurch die Tastatur so dumm wie möglich machen und nicht jede Taste verkabeln müssen Die grundlegende USB-Tastaturschnittstelle hat dann vor etwa 20 Jahren die Einschränkung der meisten Tastaturen behoben, indem sie auf Kosten der Verlagerung eines Übersetzungsschritts auf den Host-Computer nach dem Mindeststandard entworfen wurde. en.wikipedia.org/wiki/Scancode
Dan Neely
16

MATLAB, 146, 136, 70

Vielen Dank an @Poke für das Entfernen von 66 Bytes!

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

Dies nutzt die Fähigkeit von Matlab, Java-Klassen aufzurufen. Die Num Lock-Anzeige blinkt in einer Schleife, indem Sie programmgesteuert drücken und loslassen Num Lock.

Video oder es ist nicht passiert .

Luis Mendo
quelle
9
Können Sie 144anstelle von verwenden java.awt.event.KeyEvent.VK_NUM_LOCK? CAPS_LOCK wäre20
Poke
2
@Poke Ja! Es gehen 66 Bytes !!
Luis Mendo
7
Komisch,
15

x86-Maschinencode für PC (z. B. MS-DOS-COM-Datei), 27 Byte

Dieser Maschinencode (hier mit einem Unicode-Rendering des üblichen CP437 des PC-BIOS angezeigt) blinkt auf einem PC für immer auf der FESTSTELLTASTEN-Anzeige:

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

Der Code wurde so erstellt, dass er keine NULL-Bytes enthält, und kann daher mit der Tastatur (mit dem Alt + XXX-Trick für erweiterte Zeichen) eingegeben werden, um eine COM-Datei zu erstellen ( COPY CON blink.comin diesem Fall z. B. mit dem Befehl unter MS-DOS) die Ausgabedatei eine falsche 28 enthalten müssen ten Byte, die ^Z(EOF) Zeichen erforderlich ist, um den Kopiervorgang zu stoppen).

Der Effekt wird erzielt, indem Befehle direkt an den Tastatur-Controller des PCs gesendet werden (Port 60h), um den LED-Status festzulegen (als Nebeneffekt können die LEDs Num Lock und Scroll Lock in einen zufälligen, nicht blinkenden Status versetzt werden). Das Timing zur Minimierung der Anzahl der Befehle wird mithilfe des Countdown-Timers erreicht, der vom BIOS unter der Adresse verwaltet wird 0040:0040(er verringert sich alle 54,925 ms, bei 9 Zyklen beträgt der Blinkzyklus 494,3 ms, was innerhalb des zulässigen Bereichs liegt) - dieser Zähler wird normalerweise vom BIOS zum Stoppen des Diskettenmotors verwendet; Da das Diskettenlaufwerk nicht vom Programm verwendet wird und davon ausgegangen wird, dass der Code in einer Single-Task-Umgebung (z. B. DOS) ausgeführt wird, ist das Spielen mit dem Timer des Diskettenmotors kein Problem.

Der Code läuft einwandfrei unter MS-DOS (ausprobiert mit VirtualBox, sollte auch auf echter Hardware einwandfrei laufen, obwohl ich noch keine Zeit hatte, einen bootfähigen MS-DOS-USB-Stick zum Testen zu erstellen). Da es keine Betriebssystemfunktionen benötigt, kann es auch ohne das Betriebssystem ausgeführt werden (z. B. indem es im Bootsektor einer Festplatte abgelegt wird). Es ist mindestens ein 80186-Prozessor erforderlich, um ausgeführt zu werden, da die Anweisungen zum sofortigen Drücken verwendet werden, um den Code einiger Bytes zu verkürzen.

Assembly-Quellcode:

  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

Hexadezimaler Speicherauszug des zusammengesetzten Codes:

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

Hier ist das Ergebnis, das unter MS-DOS in VirtualBox ausgeführt wird (funktioniert nicht mit DosBox, vermutlich, weil der Tastaturcontroller nicht vollständig emuliert ist):

Blinkende FESTSTELLTASTE

(Entschuldigung für das verwackelte Video).

Ale
quelle
Ein Beispiel für die tatsächliche Verwendung von copy con program.exe: youtube.com/watch?v=iefuJ_jZAiQ
Jerry Jeremiah
13

SmileBASIC, 36 23 Bytes

XON MIC
WAIT 30XOFF MIC

Blinkt die Mikrofonstatusanzeige. (Video folgt in Kürze)

12Me21
quelle
12

Python2 - 108 Bytes

Funktioniert die Feststelltaste. Interessanterweise schaltet dies nur die LED selbst ein, ohne die Tastatur zu beeinflussen oder die Taste zu drücken. Sie können die 4am Ende ändern 2, um Numlock zu tun. 6macht beides.

import fcntl,os,time;exec"fcntl.ioctl(os.open('/dev/console',os.O_NOCTTY),19250,%d);time.sleep(.5);"*2%(4,0)
Maltysen
quelle
Es sieht so aus, als hätte ich eine Fehlermeldung erhalten: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 bist du auf Windows?
Maltysen
1
Nein, ich bin dran macOS Sierra Version 10.12.1 (16B2555).
Haykam
8

Shell + Numlockx, 40 35 Bytes

[5 Bytes dank Ryan eingespart.]

Blinkt kontinuierlich die NumLock-Anzeige auf unixish-Systemen.

numlockx toggle;sleep .5;exec sh $0

Einmaliges Blinken, 33 Bytes

numlockx on;sleep .5;numlockx off
Alex Howansky
quelle
1
Sie können exec sh $0anstelle von while5 Byte speichern, oder sh $0wenn das Erstellen von Prozessen für immer als in Ordnung angesehen wird.
Ry
2
watch -n0.5 numlockx toggle für 27 Bytes.
Tejas Kale
Für eine andere Variante des oben genannten können Sie bei interaktiven Shells Folgendes eingeben: numlockx toggle;sleep .5;!#(27 Byte) für ein einziges Blinken. !#wird das Ereignis zur Protokollerweiterung durch alles ersetzt, was bisher in der Befehlszeile eingegeben wurde.
Init_js
im Befehl zum einmaligen Blinken onkann das weggelassen werden. Es ist die Standardeinstellung.
Init_js
Mit Aufgaben, keine Tricks: f=numlockx;$f;sleep .5;$f off(29). Und (eine minderwertige) Schleifenversion mit Rekursion: g(){ f=numlockx;$f toggle;sleep .5;g;};g(40).
Init_js
8

PowerShell , 71 Byte

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

Anmerkungen

  • Blinkt für immer
  • Verwendet NUM LOCK, um ein Byte zu speichern.
Briantist
quelle
"Wenn in Ihrer Sprache ein Befehl für den untergeordneten Ruhezustand fehlt ..." - hört sich nicht so an, als würde er in PowerShell fehlen.
Däne
@Dane Ich habe das Plakat um Klarstellung gebeten. Wenn es nicht erlaubt ist, die Strafe anzunehmen, werde ich sie zurücknehmen.
Briantist
@Dane rollte zurück.
Briantist
Wie kommt es, dass Schlaf .5 hier nicht funktioniert? Ich habe es ausprobiert und es scheint ungefähr 5 ms zu dauern, aber ich dachte, es ist standardmäßig (-s), also wären es 0,5 s?
Jake Harry
1
@JakeHarry: Der -SecondsParameter ist ein int, 0.5wird also in konvertiert int, was zur Folge hat 0(rund auf gerade ist der Standardrundungsmodus). Sie schlafen also überhaupt nicht (was zu einer Verzögerung von ca. 1000 Ticks führt, also 10 µs). Ziemlich grundlegende Konvertierungs- und Parameterbindungsregeln in PowerShell.
Joey
7

VBS, 75 Bytes

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

Blinkt wiederholt die Num-Taste, da numlock1 Byte kürzer als capslock.

Trelzevir
quelle
7

C #, 215 202 198 195 185 Bytes

Ohne zu bemerken, dass ich den gleichen Code wie diese Antwort von @Mego verwendet habe , probieren Sie es aus !.

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

13 Bytes dank @Metoniem
gespeichert 10 Bytes dank @VisualMelon gespeichert

Hier ist eine voll formatierte Version, die zeigt, dass es funktioniert:

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

Für Bonus Spaß Änderung n++ & 2zu n+=2 & 2und beobachten Sie die Num - Taste und Caps Lock alternative Tasten blinkt ein und aus. Ich habe keine Ahnung, warum das passiert, weil es nicht sollte, aber es sieht "cool" aus.

TheLethalCoder
quelle
Warten Sie, using System;aber soweit ich das beurteilen kann, verwenden Sie tatsächlich nichts direkt aus dem System-Namespace. Ich denke, Sie können das entfernen.
Metoniem
@Metoniem Gute Stelle keybd_eventist eigentlich die Signatur für die Methode void keybd_event(byte bVk, byte bScan, uint dwFlags, UIntPtr dwExtraInfo);. Ich lasse los, ich könnte die UIntPtrnach dem Posten entfernen und habe sie als int's und habe nur vergessen, die Verwendung zu entfernen.
TheLethalCoder
1
Ahh, ich sehe haha, so was passiert! Nette Antwort Mann :)
Metoniem
Ich denke, Sie sollten die beiden 'Funktionen' wirklich benennen und eingeben: Sie beziehen sich auf keine, aber sie sind eindeutig undefiniert. Nicht angekreuzt, aber ich denke, es ist besser, wenn Sie einen Aufruf von keybd_event in einer ungerahmten for-Schleife haben, denke ich: for(int i=0;;...Sleep(250))keybd_event(i++&2)oder so.
VisualMelon
@VisualMelon Danke, ich habe den Code aktualisiert, musste den Schlaf ändern, um das Timing richtig zu machen :)
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();}

Ein einziges Drücken und Loslassen löst nur den Status aus. es blinkt nicht. Daher können wir es auch in einer Schleife abspielen, und es sieht so aus, als wäre Rekursion die billigste Methode, dies zu tun.

Sack
quelle
1
Schade, dass ich hier keinen QBasic-Interpreter habe! Weil es mit einer Poke- Anweisung gemacht wird!
Sergiol
Wird dieser Tail-Call optimiert oder überschreitet er irgendwann das Call-Stack-Limit?
Cyoce
@Cyoce Ich glaube nicht, dass Java eine Tail-Call-Optimierung hat, bis Java 9, so dass dies letztendlich die Rekursionstiefengrenze erreicht, aber das ist in Ordnung, weil ich das Licht nur einmal blinken musste:]
Poke
1
Ich meine, dass Sie den gesamten Code in ein Lambda einfügen können, wodurch der Funktionsdeklarations-Overhead verloren geht. Ein bisschen wie:, ()->for(;;){java.awt.Robot r=new java.awt.Robot();r.keyPress(20);r.delay(500);r.keyRelease(20);}das ist eine Einsparung von 18 Bytes aufgrund des 4-stelligen Lambda-Deklarations-Overheads.
Tamoghna Chowdhury
1
Ein Grund mehr, warum ich nicht zurück gehe! ;) Im Ernst, ändere einfach die Antwort auf Java 8 und gehe in zweistellige Punkte. Installieren Sie es, wenn Sie es noch nicht zum Testen haben.
Tamoghna Chowdhury
5

JavaScript, 82 Byte

Das Guthaben geht an @FinW . Ich habe gerade die alte Funktion in eine neue ES6- Pfeilfunktion geändert, um einige Bytes zu sparen. Und weil ich nicht genug Punkte habe, um zu kommentieren, habe ich eine neue Antwort geschrieben.

Bearbeiten - gelöschte Klammern, um weitere 2 Bytes zu speichern.

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

Sein Code sah so aus

o=new ActiveXObject("WScript.Shell");setInterval(function(){o.SendKeys("{NUMLOCK}")},500);
ruler23
quelle
1
Für die Pfeilfunktion brauchen Sie keine Klammern davor.
Freitag,
Völlig vergessen, danke.
ruler23
Ich hatte die Klammern gemeint , die aus mehr als gelassen wurden , wenn Sie entfernt function ()
fənɛtɪk
Oh, aber das kannst du nicht, es wird nicht funktionieren. Aber Sie können die Klammern entfernen, da sie in einzeiligen Anweisungen nicht benötigt werden (aus irgendeinem Grund hat mich Ihr Kommentar an sie erinnert, obwohl Sie etwas anderes gemeint haben)
ruler23
Speichern eines Byte entweder durch Ersetzen der ()mit einem anderen, einzelnen Zeichen wie _oder indem oein Parameter mit einem Standardwert, etwa so: (o=new ActiveXObject("WScript.Shell"))=>.
Shaggy
4

Scala, 84 83 78 Bytes

Bearbeiten: 1 Byte dank @TheLethalCoder gespeichert,

Er schlug vor, 1>0anstelle von true.

Edit 2: 5 Bytes gespeichert dank @ Corvus_192,

Er schlug vor, die Infixnotation zu verwenden und die Klammern nach dem Konstruktor abzulegen

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

Standard-Scala-Port von @Pokes Java- Antwort . Geben Sie es direkt in die Scala-Interpreter-Eingabeaufforderung ein.

Ein Video davon, in dem sowohl meine Feststelltaste als auch mein OSD blinken, um hochzufahren!

Blinkende Caps Lock-LED und OSD

Tamoghna Chowdhury
quelle
Schaffst du for(;;)oder while(1>0)oder while(1)in Scala?
TheLethalCoder
Der zweite ist möglich. Eine 1-Byte-Speicherung, die mir vorher noch nicht eingefallen war. Vielen Dank!
Tamoghna Chowdhury
Sie können die Infixnotation verwenden: Ist r keyPress 20ein Byte kürzer als r.keyPress(20). Gleiches gilt für die anderen Methodenaufrufe, die insgesamt 3 Byte einsparen.
corvus_192
Löschen Sie außerdem die Klammer aus dem Konstruktoraufruf, um weitere 2 Byte zu speichern.
corvus_192
4

Linux-Terminal, 8 + 11 = 19 Byte

Demo

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

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

WAT?

Nach ECMA-48 , 1Bbeginnt Terminalsteuer Escape - Sequenz.

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

pv Fortschrittsanzeige

f Datei

-q ruhig

-L8 8 Bytes / s = 0,5 Sekunden Verzögerung

Verwendungszweck

Bereiten

#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+ F6Schalter auf native Konsole

Lauf pv f -q -L8

Ctrl+ Alt+ F7schalte zurück

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

Bash + Xdotool, 36 Bytes

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

Führen Sie es einfach in einer Bash-Shell aus. Es muss sich in einer grafischen Umgebung befinden. Endlosschleife von hier . Num_Lock wurde in 66 geändert, um 6 Bytes zu sparen, und danke an @Michael Kjörling für 2 Bytes.

Feldspar15523
quelle
Sie können mindestens zwei Bytes einsparen, indem Sie unnötige Leerzeichen entfernen. Sie brauchen kein Leerzeichen vor der schließenden geschweiften Klammer, und Sie brauchen kein Leerzeichen um die Semikolons, die die Befehle trennen. Sie tun müssen , die Leerzeichen nach der öffnenden geschweiften Klammer, though.
ein Lebenslauf
Beachten Sie auch, dass Sie :für die truemeisten Systeme einen Alias verwenden können. while :;do sth;donemacht dasselbe wie while true;do sth;doneaber ist drei Bytes kürzer. for((;;)){ sth;}ist allerdings noch kürzer.
ein Lebenslauf
@Cyoce Wo? Es hat bei mir nicht funktioniert.
Feldspar15523
@Cyoce Ich denke, das funktioniert nur zum Deklarieren von Funktionen.
Feldspar15523
@ Feldspar15523 oops nevermind then
Cyoce
3

xdotool , 20 Bytes

key -delay=500 66 66

Drückt die Taste 66 aka Caps Lock zweimal, mit einer Verzögerung von 500 ms zwischen Tastendrücken.

Beachten Sie, dass xdotool eine Skriptsprache ist. Es kann von einer Datei ausgeführt werden und unterstützt sogar Shebangs. Da sein execBefehl das Ausführen von externen Programmen ermöglicht, ist es in der Lage, Additionen und Primalitäten zu testen, sodass es unserer Definition der Programmiersprache entspricht.

Testlauf

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

Bildbeschreibung hier eingeben

Dennis
quelle
3

Python mit Pyautogui: 126 143 115 103 Bytes

Vielen Dank an @ nedla2004 für das Speichern von 12 Bytes

from pyautogui import*
import time
while 1:keyDown('capslock');time.sleep(.5);keyUp('capslock')pslock')
Tiebe Groosman
quelle
1
Sie können die while-Schleife in while 1:keyDown('capslock');time.sleep(.5);keyUp('capslock')und die erste Zeile in from pyautogui import*und die zweite in ändern import time.
nedla2004
Sie können das doppelte "Capslock" entfernen. import time;c='capslock' ...
Init_js
Sie könnten auch timeinsgesamt entfernen . from pyautogui import*; while 1:press('capslock',1,.5). ymmv. In meiner Umgebung wirkt sich Pyautogui zwar auf den von mir eingegebenen Fall aus, aber das Licht blinkt nicht.
Init_js
3

Bash, 31 Bytes

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

Funktioniert in X, ohne root-Zugriff! (Wenn es bei Ihnen nicht funktioniert, überprüfen Sie anhand der Init-Funktion im folgenden Code, ob xkbcomp richtig konfiguriert ist.)

Und ein Bonus-Skript, um einen Morsecode durch die Feststelltaste zu senden (nicht golfen):

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

Beispiel: blink "...././.-../.-../---//.--/---/.-./.-../-..///"

tourentour
quelle
2

Bash + Setleds , 43 Bytes

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

Ziemlich einfach. Dient setledszum Umschalten des Lichts.

Rɪᴋᴇʀ
quelle
2

Bash, 103 Bytes

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

Muss als root ausgeführt werden.

Funktioniert das Blinken der gesamten Tastaturbeleuchtung? (Video zu kommen, wenn ich nach Hause komme)

Tyzoid
quelle
1
Does flashing the entire keyboard backlight work?Nun, wenn Sie daran denken, ist die Tastaturmarkierung ein Indikator dafür, dass die Tastaturmarkierung ein- oder ausgeschaltet ist, und sie befindet sich definitiv "physisch auf der Tastatur". Also, ja, ich denke, es zählt.
Zeppelin
2

JavaScript, 90 Bytes

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

Das ActiveXbedeutet, dass es nur im IE ausgeführt wird (Edge unterstützt es jedoch nicht ). Die NUMLOCK-Taste blinkt, da sie wie bei anderen Antworten kürzer ist als die von CAPSLOCK oder SCROLLLOCK.

Ungolfed

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

Bash, 33 Bytes

Dies setzt voraus, dass Num-Lock aktiviert ist, bevor es ausgeführt wird. Schalten offund onanders. Benötigt das numlockxPaket natürlich;)

numlockx off;sleep .5;numlockx on

Bearbeiten:

Saw Alex Howansky hat diese Lösung bereits gepostet, sie jedoch nicht mit Bash markiert, und ich habe gerade auf der Website nach "Bash" gesucht.

DBX12
quelle
+1, Sie müssen es nicht wiederholt blinken (glaube ich).
NoOneIsHere
Wenn Sie sich in einer interaktiven Shell befinden, können Sie Folgendes in die Befehlszeile eingeben: numlockx toggle;sleep .5;!# (27 Byte). !#ist das Ereignis, das auf alle bisher eingegebenen Befehle in der Befehlszeile erweitert wird.
Init_js
2

Batch-Datei (mit Hilfe von VBS), 74 + 2 = 76 Bytes

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

Teilweise basierend auf Trelzevirs Antwort .

.vbsist automatisch enthalten in PATHEXT.

no1xsyzy
quelle
1

Kotlin-Skript, 72 Bytes

Obwohl es nicht das kleinste ist, ist es dennoch ziemlich gut. Ich liebe Kotlins Lauf für einige Dinge, und dies ist einer von ihnen (kleiner als val r = java.awt.Robot (), weil wir nicht beide brauchen r. Und val r =. Trotzdem ist es länger als 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
quelle
1

Python3, 55 49 Bytes

Danke @NoOneIsHere für -4 Bytes!

Dies beinhaltet Pakete: pyautogui und timeModule
Code:

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

Danke @NoOneIsHere für -4 Bytes!
Der Schlüssel in Aktion:
Feststelltaste

Rahul Bharadwaj
quelle
3
Willkommen auf der Seite! :)
DJMcMayhem
Sie können einige Bytes einsparen while 1, indem Sie einen Einzeiler mit einem Semikolon verwenden. ( while 1:pyautogui.press("capslock");time.sleep(.5))
NoOneIsHere
1
Leider ist dies auch ein Ausschnitt, aber indem Sie import pyautoguiden Start des Programms ergänzen und den Rest in ändern, können while 1:pyautogui.press("capslock");time.sleep(.5)Sie dies zu einer gültigen Antwort machen.
Caird Coinheringaahing
@cairdcoinheringaahing Es muss auch eine import timeda sein.
FlipTack
@cairdcoinheringaahing Genau, weshalb Sie eine import time...
FlipTack
1

VBA, 82 Bytes

Anonymous VBE Unmittelbare Fensterfunktion, die keine Eingaben macht und den Benutzer auf unbestimmte Zeit nervt. Abhängig von der Windows-Kernel32-Funktion sleep, die unten deklariert ist.

Schlafdeklaration (Win-32)

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

Sleep-Deklaration (Win-64, + 8 Bytes)

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

Anonyme VBE-Sofortfensterfunktion

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

Etwas mehr Spaß Version, 97 Bytes

Eine Reihe von gegenseitig rekursiven Unterroutinen, die den Benutzer auf unbestimmte Zeit nerven

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

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

Fragwürdige Version, 66 + 2 Bytes

Ich bin nicht sicher, ob die Deklaration einer Funktion aus einer DLL als eingebaute Funktion gilt. Falls dies nicht der Fall ist, ist hier eine 66 + 2-Byte-Version, die 1 Sekunde wartet

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