Nhấp nháy CAPS LOCK


107

Hầu hết các bàn phím máy tính đều có đèn LED tích hợp nhỏ, biểu thị chế độ đầu vào hiện tại, như được điều khiển bằng nút CAPS LOCK.

nhập mô tả hình ảnh ở đây

Nhiệm vụ của bạn là chớp mắt:

  • Bật nó lên;
  • Đợi 0,5 (+/- 0,1) giây;
  • Tắt nó một lần nữa.

Các cảnh quay video của đèn LED nhấp nháy được đánh giá cao!

Quy tắc

  • Bạn có thể nhấp nháy một đèn LED khác (ví dụ: Khóa cuộn, Khóa Num, trạng thái Wi-Fi, v.v.), nếu bạn muốn, nhưng nó phải được đặt trên bàn phím của bạn;

  • Nếu ngôn ngữ của bạn thiếu sleeplệnh thứ hai, thay vào đó, chương trình của bạn có thể sử dụng độ trễ 1 giây, với mức phạt +2 byte (đó là cho 0.);

  • Chương trình của bạn phải nhấp nháy ít nhất một lần, những gì xảy ra sau đó tùy thuộc vào bạn, tức là chương trình có thể tiếp tục nhấp nháy (trong trường hợp đó bạn phải đợi cho cùng một độ trễ, trước khi bật lại), hoặc tạm dừng, v.v.

  • Nếu đèn LED được chọn được BẬT theo mặc định, trên hệ thống của bạn, bạn có thể cho rằng nó đã được tắt rõ ràng (ví dụ: thủ công), trước khi chương trình được chạy;

  • Đây là , câu trả lời ngắn nhất trong byte thắng.

Bảng xếp hạng

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
Câu trả lời gian lận không hoạt động tốt: trên hệ thống Linux, cố tình làm hỏng kernel. Tương đương với BSOD của Linux sẽ nháy đèn Caps Lock, chỉ trong trường hợp sự cố cũng làm hỏng phần cứng video và bạn không thể thấy báo cáo BSOD trên màn hình. Thật không may, theo như tôi có thể nói nó nhấp nháy hơi nhanh để trở thành một câu trả lời đủ điều kiện. Điều này sẽ dẫn đến một giải pháp 14 byte (hơi độc hại) nếu được cho phép.

57
Bây giờ hãy nháy nó bằng mã Morse: "Giúp tôi với, tôi bị kẹt trong một nhà máy sản xuất bàn phím!"
mbomb007

12
@ ais523 máy tính xách tay của tôi sẽ làm điều đó nếu tôi lắc nó (0 byte). Quá nhanh tho ...
Tim

18
Phím capslock trên C64 là một công tắc cơ. Nháy mắt có thể là một chút khó khăn ...
Đánh dấu

8
Bây giờ tôi đang tự hỏi liệu đèn LED pin yếu trên bàn phím không dây của tôi có nhấp nháy đúng tốc độ không. Nếu vậy: không byte.
Roger Lipscombe

Câu trả lời:


123

Befunge (BEF32), 390 334 305 byte

Điều này thực sự ngớ ngẩn, nhưng miễn là trang web này chấp nhận khái niệm người phiên dịch định nghĩa ngôn ngữ , tôi cũng có thể lạm dụng quy tắc này. Mã này chỉ hoạt động trong Thực hiện Win32 Befunge-93 của Kevin Vigor, phiên bản 1.01 (Tôi nghĩ là phiên bản duy nhất có sẵn). Bạn có thể tải về nhị phân ở đây .

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

Bây giờ, thông thường bạn sẽ không mong muốn loại thách thức này có thể xảy ra trong Befunge, nhưng BEF32 là cổng Win32 của phiên bản thực thi tham chiếu rất cũ và sau đó không có giới hạn nào kiểm tra lệnh p(đặt). Điều này cho phép chúng tôi ghi vào bất kỳ vị trí nào trong bộ nhớ một cách hiệu quả, điều này cuối cùng cho phép chúng tôi buộc trình thông dịch thực thi mã máy tùy ý.

Bây giờ chúng tôi thực sự không thể thay đổi bất kỳ mã hiện có nào, vì phần .text của tệp thực thi sẽ không có quyền ghi. Tuy nhiên, chúng ta có thể lừa hệ thống thực thi một địa chỉ trong phần .data, bằng cách ghi địa chỉ đó vào atexitbảng của thư viện thời gian chạy (ít nhất tôi nghi ngờ đó là địa chỉ nào). Kết quả cuối cùng là mã của chúng tôi được thực thi tự động khi trình thông dịch thoát.

