Вимкніть комп’ютер!


83

Виклик:

На обраній вами мові програмування вимкніть машину, на якій був виконаний ваш код.

Правила

  • Не припиняється виснаження ресурсів (наприклад: forkbomb для примусового відключення)
  • Вам дозволяється писати код, який працює лише в певному середовищі / ОС, якщо ви хочете.
  • Стандартні лазівки заборонені

Це , таким чином виграє найменша кількість байтів!


62
У мене з’явилися друзі, які роблять це в школі і думають, що вони "
хакують

12
Ми повинні один раз придумати якесь правило, щоб зупинити такий `whatever`;Bash / Perl / PHP / Ruby / тощо. дурочки.
манатство

260
Windows, 0 байт. Залиште комп'ютер на кілька днів і дозвольте автоматичним оновленням виконувати свою роботу
Луїс Мендо

28
Хтось ще помічає відсутність TIO-посилань?
steenbergh

8
@MontyHarder Прочитавши цю сторінку, я вирішив shatdown: past tense of the verb shutdown
придумати

Відповіді:


92

Збірка (x86 / x64, Linux, як) , 22 21 19 байт

mov  $0x58,       %al  # 2 bytes: b0 58
mov  $0xfee1dead, %ebx # 5 bytes: bb ad de e1 fe
mov  $0x28121969, %ecx # 5 bytes: b9 69 19 12 28
mov  $0x4321fedc, %edx # 5 bytes: ba dc fe 21 43
int  $0x80             # 2 bytes: cd 80

Потрібно запустити як root.

Це еквівалентно натисканню кнопки живлення та не є безпечним способом вимкнення ПК. Переконайтесь, що ви закриваєте всі відкриті програми та виконуєте syncдля очищення всіх буферів файлової системи перед виконанням цієї програми, щоб принаймні мінімізувати ризик пошкодження файлів.

Тестовий запуск

$ as -o poweroff.o poweroff.s
$ ld -o poweroff   poweroff.o
ld: warning: cannot find entry symbol _start; defaulting to 0000000000400078
$ sudo sh -c 'sync && ./poweroff'
root's password:

Слідом за темрявою.

Як це працює

int $0x80викликає переривання програмного забезпечення. Він працює як на x86, так і на x64, але вже більше десяти років застарілий і не повинен використовуватися у виробничому коді. Код x64 повинен використовувати syscallзамість цього. x86 слід використовувати sysenter, але це занадто громіздко для коду гольфу.

Отримана дія від системної виклику залежить від регістрів EAX - EDX, ESI та EDI. Linux Системний виклик Reference показує всі системні виклики, які доступні через int $0x80.

Коли EAX містить 0x58 (88) , викликається перезавантаження , яке також можна використовувати для вимкнення живлення, сну або переходу в сплячку за комп’ютером, а також для перемикання ядер та відключення або включення комбінації клавіш Ctrl - Alt - Del .

На початку програми - і, компілюючи asабо gcc -nostdlib, ми можемо переконатися, що ми насправді на початку програми - більшість регістрів встановлюється на 0 . Сюди входить EAX, тому ми можемо використовувати mov $0x58, %alдля встановлення нижчих 8 біт EAX 0x58 , таким чином встановлюючи EAX для 0x58 . Це економить два байти xor %eax, %eaxна нульовому реєстрі вручну та ще один над прямим вперед, mov $0x58, %eaxщо кодує 0x58 у 32 бітах.

