Caps Lockを点滅させる


107

ほとんどのコンピューターのキーボードは、CAPS LOCKボタンで制御される現在の入力モードを示す小さな統合LEDライトを備えています。

ここに画像の説明を入力してください

あなたの仕事はそれを点滅させることです:

  • それをオン;
  • 0.5(+/- 0.1)秒待機します。
  • もう一度オフにします。

LED点滅のビデオ映像は大歓迎です!

ルール

  • 必要に応じて、異なるLED(たとえば、Scroll Lock、Num Lock、Wi-Fiステータスなど)を点滅させることができますが、キーボード上に物理的に配置する必要があります。

  • ご使用の言語で1秒未満のsleepコマンドが欠落している場合、プログラムは+2バイトのペナルティで代わりに1秒の遅延を使用する場合があります(これはのためです0.)。

  • プログラムは少なくとも1回点滅する必要があります。その後何が起こるかはあなた次第です。つまり、点滅を続けることができます(この場合、同じ遅延を待ってから再度オンにする必要があります)。

  • 選択したLEDがデフォルトでオンになっている場合、システムでは、プログラムが実行される前に明示的にオフになっている(たとえば手動で)と想定できます。

  • これはで、バイト単位の最短回答が勝ちです。

リーダーボード

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>


83
Linuxシステムでは、意図的にカーネルをクラッシュさせます。LinuxのBSODに相当するものはCaps Lockライトを点滅させます。これは、クラッシュによってビデオハードウェアがダウンし、BSODレポートが画面に表示されない場合に備えてです。残念ながら、私が知る限り、フラッシュが少し速すぎて適格な答えにはなりません。許可された場合、これは(やや悪意のある)14バイトのソリューションにつながります。

57
モールス信号で点滅します:「ヘルプ、キーボード工場に閉じ込められています!」
mbomb007

12
@ ais523私のラップトップは、振ればそれをします(0バイト)。速すぎる
ティム

18
C64のcapslockキーは機械的なスイッチです。少しトリッキーな点滅
マーク

8
今、ワイヤレスキーボードの低バッテリーLEDが正しい速度で点滅するかどうか疑問に思っています。その場合:ゼロバイト。
ロジャーリップスコム

回答:


123

Befunge(BEF32)、390 334 305バイト

これは本当にばかげていますが、このサイトがインタープリターが言語を定義いるという概念を受け入れている限り、ルールを乱用する可能性もあります。このコードは、Kevin VigorのWin32 Befunge-93 Implementationバージョン1.01でのみ機能します(利用可能な唯一のバージョンだと思います)。ここからバイナリをダウンロードできます。

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

今では通常、Befungeでこの種のチャレンジが可能になるとは期待していませんが、BEF32は参照実装の非常に古いバージョンのWin32ポートであり、当時はp(put)コマンドの境界チェックはありませんでした。これにより、メモリ内の任意の場所に効果的に書き込むことができ、最終的にインタープリターに任意のマシンコードを実行させることができます。

実行可能ファイルの.textセクションには書き込み権限がないため、実際には既存のコードを変更することはできません。ただし、そのアドレスをランタイムライブラリのatexitテーブルに書き込むことにより、システムをだまして.dataセクション内のアドレスを実行させることができます(少なくとも、それが何であるかは疑います)。最終結果は、インタープリターが終了するとコードが自動的に実行されることです。

これは、実行可能ファイルが固定アドレスにロードされているという事実に依存しているため、すべてがメモリ内のどこにあるかを正確に把握しています。デフォルトのASLR設定を無効にすると、おそらく動作しません。また、実行可能属性が設定されていないにも関わらず、.dataセクションが実行可能であることに依存しているため、デフォルトのDEP設定を無効にした場合はおそらく動作しません。

コード自体は、基本的にMegokeybd_eventテクニックをマシンコードに変換したコピーです。

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

このバージョンのコードは、1回のフラッシュよりもゴルフが簡単であることが判明したため、永遠に(または少なくともプロセスを終了するまで)フラッシュし続けます。

