闪烁大写锁定


107

大多数计算机键盘都有一个集成的小型LED灯,可通过CAPS LOCK按钮控制当前输入模式。

在此处输入图片说明

您的任务是使其闪烁:

  • 打开它;
  • 等待0.5(+/- 0.1)秒;
  • 再次关闭它。

LED闪烁的视频片段受到高度赞赏!

规则

  • 如果需要,您可以使另一个LED闪烁(例如,滚动锁定,数字锁定,Wi-Fi状态等),但是必须物理上位于键盘上;

  • 如果您的语言缺少亚秒级sleep命令,则您的程序可能会使用1秒的延迟,但要加2个字节(这是的代价0.);

  • 您的程序必须至少闪烁一次,然后由您自己决定,即程序可以继续闪烁(在这种情况下,您必须等待相同的延迟,然后才能重新打开),或者暂停等。

  • 如果所选的LED默认情况下为ON,则在系统上,您可以假定在运行程序之前已将其明确关闭(例如,手动关闭);

  • 这是,最短的答案以字节为单位。

排行榜

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 '17

12
@ ais523如果我摇晃笔记本电脑(0字节),笔记本电脑将执行此操作。太快了……
Tim

18
C64上的Capslock键是机械开关。闪烁可能有点棘手……
Mark

8
现在,我想知道无线键盘上的电池电量低的LED是否以正确的速率闪烁。如果是这样:零字节。
罗杰·利普斯科姆

Answers:


123

Befunge(BEF32),390个 334 305字节

这确实很愚蠢,但是只要该站点接受解释器定义语言的概念,我还是会滥用该规则。该代码仅适用于Kevin Vigor的Win32 Befunge-93实现版本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

此版本的代码将永久闪烁(或至少直到您终止该过程为止),因为事实证明,这比单次闪烁更容易打高尔夫球。

而且由于每个人都在发布动画,因此这近似于键盘上的外观。

Capslock灯闪烁的动画


30
人们通常会滥用规则以使他们的生活更轻松,但这些规则并非Befunge编码人员:)
Aaron

21
没想到会有一个esolang来应对这个挑战+1
齐柏林飞艇

9
现在,这是我在该网站上最喜欢的答案
Cruncher

2
优秀的执行!
丹尼尔(Daniel)

3
@JamesHolderness那么?即使很长,这也是一个很好的答案。
NoOneIsHere

72

自动热键,29 26字节

感谢@Dane节省了3个字节

Loop{
Send,{VK14}
Sleep,500
}

我最初选择NumLock是因为它比短一个字符CapsLock。下面的GIF反映了这种情况。与上面更改的代码具有相同的效果。我本来可以VK90使GIF仍然准确,但与原始挑战保持一致会更好。

闪烁数字锁定


为了纪念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秒:

MorseCode闪烁


3
怎么样send,{vk14},而不是剃掉3个字节?奖励:您会闪烁CapsLock。
丹内

35

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

此代码将使软盘驱动器LED以所需的速率永久闪烁(PAUSE 25=暂停25/50秒)。

这在组装时可能会更短一些,但我手边没有合适的工具。这是GFA-Basic列表的大小,一旦保存为.LST格式,然后进行手动编辑以删除无用的空格,将指令重命名为较短的字符串,然后将其替换CR+LF为简单的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 soundchip,这也负责一些其他的I / O地址)。

是的:LED物理上位于键盘上……我想。

ST软驱LED

我现在无法访问真正的ST,因此这只是一个模型。


7
软驱!哇!
戴维·康拉德

12
手绘红色圆圈不见了……
Hagen von Eitzen

@HagenvonEitzen希望不再需要红色圆圈。:-)
Arnauld

23

+ ckb56 54字节

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

我的整个键盘以随机的颜色闪烁,但是由于该数字的长度不是6个十六进制数字,所以它有一定的局限性。

是的,该外壳问题具有潜在的危险。在我的机器上工作™

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 '02

