Caps Lock 깜박임


107

대부분의 컴퓨터 키보드에는 CAPS LOCK 버튼으로 제어되는 현재 입력 모드를 나타내는 작은 통합 LED 표시등이 있습니다.

여기에 이미지 설명을 입력하십시오

당신의 임무는 그것을 깜박이는 것입니다 :

  • 전원을 켜십시오;
  • 0.5 (+/- 0.1) 초 동안 기다립니다.
  • 다시 끄십시오.

LED 깜박임의 영상은 높이 평가됩니다!

규칙

  • 원하는 경우 다른 LED (예 : Scroll Lock, Num Lock, Wi-Fi 상태 등)를 깜박일 수 있지만 실제로는 키보드에 있어야합니다.

  • 언어에 1 초 미만의 sleep명령 이없는 경우 , 프로그램은 +2 바이트의 벌점으로 1 초 지연을 대신 사용할 수 있습니다 (의 경우 0.).

  • 프로그램은 한 번 이상 깜박 여야합니다. 이후에 발생하는 일은 사용자에게 달려 있습니다. 즉, 계속 깜박일 수 있습니다 (이 경우 같은 지연 시간을 기다렸다가 다시 켜기 전에).

  • 시스템에서 선택한 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 시스템에서 의도적으로 커널을 중단시킵니다. 충돌이 비디오 하드웨어를 중단시키고 화면에 BSOD 보고서가 표시되지 않는 경우를 대비하여 Linux의 BSOD에 해당하는 BSOD는 Caps Lock 표시등을 깜박입니다. 불행히도, 내가 알 수있는 한, 적격 한 답변이 되기에는 너무 빨리 깜박입니다. 이것이 허용된다면 (약간의 악의적 인) 14 바이트 솔루션으로 이어질 것입니다.

57
이제 모스 부호로 깜빡이십시오. "도움말, 키보드 팩토리에 갇혀 있습니다!"
mbomb007

12
@ ais523 노트북을 흔들면 (0 바이트) 그렇게됩니다. 너무 빠르다 ...
Tim

18
C64의 Capslock 키는 기계식 스위치입니다. 조금 까다로울 수도 있습니다 ...
Mark

8
이제 무선 키보드의 배터리 부족 LED가 올바른 속도로 깜박이는지 궁금합니다. 그렇다면 : 0 바이트.
Roger Lipscombe

답변:


123

비 펀지 (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
이 문제 +1에 esolang 답변을 기대하지 마십시오
비행선

9
이 사이트에서 내가 가장 좋아하는 답변입니다
Cruncher

2
탁월한 구현!
다니엘

3
@JamesHolderness 그래서? 이것이 길더라도 큰 대답입니다.
NoOneIsHere7

72

오토 핫키, 29 26 바이트

3 바이트를 저장 한 @Dane에게 감사합니다

Loop{
Send,{VK14}
Sleep,500
}

원래는 NumLock한 문자보다 짧기 때문에 선택했습니다 CapsLock. 아래의 GIF는 그 상태를 반영합니다. 위의 변경된 코드와 동일한 효과입니다. 내가 함께 갈 수 VK90있는 GIF는 여전히 정확하지만, 원래의 도전에 정렬 될 수 있도록 위의 더 나은 느꼈다.

깜박임 NumLock


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을 깜박입니다.
Dane

35

GFA-Basic 3.51 (Atari ST),  61 56 43  35 바이트

이 코드는 플로피 드라이브 LED를 필요한 속도로 영구적으로 깜박입니다 ( PAUSE 25= 25/50 초 동안 일시 중지).

이것은 아마도 조립 시간이 짧을 지 모르지만 손끝에 적절한 도구가 없습니다. 이것은 .LST 형식으로 저장되고 쓸모없는 공백을 제거하고 명령을 더 짧은 문자열로 이름을 바꾸고 각각 CR+LF을 간단한 것으로 바꾸도록 수동으로 편집 된 GFA 기본 목록의 크기입니다 CR. 결승전 CR이 필요합니다.

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

자동으로 확장됩니다 :

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

SPOKEPOKE68000을 수퍼바이저 모드로 설정하여 제한된 메모리 영역 (여기 : 다른 I / O를 담당하는 YM2149 사운드 칩 의 레지스터 쓰기 주소)에 액세스 할 수 있도록 하는 과급 입니다 .

그리고 예 : LED는 실제로 키보드에 위치하고 있습니다 ...

ST 플로피 LED

지금은 실제 ST에 액세스 할 수 없으므로 이것은 모형 일뿐입니다.


7
플로피 드라이브! 와!
David Conrad

12
손으로 그린 ​​빨간색 원이 누락되었습니다 ...
Hagen von Eitzen

@HagenvonEitzen 더 이상 빨간색 원이 필요하지 않기를 바랍니다. :-)
Arnauld