Điều này phụ thuộc vào thực tế là tệp thực thi được tải tại một địa chỉ cố định, vì vậy chúng tôi biết chính xác mọi thứ nằm trong bộ nhớ - nó được cho là sẽ không hoạt động nếu bạn áp dụng các cài đặt ASLR mặc định . Nó cũng dựa vào phần .data có thể được thực thi, mặc dù không có bộ thuộc tính thực thi, do đó, rất có thể nó sẽ không hoạt động nếu bạn áp dụng các cài đặt DEP mặc định .

Bản thân mã này là bản sao của kỹ thuật của Mego được keybd_eventdịch thành mã máy:

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

Phiên bản mã này tiếp tục nhấp nháy mãi mãi (hoặc ít nhất là cho đến khi bạn giết tiến trình), vì điều đó hóa ra dễ chơi golf hơn một đèn flash.

Và vì tất cả mọi người đang đăng hình ảnh động, đây là một xấp xỉ của nó trông giống như trên bàn phím của tôi.

Hoạt hình của đèn capslock nhấp nháy


30
Mọi người thường lạm dụng các quy tắc để làm cho cuộc sống của họ dễ dàng hơn, nhưng những người đó không phải là lập trình viên Befunge :)
Aaron

21
Không bao giờ mong đợi một câu trả lời esolang cho thử thách này +1
zeppelin

9
Đây là câu trả lời yêu thích của tôi trên trang web này
Cruncher

2
Thực hiện xuất sắc!
Daniel

3
@JamesHoldiness vậy? Đây là một câu trả lời tuyệt vời, ngay cả khi nó dài.
NoOneIsHãy

72

AutoHotkey, 29 26 byte

Cảm ơn @Dane đã lưu 3 byte

Loop{
Send,{VK14}
Sleep,500
}

Ban đầu tôi chọn NumLockvì nó ngắn hơn một ký tự CapsLock. GIF dưới đây phản ánh điều kiện đó. Đó là hiệu ứng tương tự như mã đã thay đổi ở trên. Tôi có thể đã đi với VK90ở trên để làm cho GIF vẫn chính xác nhưng phù hợp với thử thách ban đầu cảm thấy tốt hơn.

Nháy mắt


Để vinh danh bình luận của mbomb007 , đây là một thông điệp mã morse trong 239 byte :

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
}

Dưới đây là 30 giây đầu tiên của tin nhắn đó:

MorseCodeBlinking


3
Làm thế nào về send,{vk14}thay vì để cạo 3 byte? Phần thưởng: bạn sẽ nhấp nháy CapsLock.
Dane

35

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

Mã này sẽ làm cho đèn LED của ổ đĩa mềm nhấp nháy mãi mãi với tốc độ yêu cầu ( PAUSE 25= tạm dừng trong 25/50 giây).

Việc lắp ráp này có thể ngắn hơn, nhưng tôi không có công cụ thích hợp trong tầm tay. Đây là kích thước của danh sách GFA-Basic sau khi được lưu ở định dạng .LST và được chỉnh sửa thủ công để xóa khoảng trắng vô dụng, đổi tên hướng dẫn thành các chuỗi ngắn hơn và thay thế từng chuỗi CR+LFđơn giản CR. Lưu ý rằng một trận chung kết CRlà bắt buộc.

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

Sẽ tự động mở rộng thành:

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

SPOKElà một siêu nạp POKEđầu tiên đặt 68000 ở chế độ giám sát , để nó được phép truy cập vào các vùng nhớ bị hạn chế (ở đây: địa chỉ ghi thanh ghi của soundchip YM2149, cũng chịu trách nhiệm cho một số I / O khác).

Và vâng: đèn LED được đặt trên bàn phím ... Tôi cho là vậy.

Đèn LED ST

Tôi không có quyền truy cập vào một ST thực sự ngay bây giờ, vì vậy đây chỉ là một mockup.


7
Ổ đĩa mềm! Ồ
David Conrad

12
Vòng tròn đỏ vẽ tay bị thiếu ...
Hagen von Eitzen

@HagenvonEitzen Hy vọng, vòng tròn đỏ không còn cần thiết nữa. :-)
Arnauld