1
@McKernel碰到什么键盘也很好奇
CraigR8806 '17


6
通过使整个键盘闪烁,可以超越其他奖励点。
桅杆

tee /d*/*/*/c*?奖励点在于,当将来不可避免地扩展到某些重要的草皮计算机时,它们很可能会变砖。(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函数,用于发送键盘事件(键盘输入或键盘输入)。20是Caps Lock键的代码,69是硬件扫描代码(我不知道这是什么意思),1意味着按下按键和表示按下按键3。通过立即发送一个keydown事件和一个keyup事件来模拟一次按键。发送一次按键以打开Caps Lock,然后程序休眠500毫秒,然后发送另一次按键以关闭Caps Lock。

感谢Steadybox节省了一堆字节


1
鉴于这是C,您不能声明int keybd_event();吗?
尼尔

@Neil会的void keybd_event();,我也需要void Sleep();windows.h。这两个声明加起来比包含声明更长。
Mego

1
79字节:#include<windows.h> k(n){keybd_event(20,69,n,0);}f(){k(1);k(3);Sleep(500);f();}
Steadybox '02

2
可以,但是对于原始类型,如果您从不使用结果,则C不会在乎不匹配。
尼尔

6
扫描代码是键盘在最低级别通过电线发送的代码。它们的值基于标准布局中的位置,因为这样做可以使键盘尽可能地笨拙,而不必将每个键连接起来(这种设计的局限性是为什么便宜的键盘只能同时返回几次击键的部分原因-基线USB键盘接口大约在20年前通过设计最小标准(std)将限制引入了绝大多数键盘,但其代价是将翻译步骤转移到了主机上。zh.wikipedia.org/wiki/Scancode
Dan Neely

16

MATLAB,146 136 70

感谢@Poke删除了66个字节!

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

这利用了Matlab调用Java类的能力。通过按动并释放,Num Lock灯会循环闪烁Num Lock

视频还是没有发生


9
可以144代替使用java.awt.event.KeyEvent.VK_NUM_LOCK吗?CAPS_LOCK将是20

2
@戳是的!总共有66个字节!!
路易斯·门多

7
有趣的是它比Java答案要短
Matsemann '17

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.com在MS-DOS下使用命令)输出文件必须包含一个虚假的 28 字节^Z(停止复制操作所需的(EOF)字符)。

通过直接将命令发送到PC的键盘控制器(端口60h)以设置LED状态(作为副作用,它可能会将Num Lock和Scroll Lock LED设置为随机的非闪烁状态)来实现该效果。通过使用BIOS在地址处维护的倒数计时器来实现计时(以最大程度地减少指令数量)0040:0040(它每54.925毫秒减少一次,每9个周期,闪烁周期为494.3毫秒,这在允许的余量内)—此计数器BIOS通常使用它来停止软盘电动机;由于程序不使用软盘驱动器,并且假定代码在单任务环境(例如DOS)中运行,因此使用软盘电动机计时器不是问题。

该代码在MS-DOS下运行良好(尝试过VirtualBox,它也应在真实硬件上运行良好,尽管我还没有时间制作可启动的MS-DOS USB记忆棒来进行测试)。由于它不依赖任何操作系统功能,因此甚至可以在没有操作系统的情况下运行(例如,通过将其放置在磁盘的引导扇区中)。由于用于缩短某些字节代码的“立即推送”指令,因此至少需要运行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

汇编代码的十六进制转储:

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,可能是因为未完全模拟键盘控制器):

闪烁大写锁定

(对不起的视频很抱歉)。


实际使用示例copy con program.exeyoutube.com/watch?v=iefuJ_jZAiQ
Jerry Jeremiah

13

SmileBASIC,36个 23字节

XON MIC
WAIT 30XOFF MIC

闪烁麦克风状态指示灯。(视频即将推出)


12

Python2-108个字节