Перші два аргументи для перезавантаження - це магічні числа, імовірно, для запобігання випадкових перезавантажень, і читаються з регістрів EBX та ECX. Якщо ці числа не дорівнюють певним константам, перезавантаження відмовляється виконувати будь-яку дію.

  • Перше магічне число повинно дорівнювати 0xfee1dead ( відчувати себе мертвим ), ймовірно, стосується вимкнення / загибелі ПК.

  • Друге магічне число може дорівнювати чотирьом різним константам, хоча останні три не працювали в стародавніх версіях Linux. Всі вони, схоже, посилаються на подальше включення / народження ПК.

    • 0x28121969 представляє день народження Лінуса Торвальдса (28 грудня 1969 року).

    • 0x05121996 представляє день народження Патрісії Торвальдс (5 грудня 1996 р.).

    • 0x16041998 представляє день народження Даніели Торвальдс (16 квітня 1998 р.).

    • 0x20112000 представляє день народження Селесте Торвальдс (20 листопада 2000 р.).

    Патрісія, Даніела та Селеста Торвальдс - три дочки Лінуса Торвальда.

  • Реєстр EDX вибирає потрібний тип «перезавантаження». 0x4321fedc - це RB_POWER_OFF , вимикаючи ПК та вимикаючи його.

  • Нарешті, значення регістру ESI ігнорується для RB_POWER_OFF ; значення регістра EDI повністю ігнорується перезавантаженням .

Альтернативна версія, лише x64, 19 байт

На x64 ми можемо використовувати правильний syscall для тієї ж кількості байтів.

mov     $0xa9,       %al  # 2 bytes: b0 a9
mov     $0xfee1dead, %edi # 5 bytes: bf ad de e1 fe
mov     $0x28121969, %esi # 5 bytes: be 69 19 12 28
mov     $0x4321fedc, %edx # 5 bytes: ba dc fe 21 43
syscall                   # 2 bytes: 0f 05

Єдині відмінності полягають у інструкції ( syscallvs int $0x80), значенні __NR_REBOOT ( 0xa9 проти 0x58 ) та включених регістрах.


Ми зазвичай вважаємо збірку складеними байтами без обрамлення байтів, необхідних для заголовка exe?
Джошуа

Так, оскільки кожна інструкція відповідає певним байтам у двійковому файлі. Файли ELF (або будь-який формат, який використовує ваша ОС) вважаються різною мовою, і їх потрібно створити вручну, щоб досягти гідного балу.
Денніс

Чи можете ви додати шестнадцятковий дамп після складання коду?
ckjbgames


Я fee1так deadзараз.
arminb

49

PowerShell, 13 байт

Stop-Computer

Досить зрозуміло? Не працює на ядрі PowerShell, тому він не працюватиме на PowerShell для Linux / MacOS (вже пробував це на TIO :-D).

Подання бонусного сміття, 12 байт

gcm s*r|iex

У моєму тестуванні це працює в Windows 2003 з PowerShell 2.0. Він не працюватиме на більшості нових версій і може не працювати залежно від того, які модулі встановлені. Це зовсім жахливо!

Тут виконується пошук у списку команд для будь-якого з шаблоном, s*rа потім виконуються всі вони! Щоб було зрозуміло, це небезпечно, не робіть цього!

Підступ, звичайно, полягає в отриманні списку команд, які не мають жодних обов'язкових параметрів, інакше PowerShell запропонує отримати значення.

На моїй машині 2003 року три команди, які вона повертає:

CommandType     Name                                                Definition                                         
-----------     ----                                                ----------                                         
Application     scrnsave.scr                                        C:\WINDOWS\system32\scrnsave.scr                   
Application     ssmarque.scr                                        C:\WINDOWS\system32\ssmarque.scr                   
Cmdlet          Stop-Computer                                       Stop-Computer [[-ComputerName] <String[]>] [[-Cr...

Так, він запускає заставку marquee, але ні, він не чекає його завершення перед запуском Stop-Computer.

Цей підхід може працювати на нових машинах, знову ж таки залежно від того, які модулі встановлені, але найкраще, що я міг зробити в Windows 2012 та 2016 роках, було 14 байт :

gcm sto*er|iex

(і так, звичайно, подання winbatch працюватиме в PowerShell, і це коротше, але .. це не весело)


4
Коротше для Win7 та Win10 (а може і більше): gcm *p-c*|iex- і є лише один результат!
Боб

@Bob все ще сильно залежить від встановлених модулів; на моїй машині Win10 він повертає 6 результатів, кілька з яких матимуть обов’язкові параметри (тому вони підкажуть і ніколи не зроблять це Stop-Computer, що є останнім результатом).
британіст

39

Пакет, 10 байт

На вікнах цього було б достатньо

shutdown/s

Це призведе до відключення за одну хвилину.

Як вказує @flashbang:

shutdown/p

Це негайно вимикає комп'ютер.


79
Press the big button on the front of your computer= 0 байтів
Підняття агента

96
@RaisingAgent Тут у PPCG ми вирішуємо свої проблеми в коді. Фізична праця нахмуриться.
steenbergh

12
@steenbergh Я не знаю ... натискання однієї великої кнопки проти 10 натискань клавіш? Я піду з кнопкою
WorldSEnder

16
@RaisingAgent Ваша пропозиція має проблеми зі масштабуванням. Спробуйте це зробити на 10 000 комп’ютерах чотири рази на тиждень.
Еміліо М Бумачар

10
@RaisingAgent справжні чоловіки використовують перемикач, який є правильним у блоці живлення
Cruncher

35

машинний код x86, Lenovo Z510, DOS COM або Bootloader, 7 байт

BITS 16

mov ax, (1 << 13) | (7 << 10)
mov dx, 1804h
out dx, ax

Зібраний у B8 00 3C BA 04 18 EF

Я використовую " Ви можете писати код, який працює лише в конкретному середовищі / ОС, якщо ви хочете " до найвищого рівня: це буде працювати тільки на Lenovo Z510 1 .

Це пише SLP_TYPa << 10 | SLP_ENв PM1a_CNTрегістр ACPI, я скидав ці значення з таблиць ACPI місяці тому для відповіді про відключення (де я даю трохи контексту до коду вище).

Це може бути запущено або в DOS як COM (просто запишіть бінарні дані у файл і змініть розширення на "com") або як завантажувач.
Для останнього напишіть стандартний підпис і остерігайтеся проблем із сучасною прошивкою .


1 Не зовсім вірно, будь-яка система, яка має таку ж конфігурацію ACPI, також буде відключена.


13
Оновлено через обмежену платформу.
труба

Га! Хтось побив Денніса!
Джошуа

Якщо ви збираєтеся з підрахунком 7 байтів, вам слід назвати це поданням машинного коду, а не рішенням для складання. Представлення на збірку становить 63 байти.
Якоб

@Jakob Ви маєте рацію!
Маргарет Блум

Ви схожі на потрібну людину, яка відповість на це запитання: stackoverflow.com/questions/2019463/… (я на це жалюгідно не вдався, з сорому довелося видалити свою "відповідь")
Проф. Фолкен

34

Оболонка GRUB , 4 байти

Гольф

halt

Команда: halt --no-apm

Команда зупиняє комп'ютер. Якщо вказано параметр --no-apm, виклик BIOS APM не виконується. В іншому випадку комп'ютер вимикається за допомогою APM.

Бонус

Ось доказ того, що GRUB оболонка дійсно Tur п ING-повній (див коментарі):

enter image description here


оболонка grub не є "мовою програмування" - це не Тюрінг завершений
Alnitak

9
@Alnitak, що змушує тебе так думати? Він має досить вдосконалений built-in scripting language, which has a syntax quite similar to that of GNU Bash and other Bourne shell derivativesі підтримує змінні, умовні конструкції, функції та інше , тому очевидно, що це будь-яка міра , яка перетворюється.
зеппелін

1
Гаразд, я поверну це - я не знайшов цього матеріалу, коли подивився
Альнітак

28
Коли він не може відобразити лічильник це, очевидно , НЕ Tur п ING-повній
J_F_B_M

1
У Bash це та сама команда.
Paweł Tokarz

31

65C02 код машини, 1 байт

Інструкція STP (0xDB):

STP зупиняє тактовий вхід 65C02, ефективно вимикаючи 65C02, поки не відбудеться апаратне скидання (тобто штифт ВИД зменшиться). Це переводить 65C02 у стан низької потужності. Це корисно для програм (схем), які потребують низького енергоспоживання, але STP рідко спостерігається інакше.

(Джерело: http://www.6502.org/tutorials/65c02opcodes.html )

xxd дамп:

00000000: db                                       .

Шум. Я в той час був хакером Apple II і навіть не пам’ятав цього коду.
kindall

1
Так, після написання емулятора 65c816 з додатковими можливостями і побачив це завдання, я знав, що робити: P Крім того, схоже, що це єдиний відповідь на 1 байт поки що! \ o /
therealfarfetchd

24

Матлаб, 21 байт

system('shutdown -s')

Я не пробував цього (закриття всіх програм, щоб зробити перезапуск посеред дня, насправді не заманливо), але це має працювати. . Це працює ...

Додамо коротке пояснення пізніше, у мене зараз ноутбук вимкнений.


105
"Додамо коротке пояснення пізніше, мій ноутбук зараз вимкнено." <- Небезпека виклику відключення
Suever

4
Axaxaxaxa, добре, що час від часу перезавантажуючи комп’ютер не може бути погано :)
RaisingAgent

6
uptimeХоч це і розорить вас
Уейн Вернер

Навіщо надсилати це як MATLAB, а не подавати shutdown -sяк оболонку?
іммібіс

10
Тому що для мене оболонка - це чи то, що я знаходжу на пляжі, або АЗС.
Стюі Гріффін

21

MATLAB, 11 байт

!shutdown/p

Дещо схожий на підходом Стіві Гріффін . Тим НЕ менше, MATLAB має шлях коротші шляхи виклику системних команд; у цьому випадку !використовується. Windows не потрібні .exeімена команд, тому це також залишилось. Цей /параметр все ще підтримується (я працюю в ОС Windows 10) і заперечує потребу в просторі. Альтернативи:

system shutdown/p % 17 bytes; uses so-called 'command' syntax.
dos shutdown/p    % 14 bytes; the 'dos' command can be used just as well.

19

SmileBASIC, 14 11 6 байт

OPTION

Запускає збій, через який 3DS перезапускається. Я сподіваюся, що це враховується.

Працює в останній версії.


Я думав, що це було зафіксовано ... Введіть номер версії.
wizzwizz4

3
Він був зафіксований у версії 3.5, яка ще не була випущена за межами Японії.
12Me21

4
@ 12Me21 Звичайно, це рахується. Хороший вибір середовища.
П. Ктінос

Якби тільки REBOOTвід SBv2 зараховувались як правильну відповідь.
равлик_

16

Bash, 7 6 байт

init 0

Якщо припустити, що програма запускається як root.


Дійсно, живлення машини потрібно. Таким чином, вам потрібна 'halt -p' як відповідна відповідь
P. Ktinos

4
Ця різанина з редагування :)
Підняття агента

@ P.Ktinos: poweroffце одне слово, хоча букви трохи більше.
ccpizza

1
@ccpizza Правильно, але типовими критеріями зарахування є кількість байтів
Suever

13

Java, 101 98 62 42 байт

()->{Runtime.getRuntime().exec("init 0");}

Як зазначав @Snowman, у питанні не було визначено, чи потрібна повна програма, тому це все одно має бути прийнятним.


2
Це коротше замінити classтим interface, що дозволяє опустити publicголовне.
Павло

6
Ви можете скористатися методом, оскільки у питанні не вказано, що подання має бути повноцінною програмою:void f()throws Exception{Runtime.getRuntime().exec("shutdown/s");}

1
Чи не буде версія Linux трохи коротшою?
jpmc26

2
()->{Runtime.getRuntime().exec("init 0");}або орієнтовно ()->Runtime.getRuntime().exec("init 0")(наразі не можна перевірити). Це лямбда, що реалізує користувальницький інтерфейс "void", який не кидає аргументів
Олів'є Грегоар

1
Це має бути позначено як відповідь, характерна для Linux, наприклад, "Java в LInux".
Якоб

13

Python 2, 29 байт

import os;os.system('init 0')

Працює в системах Linux і потребує root права.

Для Windows 33 байти

import os;os.system('shutdown/p')

Це може бути найменш цікавим або корисним кодом, який я коли-небудь писав.


2
Хтось ще розмістив версію оболонки Linux.
jpmc26

1
Ах гаразд, мій поганий ..
FlipTack

12

Commodore 64, 11 байт

0 sys64738

Це з підказки BASIC. Або ...

Commodore 64, 6502 збірка, 3 байти (зібрано), 16 байт (джерело)

*=8000
JMP $FCE2

Я думаю, що при використанні режиму прямого введення Commodore 64 від BASIC з sys64738буде використано нульові байти, оскільки для зберігання немає програми або іншого; Ви використовуєте екранну оперативну пам’ять, але ця оперативна пам'ять вже буде заповнена пробілами, тому ви просто замінюєте ці простори текстом.
Shaun Bebbers

2
Вихідний код займає місце. Тільки тому, що він не залишає місця на цільовій машині , не означає, що він займає 0 байт. Інакше відповідь буде ``.
wizzwizz4

3
Вам не потрібен пробіл між 0і sys64738, ви можете замінити sysформу ярлика sY, і я не рахую проміжок нового рядка в довжині програми. Однак я не думаю, що ваш код відповідає вимогам: код на рівні 64738 здійснює м'яке скидання, а не потужність.
Марк

2
Не вимикається.
TecBrat

1
Одного разу я розлив пиво на своєму Commodore 64, яке постійно вимкнуло його. Чи враховується це?
Shaun Bebbers

12

TI-Nspire CX CAS, 3 байти

" "+" "

підсумовування двох порожніх рядків.

У старшій версії калькулятора це призведе до збою пристрою та перезавантаження (немає можливості відключити пристрій без перезавантаження, крім фізичних комбінацій кнопок).

Відео від Adriweb


Хіба це не 7 байт?
Роман Ґраф


Звучить для мене переконливо.
Роман Ґраф

11

C ++, 51 40 байт

-11 байт завдяки Ingve !

#include<os>
int main(){OS::shutdown();}

Працює лише в IncludeOS (v0.10.0-rc.1)

Тест:

$ pwd
/home/simon/IncludeOS/examples/demo_service

$ cat service.cpp
#include<os>
int main(){OS::shutdown();}

$ mkdir build && cd build && cmake .. && make && cd ..
[...]

$ boot build/IncludeOS_example
[...]
================================================================================
================================================================================
 IncludeOS v0.10.0-rc.1-9-g151a2b9
 +--> Running [ IncludeOS minimal example ]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

$

1
Тепер мені цікаво увімкнути IncludeOS
Karl Napf

@KarlNapf Альфред провів чудову презентацію на CppCon 2016 про IncludeOS: youtube.com/watch?v=t4etEwG2_LY, якщо ви хочете дізнатися більше :-)
симон