23

+ ckb , 56 54 byte

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

Nhấp nháy toàn bộ bàn phím của tôi trong các màu ngẫu nhiên, mặc dù số không dài 6 chữ số nên nó hơi bị giới hạn.

Và vâng, vỏ toàn cầu đó có khả năng nguy hiểm. Hoạt động trên máy của tôi ™

Phần thưởng kịch bản, 8 tháng sau: Điều này sẽ đi qua tất cả các màu. Không chơi gôn.

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

13
Bàn phím nào vậy? lol
Hạt nhân Mc

1
@McKernel khiến mọi người tò mò không biết bàn phím nào cũng vậy
CraigR8806

3
K70 RGB với keycaps tùy chỉnh - unascrip.com/f/67209fe8_keyboard_design.svg
Una

6
Điểm thưởng cho việc vượt lên trên và bằng cách làm cho toàn bộ bàn phím nhấp nháy.
Cột

tee /d*/*/*/c*? Điểm thưởng cho việc chịu trách nhiệm với một số máy tính của người nghèo trong tương lai khi điều này chắc chắn sẽ mở rộng đến một điều quan trọng. (Biến EFI có ai không? Có lẽ sẽ có một cái gì đó giống như /dev/efi/vars/cpu_type)
Immibis 17/03/18

21

Bash + amixer, 45 byte

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

Nháy đèn tắt trên bàn phím của tôi.


17
a()(amixer set Master toggle;sleep .5;a)hoặc amixer set Master toggle;sleep .5;$0như một chương trình đầy đủ ngắn hơn một chút.
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();}

Giải trình

keybd_eventlà một chức năng API Windows (không dùng nữa) để gửi một sự kiện bàn phím (keyup hoặc keydown). 20là mã cho khóa Caps Lock, 69là mã quét phần cứng (tôi không biết điều đó có nghĩa là gì) và 1có nghĩa là khóa phím và 3có nghĩa là khóa. Một phím nhấn được mô phỏng bằng cách gửi một sự kiện nhấn phím ngay sau đó là một sự kiện gõ phím. Một phím bấm được gửi để bật Caps Lock, sau đó chương trình ngủ trong 500 mili giây và sau đó một phím nhấn khác được gửi để tắt Caps Lock.

Cảm ơn Steadybox cho một loạt các byte được lưu


1
Cho đây là C, bạn có thể không khai báo int keybd_event();?
Neil

@Neil Nó sẽ là void keybd_event();, và tôi cũng cần void Sleep();từ windows.h. Hai khai báo với nhau dài hơn bao gồm.
Mego

1
79 byte:#include<windows.h> k(n){keybd_event(20,69,n,0);}f(){k(1);k(3);Sleep(500);f();}
Steadybox 22/2/2017

2
Chắc chắn, nhưng đối với các loại nguyên thủy, C không quan tâm đến sự không phù hợp nếu bạn không bao giờ sử dụng kết quả.
Neil

6
Mã quét là những gì bàn phím của bạn gửi qua dây ở mức thấp nhất. Giá trị của chúng dựa trên các vị trí trong bố cục tiêu chuẩn vì thực hiện điều đó cho phép chúng làm cho bàn phím câm nhất có thể và không phải nối từng phím (hạn chế của thiết kế này là một phần lý do tại sao bàn phím rẻ hơn chỉ có thể trả về một vài lần nhấn phím đồng thời - Giao diện bàn phím USB cơ bản sau đó đưa giới hạn vào phần lớn các bàn phím khoảng 20 năm trước bằng cách thiết kế cho min std) với chi phí giảm tải một bước dịch lên máy tính chủ. vi.wikipedia.org/wiki/Scancode
Dan Neely

16

MATLAB, 146 136 70

Cảm ơn @Poke đã xóa 66 byte!

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

Điều này sử dụng khả năng của Matlab để gọi các lớp Java. Đèn Num Lock được nhấp nháy theo vòng bằng cách nhấn và nhả chương trình Num Lock.

Video hoặc nó đã không xảy ra .


9
Bạn có thể sử dụng 144thay vì java.awt.event.KeyEvent.VK_NUM_LOCK? CAPS_LOCK sẽ là20
Chọc

2
@Poke Có! Có 66 byte !!
Luis Mendo

7
Thật buồn cười là nó ngắn hơn câu trả lời java
Matsemann