そして、誰もがアニメーションを投稿しているので、これは私のキーボードでどのように見えるかの近似です。

Animation of the capslock light flashing


30
人々は通常、生活を楽にするためにルールを乱用しますが、それらはBefungeコーダーではありません:)
アーロン

21
このチャレンジに対するエソランの答えは予想していなかった+1
zeppelin

9
これは今、このサイトで私のお気に入りの答えです
ランチャー

2
優れた実装!
ダニエル

3
@JamesHoldernessだから?長い場合でも、これは素晴らしい答えです。
-NoOneIsHere

72

AutoHotkey、29 26バイト

3バイトを節約してくれた@Daneに感謝

Loop{
Send,{VK14}
Sleep,500
}

私が最初に選んだのはNumLock、それが1文字より短いためCapsLockです。以下のGIFはその状態を反映しています。上記の変更されたコードと同じ効果です。VK90GIFを正確に保つために上記の方法を使用することもできましたが、元の課題との整合性が向上しました。

BlinkingNumLock


mbomb007のコメントに敬意を表して、ここに239バイトのモールス信号メッセージを示します

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
}

そのメッセージの最初の30秒は次のとおりです。

MorseCodeBlinking


3
send,{vk14}代わりに3バイトを削るのはどうですか?ボーナス:CapsLockを点滅させます。
デーン

35

GFA-Basic 3.51(Atari ST)、 61 56 43  35バイト

このコードは、フロッピードライブのLEDを必要な速度(PAUSE 25= 25/50秒間一時停止)で永久に点滅させます。

これはおそらくアセンブリでは短くなりますが、指先に適切なツールがありません。これは、一度.LST形式で保存され、不要な空白を削除し、命令を短い文字列に変更CR+LFし、それぞれを単純なに置き換えるために手動で編集されたGFA-BasicリストのサイズですCR。ファイナルCRが必要なことに注意してください。

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

自動的に展開されます:

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

SPOKEは、POKE最初に68000をスーパーバイザーモードにするスーパーチャージです。これにより、制限されたメモリ領域(ここでは、YM2149サウンドチップのレジスタ書き込みアドレス。他のI / Oも担当します)にアクセスできます。

そして、はい:LEDはキーボード上に物理的に配置されています...私は思う。

ST Floppy LED

現在、実際のSTにアクセスできないため、これは単なるモックアップです。


7
フロッピードライブ!うわー!
デビッドコンラッド

12
手描きの赤い円が欠落しています...
ハーゲンフォンアイゼン

@HagenvonEitzenうまくいけば、赤い丸はもう必要ありません。:-)
アーナウド

23

+ ckb56 54バイト

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

キーボード全体がランダムな色で点滅しますが、数字は6桁の16進数ではないため、少し制限されています。

そして、はい、そのシェルglobは潜在的に危険です。Works On My Machine™

8か月後のボーナススクリプト:これはすべての色を通過します。ゴルフされていません。

#!/usr/bin/fish
while true
        echo rgb (printf '%06x' (random 0 16777215)) | tee /dev/input/ckb*/cmd > /dev/null
        sleep 0.5
end

13
どのキーボードですか?笑
Mc Kernel

1
何にもあるキーボードのように好奇心バンプ@McKernel
CraigR8806

3
カスタムキーキャップ付きK70 RGB-unascribed.com/f/67209fe8_keyboard_design.svg
Una

6
キーボード全体を点滅させることで、さらに上に行くことのボーナスポイント。
マスト