1
Вам не потрібно використовувати void Service::start, int main працює і в IncludeOS .
Інгве

10

AppleScript, 30 байт

tell app "Finder" to shut down

Робить саме те, що говорить: вказує Finder вимкнути комп’ютер.


9

AutoHotkey, 11 10 байт

Збережено байт завдяки Гурупаду Мамадапуру

Shutdown,9

AHK За замовчуванням підтримує команду Shutdown. Прапор 9- це прапор, що складається з Shutdown=1+ PowerDown=8.


1
AHKтаємничий.
Гурупад Мамадапур

Вам потрібен пробіл після коми?
therealfarfetchd

простір після ,не потрібен. Спробуйте протестувати його з іншим прапором. Я подумав, що це не одразу вимкне комп'ютер, і поставив його в свій основний сценарій, який завантажується при запуску: D Тепер я маю завантажуватися в безпечному режимі і вирішувати проблему. Зітхнути.
Гурупад Мамадапур

9

Код машини (x86, завантажувач) 18 байт

b8 01 53 33 db cd 15 b8 07 53 bb 01 00 b9 03 00 cd 15

Розбирання:

mov ax, 0x5301 ; connect to real-mode APM services
xor bx, bx     ; device id 0 - APM BIOS
int 0x15       ; call APM
mov ax, 0x5307 ; set power state
mov bx, 0x0001 ; on all devices
mov cx, 0x0003 ; to Off
int 0x15       ; call APM