15

Mã máy x86 cho PC (ví dụ: tệp COM MS-DOS), 27 byte

Mã máy này (được hiển thị ở đây với kết xuất Unicode của CP437 của PC BIOS thông thường) sẽ nhấp nháy chỉ báo CAPS LOCK mãi mãi trên PC:

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

Mã đã được tạo để nó không chứa byte NULL và do đó có thể được gõ bằng bàn phím (sử dụng thủ thuật Alt + XXX cho các ký tự mở rộng) để tạo tệp COM (ví dụ: sử dụng COPY CON blink.comlệnh trong MS-DOS, trong trường hợp này tệp đầu ra sẽ phải chứa một byte thứ 28 giả , ^Zký tự (EOF) cần thiết để dừng hoạt động sao chép).

Hiệu ứng đạt được bằng cách gửi trực tiếp các lệnh tới bộ điều khiển bàn phím của PC (cổng 60h) để đặt trạng thái LED (dưới dạng hiệu ứng phụ, nó có thể đặt đèn LED Num Lock và Scroll Lock ở trạng thái không nhấp nháy ngẫu nhiên). Thời gian, để giảm thiểu số lượng hướng dẫn, đạt được bằng cách sử dụng đồng hồ đếm ngược được duy trì bởi BIOS tại địa chỉ 0040:0040(nó giảm cứ sau 54.925 ms, với 9 chu kỳ chu kỳ nhấp nháy là 494,3 ms, nằm trong giới hạn cho phép) - bộ đếm này thường được BIOS sử dụng để dừng động cơ đĩa mềm; vì ổ đĩa mềm không được chương trình sử dụng và mã được cho là chạy trong môi trường tác vụ đơn (ví dụ DOS), chơi với bộ định thời động cơ đĩa mềm không phải là vấn đề.

Mã này chạy tốt trong MS-DOS (đã thử với VirtualBox, nó cũng chạy tốt trên phần cứng thực, mặc dù tôi chưa có thời gian để tạo ra một USB USB MS-DOS có thể khởi động để kiểm tra). Vì nó không phụ thuộc vào bất kỳ chức năng HĐH nào, nó thậm chí có thể chạy mà không cần hệ điều hành (ví dụ: bằng cách đặt nó vào khu vực khởi động của đĩa). Nó yêu cầu ít nhất một bộ xử lý 80186 để chạy, vì các lệnh "đẩy ngay lập tức" được sử dụng để rút ngắn mã của một số byte.

Mã nguồn hội:

  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

Kết xuất thập lục phân của mã được lắp ráp:

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

Đây là kết quả chạy dưới MS-DOS trong VirtualBox (không hoạt động với DosBox, có lẽ vì bộ điều khiển bàn phím không được mô phỏng hoàn toàn):

Nhấp nháy CAPS LOCK

(xin lỗi vì video rung lắc).


Một ví dụ về việc thực sự sử dụng copy con program.exe: youtube.com/watch?v=iefuJ_jZAiQ
Jerry Jeremiah

13

SmileBASIC, 36 23 byte

XON MIC
WAIT 30XOFF MIC

Nhấp nháy đèn trạng thái micrô. (video sắp ra mắt)


12

Python2 - 108 byte

Liệu phím capslock. Thật thú vị, điều này thực sự chỉ bật đèn LED mà không ảnh hưởng đến bàn phím hoặc nhấn phím. Bạn có thể thay đổi 4ở cuối 2để làm numlock. 6làm cả hai.

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

Có vẻ như tôi đã gặp lỗi: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 bạn có trên Windows không?
Maltysen

1
Không, tôi đang trên macOS Sierra Version 10.12.1 (16B2555).
haykam

8

shell + numlockx, 40 35 byte

[Đã lưu 5 byte nhờ Ryan.]

Liên tục nhấp nháy đèn NumLock trên các hệ thống unixish.

numlockx toggle;sleep .5;exec sh $0

Nháy mắt đơn, 33 byte

numlockx on;sleep .5;numlockx off

1
Bạn có thể sử dụng exec sh $0thay vì whileđể lưu 5 byte hoặc sh $0nếu tạo quy trình mãi mãi được coi là ổn.
Ry-

2
watch -n0.5 numlockx toggle cho 27 byte.
Tejas Kale

