Tantangan:
Dalam bahasa pemrograman pilihan Anda, matikan mesin yang menjalankan kode Anda.
Aturan
- Tidak mematikan karena kehabisan sumber daya (mis: forkbomb untuk mematikan paksa)
- Anda diperbolehkan menulis kode yang hanya berfungsi di lingkungan / OS tertentu, jika diinginkan.
- Celah standar dilarang
Ini adalah kode-golf , sehingga jumlah byte terendah menang!
code-golf
interactive
P. Ktinos
sumber
sumber
`whatever`;
Bash / Perl / PHP / Ruby / etc. orang bodoh.shatdown: past tense of the verb shutdown
Jawaban:
Majelis (x86 / x64, Linux, as) ,
222119 byteHarus dijalankan sebagai root.
Ini sama dengan menekan tombol daya dan bukan cara yang aman untuk mematikan PC Anda. Pastikan Anda menutup semua aplikasi yang terbuka dan mengeksekusi
sync
untuk menyiram semua buffer sistem file sebelum menjalankan program ini, untuk setidaknya meminimalkan risiko korupsi file.Uji coba
Diikuti oleh kegelapan.
Bagaimana itu bekerja
int $0x80
meminta interupsi perangkat lunak. Ia bekerja pada x86 dan x64, tetapi telah ditinggalkan lebih dari satu dekade sekarang dan tidak boleh digunakan dalam kode produksi. kode x64 harus digunakansyscall
sebagai gantinya. x86 harus digunakansysenter
, tetapi terlalu rumit untuk kode golf.Tindakan yang dihasilkan dari syscall tergantung pada register EAX - EDX, ESI, dan EDI. The Linux SYSCALL Referensi menunjukkan semua syscalls yang tersedia melalui
int $0x80
.Ketika EAX memegang 0x58 (88) , reboot dinamai, yang juga dapat digunakan untuk mematikan, mematikan, atau hibernasi komputer, serta mengganti kernel dan menonaktifkan atau mengaktifkan kombo tombol Ctrl - Alt - Del .
Di awal program - dan dengan kompilasi dengan
as
ataugcc -nostdlib
, kami dapat memastikan bahwa kami benar-benar berada di awal program - sebagian besar register diatur ke 0 . Ini termasuk EAX, jadi kita bisa gunakanmov $0x58, %al
untuk mengatur 8 bit EAX yang lebih rendah ke 0x58 , sehingga mengatur EAX sendiri ke 0x58 . Ini menghemat dua byte lebih dari nol secara manual dengan registerxor %eax, %eax
dan satu lagi atas straighforwardmov $0x58, %eax
yang mengkodekan 0x58 dalam 32 bit.Dua argumen pertama untuk reboot adalah angka ajaib, mungkin untuk mencegah reboot tidak disengaja, dan dibaca dari register EBX dan ECX. Kecuali jika angka-angka ini sama dengan konstanta tertentu, reboot menolak untuk melakukan tindakan apa pun.
Angka ajaib pertama harus sama dengan 0xfee1dead ( merasa mati ), mungkin mengacu pada matikan / matikan PC.
Angka ajaib kedua dapat sama dengan empat konstanta yang berbeda, meskipun tiga yang terakhir tidak bekerja di versi Linux kuno. Semua dari mereka tampaknya merujuk pada kekuatan selanjutnya pada / kelahiran PC.
0x28121969 merupakan ulang tahun Linus Torvalds (28 Desember 1969).
0x05121996 melambangkan ulang tahun Patricia Torvalds (5 Desember 1996).
0x16041998 merupakan hari ulang tahun Daniela Torvalds (16 April 1998).
0x20112000 mewakili ulang tahun Celeste Torvalds (20 November 2000).
Patricia, Daniela, dan Celeste Torvalds adalah tiga putri Linus Torvalds.
Register EDX memilih jenis "reboot" yang kita inginkan. 0x4321fedc adalah RB_POWER_OFF , mematikan PC dan mematikannya.
Akhirnya, nilai register ESI diabaikan untuk RB_POWER_OFF ; nilai register EDI diabaikan sepenuhnya oleh reboot .
Versi alternatif, hanya x64, 19 byte
Pada x64, kita bisa menggunakan syscall yang tepat untuk jumlah byte yang sama.
Satu-satunya perbedaan terletak pada instruksi (
syscall
vsint $0x80
), nilai __NR_REBOOT ( 0xa9 vs 0x58 ), dan register yang terlibat.sumber
fee1
sangatdead
sekarang.PowerShell, 13 byte
Cukup jelas? Tidak bekerja pada inti PowerShell, sehingga tidak akan berfungsi pada PowerShell untuk Linux / MacOS (sudah mencobanya di TIO :-D).
Pengajuan Bonus Sampah, 12 byte
Dalam pengujian saya, ini berfungsi pada Windows 2003 dengan PowerShell 2.0. Ini tidak akan berfungsi pada sebagian besar versi yang lebih baru, dan mungkin tidak berfungsi tergantung pada modul yang diinstal. Cukup mengerikan!
Ini mencari daftar perintah untuk setiap dengan pola
s*r
dan kemudian menjalankan semuanya! Agar jelas, ini berbahaya, jangan lakukan ini!Triknya tentu saja, adalah mendapatkan daftar perintah yang tidak memiliki parameter wajib, jika tidak PowerShell akan meminta nilai.
Pada mesin 2003 saya, 3 perintah yang dikembalikan adalah:
Ya, ia meluncurkan screensaver tenda, tapi tidak, itu tidak menunggu sampai selesai sebelum diluncurkan
Stop-Computer
.Pendekatan ini dapat bekerja pada mesin yang lebih baru, sekali lagi tergantung pada modul mana yang diinstal, tetapi yang terbaik yang bisa saya lakukan pada Windows 2012 dan 2016 adalah 14 byte :
(dan ya, tentu saja, pengiriman winbatch akan bekerja di PowerShell dan lebih pendek, tapi .. itu tidak menyenangkan)
sumber
gcm *p-c*|iex
- dan hanya ada satu hasilnya juga!Stop-Computer
, yang merupakan hasil terakhir).Batch, 10 byte
Di windows, ini sudah cukup
Ini akan mengatur shutdown dalam satu menit.
Atau, seperti yang ditunjukkan oleh @flashbang:
Ini mematikan komputer dengan segera.
sumber
Press the big button on the front of your computer
= 0 bytekode mesin x86, Lenovo Z510, DOS COM atau Bootloader, 7 byte
Dirakit menjadi
B8 00 3C BA 04 18 EF
Saya mengeksploitasi " Anda diizinkan untuk menulis kode yang hanya berfungsi di lingkungan / OS tertentu, jika Anda mau " ke tingkat tertinggi: ini hanya akan bekerja pada Lenovo Z510 1 .
Ini menulis
SLP_TYPa << 10 | SLP_EN
kePM1a_CNT
register ACPI, saya membuang nilai-nilai ini dari tabel ACPI bulan lalu untuk jawaban tentang shutdown (di mana saya memberikan sedikit konteks pada kode di atas).Ini dapat dijalankan di bawah DOS sebagai COM (cukup tulis data biner ke dalam file dan ubah ekstensi menjadi "com") atau sebagai bootloader.
Untuk yang terakhir tulis tanda tangan standar dan waspadalah terhadap masalah dengan firmware modern .
1 Tidak sepenuhnya benar, sistem apa pun yang memiliki konfigurasi ACPI yang sama juga akan dimatikan.
sumber
Shell GRUB , 4 byte
Golf
Bonus
Berikut ini adalah bukti bahwa GRUB shell memang Tur n ing-lengkap (lihat komentar):
sumber
built-in scripting language, which has a syntax quite similar to that of GNU Bash and other Bourne shell derivatives
dan mendukung variabel, konstruksi kondisional, fungsi dan lebih , jadi jelas, itu adalah Menghidupkan-lengkap, dengan ukuran apa pun.Kode mesin 65C02, 1 byte
Instruksi STP (0xDB):
STP menghentikan input jam dari 65C02, secara efektif mematikan 65C02 sampai terjadi reset perangkat keras (yaitu pin RES menjadi rendah). Ini menempatkan 65C02 dalam kondisi daya rendah. Ini berguna untuk aplikasi (sirkuit) yang membutuhkan konsumsi daya rendah, tetapi STP jarang terlihat sebaliknya.
(Sumber: http://www.6502.org/tutorials/65c02opcodes.html )
xxd dump:
sumber
Matlab, 21 Bytes
Saya belum mencoba ini (menutup semua program untuk melakukan restart di tengah hari tidak benar-benar menggoda), tetapi seharusnya berhasil.. Ini bekerja...Saya akan menambahkan penjelasan singkat nanti, laptop saya saat ini mati.
sumber
uptime
, meskipunshutdown -s
sebagai shell?MATLAB, 11 byte
Agak mirip dengan pendekatan Stewie Griffin . Namun, MATLAB memiliki cara yang jauh lebih pendek untuk menjalankan perintah sistem; dalam hal ini,
!
digunakan. Windows tidak perlu.exe
untuk nama perintah, jadi itu ditinggalkan juga. The/
opsi masih didukung (Aku sedang menjalankan Windows 10), dan meniadakan kebutuhan untuk ruang. Alternatifnya adalah:sumber
SmileBASIC,
14116 byteMemicu kerusakan yang menyebabkan 3DS restart. Saya harap ini diperhitungkan.
Berfungsi dalam versi terbaru.
sumber
REBOOT
dari SBv2 dihitung sebagai jawaban yang valid.Bash,
76 byteDengan asumsi bahwa program dijalankan sebagai root.
sumber
poweroff
adalah satu kata, meskipun sedikit lebih banyak huruf.Java,
101986242 byteSeperti yang ditunjukkan @Snowman, pertanyaannya tidak menentukan apakah program lengkap diperlukan, jadi ini masih bisa diterima.
sumber
class
denganinterface
yang memungkinkan Anda menghilangkanpublic
dari utama.void f()throws Exception{Runtime.getRuntime().exec("shutdown/s");}
()->{Runtime.getRuntime().exec("init 0");}
atau sementara()->Runtime.getRuntime().exec("init 0")
(tidak dapat memeriksa saat ini). Ini lambda yang mengimplementasikan antarmuka custom void, no-args-throwing.Python 2, 29 byte
Bekerja pada sistem Linux dan membutuhkan hak akses root.
Untuk Windows, 33 byte
Ini mungkin kode yang paling tidak menarik atau bermanfaat yang pernah saya tulis.
sumber
Commodore 64, 11 byte
Ini dari prompt BASIC. Atau...
Commodore 64, 6502 rakitan, 3 byte (rakitan), 16 byte (sumber)
sumber
sys64738
akan menggunakan nol byte karena tidak ada program atau hal lain untuk menyimpan; Anda menggunakan RAM layar tetapi RAM itu sudah akan diisi dengan spasi, jadi Anda hanya mengganti spasi tersebut dengan teks.0
dansys64738
, Anda dapat menggantisys
dengan bentuk pintasansY
, dan saya tidak menghitung baris tambahan dalam panjang program. Namun, saya tidak berpikir kode Anda memenuhi persyaratan: kode di 64738 melakukan soft reset, bukan poweroff.TI-Nspire CX CAS, 3 byte
menjumlahkan dua string kosong.
Pada versi kalkulator yang lebih lama, ini akan membuat perangkat mogok dan menyebabkannya melakukan reboot (tidak ada cara untuk mematikan perangkat tanpa mem-boot terlepas dari kombinasi tombol fisik).
Video oleh Adriweb
sumber
C ++,
5140 byte-11 byte berkat Ingve !
Hanya berfungsi di IncludeOS (v0.10.0-rc.1)
Uji:
sumber
void Service::start
,int main
bekerja di IncludeOS juga.AppleScript, 30 byte
Melakukan persis seperti yang dikatakan: memberitahu Finder untuk mematikan komputer.
sumber
AutoHotkey,
1110 BytesMenyimpan satu byte berkat Gurupad Mamadapur
AHK Mendukung perintah Shutdown secara default. Ini
9
adalah bendera, terdiri dariShutdown=1
+PowerDown=8
.sumber
AHK
misterius.,
tidak diperlukan. Coba mengujinya dengan bendera yang berbeda. Saya pikir ini tidak akan segera mematikan komputer, dan meletakkannya di skrip utama saya yang memuat saat startup: D Sekarang saya telah memuat dalam mode aman dan menyelesaikan masalah. Mendesah.Kode mesin (x86, boot loader) 18 byte
Membongkar:
Anda dapat mengujinya di debugger Bochs dengan perintah berikut (setelah memulai simulasi, mengatur drive disk):
Kode mesin yang sama ini juga akan berfungsi sebagai DOS executable (
*.COM
).sumber
C #,
795453 byteIni berfungsi pada Windows.
79 byte :
53 byte , terima kasih kepada TheLethalCoder:
sumber
Action<int>
dan lakukan_=>System.Diagnostics.Process.Start("shutdown", "/s");
untuk 54 byte.AutoIt, 11 byte
Fungsi shutdown mendapat kombinasi kode-kode berikut
Untuk mematikan dan mematikan, misalnya, kode akan menjadi 9 (mematikan + mematikan = 1 + 8 = 9).
sumber
0
(logoff) adalah kasus khusus di sini; itu tidak bergabung dengan Siaga atau Hibernate secara implisit.0 + 32 = 32
Windows - NativeAPI, 212 byte
Oke, ini bukan versi yang terpendek. Tapi mungkin menarik bagi sebagian orang. Ini tidak akan dijalankan pada subsistem Win32. Namun itu akan berjalan ketika dieksekusi dalam konteks api asli (seperti autochk.exe tidak)
Kode
Membangun
Untuk membangun ini, gunakan
build.exe
alat WinDDK (dengansource
file yang sesuai untukNMAKE
)Atau gunakan perintah ini untuk mengkompilasi dan menautkan:
Catatan: Ini akan membangun executable asli x86. Ubah bit yang sesuai jika Anda ingin membangun ini untuk arsitektur yang berbeda.
Uji
Untuk menguji executable asli Anda harus menjalankannya sebelum subsistem win32 dimuat. Salah satu cara umum untuk melakukannya adalah dengan menambahkan executable di kunci registri berikut:
Peringatan
Namun, jika Anda melakukan ini, Anda harus memiliki opsi untuk mengedit kumpulan registri dari OS target dari OS lain. Karena Anda tidak akan dapat mem-boot OS target lagi!
Saya melakukannya pada VM di mana saya dapat dengan mudah kembali ke snapshot sebelumnya!
sumber
Groovy, 23 byte
sumber
Sebagian besar shell Linux, 15 byte
Panjangnya bisa 11 byte, jika Anda berada di
/proc
direktori:Ini sangat mudah (tidak memiliki efek samping, seperti melepas sistem file atau membunuh proses) dan agak brutal.
sumber
bash
) di komputer saya :-)echo o>/p*/*ger
Android shell, 9 byte
sumber
AppleScript, 44 byte
Saya tidak tahu bagaimana sintaks AppleScript bekerja atau apa pun, jadi jika ada yang tahu cara mempersingkat ini, tolong beri tahu.
Juga, saya melakukan ini di ponsel saya di sekolah ("peretasan"), jadi saya tidak bisa mengujinya.
Pada 14 byte lebih sedikit (terima kasih untuk kebaikan) yang bisa Anda katakan
sumber
tell app "Finder" to shut down
harus bekerja, saya percaya (meskipun kompilasi dapat menggantikan 'aplikasi' dengan 'aplikasi').J, 14 byte
Bekerja pada sistem Linux.
2!:0
mengeksekusi string dalam/bin/sh
.sumber
Clojure,
4039 byte-1 byte dengan mengubah flag dari
-s
menjadi/s
, yang memungkinkan saya untuk menyingkirkan spasi.Pada dasarnya jawaban Java.
Menguji ini menyenangkan. Windows memutuskan untuk melakukan pembaruan firmware pada Surface saya begitu ia dimatikan. Tentu saja.
sumber
Node.js, 39 byte
Linux
sumber
AHK,
1915 byteHanya bekerja di windows.
sumber
C ++,
4847 (Windows)4645 (Linux) byteDihapus 1 byte berkat Snowman
Ini harus mematikan sistem untuk windows
Ini harus mematikan sistem untuk Linux
sumber
;
?#include<cstdlib>
akan memangkas satu byte.