Ви можете перевірити його в налагоджувальній машині Бокса за допомогою наступних команд (після запуску моделювання, встановивши деякий диск):

pb 0x7c00
c
setpmem 0x7c00 4 0x335301b8
setpmem 0x7c04 4 0xb815cddb
setpmem 0x7c08 4 0x01bb5307
setpmem 0x7c0c 4 0x0003b900
setpmem 0x7c10 2 0x15cd
c

Цей же машинний код також буде працювати як DOS-виконуваний файл ( *.COM).


7

C #, 79 54 53 байти

Це працює в Windows.

79 байт :

class _{static void Main(){System.Diagnostics.Process.Start("shutdown","/s");}}

53 байти , завдяки TheLethalCoder:

_=>System.Diagnostics.Process.Start("shutdown","/s");

2
Зауважте, що для виклику не потрібна повна програма і не забороняє приймати дані (звичайно не використовувані), щоб ви могли компілювати до Action<int>та робити _=>System.Diagnostics.Process.Start("shutdown", "/s");54 байти.
TheLethalCoder

@TheLethalCoder, оновлено, дякую!
Даріуш Вошняк

Ви також можете прибрати зайвий простір.
неросло

Звичайно так! Дякую, @nothrow :)
Даріуш

6

AutoIt, 11 байт

