Spegni il computer!


83

Sfida:

Nel linguaggio di programmazione che preferisci, spegni la macchina su cui è stato eseguito il tuo codice.

Regole

  • Nessun arresto per esaurimento delle risorse (ad es. Forkbomb per forzare l'arresto)
  • È possibile scrivere codice che funziona solo in un ambiente / sistema operativo specifico, se lo si desidera.
  • Sono vietate le scappatoie standard

Questo è , quindi vince il minor numero di byte!


62
Ho amici che lo fanno a scuola e pensano che stiano "hacking": D
RaisingAgent

12
Dovremmo trovare una volta una regola per fermare tale `whatever`;Bash / Perl / PHP / Ruby / ecc. stupiglots.
arte

260
Windows, 0 byte. Lascia il computer acceso per alcuni giorni e lascia che gli aggiornamenti automatici facciano il loro lavoro
Luis Mendo,

28
Qualcun altro nota la mancanza di collegamenti TIO?
Steenbergh,

8
@MontyHarder Dopo aver letto quella pagina ho deciso di coniare il termineshatdown: past tense of the verb shutdown
FGreg

Risposte:


92

Assembly (x86 / x64, Linux, as) , 22 21 19 byte

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

Deve essere eseguito come root.

Ciò equivale a premere il pulsante di accensione e non è un modo sicuro per spegnere il PC. Assicurati di chiudere tutte le applicazioni aperte ed eseguire syncper svuotare tutti i buffer del file system prima di eseguire questo programma, per minimizzare almeno il rischio di corruzione dei file.

Prova

$ 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:

Seguito dall'oscurità.

Come funziona

int $0x80invoca un interrupt software. Funziona sia su x86 che x64, ma è ormai obsoleto da oltre un decennio e non dovrebbe essere usato nel codice di produzione. syscallinvece dovrebbe usare il codice x64 . x86 dovrebbe usare sysenter, ma è troppo ingombrante per il codice golf.

L'azione risultante dalla syscall dipende dai registri EAX - EDX, ESI ed EDI. Il Linux Reference Syscall mostra tutte le chiamate di sistema che sono disponibili via int $0x80.

Quando EAX contiene 0x58 (88) , viene chiamato il riavvio , che può anche essere utilizzato per spegnere, mettere in sospensione o ibernare il computer, nonché per cambiare kernel e disabilitare o abilitare la combinazione di tasti Ctrl - Alt - Canc .

All'inizio del programma - e compilando con aso gcc -nostdlib, possiamo assicurarci di essere effettivamente all'inizio del programma - la maggior parte dei registri è impostata su 0 . Questo include EAX, quindi possiamo usare mov $0x58, %alper impostare gli 8 bit inferiori di EAX su 0x58 , quindi impostando EAX stesso su 0x58 . Ciò consente di risparmiare due byte sopra l'azzeramento manuale del registro xor %eax, %eaxe un altro sopra il rettilineo mov $0x58, %eaxche codifica 0x58 in 32 bit.

I primi due argomenti da riavviare sono numeri magici, presumibilmente per impedire riavvii accidentali, e vengono letti dai registri EBX ed ECX. A meno che questi numeri non siano uguali a determinate costanti, il riavvio si rifiuta di eseguire qualsiasi azione.

  • Il primo numero magico deve essere uguale a 0xfee1dead ( feel dead ), probabilmente riferito allo spegnimento / morte del PC.

  • Il secondo numero magico può essere uguale a quattro diverse costanti, sebbene le ultime tre non funzionassero nelle versioni antiche di Linux. Tutti sembrano riferirsi alla successiva accensione / nascita del PC.

    • 0x28121969 rappresenta il compleanno di Linus Torvalds (28 dicembre 1969).

    • 0x05121996 rappresenta il compleanno di Patricia Torvalds (5 dicembre 1996).

    • 0x16041998 rappresenta il compleanno di Daniela Torvalds (16 aprile 1998).

    • 0x20112000 rappresenta il compleanno di Celeste Torvalds (20 novembre 2000).

    Patricia, Daniela e Celeste Torvalds sono le tre figlie di Linus Torvalds.

  • Il registro EDX seleziona il tipo di "riavvio" desiderato. 0x4321fedc è RB_POWER_OFF , spegnendo il PC e spegnendolo.

  • Infine, il valore del registro ESI viene ignorato per RB_POWER_OFF ; il valore del registro EDI viene ignorato interamente dal riavvio .

Versione alternativa, solo x64, 19 byte

Su x64, possiamo usare un syscall corretto per lo stesso conteggio byte.

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

Le uniche differenze risiedono nell'istruzione ( syscallvs int $0x80), nel valore di __NR_REBOOT ( 0xa9 vs 0x58 ) e nei registri coinvolti.


Normalmente contiamo l'assembly come byte compilati senza i byte di frame richiesti per l'intestazione exe?
Joshua,

Sì, perché ogni istruzione corrisponde a byte specifici nel file binario. I file ELF (o qualsiasi formato utilizzato dal sistema operativo) sono considerati in una lingua diversa e dovrebbero essere creati manualmente per ottenere un punteggio decente.
Dennis,

Potresti aggiungere il dump esadecimale dopo l'assemblaggio del codice?
ckjbgames,

@ckjbgames Eccolo.
Dennis,

Ho fee1così deadin questo momento.
Arminb,

49

PowerShell, 13 byte

Stop-Computer

Abbastanza autoesplicativo? Non funziona su PowerShell core, quindi non funzionerà su PowerShell per Linux / MacOS (già provato su TIO :-D).

Bonus Garbage Submission, 12 byte

gcm s*r|iex

Nel mio test, questo funziona su Windows 2003 con PowerShell 2.0. Non funzionerà sulla maggior parte delle versioni più recenti e potrebbe non funzionare a seconda dei moduli installati. È abbastanza terribile!

Questo cerca nella lista dei comandi qualsiasi con il modello s*re quindi li esegue tutti! Per essere chiari, questo è pericoloso, non farlo!

Il trucco ovviamente è ottenere un elenco di comandi che non hanno parametri obbligatori, altrimenti PowerShell richiederà un valore.

Sulla mia macchina del 2003, i 3 comandi che restituisce sono:

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...

Sì, avvia il salvaschermo di selezione, ma no, non attende il completamento prima del lancio Stop-Computer.

Questo approccio può funzionare su macchine più recenti, sempre a seconda dei moduli installati, ma il meglio che ho potuto fare su Windows 2012 e 2016 è stato di 14 byte :

gcm sto*er|iex

(e sì, certo, l'invio di winbatch funzionerà in PowerShell ed è più breve, ma .. non è divertente)


4
Uno più corto per Win7 e Win10 (e forse di più): gcm *p-c*|iex- e c'è anche solo un risultato!
Bob

@Bob ancora fortemente dipendente dai moduli installati; sulla mia macchina Win10 restituisce 6 risultati, molti dei quali avranno parametri obbligatori (quindi chiederanno e non ce la faranno mai Stop-Computer, che è l'ultimo risultato).
Briantist,

39

Lotto, 10 byte

Su Windows, questo sarebbe sufficiente

shutdown/s

Questo imposterà un arresto in un minuto.

In alternativa, come sottolinea @flashbang:

shutdown/p

Questo spegne immediatamente il computer.


79
Press the big button on the front of your computer= 0 byte
RaisingAgent

96
@RaisingAgent Qui a PPCG risolviamo i nostri problemi nel codice. Il lavoro fisico è malvisto.
Steenbergh,

12
@steenbergh non lo so ... premendo un pulsante grande contro 10 sequenze di tasti? Andrò con il pulsante
WorldSEnder

16
@RaisingAgent La tua proposta presenta problemi di scalabilità. Prova a farlo per 10.000 computer quattro volte a settimana.
Emilio M Bumachar,

10
@RaisingAgent veri uomini usano l'interruttore che è proprio sul PSU
Cruncher

35

codice macchina x86, Lenovo Z510, COM COM o Bootloader, 7 byte

BITS 16

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

Assemblato in B8 00 3C BA 04 18 EF

Sto sfruttando " Puoi scrivere codice che funziona solo in un ambiente / sistema operativo specifico, se lo desideri " al massimo livello: funzionerà solo su Lenovo Z510 1 .

Questo scrive SLP_TYPa << 10 | SLP_ENnel PM1a_CNTregistro ACPI, ho scaricato questi valori dalle tabelle ACPI mesi fa per una risposta sull'arresto (dove do un po 'di contesto al codice sopra).

Questo può essere eseguito sotto DOS come COM (basta scrivere i dati binari in un file e modificare l'estensione in "com") o come bootloader.
Per quest'ultimo scrivi la firma standard e fai attenzione ai problemi con il firmware moderno .


1 Non strettamente vero, si spegnerà anche qualsiasi sistema che abbia la stessa configurazione ACPI.


13
Eseguito l'upgrade a causa della piattaforma limitata.
pipe il

Ha! Qualcuno ha battuto Dennis!
Joshua,

Se si utilizza il conteggio a 7 byte, è necessario chiamare questo un invio del codice macchina anziché una soluzione di assemblaggio. L'invio dell'assembly è di 63 byte.
Jakob,

@Jakob Hai ragione!
Margaret Bloom,

Sembri la persona giusta per rispondere a questa domanda: stackoverflow.com/questions/2019463/… (ho fallito miseramente, ho dovuto cancellare la mia "risposta" per vergogna.)
Prof. Falken,

34

Shell GRUB , 4 byte

golfed

halt

Comando: halt --no-apm

Il comando arresta il computer. Se viene specificata l'opzione --no-apm, non viene eseguita alcuna chiamata al BIOS APM. Altrimenti, il computer viene spento tramite APM.

indennità

Ecco una prova che shell di GRUB è davvero Tur n ing-complete (vedi commenti):

inserisci qui la descrizione dell'immagine


grub shell non è un "linguaggio di programmazione" - non è Turing completo
Alnitak

9
@Alnitak, cosa ti fa pensare così? È caratterizzato da una funzionalità piuttosto avanzata built-in scripting language, which has a syntax quite similar to that of GNU Bash and other Bourne shell derivativese supporta variabili, costrutti condizionali, funzioni e altro , quindi, ovviamente, è Turning-complete, con qualsiasi misura.
Zeppelin,

1
Ok, lo riprenderò - non ho trovato quella roba quando ho guardato
Alnitak il

28
Quando non è in grado di visualizzare uno spinner, ovviamente non è Tur n ing-complete
J_F_B_M,

1
In Bash è lo stesso comando.
Paweł Tokarz,

31

Codice macchina 65C02, 1 byte

Istruzione STP (0xDB):

STP arresta l'ingresso di clock del 65C02, arrestando efficacemente il 65C02 fino a quando non si verifica un ripristino hardware (ovvero il pin RES si abbassa). Ciò pone il 65C02 in uno stato di basso consumo. Ciò è utile per le applicazioni (circuiti) che richiedono un basso consumo energetico, ma STP è visto raramente diversamente.

(Fonte: http://www.6502.org/tutorials/65c02opcodes.html )

xxd dump:

00000000: db                                       .

Noice. Ai tempi ero un hacker di Apple II e non ricordavo nemmeno questo codice operativo.
kindall

1
Sì, dopo aver scritto un emulatore 65c816 con più funzionalità e visto questa sfida sapevo cosa fare: P Inoltre, sembra che questa sia l'unica risposta da 1 byte finora! \ o /
therealfarfetchd

24

Matlab, 21 byte

system('shutdown -s')

Non ho provato questo (chiudere tutti i programmi per fare un riavvio a metà giornata non è davvero allettante), ma dovrebbe funzionare. . Questo funziona ...

Aggiungerò una breve spiegazione in seguito, il mio laptop è attualmente spento.


105
"Aggiungerò una breve spiegazione in seguito, il mio laptop è attualmente spento." <- Il pericolo di una sfida di spegnimento
Suever

4
Axaxaxaxa, beh, riavviare il computer di tanto in tanto non può essere male :)
RaisingAgent

6
Ti rovina uptime, però
Wayne Werner il

Perché inviarlo come MATLAB, invece di inviarlo shutdown -scome shell?
user253751

10
Perché per me la shell è qualcosa che trovo sulla spiaggia o una stazione di servizio.
Stewie Griffin,

21

MATLAB, 11 byte

!shutdown/p

Un po 'simile all'approccio di Stewie Griffin . Tuttavia, MATLAB ha modi molto più brevi di invocare i comandi di sistema; in questo caso, !viene utilizzato. Windows non ha bisogno .exedi nomi di comandi, quindi anche questo è lasciato fuori. L' /opzione è ancora supportata (sto eseguendo Windows 10) e annulla la necessità di spazio. Le alternative sono:

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 byte

OPTION

Attiva un arresto che causa il riavvio di 3DS. Spero che questo conti.

Funziona nella versione più recente.


Pensavo fosse stato corretto ... Per favore, includi un numero di versione.
wizzwizz4,

3
È stato corretto nella versione 3.5, che non è ancora stata rilasciata al di fuori del Giappone.
Me21,

4
@ 12Me21 Certo che conta. Buona scelta di ambiente.
P. Ktinos,

Se solo REBOOTda SBv2 fosse considerata una risposta valida.
snail_

16

Bash, 7 6 byte

init 0

Supponendo che il programma sia eseguito come root.


In effetti, è necessario spegnere la macchina. Quindi hai bisogno di 'halt -p' come risposta valida
P. Ktinos,

4
Questo massacro di editing :)
RaisingAgent

@ P.Ktinos: poweroffè una sola parola, anche se leggermente più lettere.
ccpizza,

1
@ccpizza Esatto, ma il criterio di punteggio tipico è il conteggio dei byte
Suever,

13

Java, 101 98 62 42 byte

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

Come sottolineato da @Snowman, la domanda non specificava se fosse necessario un programma completo, quindi questo dovrebbe essere comunque accettabile.


2
E 'più corto di sostituire classcon interfacequella consente di omettere publicdalla principale.
Pavel,

6
È possibile utilizzare un metodo, poiché la domanda non specifica che l'invio deve essere un programma completo:void f()throws Exception{Runtime.getRuntime().exec("shutdown/s");}

1
La versione di Linux non sarebbe un po 'più breve?
jpmc26,

2
()->{Runtime.getRuntime().exec("init 0");}o provvisoriamente ()->Runtime.getRuntime().exec("init 0")(non è possibile verificare al momento). È un lambda che implementa un'interfaccia vuota, senza-args-lancio.
Olivier Grégoire,

1
Questo dovrebbe essere etichettato come una risposta specifica per Linux, ad esempio "Java su LInux".
Jakob,

13

Python 2, 29 byte

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

Funziona su sistemi Linux e necessita di privilegi di root.

Per Windows, 33 byte

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

Questo potrebbe essere il codice meno interessante o utile che abbia mai scritto.


2
Qualcun altro ha pubblicato la versione della shell Linux.
jpmc26,

1
Ah ok, mio ​​cattivo ..
FlipTack

12

Commodore 64, 11 byte

0 sys64738

Questo viene dal prompt di BASIC. O...

Commodore 64, 6502 assembly, 3 byte (assemblato), 16 byte (sorgente)

*=8000
JMP $FCE2

Penso che l'uso della modalità di input diretto di Commodore 64 da BASIC con sys64738userà zero byte in quanto non esiste alcun programma o altro da memorizzare; Stai usando la RAM dello schermo ma quella RAM sarà già piena di spazi, quindi stai semplicemente sostituendo quegli spazi con del testo.
Shaun Bebbers,

2
Il codice sorgente occupa spazio. Solo perché non riserva spazio sulla macchina di destinazione non significa che occupa 0 byte. Altrimenti la risposta sarebbe ``.
wizzwizz4,

3
Non è necessario lo spazio tra il 0e il sys64738, è possibile sostituire il syscon il modulo di scelta rapida sYe non conto la nuova riga finale nella lunghezza del programma. Tuttavia, non credo che il tuo codice soddisfi i requisiti: il codice a 64738 esegue un ripristino software, non uno spegnimento.
Mark

2
Non si spegne.
TecBrat,

1
Una volta ho versato birra sul mio Commodore 64, che lo ha spento permanentemente. Questo conta?
Shaun Bebbers,


11

C ++, 51 40 byte

-11 byte grazie a Ingve !

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

Funziona solo in IncludeOS (v0.10.0-rc.1)

Test:

$ 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
Ora sono curioso di includere IncludeOS
Karl Napf il

@KarlNapf Alfred ha tenuto un'ottima presentazione al CppCon 2016 su IncludeOS: youtube.com/watch?v=t4etEwG2_LY se vuoi saperne di più :-)
simon

1
Non è necessario utilizzare void Service::start, int main funziona anche con IncludeOS .
Ingve,

10

AppleScript, 30 byte

tell app "Finder" to shut down

Fa esattamente quello che dice: dice a Finder di spegnere il computer.


9

Tasto di scelta automatica, 11 10 byte

Salvataggio di un byte grazie a Gurupad Mamadapur

Shutdown,9

AHK Supporta un comando di spegnimento per impostazione predefinita. La 9è una bandiera, costituito da Shutdown=1+ PowerDown=8.


1
AHKè misterioso.
Gurupad Mamadapur,

Ti serve lo spazio dopo la virgola?
therealfarfetchd,

lo spazio dopo ,non è necessario. Prova a testarlo con un'altra bandiera. Ho pensato che questo non spegnerà immediatamente il computer e lo inserirà nel mio script principale che viene caricato all'avvio: D Ora devo caricare in modalità provvisoria e risolvere il problema. Sospiro.
Gurupad Mamadapur,

9

Codice macchina (x86, boot loader) 18 byte

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

Smontaggio:

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

Puoi testarlo nel debugger di Bochs con i seguenti comandi (dopo aver avviato la simulazione, avendo configurato un disco fisso):

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

Lo stesso codice macchina funzionerà anche come eseguibile DOS ( *.COM).


7

C #, 79 54 53 byte

Questo funziona su Windows.

79 byte :

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

53 byte , grazie a TheLethalCoder:

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

2
Nota che la sfida non richiede un programma completo e non impedisce di prendere un input (ovviamente inutilizzato) in modo da poter compilare un Action<int>e fare _=>System.Diagnostics.Process.Start("shutdown", "/s");per 54 byte.
TheLethalCoder

@TheLethalCoder, aggiornato, grazie!
Dariusz Woźniak,

Puoi anche rimuovere lo spazio non necessario.
nothrow

Certo che si! Grazie, @nothrow :)
Dariusz Woźniak,

6

AutoIt, 11 byte

Shutdown(1)

La funzione di spegnimento ottiene la combinazione dei seguenti codici

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

Per lo spegnimento e lo spegnimento, ad esempio, il codice sarebbe 9 (spegnimento + spegnimento = 1 + 8 = 9).


1
0(disconnessione) è un caso speciale qui; non si combina in modo implicito con Standby o Ibernazione.
wizzwizz4,

OK0 + 32 = 32
rahnema1

Hm, quindi si disconnette sempre prima di andare in standby / ibernazione?
Ruslan,

@Ruslan Non so esattamente come funzioni, puoi fare riferimento al forum degli utenti di AutoIt per ricevere più feedback :-)
rahnema1,

