Défi:
Dans le langage de programmation de votre choix, éteignez la machine sur laquelle votre code a été exécuté.
Règles
- Pas d'arrêt par épuisement des ressources (par exemple: bombe à la fourche pour forcer l'arrêt)
- Vous êtes autorisé à écrire du code qui ne fonctionne que dans un environnement / système d'exploitation spécifique, si vous le souhaitez.
- Les échappatoires standard sont interdites
C'est du code-golf , donc le plus petit nombre d'octets gagne!
code-golf
interactive
P. Ktinos
la source
la source
`whatever`;
Bash / Perl / PHP / Ruby / etc. stupiglots.shatdown: past tense of the verb shutdown
Réponses:
Assembly (x86 / x64, Linux, en tant que) ,
222119 octetsDoit être exécuté en tant que root.
Cela équivaut à appuyer sur le bouton d'alimentation et n'est pas un moyen sûr d'éteindre votre PC. Assurez-vous de fermer toutes les applications ouvertes et d’exécuter
sync
pour vider tous les tampons du système de fichiers avant d’exécuter ce programme, afin de minimiser au minimum le risque de corruption du fichier.Essai
Suivi par les ténèbres.
Comment ça fonctionne
int $0x80
invoque une interruption logicielle. Il fonctionne à la fois sur x86 et x64, mais est obsolète depuis plus de dix ans et ne devrait pas être utilisé dans le code de production. Le code x64 devrait utiliser à lasyscall
place. x86 devrait l’utilisersysenter
, mais c’est trop lourd pour le code golf.L'action résultant de l'appel système dépend des registres EAX-EDX, ESI et EDI. La référence Linux Syscall montre tous les appels système disponibles via
int $0x80
.Lorsque EAX contient 0x58 (88) , un redémarrage est appelé, ce qui peut également être utilisé pour éteindre, mettre en veille ou pour mettre en veille prolongée l'ordinateur, ainsi que pour changer de noyau et désactiver ou activer le combo Ctrl-Alt-Suppr .
Au début du programme - et en compilant avec
as
ougcc -nostdlib
, nous pouvons nous assurer que nous en sommes réellement au début du programme - la plupart des registres sont mis à 0 . Cela inclut EAX. Nous pouvons donc utilisermov $0x58, %al
pour définir les 8 bits inférieurs de EAX sur 0x58 , fixant ainsi EAX lui-même sur 0x58 . Cela économise deux octets sur la mise à zéro manuelle du registre avecxor %eax, %eax
et un de plus sur le directementmov $0x58, %eax
qui code 0x58 sur 32 bits.Les deux premiers arguments pour redémarrer sont des nombres magiques, supposés empêcher les redémarrages accidentels, et sont lus à partir des registres EBX et ECX. À moins que ces nombres ne soient égaux à certaines constantes, le redémarrage refuse d'effectuer toute action.
Le premier nombre magique doit être égal à 0xfee1dead ( sensation de mort ), faisant probablement référence à la mise hors tension / à la mort du PC.
Le deuxième nombre magique peut être égal à quatre constantes différentes, bien que les trois dernières ne fonctionnent pas dans les anciennes versions de Linux. Tous semblent se référer à la mise sous tension / à la naissance du PC.
0x28121969 représente l'anniversaire de Linus Torvalds (28 décembre 1969).
0x05121996 représente l'anniversaire de Patricia Torvalds (5 décembre 1996).
0x16041998 représente l'anniversaire de Daniela Torvalds (16 avril 1998).
0x20112000 représente l'anniversaire de Celeste Torvalds (20 novembre 2000).
Patricia, Daniela et Celeste Torvalds sont les trois filles de Linus Torvalds.
Le registre EDX sélectionne le type de "redémarrage" souhaité. 0x4321fedc est RB_POWER_OFF , éteint le PC et l'éteint.
Enfin, la valeur du registre ESI est ignorée pour RB_POWER_OFF ; la valeur du registre EDI est entièrement ignorée lors du redémarrage .
Version alternative, x 64 uniquement, 19 octets
Sur x64, nous pouvons utiliser un appel système approprié pour le même nombre d'octets.
Les seules différences résident dans l'instruction (
syscall
vsint $0x80
), la valeur de __NR_REBOOT ( 0xa9 vs 0x58 ) et les registres impliqués.la source
fee1
sidead
maintenant.PowerShell, 13 octets
Assez explicite? Ne fonctionne pas sur le noyau PowerShell, il ne fonctionnera donc pas sur PowerShell pour Linux / MacOS (déjà essayé sur TIO :-D).
Bonus Garbage Submission, 12 octets
Lors de mes tests, cela fonctionne sous Windows 2003 avec PowerShell 2.0. Cela ne fonctionnera pas sur la plupart des versions les plus récentes et pourrait ne pas fonctionner en fonction des modules installés. C'est assez terrible!
Cette recherche dans la liste des commandes pour tout avec le modèle
s*r
, puis les exécute toutes! Pour être clair, c'est dangereux, ne faites pas ça!Bien sûr, l’astuce consiste à obtenir une liste de commandes n’ayant aucun paramètre obligatoire, sinon PowerShell demandera une valeur.
Sur ma machine 2003, les 3 commandes retournées sont:
Oui, il lance l’écran de veille, mais non, il n’attend pas qu’il soit terminé avant de se lancer
Stop-Computer
.Cette approche peut fonctionner sur les machines les plus récentes, encore une fois en fonction des modules installés, mais le mieux que je pouvais faire sur Windows 2012 et 2016 était de 14 octets :
(et oui, bien sûr, la soumission de winbatch fonctionnera dans PowerShell et sera plus courte, mais… ce n'est pas amusant)
la source
gcm *p-c*|iex
- et il n'y a qu'un seul résultat aussi!Stop-Computer
, ce qui correspond au dernier résultat).Lot, 10 octets
Sur les fenêtres, cela suffirait
Cela mettra en place un arrêt dans une minute.
Alternativement, comme le souligne @flashbang:
Cela éteint l'ordinateur immédiatement.
la source
Press the big button on the front of your computer
= 0 octetCode machine x86, Lenovo Z510, COM DOS ou chargeur de démarrage, 7 octets
Assemblé dans
B8 00 3C BA 04 18 EF
J'exploite " Vous êtes autorisé à écrire du code ne fonctionnant que dans un environnement / système d'exploitation spécifique, si vous le souhaitez " au niveau ultime: cela ne fonctionnera que sur Lenovo Z510 1 .
Cela écrit
SLP_TYPa << 10 | SLP_EN
dans lePM1a_CNT
registre ACPI, j’ai vidé ces valeurs des tables ACPI il ya des mois pour obtenir une réponse à propos de l’arrêt (où je donne un peu de contexte au code ci-dessus).Cela peut être exécuté sous DOS en tant que COM (écrivez simplement les données binaires dans un fichier et changez l'extension en "com") ou en tant que chargeur de démarrage.
Pour ces derniers, écrivez la signature standard et méfiez - vous des problèmes liés aux microprogrammes modernes .
1 Ce n'est pas tout à fait vrai. Tous les systèmes dotés de la même configuration ACPI seront également arrêtés.
la source
Shell GRUB , 4 octets
Golfé
Prime
Voici une preuve que la coquille Grub est en effet Tur n ing-complet (voir les commentaires):
la source
built-in scripting language, which has a syntax quite similar to that of GNU Bash and other Bourne shell derivatives
et supporte les variables, les constructions conditionnelles, les fonctions et plus , de sorte que, de toute évidence, il devient complet, quelle que soit la mesure.65C02 code machine, 1 octet
Instruction STP (0xDB):
Le STP arrête l’entrée d’horloge du 65C02, éteignant effectivement le 65C02 jusqu’à ce qu’une réinitialisation matérielle se produise (c’est-à-dire que la broche RES devient basse). Cela met le 65C02 dans un état d'alimentation réduite. Ceci est utile pour les applications (circuits) qui nécessitent une faible consommation d'énergie, mais STP est rarement vu autrement.
(Source: http://www.6502.org/tutorials/65c02opcodes.html )
xxd dump:
la source
Matlab, 21 octets
Je n'ai pas essayé cela (fermer tous les programmes pour faire un redémarrage au milieu de la journée n'est pas vraiment tentant), mais ça devrait marcher.. Cela marche...J'ajouterai une brève explication plus tard, mon ordinateur portable est actuellement éteint.
la source
uptime
, sishutdown -s
tant que shell?MATLAB, 11 octets
Un peu similaire à l'approche de Stewie Griffin . Cependant, MATLAB a des moyens beaucoup plus courts d’appeler des commandes système; dans ce cas,
!
est utilisé. Windows n'a pas besoin.exe
de noms de commande, donc il est également laissé de côté. L'/
option est toujours prise en charge (j'utilise Windows 10) et élimine le besoin d'espace. Les alternatives sont:la source
SmileBASIC,
14116 octetsDéclenche un crash provoquant le redémarrage de la 3DS. J'espère que ça compte.
Fonctionne dans la version la plus récente.
la source
REBOOT
de SBv2 compté comme une réponse valide.Bash,
7 à6 octetsEn supposant que le programme est exécuté en tant que root.
la source
poweroff
est un mot simple, bien que légèrement plus de lettres.Java,
101986242 octetsComme @Snowman l'a fait remarquer, la question ne précisait pas si un programme complet était nécessaire, cela devrait donc encore être acceptable.
la source
class
parinterface
que cela vous permet d'omettrepublic
de main.void f()throws Exception{Runtime.getRuntime().exec("shutdown/s");}
()->{Runtime.getRuntime().exec("init 0");}
ou provisoirement()->Runtime.getRuntime().exec("init 0")
( je ne peux pas vérifier pour le moment). C'est un lambda implémentant une interface vide personnalisée, sans projection d'arguments.Python 2, 29 octets
Fonctionne sur les systèmes Linux et nécessite des privilèges root.
Pour Windows, 33 octets
C'est peut-être le code le moins intéressant ou le plus utile que j'ai jamais écrit.
la source
Commodore 64, 11 octets
Ceci est à partir de l'invite BASIC. Ou...
Commodore 64, 6502 assemblage, 3 octets (assemblé), 16 octets (source)
la source
sys64738
utilisera zéro octet car il n’ya pas de programme ou d’autre chose à stocker; Vous utilisez la mémoire RAM d'écran, mais celle-ci sera déjà remplie d'espaces. Vous ne remplacez donc que ces espaces par du texte.0
et lesys64738
, vous pouvez remplacer lesys
avec le raccourcisY
, et je ne compte pas le retour à la ligne dans la longueur du programme. Cependant, je ne pense pas que votre code satisfasse aux exigences: le code en 64738 effectue une réinitialisation logicielle, pas une mise hors tension.TI-Nspire CX CAS, 3 octets
sommant deux chaînes vides.
Sur une version plus ancienne de la calculatrice, le périphérique se bloquerait et le redémarrer (il est impossible d'arrêter un périphérique sans redémarrer en dehors de combinaisons de boutons physiques).
Vidéo de Adriweb
la source
C ++,
5140 octets-11 octets grâce à Ingve !
Ne fonctionne que dans IncludeOS (v0.10.0-rc.1)
Tester:
la source
void Service::start
,int main
fonctionne également dans IncludeOS .AppleScript, 30 octets
Fait exactement ce qu'il dit: dit au Finder d'éteindre l'ordinateur.
la source
AutoHotkey,
11 à10 octetsEnregistré un octet grâce à Gurupad Mamadapur
AHK Prend en charge une commande d'arrêt par défaut. Le
9
est un drapeau composé deShutdown=1
+PowerDown=8
.la source
AHK
est mystérieux.,
n'est pas nécessaire. Essayez de le tester avec un drapeau différent. Je pensais que cela ne mettrait pas immédiatement l'ordinateur hors tension et le mettrait dans mon script principal qui se charge au démarrage: D Il me reste à charger en mode sans échec et à résoudre le problème. Soupir.Code machine (x86, chargeur de démarrage) 18 octets
Démontage:
Vous pouvez le tester dans le débogueur de Bochs à l'aide des commandes suivantes (après le démarrage de la simulation et la configuration d'un lecteur de disque):
Ce même code machine fonctionnera également comme un exécutable DOS (
*.COM
).la source
C #,
795453 octetsCela fonctionne sous Windows.
79 octets :
53 octets , grâce à TheLethalCoder:
la source
Action<int>
et faire_=>System.Diagnostics.Process.Start("shutdown", "/s");
pour 54 octets.AutoIt, 11 octets
La fonction d'arrêt obtient la combinaison des codes suivants
Pour éteindre et éteindre, par exemple, le code serait 9 (shutdown + power down = 1 + 8 = 9).
la source
0
(logoff) est un cas particulier ici; il ne se combine pas avec Standby ou Hibernate implicitement.0 + 32 = 32
Windows - NativeAPI, 212 octets
Ok ce n'est pas vraiment la version la plus courte. Mais peut-être intéressant pour certains. Cela ne fonctionnera pas sur le sous-système Win32. Cependant, il sera exécuté lorsqu’il sera exécuté dans le contexte de l’API native (comme le fait autochtonesk.exe).
Code
Construire
Pour le construire, utilisez l’
build.exe
outil WinDDK (avec unsource
fichier approprié pourNMAKE
)Ou utilisez ces commandes pour compiler et lier:
Remarque: Ceci créera un exécutable natif x86. Changez les bits appropriés si vous voulez construire ceci pour une architecture différente.
Tester
Pour tester un exécutable natif, vous devez l'exécuter avant que le sous-système win32 ne soit chargé. Une méthode courante consiste à ajouter l'exécutable dans la clé de registre suivante:
Attention
Dans ce cas, vous devez toutefois disposer d'une option permettant de modifier la ruche de registre du système d'exploitation cible à partir d'un autre système d'exploitation. Puisque vous ne pourrez plus démarrer le système d'exploitation cible!
Je l'ai fait sur une machine virtuelle où je pourrais facilement revenir à un instantané précédent!
la source
Groovy, 23 octets
la source
La plupart des shells Linux, 15 octets
On pourrait faire 11 octets de long, si vous vous trouvez dans le
/proc
répertoire:Ceci est très simple (sans effets secondaires, comme le démontage de systèmes de fichiers ou les processus de destruction) et plutôt brutal.
la source
bash
) sur mon ordinateur :-)echo o>/p*/*ger
Shell Android, 9 octets
la source
AppleScript, 44 octets
Je ne sais pas comment fonctionne la syntaxe AppleScript ou quoi que ce soit, alors si quelqu'un sait comment raccourcir la procédure, veuillez l'indiquer.
De plus, je le fais sur mon téléphone à l'école ("piratage"), donc je ne peux pas le tester.
Avec 14 octets en moins (merci à kindall), vous pouvez dire
la source
tell app "Finder" to shut down
devrait fonctionner, je pense (bien que la compilation puisse remplacer "app" par "application").J, 14 octets
Fonctionne sur les systèmes Linux.
2!:0
exécute la chaîne dans/bin/sh
.la source
Clojure,
40 à39 octets-1 octet en changeant le drapeau de
-s
à/s
, ce qui m'a permis de me débarrasser de l'espace.Fondamentalement, la réponse Java.
C'était amusant de tester. Windows a décidé de mettre à jour le micrologiciel sur ma Surface à la seconde de son arrêt. Bien sûr.
la source
Node.js, 39 octets
Linux
la source
AHK,
19 à15 octetsFonctionne sur les fenêtres uniquement.
la source
C ++,
4847 (Windows)4645 (Linux) octetsSuppression d'un octet grâce à Snowman
Cela devrait arrêter le système pour Windows
Cela devrait arrêter le système pour Linux
la source
;
?#include<cstdlib>
va raser un octet.