Shutdown(1)

Функція вимкнення отримує комбінацію наступних кодів

0 = Logoff
1 = Shutdown
2 = Reboot
4 = Force
8 = Power down
16= Force if hung
32= Standby
64= Hibernate

Наприклад, для вимкнення та вимкнення живлення, наприклад, кодом було б 9 (вимкнення + вимкнення живлення = 1 + 8 = 9).


1
0(вхід в систему) тут є окремим випадком; він не поєднується з режимом очікування або в сплячому режимі неявно.
wizzwizz4

ОК0 + 32 = 32
rahnema1

Гм, так це завжди виходить з системи перед тим, як перейти в режим очікування / сплячки?
Руслан

@Ruslan Я не знаю точно, як це працює. Ви можете звернутися до форуму користувачів AutoIt, щоб отримати більше відгуків :-)
rahnema1

6

Windows - NativeAPI, 212 байт

Ок, це насправді не найкоротша версія. Але, можливо, комусь цікаво. Це не виконується в підсистемі Win32. Однак він запускається, коли виконується в контексті нативного api (як, наприклад, autochk.exe)

Код

#define WIN32_NO_STATUS
#include <windef.h>
#include <winnt.h>
#include <ntndk.h>
NTSTATUS main() {
RtlAdjustPrivilege(SE_SHUTDOWN_PRIVILEGE,TRUE,FALSE,NULL);
return ZwShutdownSystem(ShutdownPowerOff);
}

Побудувати

Щоб створити це, скористайтеся build.exeінструментом WinDDK (з відповідним sourceфайлом дляNMAKE )

Або скористайтеся цими командами для компіляції та посилання:

cl /Gd /D_X86_ /showIncludes /I%DDK_INC_PATH% /I%CRT_INC_PATH% /c main.c
link /verbose /nodefaultlib /subsystem:native /machine:X86 /entry:NtProcessStartup@4 C:\WinDDK\7600.16385.1\lib\win7\i386\nt.lib C:\WinDDK\7600.16385.1\lib\win7\i386\ntdllp.lib C:\WinDDK\7600.16385.1\lib\win7\i386\BufferOverflow.lib .\main.obj 

Примітка. Це дозволить створити початковий виконуваний файл x86. Змініть відповідні біти, якщо ви хочете створити це для іншої архітектури.

Тест