Để có một hương vị khác ở trên, trên các vỏ tương tác, bạn có thể nhập: numlockx toggle;sleep .5;!#(27 byte) cho một nháy mắt. !#là sự kiện mở rộng lịch sử được thay thế bởi mọi thứ được gõ cho đến nay trong dòng lệnh.
init_js 17/03/18

trong lệnh nhấp nháy đơn, oncó thể bỏ qua. nó là mặc định
init_js 17/03/18

Với bài tập, không có thủ đoạn: f=numlockx;$f;sleep .5;$f off(29). Và (một phiên bản vòng lặp kém hơn) sử dụng đệ quy: g(){ f=numlockx;$f toggle;sleep .5;g;};g(40).
init_js 17/03/18

8

PowerShell , 71 byte

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

Ghi chú

  • Chớp mắt mãi
  • Sử dụng NUM LOCKđể lưu một byte.

"Nếu ngôn ngữ của bạn thiếu lệnh ngủ thứ hai ..." - không có vẻ như nó bị thiếu trong PowerShell.
Dane

@Dane Tôi đã hỏi người đăng để làm rõ. Nếu bầu không chấp nhận hình phạt không được phép, tôi sẽ hoàn nguyên nó.
nghĩa tự do

@Dane lăn lại.
nghĩa tự do

Làm thế nào mà ngủ .5 không hoạt động ở đây? Tôi đã thử nó và nó dường như đi được khoảng 5ms nhưng tôi nghĩ mặc định nó là (-s) nên nó sẽ là 0,5 giây?
Jake Harry

1
@JakeHarry: -SecondsTham số là một int, vì vậy 0.5sẽ được chuyển đổi thành int, kết quả là 0(làm tròn thành chẵn là chế độ làm tròn mặc định). Vì vậy, bạn hoàn toàn không ngủ (kết quả là chậm trễ khoảng 1000 tick ở đây, vì vậy 10 mẹo). Các quy tắc ràng buộc chuyển đổi và tham số khá cơ bản trong PowerShell.
Joey

7

VBS, 75 byte

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

Nhấp nháy liên tục phím Num Lock, numlockngắn hơn 1 byte capslock.


7

C #, 215 202 198 195 185 byte

Không nhận ra tôi đã thực hiện mã "giống" như câu trả lời này của @Mego , hãy kiểm tra xem!.

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

Đã lưu 13 byte nhờ @Metoniem
Đã lưu 10 byte nhờ @VisualMelon

Đây là một phiên bản được định dạng đầy đủ cho thấy nó hoạt động:

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

Cho sự thay đổi vui tiền thưởng n++ & 2để n+=2 & 2và xem các khóa num và caps lock phím thay thế trong nhấp nháy và tắt. Tôi không biết tại sao điều đó xảy ra bởi vì nó không nên nhưng nó trông "tuyệt".


Đợi đã, using System;nhưng theo tôi có thể nói rằng bạn không thực sự sử dụng bất cứ thứ gì trực tiếp từ không gian tên Hệ thống? Tôi nghĩ bạn có thể loại bỏ điều đó.
Metoniem

@Metoniem Tốt phát hiện chữ ký cho keybd_eventphương thức này void keybd_event(byte bVk, byte bScan, uint dwFlags, UIntPtr dwExtraInfo);. Tôi tin tưởng rằng tôi có thể xóa UIntPtrchúng sau khi đăng và có chúng dưới dạng intvà chỉ quên không sử dụng.
TheLethalCoder

1
Ahh, tôi thấy haha, những thứ như thế xảy ra! Người đàn ông trả lời tốt đẹp :)
Metoniem

Tôi nghĩ rằng bạn thực sự nên đặt tên và nhập hai 'hàm': bạn đề cập đến ktrong một, nhưng nó không được xác định rõ ràng. Không được kiểm tra, nhưng tôi nghĩ rằng bạn nên có một cuộc gọi đến keybd_event trong một vòng lặp không liên kết, tôi nên nghĩ: for(int i=0;;...Sleep(250))keybd_event(i++&2)hoặc một cái gì đó.
VisualMelon

@VisualMelon Cảm ơn, tôi đã cập nhật mã, phải thay đổi chế độ ngủ để có thời gian phù hợp :)
TheLethalCoder

6

Java 7, 121 118 113 byte

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

Một lần nhấn và phát hành chỉ kích hoạt trạng thái; Nó không chớp mắt. Do đó, chúng tôi cũng có thể lặp lại nó và có vẻ như đệ quy là cách rẻ nhất để làm điều đó.