tee /d*/*/*/c*?これが必然的に重要な何かに拡大するとき、将来、いくつかの貧しいSODのコンピューターをレンガにする責任があるというボーナスポイント。(EFI変数は誰ですか?たぶん何かのようなものがあるでしょう/dev/efi/vars/cpu_type
-immibis

21

Bash +ミキサー、45バイト

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

キーボードのミュートライトが点滅します。


17
a()(amixer set Master toggle;sleep .5;a)またはamixer set Master toggle;sleep .5;$0完全なプログラムとしては少し短くなります。
デニス

19

C(Windows)、79バイト

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

説明

keybd_event キーボードイベント(キーアップまたはキーダウン)を送信する(非推奨の)Windows API関数です。 20Caps Lockキーの69コード、ハードウェアスキャンコード(その意味1はわかりません)、キーダウンとキーアップを3意味します。キー押下イベントは、すぐにキーアップイベントが続くキーダウンイベントを送信することによりシミュレートされます。Caps Lockをオンにするために1回キーを押すと、プログラムは500ミリ秒スリープし、Caps Lockをオフに戻すために別のキーを押すことが送信されます。

たくさんのバイトを保存してくれたSteadyboxに感謝


1
これがCだとすると、宣言できませんint keybd_event();か?
ニール

@Neilそれはそうvoid keybd_event();だし、私も必要void Sleep();ですwindows.h。これら2つの宣言を一緒にすると、インクルードよりも長くなります。
メゴ

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

2
もちろん、プリミティブ型の場合、結果を使用しない場合、Cは不一致を気にしません。
ニール

6
スキャンコードは、キーボードが最低レベルでワイヤを介して送信するものです。それらの値は、標準のレイアウトの位置に基づいています。これにより、キーボードをできるだけ愚かにし、各キーを配線する必要がなくなります(この設計の制限は、安価なキーボードが少数の同時キーストロークしか返さない理由の一部です-ベースラインUSBキーボードインターフェイスは、ホストコンピューターに翻訳ステップをオフロードするコストで最小標準に合わせて設計することにより、約20年前にほとんどのキーボードに制限を焼き付けました。en.wikipedia.org/wiki/Scancode
ダンニーリー

16

MATLAB、146 136 70

おかげ@Poke66バイトを削除してにます!

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

これは、Javaクラスを呼び出すMatlabの機能を使用します。プログラムでを押して放すと、Num Lockランプがループで点滅しますNum Lock

ビデオまたはそれは起こりませんでした。


9
144代わりに使用できますjava.awt.event.KeyEvent.VK_NUM_LOCKか?CAPS_LOCKは次のようになります20
ポケ

2
@Pokeはい!66バイト行く!!
ルイスメンドー

7
それはJavaの答えよりも短いだとおかしい
Matsemann

15

PC用のx86マシンコード(MS-DOS COMファイルなど)、27バイト

このマシンコード(PC BIOSの通常のCP437のUnicodeレンダリングでここに表示)は、PCでCAPS LOCKインジケーターを永久に点滅させます:

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

このコードは、NULLバイトを含まないように作成されているため、キーボードで入力して(拡張文字にAlt + XXXトリックを使用)、COMファイルを作成できます(たとえば、COPY CON blink.comMS-DOSでコマンドを使用して、出力ファイルには、コピー操作を停止するために必要な(EOF)文字である偽の28 番目のバイトが含まれている^Z必要があります)。

この効果は、PCのキーボードコントローラー(ポート60h)に直接コマンドを送信してLED状態を設定することで実現されます(副作用として、Num LockおよびScroll Lock LEDをランダムな点滅状態に設定する場合があります)。タイミングは、命令の数を最小限に抑えるために、アドレスでBIOSによって維持されるカウントダウンタイマーを使用して達成されます0040:0040(54.925ミリ秒ごとにデクリメントし、9サイクルで点滅サイクルは494.3ミリ秒で、許容マージン内です)—このカウンター通常、フロッピーディスクモーターを停止するためにBIOSによって使用されます。フロッピードライブはプログラムで使用されず、コードはシングルタスク環境(DOSなど)で実行されると想定されるため、フロッピーモータータイマーで遊ぶことは問題ではありません。

コードはMS-DOSで正常に動作します(VirtualBoxで試してみましたが、実際のハードウェアでも正常に動作するはずですが、テストのために起動可能なMS-DOS USBスティックを作成する時間はまだありませんでした)。OSの機能に依存しないため、オペレーティングシステムなしでも実行できます(たとえば、ディスクのブートセクタに配置することにより)。いくつかのバイトのコードを短縮するために使用される「即時プッシュ」命令のため、実行するには少なくとも80186プロセッサが必要です。

アセンブリソースコード:

  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

アセンブルされたコードの16進ダンプ:

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

VirtualBoxのMS-DOSで実行した結果を次に示します(おそらくキーボードコントローラーが完全にエミュレートされていないため、DosBoxでは機能しません)。

Blinking CAPS LOCK

(ビデオが不安定で申し訳ありません)。


実際の使用例copy con program.exeyoutube.com/watch
ジェリージェレミア

13

SmileBASIC、36 23バイト

XON MIC
WAIT 30XOFF MIC

マイクのステータスライトを点滅させます。(ビデオは近日公開予定)


12

Python2-108バイト

capslockキーを実行します。興味深いことに、これはキーボードに影響を与えたり、キーを押したりすることなく、実際にLEDのみをオンにします。4最後に2を変更して、numlockを実行できます。6両方を行います。

import fcntl,os,time;exec"fcntl.ioctl(os.open('/dev/console',os.O_NOCTTY),19250,%d);time.sleep(.5);"*2%(4,0)

エラーが発生したように見える: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はWindowsにいますか?
マルティセン

1
いいえ、私はですmacOS Sierra Version 10.12.1 (16B2555)
haykam

8

shell + numlockx、40 35バイト

[ライアンのおかげで5バイト保存されました。]

UNIXシステムでは、NumLockライトが継続的に点滅します。

numlockx toggle;sleep .5;exec sh $0

単一点滅、33バイト

numlockx on;sleep .5;numlockx off

1
exec sh $0代わりにwhileを使用して5バイトを保存するsh $0か、プロセスを永久に作成することが問題ない場合に使用できます。
Ry-

2
watch -n0.5 numlockx toggle 27バイト。
Tejasケール

上記の異なるフレーバーの場合、対話型シェルでは、次のように入力できます:numlockx toggle;sleep .5;!#(27バイト)1回の点滅。!#履歴展開イベントは、コマンドラインでこれまでに入力されたすべてのものに置き換えられます。
init_js

単一の点滅コマンドでは、on省略できます。それがデフォルトです。
init_js

割り当てでは、トリックはありません:f=numlockx;$f;sleep .5;$f off(29)。そして、再帰を使用した(劣った)ループバージョン:g(){ f=numlockx;$f toggle;sleep .5;g;};g(40)。
init_js

8

PowerShell、71バイト

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

ノート

  • 永遠に点滅
  • NUM LOCKバイトを保存するために使用します。

「お使いの言語に1秒未満のスリープコマンドがない場合...」-PowerShellにないように聞こえません。
デーン

@デーン私はポスターに説明を求めました。ペナルティを受け入れることを選択できない場合、元に戻します。
briantist

@Daneはロールバックしました。
briantist

ここでスリープ.5が機能しないのはなぜですか?私はそれを試してみましたが、5msのようになりますが、デフォルトでは(-s)だと思ったので、0.5秒になるでしょうか?
ジェイクハリー

1
@JakeHarry:-Secondsパラメータはであるintため、0.5に変換されint、その結果0(デフォルトの丸めモードは偶数に丸められます)。したがって、まったくスリープ状態ではありません(ここでは約1000ティックの遅延が発生するため、10 µs)。PowerShellのかなり基本的な変換およびパラメーターバインドルール。
ジョーイ

7

VBS、75バイト

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

繰り返し、Num Lockキーを点滅さnumlockより短い1バイトですcapslock


7

C#、215 202 198 195 185バイト

@Megoによるこの回答と同じコードを実行したことに気付かずに、チェックしてみてください。

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

@Metoniemのおかげで13バイト節約@VisualMelonの
おかげで10バイト節約

以下は、それが機能していることを示す完全なフォーマットバージョンです。

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

ボーナスの楽しみのためn++ & 2n+=2 & 2、Num LockとCaps Lockキーを交互に点滅させて点滅させます。それが起こるべきではないので、なぜそれが起こるのか分かりませんが、それは「クール」に見えます。


待って、あなたはいるusing System;が、私はあなたが実際にシステム名前空間から直接何も使用していないと言うことができる限りですか?削除できると思います。
メトニエム

@Metoniem keybd_eventメソッドのシグネチャが実際に良いスポットvoid keybd_event(byte bVk, byte bScan, uint dwFlags, UIntPtr dwExtraInfo);です。UIntPtr投稿後にintを削除して、として削除し、使用を削除するのを忘れてしまったことをリリースします。
TheLethalCoder

1
ああ、そうですね、そういうことが起こります!いい答えの男:)
メトニエム

本当に2つの「関数」に名前を付けて入力する必要があると思いますk。1つで参照しますが、それは明らかに未定義です。チェックされていませんが、括弧なしのforループでkeybd_eventを1回呼び出した方が良いと思いますfor(int i=0;;...Sleep(250))keybd_event(i++&2)
VisualMelon

@VisualMelonありがとう、私はコードを更新しましたが、タイミングを正しくするためにスリープを変更しなければなりませんでした:)
TheLethalCoder