按下Capslock键。有趣的是,这实际上只是打开了LED本身,而没有影响键盘或按键。您可以4在最后更改2numlock。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上吗?
Maltysen '17

1
不,我在macOS Sierra Version 10.12.1 (16B2555)
haykam '17

8

shell + numlockx,40 35字节

[感谢Ryan节省了5个字节。]

在unixish系统上,持续闪烁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的羽衣甘蓝

对于上述不同的味道,在交互式shell上,您可以输入:numlockx toggle;sleep .5;!#(27字节)进行一次眨眼。!#是历史扩展事件,由到目前为止在命令行中键入的所有内容替换。
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保存一个字节。

“如果您的语言缺少亚秒级睡眠命令...”-听起来好像PowerShell中缺少它。
丹内

@Dane我已要求海报进行澄清。如果不允许接受处罚,我将恢复原状。
briantist

@Dane回滚。
briantist

为什么睡眠.5在这里不起作用?我试了一下,好像是5毫秒,但我认为默认情况下是(-s),所以是0.5 s?
杰克·哈里

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锁定和caps锁定键交替闪烁的状态。我不知道为什么会这样,因为它不应该,但是看起来很酷。


等一下,using System;据我所知,您实际上并没有直接使用System名称空间中的任何内容?我认为您可以删除它。
Metoniem '17

@Metoniem该keybd_event方法的签名点实际上是void keybd_event(byte bVk, byte bScan, uint dwFlags, UIntPtr dwExtraInfo);。我发布了我可以UIntPtr在发布后删除的,并将其作为int,只是忘了删除使用。
TheLethalCoder

1
啊,我明白了哈哈,类似的事情发生了!不错的回答者:)
Metoniem '17

我认为您确实应该命名并键入两个“功能”:您k在其中引用了一个,但显然是未定义的。没有检查,但我认为您最好在无括号的for循环中一次调用keybd_event,我应该认为:for(int i=0;;...Sleep(250))keybd_event(i++&2)或类似的东西。
VisualMelon '17

@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
可惜我没有QBasic解释器!因为它是使用Poke指令完成的!
sergiol '17

是否优化了尾部调用,还是最终超过了调用堆栈限制?
Cyoce

@Cyoce我认为Java直到Java 9才具有尾调用优化功能,因此这最终达到了递归深度限制,但是没关系,因为我只需要眨一下灯就可以了:]

1
我的意思是,您可以将整个代码放入lambda中,这会浪费函数声明的开销。有点像:()->for(;;){java.awt.Robot r=new java.awt.Robot();r.keyPress(20);r.delay(500);r.keyRelease(20);},由于有4个字符的lambda声明开销,因此节省了18个字节。
Tamoghna Chowdhury

1
我不回头的另一个原因!;)认真地说,只需更改Java 8的答案,并取得两位数的分数即可。如果尚未进行测试,请安装它。
Tamoghna Chowdhury

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

完全忘记了这一点,谢谢。
Ruler23

我的意思是删除function()时剩下的括号
fəˈnɛtɪk

哦,但是你不能那样做,那是行不通的。但是您可以删除括号,因为在单行语句中不需要它们(出于某种原因,即使您的意思有所不同,您的评论也使我想起了它们)
Ruler23'2

通过()用另一个单个字符替换来保存一个字节,例如,_或者通过将o参数设置为默认值,例如:(o=new ActiveXObject("WScript.Shell"))=>
毛茸茸的

4

Scala,84 83 78字节

编辑:感谢@TheLethalCoder,保存了1个字节,

他建议使用1>0代替true

编辑2:感谢@ Corvus_192,节省了5个字节,

他建议使用infix表示法并将括号放在构造函数之后

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以启动!

闪烁的Caps Lock LED和OSD


你可以做for(;;)while(1>0)while(1)在Scala呢?
TheLethalCoder

第二个是可能的。我以前从未发生过1字节的保存。谢谢!
Tamoghna Chowdhury