23

생선 + ckb , 56 54 바이트

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

숫자가 6 16 진수가 아니기 때문에 키보드 전체가 임의의 색상으로 깜박입니다.

그리고 그렇습니다. 그 껍질은 잠재적으로 위험합니다. 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
어떤 키보드입니까? lol
Mc Kernel

1
@McKernel 충돌은 어떤 키보드인지 궁금합니다
CraigR8806

3
Una

6
전체 키보드를 깜박임으로써 상하로가는 보너스 포인트.
Mast

tee /d*/*/*/c*? 이것이 필연적으로 중요한 것으로 확장 될 때 미래에 가난한 잔디의 컴퓨터를 벽돌로 만드는 것에 대한 보너스 포인트. (EFI는 누구에게나 변수가 있습니까? 아마도 비슷한 것이있을 것입니다 /dev/efi/vars/cpu_type)
immibis

21

배쉬 + 믹서, 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을 켠 다음 프로그램이 500 밀리 초 동안 휴면 상태로 전환되고, 다른 키 누름으로 Caps Lock이 다시 꺼집니다.

많은 바이트를 절약 한 Steadybox 덕분에


1
이것이 C라면, 선언 할 수 int keybd_event();없습니까?
Neil

@Neil는 것 void keybd_event();, 그리고 나 또한 필요 void Sleep();에서 windows.h. 이 두 선언은 모두 include보다 깁니다.
Mego

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

2
그러나 기본 유형의 경우 결과를 사용하지 않으면 C는 불일치를 신경 쓰지 않습니다.
Neil

6
스캔 코드는 키보드가 가장 낮은 레벨에서 와이어를 통해 전송하는 것입니다. 그 값은 표준 레이아웃에서의 위치를 ​​기준으로합니다. 왜냐하면 각 키를 연결할 필요없이 키보드를 최대한 멍청하게 만들 수 있기 때문입니다 (이 디자인의 한계는 더 저렴한 키보드가 몇 번의 동시 키 입력 만 반환 할 수있는 이유 중 하나입니다. 그런 다음 기본 USB 키보드 인터페이스는 번역 단계를 호스트 컴퓨터에 오프로드하는 비용으로 약 20 년 전에 대부분의 키보드에 제한을 두어 최소한의 표준으로 설계했습니다. en.wikipedia.org/wiki/Scancode
댄 닐리

16

MATLAB, 146 136 70

66 바이트를 제거해 준 @Poke 에게 감사 합니다!

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
Poke

2
@Poke 예! 66 바이트가 간다 !!
Luis Mendo

7
자바 답변보다 짧은 것이 재미있다
Matsemann

15

PC 용 x86 기계 코드 (예 : MS-DOS COM 파일), 27 바이트

이 머신 코드 (여기서는 PC BIOS의 일반적인 CP437을 유니 코드로 렌더링하여 표시됨)는 PC에서 CAPS LOCK 표시기를 영원히 깜박입니다.

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

이 코드는 NULL 바이트를 포함하지 않도록 만들어 졌으므로 키보드로 확장 문자에 Alt + XXX 트릭을 사용하여 입력하여 COM 파일을 만들 수 있습니다 (예 : COPY CON blink.comMS-DOS 의 명령을 사용 하는 경우) 출력 파일에는 가짜 28 번째 바이트 ^Z(복사 작업을 중지하는 데 필요한 (EOF) 문자)가 포함되어야합니다.

이 효과는 LED 상태를 설정하기 위해 PC의 키보드 컨트롤러 (포트 60h)로 직접 명령을 보내서 부작용으로 인해 Num Lock 및 Scroll Lock LED를 무작위로 깜박이지 않는 상태로 설정할 수 있습니다. 명령 수를 최소화하기위한 타이밍은 주소에서 BIOS가 유지 관리하는 카운트 다운 타이머를 사용하여 달성됩니다 0040:0040(이주기는 54.925ms마다 감소하며 9주기마다 깜박임주기는 494.3ms이며 허용 마진 내에 있음) —이 카운터 일반적으로 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에서는 작동하지 않습니다).