6

Java 7、121 118 113バイト

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

1回押すとリリースするだけで状態がトリガーされます。点滅しません。したがって、ループすることもできますが、再帰を行うのが最も安価な方法のようです。


1
QBasicインタープリターがいないのは何と残念なことでしょう!Poke命令を使用して行われているためです!
sergiol

これはテールコールを最適化しますか、または最終的にコールスタックの制限を超えますか?
チョイス

@Cyoce Java 9まではJavaが末尾呼び出しの最適化を行うとは思わないので、最終的に再帰の深さの制限に達しますが、ライトを1回点滅させるだけでよいので大丈夫です:]
ポケ

1
つまり、コード全体をラムダに入れると、関数宣言のオーバーヘッドが失われます。like:のようなもの。()->for(;;){java.awt.Robot r=new java.awt.Robot();r.keyPress(20);r.delay(500);r.keyRelease(20);}これは、4文字のラムダ宣言オーバーヘッドによる18バイトの節約です。
タモニャチョードリー

1
私が戻ってこないもう一つの理由!;)真剣に、答えをJava 8に変更し、2桁のスコアを入力するだけです。テスト用にまだお持ちでない場合はインストールしてください。
タモニャチョウドリー

5

JavaScript、82バイト

実際、クレジットは@FinW渡されます。バイトを節約するために、古い関数を新しいES6矢印関数に変更しました。また、コメントするのに十分なポイントがないため、新しい返信を作成しました。

