Kode asli:
[[ ! "${1////x}" =~ [[:alnum:]] ]]&&[[ $# = 1 ]]&&bash -c "$1"
Memasukkan:
__=; (( __++, __-- ));
(( ___ = __, ___++));
(( ____ = ___, ____++));
(( _____ = ____, _____++));
(( ______ = _____, ______++));
(( _______ = ______, _______++));
(( ________ = _______, ________++));
(( _________ = ________, _________++));
${!__##-} <<<\$\'\\$___$______$_______\\$___$______$_____\\$___$_______$__\\$___$_______$_________\'\ \$\'\\$___$___$__\\$___$______$_______\\$___$_______$______\\$___$_______$______\\$___$_______$_________,\ \\$___$____$_________\\$___$_______$_________\\$___$________$____\\$___$_______$______\\$___$______$______\\$__$______$___\'
Penjelasan:
Ini mengkodekan "gema Halo, Dunia!" sebagai urutan pelepasan oktal (\ xxx).
Kecuali Anda juga tidak dapat menggunakan angka, jadi bagian pertama membangun variabel untuk angka 0-7. Anda bisa menggunakannya untuk membangun string dengan urutan oktal yang akan dievaluasi untuk memberi Anda perintah yang sebenarnya.
Tetapi eval
juga alfanumerik. Jadi, bukannya ini pipa yang string sebagai input ke contoh lain dari bash
. $0
berisi nama perintah yang digunakan untuk memanggil Bash, yang biasanya hanya bash
(atau -bash
untuk shell login) jika Anda menjalankannya secara normal (melalui TIO atau dengan menempelkannya di terminal). (Ini kebetulan berarti bahwa jika Anda mencoba menjalankan ini dengan menempelkannya ke dalam skrip, hal-hal yang salah akan terjadi ketika mencoba untuk garpu sendiri beberapa kali.)
Tapi bagaimanapun, Anda tidak bisa mengatakannya $0
secara langsung. Sebaliknya, $__
berisi nama dari $0
( "0"), dan Anda dapat menggunakan ekspansi langsung ke mengaksesnya ( ${!__}
mengacu pada isi $0
).
Dan itu, akhirnya, memberi Anda semua bagian yang Anda butuhkan.
05AB1E , Adnan
Cobalah online!
Bagaimana?
sumber
benar-benar manusia , Python 2
Sebuah solusi adalah
sumber
Pyth : Mr. Xcoder
G
adalah built-in untuk alfabet huruf kecil. Kode memeriksa kesetaraan terhadap itu.sumber
Jelly: EriktheOutgolfer
Jelly , 11 byte
Cobalah online!
Penjelasan
Kode asli dapat dijelaskan sebagai berikut:
Jadi, ambil saja "Halo, Dunia!" dan dapatkan codepoint, kuadratkan, kembalikan ke codepoints, putar 5 kali dengan benar, lalu kuadratkan dan ratakan hasilnya.
sumber
Oktaf oleh Stewie Griffin
Tidak yakin apakah ini solusi yang tepat (di TIO mencetak
\00
karakter), tetapi dioctave-cli
shell saya tampilannya seperti ini:Juga dalam tantangan aslinya dikatakan mencetak apa-apa (atau karakter nol) , jadi jika tidak ada yang sama
\00
maka ini harus baik-baik saja.Cobalah online!
sumber
0
dengan a10
).Hello, World!
dan baris baru." adalah kutipan tepat dari tantangan. Dan memang, itu membuat jawabannya sepele.Python 3 oleh rexroni
Cegah kesalahan dengan keluar lebih awal.
Cobalah online!
sumber
JavaScript (ES6) Oleh Ephellon Dantzler
{length:1, charCodeAt:()=>(e='Hello, World!', String.fromCharCode=()=>'')}
Cobalah online!
Itu sangat mudah.
Saya perhatikan bahwa setiap input string tidak mungkin dihasilkan
Hello, World!
karena keseluruhan isinyaString.fromCharCode
hanya akan mengembalikan kelipatan 4, dan!
memiliki kode char 33. Jadi jelas kita hanya perlu meretas keseluruhan program. Meretas bawaan dalam JavaScript adalah sepele jika seseorang tidak mencoba menghentikannya (dan bahkan jika seseorang melakukannya, biasanya ada banyak solusi ...).sumber
JavaScript (ES6), Voile
Proxy sederhana yang hanya mengembalikan karakter yang diinginkan setiap kali dipanggil.
Cobalah online!
sumber
Ruby, oleh Histocrat
Input ajaib adalah:
1767707618171221 30191World!
Cobalah online.
Penjelasan:
1767707618171221
adalah bilangan prima, dan, yang ditulis dalam basis 36, bilangan prima"hello"
. Ketika dikapitalisasi, ini menghasilkan"Hello"
, yang dicetak menggunakan$><<
$><<", #$'"if/30191/
mencari nomor30191
dalam input dan menulis ke stdout string yang terdiri dari koma, spasi, dan apa pun yang ada di input setelah30191
(menggunakan$POSTMATCH
, yang disebut di sini oleh varian pendeknya,$'
).sumber
Lua 5.1 oleh tehtmi
Lewati ini sebagai argumen pertama:
Dengan asumsi kode asli ada dalam file
tehtmi.lua
, jalankan (dalam bash atau shell serupa):Ini juga bekerja pada Lua 5.3, yang digunakan TIO, jadi mengapa Anda tidak mencobanya secara online ? Saya belum menguji implementasi yang menggunakan inti "PUC-Rio's Lua 5.1" (karena saya tidak dapat menemukan informasi), tetapi solusi saya mungkin juga bekerja di sana.
Bagaimana?
Ini menjalankan argumen pertama sebagai kode, tetapi hanya jika mengandung kurang dari 5 karakter huruf kecil.
Triknya adalah berlari
print("Hello, World!")
. Cara lain yang bisa dijalankan adalah menggunakan_G["print"]("Hello, World!")
, yang hanya menggunakan string.Tetapi kita tidak dapat menggunakan string secara langsung karena pembatasan jumlah huruf kecil, namun, Anda dapat menjalankan
("").char
untuk mendapatkan fungsistring.char
, yang dapat mengkonversi dari serangkaian byte ke string. Saya menugaskannya ke variabel huruf besar (jadi kami tidak mencapai batas) sehingga kami dapat menggunakannya untuk membangun keduaprint
danHello, World!
string yang dapat digunakan seperti di atas.sumber
next
bukannyachar
yang tidak bekerja pada Lua 5.3 karena pengacakan urutan iterasi.JavaScript (ES6) oleh Voile
Input harus berupa string yang mengandung ini:
Coba gunakan ini:
Jika Anda tidak peduli tentang persyaratan baris tambahan untuk output, Anda dapat mengganti 6 baris terakhir dengan ini sebagai gantinya:
Bagaimana saya melakukannya
Batasan pada input adalah string, setiap baris panjangnya dua byte atau kurang, dan panjang totalnya 80 byte atau kurang. Upaya pertama saya setelah memahami itu dengan benar adalah ini:
Catatan:
\
s adalah untuk mengabaikan baris baru dalam string pada input. Ini sangat penting untuk jawabannya, dan saya tidak percaya bahwa saya sengaja menemukannya. (Saya sudah terbiasa dengan itu tetapi lupa tentang hal itu)Tetapi ini tidak berhasil, karena
=>
harus pada baris yang sama dengan argumen. Untungnya, saya memiliki ide untuk membungkus sesuatu yang serupa dalam sebuah string dan memasukkan eval pada input saya untuk menguranginya menjadi satu baris, menghasilkan jawaban akhir saya. Setelah eval dalam input terjadi, berikut ini dihasilkan sebagai string (yang kemudian dievaluasi ke suatu fungsi dan kemudian jalankan):Ini sangat sulit untuk dipecahkan, tetapi pada akhirnya saya berhasil.
Juga, retak pertama!
sumber
Secara kubik oleh MD XF
Saya membayangkan ini selalu berbahaya, tetapi saya pikir saya memiliki celah, sambil menunggu bahwa saya benar karena ada bug pada juru bahasa (yang baru saja saya susun).
Masukan saya
Output
Hello, World!\n\n\n\n\n\n\n\n\n\n.....
dengan baris baru tanpa akhir.Tapi saya perhatikan bagian terakhir dari kode:
mengatur notepad ke
0x0A
(baris baru) dengan cara yang menakutkan, membaca input ke wajah 7 (wajah input), dan kemudian mencetak 6 wajah (wajah notepad) berulang kali hingga 7 wajah adalah nol. Jika Anda mengatur wajah 7 ke nol, Anda hanya akan mendapatkan satu baris baru. Namun, saya mendapat baris baru tanpa batas dan input ke-13 saya nol, dan saya dapat memverifikasi bahwa 7 wajah selalu nol dengan memasukkan "nomor cetak dari 7 wajah" di loop:kemudian mencetak
\n0
pasangan yang tak berujung .Saya melihat spesifikasi pada halaman cubith github dan perilaku ini sangat mirip bug. Mengubah karakter terakhir dari program asli dari
7
menjadi0
hasil dalam perilaku yang diharapkan. Penerjemah TIO menunjukkan perilaku salah yang sama.sumber
CJam , Erik the Outgolfer
Cobalah online!
Bagaimana?
sumber
C # (.NET Core) , Grzegorz Puławski
Solusi yang saya temukan sangat memanfaatkan karakter yang tidak patut dicetak, jadi upaya menempelkannya di sini tidak berfungsi dengan baik. Nilai byte untuk input adalah:
Atau versi string tersedia di bidang input dari tautan TIO.
Cobalah online!
Program asli akan mengambil karakter yang berbeda dalam input, lalu membalikkan input dan mengalikan elemen dari dua daftar. Jadi saya membuat string sepanjang 26 karakter di mana 13 karakter pertama berbeda, 13 karakter terakhir semuanya juga muncul di 13 karakter pertama, dan setiap pasangan indeks
[i, 26-i]
dikalikan dengan nilai byte dari karakter ke-i diHello, World!
.sumber
Ly , LyricLy
Coba di sini (walaupun halaman tidak membuat baris baru).
n
mengambil input, mencoba untuk membagi spasi dan melemparkan ke int, ini bisa diletakkan di stack.o
mencetak poin ordinal, dan8+
melakukan apa yang dipikirkan orang. Jadi input harus 8 lebih sedikit dari codepoint dalam urutan terbalik dengan spasi.sumber
2
akan berhasil - apakah itu hanya halaman herokuapp yang tidak merendernya?C (gcc), oleh Felix Palmen
Kode asli:
Argumen:
Cobalah online!
Penjelasan:
W(c)
menghitung alamat string dari daftar argumen untuk dicetak. Dimulai dengan alamat argumen cth (O(c)
), yang merupakan argumen ke-42 dalam kasus ini, dan kemudian kurangi karakter pertama dari argumen kedua (**O(2)
) sebagai offset bilangan bulat, dan kemudian menambahkanx
, yang merupakan jumlah argumen.W(c)
menggunakan argumen kedua, jadi Anda tahu harus ada setidaknya 3 dari mereka (0, 1, 2). Lalu "Halo, Dunia!" bisa masuk dalam argumen pertama, dan kemudian untuk mengatasi argumen itu Anda memerlukan karakter yang nilai ASCII-nya sesuai dengan persamaan "42-x + 3 = 1". Itu kebetulan ",".sumber
JavaScript: ThePirateBay
Saya menimpa
valueOf()
dantoString()
metode objek diurai sehingga paksaan gagal dengan aTypeError
.sumber
6502 Assembly (C64) - Felix Palmen
Penjelasannya sedikit terlibat.
Kode pertama memeriksa koma (keharusan sintaksis) dan kemudian membaca dalam dua argumen, yang pertama adalah KATA, disimpan little-endian di lokasi memori 0014 dan 0015, yang terakhir disimpan dalam register X.
Itu cukup pintar, menggunakan input kami untuk menulis ulang program. Ini akhirnya menulis ulang penghitung untuk loop keluaran di akhir program.
Inilah bagian yang licik:
pada C64, d018 adalah byte yang sangat penting. Ini menyimpan titik referensi untuk hal-hal yang melibatkan keluaran layar. Lihat di sini untuk info lebih lanjut. Jika ini mendapatkan nilai yang salah, itu akan merusak C64 Anda. Untuk mencetak campuran huruf besar dan kecil yang diperlukan, ini harus $ 17.
Sekarang kita mulai loop output kami:
Konstanta itulah yang ditulis sebelumnya. Ini dengan jelas menentukan berapa lama loop berjalan. Itu sudah merupakan nilai yang tepat, tetapi kita perlu tetap 0e di sana lagi.
Sisanya hanyalah informasi yang perlu kita cetak, mulai dari alamat memori c025.
Jadi hanya mengikuti matematika dari sana.
sumber
$FF
sana, tetapi kemudian memutuskan untuk meninggalkannya.6502 Kode Mesin (C64) - Felix Palmen
Jawaban yang benar adalah
Kode ini agak rumit, melibatkan banyak modifikasi diri. Jadi, alih-alih merekayasa balik sepenuhnya, Anda bisa menggunakannya untuk memecahkannya sendiri.
Berikut ini adalah pembongkaran kode yang sedikit lebih membantu, untuk membantu memahami apa yang terjadi. Sintaksnya adalah untuk KickAssembler.
Memberi label seperti ini sudah cukup bagi saya untuk melihat bahwa kode XOR adalah sekelompok konstanta yang disembunyikan untuk mencetak apa yang kita butuhkan. Karena XOR adalah reversibel, jika Anda memasukkan output yang diinginkan, itu akan memberi tahu Anda apa kuncinya.
Jadi saya mengganti baris terakhir
jadi itu akan mencetak input yang diperlukan terakhir alih-alih menabrak input yang salah.
Dan itu dia!
Jika ada minat, saya akan memecahkan kode lagi.
sumber
vice
. Tapi apapun itu, itu solusi yang tepat.drops A in mystery+1, over the constant
" <- itu sebenarnyamystery+4
dengan label Anda. Offests berada dalam byte :) dan FWIW, modifikasi diri cukup umum bahkan dalam kode 6502 yang serius , selama kode tersebut berjalan dari RAM.Meledak , Langkah Hen
Cobalah online!
sumber
C (tcc) oleh Joshua
Cobalah online!
sumber
MATL oleh Luis Mendo
Cobalah online!
sumber
Jelly oleh Jonathan Allan
Kode asli:
Cobalah online!
Memasukkan:
Penjelasan:
sumber
C (GCC pada TIO) oleh MD XF
Cobalah online!
Bagaimana?
Mencoba mencetak argumen kedua sebagai string, yang merupakan pointer yang dapat kita tentukan pada input. Kebetulan di memori lokasi
4195875
dimulai"Hello, World!\n"
string.Angka ditentukan dengan menambahkan
print("%p", "Hello, World!");
sebelumprintf
, mengubah angka heksadesimal menjadi desimal dan mencobanya pada TIO asli. Namun, itu menunjukkan sayaprintf
format string. Dengan mencoba beberapa angka, saya menemukan bahwa string terletak sebelum format string.Jadi dalam memori, akan terlihat seperti ini (sebagai string C):
Ini juga berarti bahwa setiap pembaruan ke kompiler dapat merusak solusi.
sumber
JavaScript (Node.js) Oleh Voile
['Hello, World!','','','','','','','','','','','','']
Cobalah online!
sumber
Röda oleh fergusq
Cobalah online!
Penjelasan datang sedikit ...
sumber
JavaScript (ES6), Voile
Cobalah online!
sumber
PHP oleh LP154
Cobalah online!
(TIO tidak mendefinisikan kelas PDO, jadi demo di atas menggunakan codepad yang berfungsi)
Solusi lain:
Cobalah online!
sumber
JavaScript (ES6), Voile
Mengingat batas 81 karakter, ini mungkin bukan solusi yang dimaksudkan
Cobalah online!
sumber