깜박임 캡 잠금

(흔들리는 동영상에 대해 죄송합니다).


실제로 사용하는 예 copy con program.exe: youtube.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

1
아뇨 macOS Sierra Version 10.12.1 (16B2555).
haykam

8

shell + numlockx, 40 35 바이트

[라이언 덕분에 5 바이트를 절약했습니다.]

유닉스 시스템에서 NumLock 표시등이 계속 깜박입니다.

numlockx toggle;sleep .5;exec sh $0

단일 깜박임, 33 바이트

numlockx on;sleep .5;numlockx off

1
당신이 사용할 수있는 exec sh $0대신에 while5 바이트, 또는 저장 sh $0영원히 괜찮 간주됩니다 프로세스를 생성하는 경우입니다.
Ry-

2
watch -n0.5 numlockx toggle 27 바이트
Tejas Kale

위의 다른 풍미를 위해 대화식 쉘에서 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바이트를 저장하는 데 사용 합니다.

"언어에 1 초 미만의 잠자기 명령이없는 경우 ..."-PowerShell에서 누락 된 것처럼 들리지 않습니다.
데인

@Dane 저는 포스터에 설명을 요청했습니다. 페널티를 수락하기로 결정하지 않으면 나는 그것을 되돌릴 것입니다.
briantist

@Dane이 롤백했습니다.
briantist

.5는 어떻게 작동하지 않습니까? 나는 그것을 시도했고 그것은 5ms처럼 가고있는 것처럼 보이지만 기본적으로 (-s)라고 생각했기 때문에 0.5 초입니까?
Jake Harry

1
@JakeHarry 다음 -Seconds파라미터가이고 int, 그래서 0.5변환한다 int초래하는 0(원형에도 디폴트 라운딩 모드)이다. 그래서 당신은 전혀 자지 않습니다 (약 1000 틱의 지연이 발생하므로 10 µs). PowerShell의 상당히 기본적인 변환 및 매개 변수 바인딩 규칙
Joey

7

VBS, 75 바이트

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

numlock보다 1 바이트 짧은 Num Lock 키가 반복해서 깜박 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

@Metoniem이 keybd_event메소드 의 서명 은 실제로 사실 void keybd_event(byte bVk, byte bScan, uint dwFlags, UIntPtr dwExtraInfo);이다. 나는 내가 제거 할 수 releasise UIntPtr'게시 후들과 그들을이 int의 단지 사용을 제거하는 것을 잊었다.
TheLethalCoder

1
아, ㅋ ㅋㅋㅋ ㅋㅋㅋ 좋은 답변 남자 :)
Metoniem

나는 당신이 정말로 두 개의 '함수'를 명명하고 타이핑해야한다고 생각합니다 : 당신은 k하나 를 참조 하지만 분명히 정의되지 않았습니다. 확인되지는 않았지만 괄호없는 for 루프에서 keybd_event를 한 번 호출하는 것이 더 좋을 것이라고 생각 for(int i=0;;...Sleep(250))keybd_event(i++&2)합니다.
VisualMelon