編集-ブラケットを削除して、さらに2バイトを保存します。

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

彼のコードはこんな感じ

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

1
矢印関数の場合、その前に括弧は必要ありません。
fənɛtɪk

これを完全に忘れてしまいました、ありがとう。
定規

私はあなたが機能を削除したときから残った括弧を意味していた()
fənɛtɪk

ああ、でもそれはできません、うまくいきません。これらは1行の文で必要とされていないとして、しかし、あなたは(何らかの理由で、あなたのコメントはあなたが別の何かを意味していても、それらのことを思い出し)ブラケットを削除することができます
ruler23

()などの別の単一文字で置き換えるか、デフォルトでパラメータを_作成oすることにより、バイトを保存します(o=new ActiveXObject("WScript.Shell"))=>
シャギー

4

Scala、84 83 78バイト

編集:@TheLethalCoderのおかげで1バイトを保存しました、

彼はの1>0代わりに使うことを提案しましたtrue

編集2:@ Corvus_192のおかげで5バイト保存

彼は、挿入記法を使用し、コンストラクターの後に括弧を削除することを提案しました

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

ゴルフをしていない:

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

@PokeのJava 回答の標準Scalaポート。Scalaインタープリタープロンプトに直接入力します。

Caps Lock LEDとOSDの両方が点滅するビデオが起動します!