1
Thật đáng tiếc tôi không có một thông dịch viên QBasic ở đây! Bởi vì nó được thực hiện bằng cách sử dụng một hướng dẫn Poke !
sergiol

Điều này có được tối ưu hóa cuộc gọi đuôi hay cuối cùng sẽ vượt quá giới hạn ngăn xếp cuộc gọi?
Cyoce

@Cyoce Tôi không nghĩ Java có tối ưu hóa cuộc gọi đuôi cho đến Java 9 nên cuối cùng điều này đạt đến giới hạn độ sâu đệ quy nhưng không sao vì tôi chỉ cần nháy đèn một lần:]
Chọc

1
Tôi có nghĩa là bạn có thể đặt toàn bộ mã vào lambda, làm mất chi phí khai báo hàm. Kiểu như : ()->for(;;){java.awt.Robot r=new java.awt.Robot();r.keyPress(20);r.delay(500);r.keyRelease(20);}, tiết kiệm 18 byte do chi phí khai báo lambda 4 ký tự.
Tamoghna Chowdhury

1
Một lý do nữa tôi sẽ không trở lại! ;) Trong tất cả sự nghiêm túc, chỉ cần thay đổi câu trả lời cho Java 8 và đi vào điểm số hai chữ số. Cài đặt nó nếu bạn chưa có nó để thử nghiệm.
Tamoghna Chowdhury

5

JavaScript, 82 byte

Tín dụng thực sự thuộc về @FinW , tôi chỉ thay đổi chức năng cũ sang chức năng mũi tên ES6 mới để lưu một số byte. Và vì tôi không có đủ điểm để bình luận nên tôi đã viết một bài trả lời mới.

Chỉnh sửa - xóa dấu ngoặc để lưu thêm 2 byte.

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

Mã của anh ấy trông như thế này

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

1
Đối với chức năng mũi tên, bạn không cần dấu ngoặc đơn phía trước nó.
fnɛtɪk

Hoàn toàn quên mất điều này, cảm ơn.
cai trị23

Tôi có nghĩa là dấu ngoặc đơn còn sót lại từ khi bạn xóa hàm ()
fəˈnɛtɪk

Ồ, nhưng bạn không thể làm điều đó, nó sẽ không hoạt động. Nhưng bạn có thể xóa dấu ngoặc vì chúng không cần thiết trong các câu lệnh một dòng (vì một số lý do, nhận xét của bạn đã nhắc nhở tôi về chúng mặc dù bạn có ý gì khác)
thước kẻ

Lưu một byte bằng cách thay thế ()một ký tự khác, đơn lẻ, chẳng hạn như _hoặc bằng cách tạo omột tham số với mặc định, như vậy : (o=new ActiveXObject("WScript.Shell"))=>.
Xù xì

4

Scala, 84 83 78 byte

Chỉnh sửa: Đã lưu 1 byte nhờ @TheLethalCoder,

Ông đề nghị sử dụng 1>0thay thế true.

Chỉnh sửa 2: Đã lưu 5 byte nhờ @ Corvus_192,

Ông đề nghị sử dụng ký hiệu infix và bỏ dấu ngoặc đơn sau hàm tạo

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

Ung dung:

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

Cổng Scala tiêu chuẩn của câu trả lời Java của @Poke . Nhập trực tiếp vào lời nhắc của trình thông dịch Scala.

Một video về nó nhấp nháy cả đèn LED Caps Lock và OSD của tôi để khởi động!

Đèn LED nhấp nháy và OSD nhấp nháy


Bạn có thể làm for(;;)hoặc while(1>0)hoặc while(1)trong Scala?
TheLethalCoder

Thứ hai là có thể. Việc tiết kiệm 1 byte chưa từng xảy ra với tôi trước đây. Cảm ơn!
Tamoghna Chowdhury

Bạn có thể sử dụng ký hiệu infix: r keyPress 20ngắn hơn một byte r.keyPress(20). Điều tương tự áp dụng cho các cuộc gọi phương thức khác, tổng cộng tiết kiệm 3 byte.
corvus_192

Ngoài ra, bỏ dấu ngoặc đơn từ lệnh gọi hàm tạo để lưu thêm 2 byte.
corvus_192

4

Thiết bị đầu cuối Linux, 8 + 11 = 19 byte