您可以使用infix表示法:r keyPress 20比短一个字节r.keyPress(20)。其他方法调用也是如此,总共节省了3个字节。
corvus_192 '17

同样,从构造函数调用中删除括号以节省另外2个字节。
corvus_192 '17

4

Linux终端,8 + 11 = 19字节

演示

文件f=1B 5B 33 71 1B 5B 30 71

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

WAT?

根据ECMA-481B启动终端控制转义序列。

打开= 1B 5B 33 71,然后关闭=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 shell中执行它即可。它必须在图形环境中。从这里开始无限循环。将Num_Lock更改为66以保存6个字节,并感谢@MichaelKjörling提供了2个字节。


通过删除不必要的空格,您可以节省至少两个字节。您不需要在大括号前使用空格,也不需要在用于分隔命令的分号周围使用空格。不过,您确实需要在花括号后加上空白。
CVn

另外,关于您的初始修订版:请记住,您可以在大多数系统上:用作别名truewhile :;do sth;done的作用与之相同,while true;do sth;done但短了三个字节。for((;;)){ sth;}虽然还短。
CVn

@Cyoce在哪里?它对我不起作用。
Feldspar15523

@Cyoce我认为这仅适用于声明函数。
Feldspar15523

@ Feldspar15523糟糕
不要紧-Cyoce

3

xdotool,20个字节

key -delay=500 66 66

两次按下按键66(也称为Caps Lock),两次按键之间的延迟为500毫秒

请注意,xdotool是一种脚本语言。它可以从文件运行,甚至还支持shebangs。由于其exec命令允许运行外部程序,因此它能够进行加性和素性测试,因此它满足了我们对编程语言的定义。

测试运行

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

在此处输入图片说明


3

使用Python pyautogui:126 143 115 103字节

感谢@ nedla2004节省了12个字节

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*import time
nedla2004 '02

您可以删除重复的“ capslock”。 import time;c='capslock' ...
init_js

您也可以将其time全部删除。 from pyautogui import*; while 1:press('capslock',1,.5)。嗯 在我的环境中,pyautogui确实会影响我键入的大小写,但指示灯不会闪烁。
init_js

3

Bash,31个字节

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

在X中工作,无需root访问!(如果对您不起作用,请参见下面的代码的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

Bash + setleds,43个字节

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

很简单 用于setleds切换灯光。


2

Bash,103个字节

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

必须以root身份运行。

整个键盘背光灯都可以闪烁吗?(我回家的时候有录像带)


1
Does flashing the entire keyboard backlight work?好吧,如果考虑到这一点,键盘高亮显示键盘高亮显示是打开还是关闭,并且它肯定是“物理上位于键盘上的”,所以,是的,我认为它很重要。
zeppelin

2

JavaScript,90个字节

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

它要求ActiveX意味着它只能在IE上运行(但是Edge 支持它)。它闪烁NUMLOCK键,因为与其他答案一样,它比CAPSLOCK或SCROLLLOCK短。

不打高尔夫球

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

2

Bash,33字节

这假定Num-Lock在运行之前已打开。切换offon否则。numlockx显然需要包装;)

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的运行,这是其中之一(小于val r = java.awt.Robot(),因为我们不需要r。和val r =。但是,它比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字节

谢谢@NoOneIsHere -4个字节!

这包括软件包:pyautoguitime模块
代码:

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

谢谢@NoOneIsHere -4个字节!
行动的关键:
大写锁定


3
欢迎光临本站!:)
DJMcMayhem

您可以使用来节省很多字节while 1,并使其成为带有分号的单行代码。(while 1:pyautogui.press("capslock");time.sleep(.5)
NoOneIsHere

1
不幸的是,这也是一个片段,但是通过将其添加import pyautogui到程序的开头并更改其余部分,while 1:pyautogui.press("capslock");time.sleep(.5)您可以使它成为有效的答案。
Caird coinheringaahing

@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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.