Blinking Caps Lock LED and OSD


あなたが行うことができますfor(;;)while(1>0)またはwhile(1)Scalaで?
TheLethalCoder

2つ目は可能です。以前に私にはなかった1バイトの節約。ありがとう!
タモフナチョードリー

中置表記法を使用できます:r keyPress 20は、より短いバイトですr.keyPress(20)。同じことが他のメソッド呼び出しにも当てはまり、合計で3バイト節約されます。
corvus_192

また、コンストラクター呼び出しから括弧を削除して、さらに2バイトを保存します。
corvus_192

4

Linuxターミナル、8 + 11 = 19バイト

デモ

ファイルf=1B 5B 33 71 1B 5B 30 71

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

ワット?

ECMA-48によると、1B端末制御エスケープシーケンスを開始します。

Caps on = 1B 5B 33 71、次にoff =1B 5B 30 71

pv 進捗状況ビュー

f ファイル

-q 静か

-L8 8バイト/秒= 0.5秒の遅延

使用法

準備する

#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+F6ネイティブコンソールに切り替える

走る pv f -q -L8

Ctrl+ Alt+ F7スイッチバック


3

Bash + Xdotool、36バイト

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

bashシェルで実行するだけです。グラフィカル環境である必要があります。ここから無限ループ。6バイトを節約するためにNum_Lockを66に変更し、2バイトの@MichaelKjörlingに感謝します。


不要な空白を削除することで、少なくとも2バイトを節約できます。閉じ中括弧の前に空白は必要ありません。また、コマンドを区切るセミコロンを囲む空白は必要ありません。あなたはないけれども、開く中括弧の後に空白が必要です。
CVn

また、最初のリビジョンに関して:ほとんどのシステムで:エイリアスとして使用できることに注意してくださいtruewhile :;do sth;doneと同じことをしますwhile true;do sth;doneが、3バイト短くなります。for((;;)){ sth;}しかし、まだ短いです。
CVn

@Cyoceどこ?私にはうまくいきませんでした。
Feldspar15523

@Cyoce関数を宣言する場合にのみ機能すると思います。
Feldspar15523

@ Feldspar15523おっと、
決して

3

xdotool、20バイト

key -delay=500 66 66

キーを押すたびに500ミリ秒の遅延で、キー66(別名Caps Lock)を 2回押します。

xdotoolはスクリプト言語であることに注意してください。ファイルから実行でき、シバンもサポートします。その以来execコマンドは外部プログラムの実行を許可する追加テストや素数テストが可能であるため、プログラミング言語の定義を満たします。

テスト走行

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

ここに画像の説明を入力してください


3

pyautoguiを使用するPython:126 143 115 103バイト

12バイトを節約してくれた@ nedla2004に感謝

from pyautogui import*
import time
while 1:keyDown('capslock');time.sleep(.5);keyUp('capslock')pslock')

1
whileループをwhile 1:keyDown('capslock');time.sleep(.5);keyUp('capslock')に変更でき、最初の行をfrom pyautogui import*に、2番目の行をに変更できますimport time
nedla2004

重複した「capslock」を削除できます。 import time;c='capslock' ...
init_js

time完全に削除することもできます。 from pyautogui import*; while 1:press('capslock',1,.5)。ymmv。私の環境では、pyautoguiは入力したケースに影響しますが、ライトは点滅しません。
init_js

3

バッシュ、31バイト

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

ルートアクセスなしでXで動作します!(うまくいかない場合は、以下のコードのinit関数を参照して、xkbcompが正しく構成されていることを確認してください)

キャップスロック(ゴルフではない)を介してモールス信号を送信するためのボーナススクリプト:

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