bản giới thiệu

Tập tin f=1B 5B 33 71 1B 5B 30 71

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

BÌNH THƯỜNG?

Theo ECMA-48 , 1Bbắt đầu trình tự thoát điều khiển đầu cuối.

Giới hạn trên = 1B 5B 33 71, sau đó tắt =1B 5B 30 71

pv xem tiến độ

f tập tin

-q Yên tĩnh

-L8 Độ trễ 8 byte / s = 0,5 giây

Sử dụng

Chuẩn bị

#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+ F6Chuyển sang giao diện điều khiển bản địa

chạy pv f -q -L8

Ctrl+ Alt+ F7chuyển trở lại


3

Bash + Xdotool, 36 byte

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

Chỉ cần thực hiện nó trong một bash shell. Nó cần phải ở trong một môi trường đồ họa. Vòng lặp vô hạn từ đây . Đã thay đổi Num_Lock thành 66 để lưu 6 byte và nhờ @Michael Kjorling cho 2 byte.


Bạn có thể lưu ít nhất hai byte bằng cách xóa khoảng trắng không cần thiết. Bạn không cần khoảng trắng trước dấu ngoặc nhọn đóng và bạn không cần khoảng trắng xung quanh dấu chấm phẩy phân tách các lệnh. Bạn làm cần khoảng trắng sau dấu ngoặc nhọn mở, mặc dù.
một CVn

Ngoài ra, liên quan đến sửa đổi ban đầu của bạn: Hãy nhớ rằng bạn có thể sử dụng :làm bí danh cho truehầu hết các hệ thống. while :;do sth;donelàm điều tương tự while true;do sth;donenhưng ngắn hơn ba byte. for((;;)){ sth;}vẫn còn ngắn hơn, mặc dù.
một CVn

@Cyoce ở đâu? Nó không làm việc cho tôi.
Feldspar15523

@Cyoce Tôi nghĩ rằng chỉ hoạt động để khai báo các hàm.
Feldspar15523

@ Feldspar15523 oops nevermind sau đó
Cyoce

3

xdotool , 20 byte

key -delay=500 66 66

Nhấn phím 66 aka Caps Lock hai lần, với độ trễ 500 ms giữa các lần nhấn phím.

Lưu ý rằng xdotool là ngôn ngữ kịch bản; nó có thể được chạy từ một tập tin và nó thậm chí còn hỗ trợ các shebang. Vì execlệnh của nó cho phép chạy các chương trình bên ngoài, nó có khả năng kiểm tra bổ sung và nguyên thủy, vì vậy nó đáp ứng định nghĩa của chúng tôi về ngôn ngữ lập trình.

Chạy thử nghiệm

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

nhập mô tả hình ảnh ở đây


3

Python sử dụng pyautogui: 126 143 115 103 byte

Cảm ơn @ nedla2004 vì đã lưu 12 byte

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

1
Bạn có thể thay đổi vòng lặp while thành while 1:keyDown('capslock');time.sleep(.5);keyUp('capslock')và bạn có thể thay đổi dòng đầu tiên thành from pyautogui import*và dòng thứ hai thành import time.
nedla2004

bạn có thể xóa 'capslock' trùng lặp. import time;c='capslock' ...
init_js 17/03/18

bạn cũng có thể loại bỏ timehoàn toàn. from pyautogui import*; while 1:press('capslock',1,.5). ymmv. Trên môi trường của tôi, pyautogui không ảnh hưởng đến trường hợp tôi gõ, nhưng đèn không nhấp nháy.
init_js 17/03/18

3

Bash, 31 byte

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

Hoạt động trong X, không có quyền truy cập root! (Nếu nó không hoạt động với bạn, hãy xem chức năng init của mã bên dưới để đảm bảo xkbcomp được cấu hình đúng)

Và một tập lệnh thưởng để gửi bất kỳ mã morse nào thông qua khóa mũ (không được đánh gôn):

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

Ví dụ: blink "...././.-../.-../---//.--/---/.-./.-../-..///"


2

Bash + setleds , 43 byte

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

Khá đơn giản. Sử dụng setledsđể chuyển đổi ánh sáng.


2

Bash, 103 byte

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

Phải được chạy như root.

Liệu flash toàn bộ đèn nền bàn phím có hoạt động không? (video sẽ đến khi tôi về nhà)


