Большинство компьютерных клавиатур имеют небольшой встроенный светодиодный индикатор, показывающий текущий режим ввода, который управляется кнопкой CAPS LOCK.
Ваша задача - мигнуть:
- Включи его;
- Подождите 0,5 (+/- 0,1) секунды;
- Выключи это снова.
Видеозапись мигания светодиода высоко ценится!
правила
Вы можете мигать другим светодиодом (например, Scroll Lock, Num Lock, статус Wi-Fi и т. Д.), Если хотите, но он должен быть физически расположен на вашей клавиатуре;
Если в вашем языке отсутствует подпоследовательная
sleep
команда, ваша программа может вместо этого использовать задержку в 1 секунду со штрафом +2 байта (это для0.
);Ваша программа должна мигать хотя бы один раз, то, что произойдет после этого, зависит от вас, то есть она может продолжать мигать (в этом случае вы должны дождаться той же задержки, прежде чем снова включить ее), или остановиться и т. Д .;
Если выбранный светодиод включен по умолчанию, в вашей системе вы можете предположить, что он был явно отключен (например, вручную) перед запуском программы;
Это код-гольф , выигрывает самый короткий ответ в байтах.
Leaderboard
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>
Ответы:
Befunge (BEF32),
390334305 байтЭто действительно глупо, но пока этот сайт принимает идею, что переводчик определяет язык , я мог бы также злоупотреблять этим правилом. Этот код работает только в Win32 Befunge-93 Kevin Vigor, версия 1.01 (я думаю, единственная доступная версия). Вы можете скачать бинарный файл здесь .
Обычно вы не ожидаете, что такого рода вызовы будут возможны в Befunge, но BEF32 - это порт Win32 очень старой версии эталонной реализации, и в то время не было проверки границ для команды
p
(put). Это эффективно позволяет нам записывать в любое место в памяти, что в конечном итоге позволяет заставить интерпретатор выполнять произвольный машинный код.Теперь мы не можем на самом деле изменить какой-либо существующий код, так как раздел .text исполняемого файла не будет иметь прав на запись. Тем не менее, мы можем заставить систему выполнить адрес в разделе .data, записав этот адрес в
atexit
таблицу библиотеки времени выполнения (по крайней мере, я подозреваю, что это так). Конечным результатом является то, что наш код автоматически выполняется при выходе из интерпретатора.Это зависит от того факта, что исполняемый файл загружен по фиксированному адресу, поэтому мы точно знаем, где все находится в памяти - он предположительно не будет работать, если вы переопределите настройки ASLR по умолчанию. Он также основан на том, что раздел .data является исполняемым, несмотря на отсутствие установленного атрибута исполняемого файла, поэтому, скорее всего, он не будет работать, если вы переопределите настройки DEP по умолчанию.
Сам код, по существу , копия Mego «s
keybd_event
техники переводится в машинный код:Эта версия кода продолжает мигать вечно (или, по крайней мере, до тех пор, пока вы не убьете процесс), поскольку это оказалось легче для игры в гольф, чем одна вспышка.
А так как все публикуют анимацию, это примерное представление о том, как это выглядит на моей клавиатуре.
источник
AutoHotkey,
2926 байтСпасибо @Dane за сохранение 3 байта
Я изначально выбрал,
NumLock
потому что он на один символ корочеCapsLock
. GIF ниже отражает это условие. Это тот же эффект, что и измененный код выше. Я мог бы пойтиVK90
выше, чтобы сделать GIF по-прежнему точным, но лучше было согласиться с исходной задачей.В честь комментария mbomb007 , вот сообщение азбукой Морзе в 239 байтах :
Вот первые 30 секунд этого сообщения:
источник
send,{vk14}
того, чтобы вместо этого сбрить 3 байта? Бонус: вы будете мигать CapsLock.GFA-Basic 3,51 (Atari ST),
61 56 4335 байтЭтот код заставит светодиод дисковода гибких дисков вечно мигать с необходимой скоростью (
PAUSE 25
= пауза в течение 25/50 секунд).Вероятно, сборка будет короче, но у меня под рукой нет подходящих инструментов. Это размер списка GFA-Basic, который был сохранен в формате .LST и отредактирован вручную для удаления ненужных пробелов, переименования инструкций в более короткие строки и замены каждого
CR+LF
из них простымCR
. Обратите внимание, что финалCR
не требуется.Будет автоматически расширяться до:
SPOKE
является наддувом,POKE
который сначала переводит 68000 в режим супервизора , чтобы ему был разрешен доступ к областям с ограниченной памятью (здесь: адрес записи регистра звукового чипа YM2149, который также отвечает за некоторые другие операции ввода-вывода).И да: светодиод физически расположен на клавиатуре ... Полагаю.
У меня сейчас нет доступа к настоящему ST, так что это всего лишь макет.
источник
рыба + скб ,
5654 байтаМигает вся моя клавиатура в случайных цветах, хотя, поскольку длина не 6 шестнадцатеричных цифр, она немного ограничена.
И да, эта оболочка потенциально опасна. Работает на моей машине ™
Бонусный сценарий, 8 месяцев спустя: он пройдет через все цвета. Не в гольф.
источник
tee /d*/*/*/c*
? Бонусные баллы за то, что в будущем они могут заглушить компьютер какого-то бедняги, когда это неизбежно расширится до чего-то важного. (EFI переменные кто-нибудь? Может быть, будет что-то вроде/dev/efi/vars/cpu_type
)Bash + amixer, 45 байт
Мигает приглушенный свет на моей клавиатуре.
источник
a()(amixer set Master toggle;sleep .5;a)
илиamixer set Master toggle;sleep .5;$0
как полная программа немного короче.C (Windows), 79 байт
объяснение
keybd_event
является (устаревшей) функцией Windows API для отправки события клавиатуры (keyup или keydown).20
это код для ключа Caps Lock,69
это код сканирования оборудования (я понятия не имею, что это значит), и1
означает keydown и3
означает keyup. Нажатие клавиши имитируется путем отправки события нажатия клавиши, за которым сразу же следует событие нажатия клавиши. Одно нажатие клавиши отправляется для включения Caps Lock, затем программа спит в течение 500 миллисекунд, а затем отправляется другое нажатие, чтобы снова отключить Caps Lock.Спасибо Steadybox за сохраненную кучу байтов
источник
int keybd_event();
?void keybd_event();
, и мне тоже нужноvoid Sleep();
отwindows.h
. Эти две декларации вместе длиннее, чем include.#include<windows.h> k(n){keybd_event(20,69,n,0);}f(){k(1);k(3);Sleep(500);f();}
MATLAB,
14613670Спасибо @Poke за удаление 66 байт!
Это использует способность Matlab вызывать классы Java. Индикатор Num Lock мигает в цикле программным нажатием и отпусканием Num Lock.
Видео или этого не произошло .
источник
144
вместоjava.awt.event.KeyEvent.VK_NUM_LOCK
? CAPS_LOCK будет20
машинный код x86 для ПК (например, файл MS-DOS COM), 27 байт
Этот машинный код (отображаемый здесь с рендерингом Unicode обычного CP437 BIOS ПК) будет постоянно мигать индикатором CAPS LOCK на ПК:
Код был создан таким образом, чтобы он не содержал пустых байтов, и поэтому его можно набирать с клавиатуры (используя трюк Alt + XXX для расширенных символов) для создания COM-файла (например, с помощью
COPY CON blink.com
команды в MS-DOS, в этом случае выходной файл должен содержать ложный 28- й байт^Z
(символ (EOF), необходимый для остановки операции копирования).Эффект достигается путем прямой отправки команд на контроллер клавиатуры ПК (порт 60h) для установки состояния светодиодов (в качестве побочного эффекта он может установить для светодиодов Num Lock и Scroll Lock случайное не мигающее состояние). Синхронизация, чтобы минимизировать количество инструкций, достигается с помощью таймера обратного отсчета, поддерживаемого BIOS по адресу
0040:0040
(он уменьшается каждые 54,925 мс, с 9 циклами цикл мигания составляет 494,3 мс, что находится в допустимых пределах) - этот счетчик обычно используется BIOS для остановки привода гибкого диска; поскольку дисковод гибких дисков не используется программой и предполагается, что код выполняется в среде с одной задачей (например, DOS), игра с таймером дисковода гибких дисков не является проблемой.Код отлично работает под MS-DOS (пробовал с VirtualBox, он также должен нормально работать на реальном оборудовании, хотя у меня еще не было времени, чтобы протестировать загрузочную флешку MS-DOS USB). Поскольку он не зависит от каких-либо функций ОС, он может работать даже без операционной системы (например, помещая его в загрузочный сектор диска). Для работы требуется как минимум процессор 80186 из-за инструкций «немедленного нажатия», используемых для сокращения кода некоторых байтов.
Исходный код сборки:
Шестнадцатеричный дамп собранного кода:
Вот результат работы под MS-DOS в VirtualBox (не работает с DosBox, предположительно потому, что контроллер клавиатуры не полностью эмулируется):
(извините за шаткое видео).
источник
copy con program.exe
: youtube.com/watch?v=iefuJ_jZAiQSmileBASIC,
3623 байтаМигает индикатор состояния микрофона. (скоро будет видео)
источник
Python2 - 108 байт
Есть ли заглушка ключом. Интересно, что это фактически включает только сам светодиод, не затрагивая клавиатуру и не нажимая клавишу. Вы можете изменить
4
в конце,2
чтобы делать Numlock.6
делает оба.источник
Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<string>", line 1, in <module> IOError: [Errno 25] Inappropriate ioctl for device
macOS Sierra Version 10.12.1 (16B2555)
.shell + numlockx,
4035 байт[Сохранено 5 байтов благодаря Райану.]
Постоянно мигает индикатор NumLock в unixish системах.
Одиночное мигание, 33 байта
источник
exec sh $0
вместо того,while
чтобы сохранить 5 байтов, илиsh $0
если создание процессов навсегда считается нормальным.watch -n0.5 numlockx toggle
для 27 байтов.numlockx toggle;sleep .5;!#
(27 байт) для одного мигания.!#
это событие расширения истории, замененное всем, что было введено до сих пор в командной строке.on
может быть опущена. это по умолчанию.f=numlockx;$f;sleep .5;$f off
(29). И (низшая) версия зацикливания с использованием рекурсии:g(){ f=numlockx;$f toggle;sleep .5;g;};g
(40).PowerShell , 71 байт
Примечания
источник
-Seconds
параметр является параметромint
, поэтому0.5
будет преобразован вint
, что приводит к0
(округление до четного является режимом округления по умолчанию). То есть вы совсем не спите (задержка составляет около 1000 тиков, то есть 10 мкс). Довольно простые правила преобразования и привязки параметров в PowerShell.VBS, 75 байт
Многократно мигает клавиша Num Lock, так как
numlock
она на 1 байт короче, чемcapslock
.источник
C #,
215202198195185 байтНе понимая, что я сделал «тот же» код, что и этот ответ @Mego , проверь его!Сохранено 13 байтов благодаря @Metoniem
Сохранено 10 байтов благодаря @VisualMelon
Вот полностью отформатированная версия, показывающая, как она работает:
Для бонусного удовольствия измените
n++ & 2
наn+=2 & 2
и посмотрите, как клавиши num lock и caps lock попеременно мигают и загораются. Я понятия не имею, почему это происходит, потому что это не должно, но это выглядит "круто".источник
using System;
но насколько я могу судить, вы на самом деле ничего не используете непосредственно из пространства имен System? Я думаю, что вы можете удалить это.keybd_event
метода на самом делеvoid keybd_event(byte bVk, byte bScan, uint dwFlags, UIntPtr dwExtraInfo);
. Я освобождаю, я мог удалитьUIntPtr
's после публикации и иметь их какint
' s и просто забыл удалить использование.k
одну, но она явно не определена. Не проверено, но я думаю, что вам лучше иметь один вызов keybd_event в свободном цикле for, я должен подумать:for(int i=0;;...Sleep(250))keybd_event(i++&2)
или что-то в этом роде.Java 7,
121118113 байтовОдно нажатие и отпуск только вызывает состояние; это не мигает. Таким образом, мы можем также зациклить его, и похоже, что рекурсия - самый дешевый способ сделать это.
источник
()->for(;;){java.awt.Robot r=new java.awt.Robot();r.keyPress(20);r.delay(500);r.keyRelease(20);}
экономия 18 байтов из-за 4-символьного заголовка лямбда-объявления.JavaScript, 82 байта
На самом деле кредит идет на @FinW , я просто изменил старую функцию на новую функцию стрелки ES6, чтобы сэкономить несколько байтов. И потому что у меня не хватает очков, чтобы комментировать, я написал новый ответ.
Редактировать - удалить скобки, чтобы сохранить еще 2 байта.
Его код выглядел так
источник
()
другим, один символ, например,_
или сделавo
параметр со значением по умолчанию, например , так:(o=new ActiveXObject("WScript.Shell"))=>
.Scala,
848378 байтРедактировать: 1 байт сохранен благодаря @TheLethalCoder,
Он предложил использовать
1>0
вместоtrue
.Редактировать 2: 5 байтов сохранены благодаря @ Corvus_192,
Он предложил использовать инфиксную нотацию и убрать скобки после конструктора
Ungolfed:
Стандартный порт Scala для Java- ответа @Poke . Введите его прямо в командной строке интерпретатора Scala.
На видео мигает и мой индикатор Caps Lock, и мое OSD для загрузки!
источник
for(;;)
илиwhile(1>0)
илиwhile(1)
в Scala?r keyPress 20
на байт короче, чемr.keyPress(20)
. То же самое относится и к вызовам других методов, сохраняя всего 3 байта.Терминал Linux, 8 + 11 = 19 байт
Файл
f
=1B 5B 33 71 1B 5B 30 71
native@shell:~$
pv f -q -L8
WAT?
Согласно ECMA-48 ,
1B
запускается управляющая последовательность терминала.Caps on =
1B 5B 33 71
, затем off =1B 5B 30 71
pv
Прогресс просмотраf
файл-q
тихий-L8
8 байт / с = задержка 0,5 сиспользование
Подготовить
Ctrl+ Alt+ F6переключиться на родную консоль
бегать
pv f -q -L8
Ctrl+ Alt+ F7переключиться назад
источник
Bash + Xdotool, 36 байт
Просто выполните это в оболочке bash. Это должно быть в графической среде. Бесконечный цикл отсюда . Изменен Num_Lock на 66, чтобы сохранить 6 байтов, и благодаря @Michael Kjörling за 2 байта.
источник
:
в качестве псевдонима дляtrue
большинства систем.while :;do sth;done
делает то же самое,while true;do sth;done
но на три байта короче.for((;;)){ sth;}
все еще короче, хотя.xdotool , 20 байтов
Дважды нажимает клавишу 66, также известную как Caps Lock , с задержкой в 500 мс между нажатиями клавиш.
Обратите внимание, что xdotool является языком сценариев; он может быть запущен из файла, и он даже поддерживает Shebangs. Поскольку его
exec
команда позволяет запускать внешние программы, она способна проверять сложность и первичность, поэтому она удовлетворяет нашему определению языка программирования.Тестовый забег
источник
Python с использованием pyautogui:
126 143 115103 байтСпасибо @ nedla2004 за сохранение 12 байт
источник
while 1:keyDown('capslock');time.sleep(.5);keyUp('capslock')
, и вы можете изменить первую строку наfrom pyautogui import*
, а вторую наimport time
.import time;c='capslock' ...
time
полностью.from pyautogui import*; while 1:press('capslock',1,.5)
, YMMV. на моем окружении pyautogui влияет на тип, который я печатаю, но свет не мигает.Баш, 31 байт
Работает в X, без рут-доступа! (Если это не работает для вас, посмотрите функцию инициализации кода ниже, чтобы убедиться, что xkbcomp настроен правильно)
И бонусный скрипт для отправки любого азбуки Морзе через заглавные буквы (не в гольфе):
Пример:
blink "...././.-../.-../---//.--/---/.-./.-../-..///"
источник
Bash + setleds , 43 байта
Довольно просто Использует
setleds
для переключения света.источник
Баш, 103 байта
Должен быть запущен от имени пользователя root.
Работает ли перепрошивка всей подсветки клавиатуры? (видео, чтобы прийти, когда я вернусь домой)
источник
Does flashing the entire keyboard backlight work?
Что ж, если подумать, подсветка клавиатуры - это индикатор того, включена ли подсветка клавиатуры, и она определенно «физически расположена на клавиатуре», так что да, я думаю, она имеет значение.JavaScript, 90 байт
Это
ActiveX
означает, что он будет работать только в IE ( хотя Edge его не поддерживает). Он мигает клавишей NUMLOCK, потому что, как и в других ответах, он короче, чем CAPSLOCK или SCROLLLOCK.Ungolfed
источник
Баш, 33 байта
Предполагается, что Num-Lock будет включен до его запуска. Переключить
off
иon
иначе. Требуетсяnumlockx
пакет, очевидно;)Редактировать:
Видел, что Алекс Ховански уже опубликовал это решение, но не пометил его Bash, и я просто искал на сайте «Bash».
источник
numlockx toggle;sleep .5;!#
(27 байт).!#
это событие, которое распространяется на все, что было напечатано до сих пор в командной строке.Пакетный файл (с помощью vbs), 74 + 2 = 76 байт
Частично на основе ответа Трелзевира .
.vbs
автоматически включается вPATHEXT
.источник
Kotlin Script, 72 байта
Хотя и не самый маленький, все же он довольно хорош. Я люблю Котлин в перспективе для некоторых вещей, и это один из них (меньше , чем вал г = java.awt.Robot () , потому что мы не нужны и р. И Вэл г =. Тем не менее, это больше , чем MathLab)
Ungolfed:
источник
Python3,
5549 байтСпасибо @NoOneIsHere за -4 байта!
Это включает в себя пакеты: pyautogui и
time
модулиКод:
Спасибо @NoOneIsHere за -4 байта!
Ключ в действии:
источник
while 1
однострочную строку с точкой с запятой. (while 1:pyautogui.press("capslock");time.sleep(.5)
)import pyautogui
в начало программы и изменив остальные,while 1:pyautogui.press("capslock");time.sleep(.5)
вы можете сделать это правильным ответом.import time
там.import time
...VBA, 82 байта
Anonymous VBE Immediate оконная функция, которая не требует ввода и раздражает пользователя бесконечно. Зависит от режима сна windows32, который объявлен ниже.
Декларация сна (Win-32)
Декларация сна (Win-64, + 8 байт)
Анонимная функция непосредственного окна VBE
Чуть более веселая версия, 97 байт
Набор взаимно рекурсивных подпрограмм, которые бесконечно раздражают пользователя
Сомнительная версия, 66 + 2 байта
Я не уверен, что если объявить функцию из dll считается встроенной функцией, то в случае, если это не так, то это версия с 66 + 2 байтами, которая ждет 1 секунду.
источник