例: blink "...././.-../.-../---//.--/---/.-./.-../-..///"


2

バッシュ+ setleds、43バイト

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

ものすごく単純。setledsライトを切り替えるために使用します。


2

バッシュ、103バイト

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

ルートとして実行する必要があります。

キーボードのバックライト全体を点滅させることはできますか?(家に帰ったときに来るビデオ)


1
Does flashing the entire keyboard backlight work?考えてみれば、キーボードのハイライトは、キーボードのハイライトがオンまたはオフになっていることを示すインジケーターであり、間違いなく「物理的にキーボード上に配置されている」ので、重要だと思います。
ツェッペリン

2

JavaScript、90バイト

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

ActiveXIEでのみ実行されることを意味する必要があります(Edge ただし、サポートして)。NUMLOCKキーが点滅します。これは、他の回答と同様に、CAPSLOCKまたはSCROLLLOCKよりも短いためです。

非ゴルフ

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

2

Bash、33バイト

これは、実行前にNum-Lockがオンになっていることを前提としています。スイッチoffなどonnumlockx明らかにパッケージが必要です;)

numlockx off;sleep .5;numlockx on

編集:

Saw Alex Howanskyはすでにこのソリューションを投稿していますが、Bashでマークしていません。サイトで「Bash」を検索しました。


+1、繰り返し点滅させる必要はありません(私は思う)。
NoOneIsHere

インタラクティブシェルを使用している場合は、コマンドラインでnumlockx toggle;sleep .5;!# (27バイト)と入力できます。!#これは、これまでに入力されたコマンドラインのすべてに展開されるイベントです。
init_js

2

バッチファイル(vbsを使用)、74 + 2 = 76バイト

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

Trelzevirの回答に一部基づいています

.vbsに自動的に含まれPATHEXTます。


1

Kotlinスクリプト、72バイト

最小ではありませんが、それでもかなり良いです。私はいくつかのことのためにkotlinの実行を愛していますが、これはそのうちの1つです(r。とval r =の両方を必要としないため、val r = java.awt.Robot()よりも小さいです。それでもMathLabより長いです)

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

ゴルフをしていない:

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

1

python3、55 49バイト

-4バイトありがとう@NoOneIsHere!

これには、パッケージpyautoguiおよびtimeモジュールが含まれます
コード:

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

-4バイトありがとう@NoOneIsHere!
アクションのキー:
キャップスロック


3
サイトへようこそ!:)
DJMcMayhem

を使用while 1し、セミコロンで1行にすることで、かなりのバイト数を節約できます。(while 1:pyautogui.press("capslock");time.sleep(.5)
-NoOneIsHere

1
残念ながら、これはスニペットでもありますがimport pyautogui、プログラムの先頭に追加して残りを変更while 1:pyautogui.press("capslock");time.sleep(.5)することで、これを有効な回答にすることができます。
コイアリンガーアーイング

@cairdcoinheringaahingそこにいる必要もimport timeあります。
FlipTack

@cairdcoinheringaahingまさに、それがあなたが必要な理由ですimport time...
FlipTack

1

VBA、82バイト

匿名VBEイミディエイトウィンドウ関数。入力を受け取らず、ユーザーを無期限に悩まします。以下で宣言されているwindows kernel32関数sleepの依存。

睡眠宣言(Win-32)

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

スリープ宣言(Win-64、+ 8バイト)

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

匿名VBEイミディエイトウィンドウ関数

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

少し楽しいバージョン、97バイト

ユーザーを無期限に悩ませる相互再帰的なサブルーチンのセット

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

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

疑わしいバージョン、66 + 2バイト

dllから関数を宣言する必要があるかどうかは、組み込み関数を持つものとしてカウントされるのかどうかわかりません。そうでない場合は、1秒待つ66 + 2バイトバージョン

Do:DoEvents:Application.Wait Now+#0:0:1#:SendKeys"{CAPSLOCK}":Loop
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.