1
Does flashing the entire keyboard backlight work?Chà, nếu bạn nghĩ về nó, phần nổi bật của bàn phím là một chỉ báo về phần nổi bật của bàn phím đang bật hoặc tắt, và nó chắc chắn là "nằm trên bàn phím", vì vậy, vâng, tôi nghĩ nó có giá trị.
zeppelin

2

JavaScript, 90 byte

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

Nó đòi hỏi ActiveXcó nghĩa là nó sẽ chỉ chạy trên IE ( tuy nhiên Edge không hỗ trợ nó). Nó nhấp nháy khóa NUMLOCK vì như với các câu trả lời khác, nó ngắn hơn CAPSLOCK hoặc SCROLLLOCK.

Bị đánh cắp

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

2

Bash, 33 byte

Điều này giả định Num-Lock sẽ được bật trước khi nó được chạy. Chuyển đổi offoncách khác. Yêu cầu numlockxgói rõ ràng;)

numlockx off;sleep .5;numlockx on

Biên tập:

Saw Alex Howansky đã đăng giải pháp này, nhưng chưa đánh dấu nó với Bash và tôi chỉ tìm kiếm trang web cho "Bash".


+1, bạn không phải chớp mắt nhiều lần (tôi nghĩ vậy).
NoOneIsĐây là

Nếu bạn đang ở trong trình bao tương tác, bạn có thể nhập vào dòng lệnh: numlockx toggle;sleep .5;!# (27 byte). !#là sự kiện mở rộng ra mọi thứ trong dòng lệnh đã được gõ cho đến nay.
init_js 17/03/18

2

Batch File (Với sự trợ giúp của vbs), 74 + 2 = 76 byte

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

Một phần dựa trên câu trả lời của Trelzevir .

.vbsđược tự động bao gồm trong PATHEXT.


1

Tập lệnh Kotlin, 72 byte

Mặc dù không phải là nhỏ nhất, nhưng nó vẫn khá tốt. Tôi yêu Kotlin của chạy cho một số điều, và đây là một trong số họ (nhỏ hơn val r = java.awt.Robot () bởi vì chúng ta không cần cả r. Và val r =. Tuy nhiên, nó dài hơn MathLab)

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

Ung dung:

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

1

Python3, 55 49 byte

Cảm ơn bạn @NoOneIsHere cho -4 byte!

Điều này bao gồm các gói: pyautoguitimemô-đun
Mã:

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

Cảm ơn bạn @NoOneIsHere cho -4 byte!
Chìa khóa trong hành động:
Phím Caps Lock


3
Chào mừng đến với trang web! :)
DJMcMayhem

Bạn có thể lưu khá nhiều byte bằng cách sử dụng while 1và biến nó thành một lớp lót với dấu chấm phẩy. ( while 1:pyautogui.press("capslock");time.sleep(.5))
NoOneIsĐây là

1
Thật không may, đây cũng là một đoạn trích nhưng bằng cách thêm import pyautoguivào phần đầu của chương trình và thay đổi phần còn lại để while 1:pyautogui.press("capslock");time.sleep(.5)bạn có thể biến câu trả lời này thành hợp lệ.
caird coinheringaahing

@cairdcoinheringaahing Cũng cần phải có một cái import timeđó.
FlipTack

@cairdcoinheringaahing Chính xác, đó là lý do tại sao bạn cần một import time...
FlipTack

1

VBA, 82 byte

VBE ẩn danh Chức năng cửa sổ ngay lập tức không có đầu vào và gây khó chịu cho người dùng vô thời hạn. Phụ thuộc vào chức năng ngủ của windows kernel32 được khai báo bên dưới.

Tuyên bố về giấc ngủ (Win-32)

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

Tuyên bố về giấc ngủ (Win-64, + 8 byte)

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

Chức năng cửa sổ ngay lập tức VBE ẩn danh

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

Phiên bản vui hơn một chút, 97 Byte

Một tập hợp các chương trình con đệ quy lẫn nhau gây khó chịu vô hạn cho người dùng

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

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

Phiên bản nghi vấn, 66 + 2 byte

Tôi không chắc chắn nếu phải khai báo một hàm từ một dll được tính là có một hàm sẵn có, vì vậy, trong trường hợp không có, thì đây là phiên bản 66 + 2 byte chờ 1 giây

Do:DoEvents:Application.Wait Now+#0:0:1#:SendKeys"{CAPSLOCK}":Loop
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.