Для тестування власного виконуваного файлу потрібно виконати його до завантаження підсистеми win32. Один із поширених способів зробити це - додати виконуваний файл у наступний ключ реєстру:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\BootExecute

Увага

Якщо ви це зробите, вам потрібно мати можливість редагувати вулик реєстру цільової ОС з іншої ОС. Так як ви більше не зможете завантажувати цільову ОС!

Я зробив це на VM, де я міг легко повернутися до попереднього знімка!



5

Більшість оболонок Linux, 15 байт

# echo o>/p*/*ger

Це може бути довжиною 11 байт, якщо ви потрапили в /procкаталог:

# echo o>*ger

Це дуже просто (не має побічних ефектів, як відключення файлових систем або процесів вбивства) і досить жорстоке.


1
Минулого разу я спробував розширення підстановки під час переадресації, він створив файл із символом підстановки в ньому, незважаючи на наявний відповідний файл.
Джошуа

5
Я вважаю, що ви повинні додати "/ proc /" до свого числа байтів
zeppelin

@Joshua Це може залежати від оболонки. Я насправді перевірив це (на bash) на своєму комп’ютері :-)
Радован Гарабік

1
@Radovan Garabík - Я не думаю, що це дійсно дійсно. Це в основному те саме, що означає, що існує псевдонім "p = poweroff" (що теж "неможливо") і заявляти, що "p" є дійсним рішенням на 1 байт .
зеппелін

1
Але ви, ймовірно, можете зробити його дійсним за рахунок всього 3-х байт, як цеecho o>/p*/*ger
zeppelin


5

AppleScript, 44 байти

tell application "Finder"
shut down
end tell

Я не знаю, як працює синтаксис AppleScript або щось подібне, тому, якщо хтось знає, як скоротити це, скажіть, будь ласка.

Крім того, я роблю це на своєму телефоні в школі ("хакерство"), тому не можу перевірити це.

На 14 менших байтів (завдяки kindall) ви можете сказати

tell app "Finder" to shut down

Хтось придумав коротше рішення (з тією ж програмою) через кілька годин після вас (але опублікував це замість коментувати тут) codegolf.stackexchange.com/a/107958/62824
devRicher

Можливо, ви можете видалити відступи
Cyoce

4
tell app "Finder" to shut downповинен працювати, я вважаю (хоча компіляція може замінити "додаток" на "додаток").
kindall

4

J, 14 байт

2!:0'poweroff'

Працює в системах Linux. 2!:0виконує рядок в /bin/sh.


4

Clojure, 40 39 байт

(.exec(Runtime/getRuntime)"shutdown/s")

-1 байт, змінивши прапор з -sна /s, що дозволило мені позбутися місця.

В основному відповідь на Java.

Перевірити це було весело. Windows вирішила зробити оновлення мікропрограмного забезпечення на моїй Surface, коли воно було вимкнено. Звичайно.

(defn shutdown []
  (.exec (Runtime/getRuntime) "shutdown -s"))



2

C ++, 48 47 (Windows) 46 45 (Linux) байт

Видалено 1 байт завдяки Сніговику

#include<cstdlib>
main(){system("shutdown/p");}

Це повинно зупинити систему для Windows

#include<cstdlib>
main(){system("poweroff");}

Це повинно зупинити систему для Linux


вам потрібна ;?
ПідняттяАгента

1
@LliwTelracs Досить впевнений, що це "shutdown / p", а не "-p", і пробіл не потрібен.
П. Ктінос

Точка з комою потрібна для правильного синтаксису c ++, використання косої риски дозволяє скоротити відповідь для Windows, але змушує її більше не працювати для Linux. Хоча я додав неправильний символ для відключення, який ділиться між windows та linux
fəˈnəˈtɪk

@LliwTelracs Хоча ви можете робити все, що завгодно, я пропоную зловживати 2-м правилом і не піклуватися про функціональність Linux, оскільки це кодовий гольф і низька кількість байтів краще.
П. Ктінос

1
#include<cstdlib>буде голити байт.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.