6

Windows - NativeAPI, 212 byte

Ok, questa non è davvero la versione più breve. Ma forse interessante per alcuni. Ciò non verrà eseguito sul sottosistema Win32. Tuttavia verrà eseguito quando eseguito nel contesto dell'API nativo (come fa autochk.exe)

Codice

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

Costruire

Per compilare questo, utilizzare lo build.exestrumento WinDDK (con un sourcefile appropriato per NMAKE)

Oppure usa questi comandi per compilare e collegare:

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 

Nota: questo genererà un eseguibile nativo x86. Modificare i bit appropriati se si desidera crearlo per un'architettura diversa.

Test

Per testare un eseguibile nativo devi eseguirlo prima che il sottosistema win32 venga caricato. Un modo comune per farlo è aggiungere l'eseguibile nella seguente chiave di registro:

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

avvertimento

In questo caso, tuttavia, è necessario disporre di un'opzione per modificare l'hive di registro del sistema operativo di destinazione da un altro sistema operativo. Dal momento che non sarai più in grado di avviare il sistema operativo di destinazione!

L'ho fatto su una VM in cui avrei potuto facilmente tornare a un'istantanea precedente!



5

La maggior parte delle shell Linux, 15 byte

# echo o>/p*/*ger

Potrebbe essere lungo 11 byte, se ti trovi nella /procdirectory:

# echo o>*ger

Questo è molto semplice (non ha effetti collaterali, come smontare filesystem o processi di uccisione) e piuttosto brutale.


1
L'ultima volta che ho provato l'espansione dei caratteri jolly al reindirizzamento ha generato un file con il carattere jolly al suo interno nonostante esistesse un file corrispondente.
Joshua,

5
Credo che devi aggiungere "/ proc /" al conteggio dei byte
zeppelin il

@Joshua Potrebbe essere dipendente dalla shell. In realtà l'ho provato (con bash) sul mio computer :-)
Radovan Garabík il

1
@Radovan Garabík - Non credo sia davvero valido. Questo è fondamentalmente lo stesso che implica che esiste un alias "p = poweroff" (che non è "impossibile") e che sostiene che "p" è una valida soluzione da 1 byte .
Zeppelin,

1
Ma probabilmente puoi renderlo valido a spese di soli 3 byte, in questo modoecho o>/p*/*ger
zeppelin il


5

AppleScript, 44 byte

tell application "Finder"
shut down
end tell

Non so come funziona la sintassi AppleScript o altro, quindi se qualcuno sa come accorciarlo, per favore, dillo.

Inoltre, lo sto facendo sul mio telefono a scuola ("hacking"), quindi non posso provarlo.

A 14 byte in meno (grazie a kindall) puoi dire

tell app "Finder" to shut down

Qualcuno ha trovato una soluzione più breve (con lo stesso programma) poche ore dopo di te (ma l'ha pubblicato invece di commentare qui) codegolf.stackexchange.com/a/107958/62824
devRicher

Probabilmente puoi rimuovere il rientro
Cyoce

4
tell app "Finder" to shut downdovrebbe funzionare, credo (anche se la compilation potrebbe sostituire "app" con "application").
kindall

4

J, 14 byte

2!:0'poweroff'

Funziona su sistemi Linux. 2!:0esegue la stringa in /bin/sh.


4

Clojure, 40 39 byte

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

-1 byte cambiando la bandiera da -sa /s, che mi ha permesso di liberarmi dello spazio.

Fondamentalmente la risposta Java.

Testare questo è stato divertente. Windows ha deciso di eseguire un aggiornamento del firmware sul mio Surface non appena si è spento. Ovviamente.

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

2

Node.js, 39 byte

Linux

require('child_process').exec('init 0')


2

C ++, 48 47 (Windows) 46 45 (Linux) byte

Rimosso 1 byte grazie a Snowman

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

Ciò dovrebbe arrestare il sistema per Windows

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

Ciò dovrebbe arrestare il sistema per Linux


hai bisogno del ;?
RaisingAgent

1
@LliwTelracs Abbastanza sicuro che sia "shutdown / p" e non "-p" e lo spazio non è necessario.
P. Ktinos,

Il punto e virgola è necessario per una corretta sintassi c ++, l'uso di una barra consente una risposta più breve per Windows ma non lo fa più funzionare per Linux. Anche se ho aggiunto il carattere sbagliato per l'arresto che è condiviso tra Windows e Linux
f 24nɛtɪk

@LliwTelracs Anche se puoi fare quello che vuoi, ti suggerisco di abusare della seconda regola e di non preoccuparti della funzionalità di Linux, poiché questo è un codice-golf e una bassa quantità di byte è migliore.
P. Ktinos,

1
#include<cstdlib>si raserà un byte.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.