내가 코드를 업데이트 한 @VisualMelon 덕분에 타이밍을 얻기 위해 잠을 변경했다 권리 비록 :)
TheLethalCoder

6

자바 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

이것이 테일 콜에 최적화됩니까? 아니면 결국 콜 스택 제한을 초과합니까?
Cyoce 2012

@Cyoce Java 9까지 Java에 테일 콜 최적화가 있다고 생각하지 않으므로 결국 재귀 깊이 한계에 도달하지만 한 번만 빛을 깜박 여야하기 때문에 괜찮습니다.]
Poke

1
전체 코드를 람다에 넣을 수 있으므로 함수 선언 오버 헤드가 손실됩니다. ()->for(;;){java.awt.Robot r=new java.awt.Robot();r.keyPress(20);r.delay(500);r.keyRelease(20);}4 자 람다 선언 오버 헤드로 인해 18 바이트를 절약하는 like :
Tamoghna Chowdhury

1
내가 다시 가지 않는 또 하나의 이유! ;) 진지하게, 대답을 Java 8로 변경하고 두 자리 숫자로 이동하십시오. 아직 테스트 할 것이 없다면 설치하십시오.
Tamoghna Chowdhury

5

자바 스크립트, 82 바이트

크레딧은 실제로 @FinW로갑니다 . 몇 가지 바이트를 절약하기 위해 이전 기능을 새로운 ES6 화살표 기능으로 변경했습니다. 그리고 나는 새로운 답변을 썼다고 언급 할 충분한 포인트가 없기 때문에 becuase.

편집-괄호를 삭제하여 다른 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

()와 같이 다른 단일 문자로 바꾸 _거나 o매개 변수를 기본값으로 설정 하여 바이트를 저장하십시오 (o=new ActiveXObject("WScript.Shell"))=>.
Shaggy

4

스칼라, 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 인터프리터 프롬프트에 직접 입력하십시오.

부팅 할 때 Caps Lock LED와 OSD가 모두 깜박이는 비디오!

깜박임 캡 잠금 LED 및 OSD


당신이 할 수 for(;;)또는 while(1>0)또는 while(1)스칼라?
TheLethalCoder

두 번째는 가능합니다. 전에는 없었던 1 바이트 절약. 감사!
Tamoghna Chowdhury

접두사 표기법을 사용할 수 있습니다 : r keyPress 20is보다 짧은 바이트 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

배쉬 + Xdotool, 36 바이트

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

bash 쉘에서 실행하십시오. 그래픽 환경에 있어야합니다. 여기 에서 무한 루프 . 6 바이트를 절약하기 위해 Num_Lock을 66으로 변경했으며 @Michael Kjörling 덕분에 2 바이트.


불필요한 공백을 제거하여 최소 2 바이트를 절약 할 수 있습니다. 닫는 중괄호 앞에 공백이 필요하지 않으며 명령을 구분하는 세미콜론 주위에 공백이 필요하지 않습니다. 당신은 않습니다 하지만, 오프닝 중괄호 후 공백이 필요합니다.
CVn

또한 초기 개정과 관련하여 : 대부분의 시스템 :에서 별명으로 사용할 수 있습니다 true. while :;do sth;done와 같은 작업을 수행 while true;do sth;done하지만 3 바이트 더 짧습니다. for((;;)){ sth;}그래도 여전히 짧습니다.
CVn

@Cyoce 어디? 그것은 나를 위해 작동하지 않았다.
Feldspar15523

@Cyoce 함수 선언에만 작동한다고 생각합니다.
Feldspar15523


3

xdotool , 20 바이트

key -delay=500 66 66

키 누름 사이에 500ms 의 지연으로 키 66 ( 일명 Caps Lock)을 두 번 누릅니다.

xdotool은 스크립팅 언어입니다. 파일에서 실행할 수 있으며 shebang도 지원합니다. 이 exec명령은 외부 프로그램 실행을 허용 하므로 추가 및 우선 순위 테스트가 가능하므로 프로그래밍 언어 정의를 만족시킵니다.

시운전

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

여기에 이미지 설명을 입력하십시오


3

파이썬 사용 pyautogui : 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*, 그리고 초를 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가 올바르게 구성되었는지 확인하십시오)

그리고 caps lock (골프되지 않음)을 통해 모스 코드를 보내는 보너스 스크립트 :

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?글쎄, 당신이 그것을 생각한다면, 키보드 하이라이트는 키보드 하이라이트가 켜져 있거나 꺼져 있다는 표시이며, 확실히 "실제적으로 키보드에 있습니다"라고 생각합니다.
zeppelin

2

자바 스크립트, 90 바이트

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

ActiveXIE에서만 실행된다는 의미가 필요합니다 (Edge 지원 하지 않습니다 ). 다른 답변과 마찬가지로 CAPSLOCK 또는 SCROLLLOCK보다 짧기 때문에 NUMLOCK 키가 깜박입니다.

언 골프

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

2

배쉬, 33 바이트

Num-Lock이 실행되기 전에 켜져 있다고 가정합니다. 스위치 offon달리. numlockx분명히 패키지가 필요합니다 .)

numlockx off;sleep .5;numlockx on

편집하다:

Alex Howansky는이 솔루션을 이미 게시했지만 Bash로 표시하지 않았으며 사이트에서 "Bash"를 검색했습니다.


+1, 반복해서 깜박일 필요는 없습니다 (제 생각에).
NoOneIsHere 여기

대화식 쉘에있는 경우 명령 행에 numlockx toggle;sleep .5;!# (27 bytes)를 입력 할 수 있습니다 . !#지금까지 입력 한 명령 줄의 모든 항목으로 확장되는 이벤트입니다.
init_js

2

배치 파일 (vbs의 도움으로), 74 + 2 = 76 바이트

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

부분적으로 Trelzevir의 답변을 기반으로 합니다.

.vbs에 자동으로 포함됩니다 PATHEXT.


1

코 틀린 스크립트, 72 바이트

가장 작은 것은 아니지만 여전히 좋습니다. 나는 코 틀린의 사랑 해요 실행 몇 가지를 들어, 이것은 그들 중 하나입니다 (우리는 모두 연구를 필요로하지 않기 때문에 발 R = java.awt.Robot보다 작은 ().와 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 바이트

-4 바이트를위한 @NoOneIsHere에 감사합니다!

여기에는 패키지가 포함됩니다 : pyautoguitime모듈
코드 :

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

-4 바이트를위한 @NoOneIsHere에 감사합니다!
행동의 핵심 :
캡 잠금


3
사이트에 오신 것을 환영합니다! :)
DJMcMayhem

을 사용 while 1하고 세미콜론이있는 하나의 라이너로 만들어서 몇 바이트를 절약 할 수 있습니다 . while 1:pyautogui.press("capslock");time.sleep(.5)
NoOneIs 여기

1
불행히도 이것은 스 니펫이지만 import pyautogui프로그램 시작 에 추가 하고 나머지를 변경하면 while 1:pyautogui.press("capslock");time.sleep(.5)올바른 답변 을 얻을 수 있습니다.
caird coinheringaahing

@cairdcoinheringaahing 거기도 있어야합니다 import time.
FlipTack

@cairdcoinheringaahing 정확히, 그래서 당신이 필요한 이유는 import time...
FlipTack

1

VBA, 82 바이트

Anonymous VBE 입력을받지 않고 사용자를 무기한 괴롭히는 즉각적인 창 기능. 아래에 선언 된 windows kernel32 함수 휴면 상태에서 depedant.

수면 선언 (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.