Apakah akan berhenti? (Perampok)


46

Ini adalah utas perampok. Utas polisi ada di sini .

Tantangan Anda adalah untuk memecahkan pengajuan polisi dengan menemukan input yang membuatnya berhenti. Anda tidak perlu mencari tahu mengapa, atau semua input yang membuatnya berhenti jika ada lebih dari satu, atau input yang dimaksudkan oleh polisi, hanya satu input yang akan dilakukan.

Setelah Anda memecahkan kiriman, kirimkan tautan ke sana dalam komentar atau edit ke pos polisi. Anda juga dapat menandai kiriman Anda untuk mod untuk mengeditnya di pos polisi. Juga, poskan input yang digunakan dan tautan ke pos polisi dalam jawaban di utas ini. Perampok yang memecahkan sebagian besar pengiriman, menang.

Banyak orang dapat memposting retakan ke pengiriman polisi yang sama, selama mereka berbeda.

(Jika SE mengonversi jawaban duplikat Anda ke komentar, Anda mungkin ingin memberi suara pada permintaan fitur ini )


Mencari kiriman yang tidak retak?

fetch("https://api.stackexchange.com/2.2/questions/135363/answers?order=desc&sort=activity&site=codegolf&filter=!.Fjs-H6J36vlFcdkRGfButLhYEngU&key=kAc8QIHB*IqJDUFcjEF1KA((&pagesize=100").then(x=>x.json()).then(data=>{var res = data.items.filter(i=>!i.body_markdown.toLowerCase().includes("cracked")).map(x=>{const matched = /^ ?##? ?(?:(?:(?:\[|<a href ?= ?".*?">)([^\]]+)(?:\]|<\/a>)(?:[\(\[][a-z0-9/:\.]+[\]\)])?)|([^, ]+)).*[^\d](\d+) ?\[?(?:(?:byte|block|codel)s?)(?:\](?:\(.+\))?)? ?(?:\(?(?!no[nt][ -]competing)\)?)?/gim.exec(x.body_markdown);if(!matched){return;}return {link: x.link, lang: matched[1] || matched[2], owner: x.owner}}).filter(Boolean).forEach(ans=>{var tr = document.createElement("tr");var add = (lang, link)=>{var td = document.createElement("td");var a = document.createElement("a");a.innerText = lang;a.href = link;td.appendChild(a);tr.appendChild(td);};add(ans.lang, ans.link);add(ans.owner.display_name, ans.owner.link);document.querySelector("tbody").appendChild(tr);});});
<html><body><h1>Uncracked Submissions</h1><table><thead><tr><th>Language</th><th>Author</th></tr></thead><tbody></tbody></table></body></html>


2
Apakah input berbeda berarti berbeda (katakanlah, semua input diakhiri dengan 2 retak pos polisi - dapatkah Anda orang yang berbeda memposting angka berbeda berakhiran 2?) Atau berbagai keluarga input, atau berbagai jenis input?
Stephen

1
Beberapa orang dapat memposting retakan ke pengiriman polisi yang sama ... Silakan tentukan berbeda .
Dennis

Jawaban:


49

Malbolge, Gagang Pintu

Cobalah online (Terima kasih, Dennis !)

Input untuk Windows: F_⌠1234567890

Input pada sistem berbasis Linux menggunakan ISO-8559-1: F_ô1234567890

Inti dari bagaimana program Malbolge bekerja adalah bahwa itu tergantung pada perilaku penerjemah Malbolge yang menyebabkan loop tak terbatas jika menemui instruksi apa pun yang tidak antara 33 dan 126. Program ini dibangun sedemikian rupa sehingga input Anda akan memungkinkan Anda untuk memodifikasi satu instruksi.

Saya memodifikasi interpreter untuk membuang status memori program pada awal eksekusi dan juga untuk menghasilkan kode sumber yang 'dinormalisasi' yang mengambil bentuk daftar kode op yang akan dijalankan selama eksekusi program. Dengan informasi itu, Anda dapat (perlahan) menentukan bahwa meskipun program mengambil 13 input, hanya input 1 dan 3 yang benar-benar penting.

Melihat melalui kode dinormalkan dan dump memori (dan sentuhan bantuan debugger) saya merancang yang berikut:

a = op (input 1, 29524)

b = op (input 3, a)

c = op (486, b)

d = op (c, 37)

e = d / 4 + d% 3 * 3 ^ 9

e harus antara 33 dan 126

Di mana opdisebut "op" tritwise yang dijelaskan dalam spesifikasi. Dengan menggunakan informasi ini, Anda dapat menulis program sederhana yang mengulangi input yang mungkin (0 hingga 255) dan menemukan semua solusi yang memenuhi kriteria di atas. Saya telah menemukan 2219 solusi yang mungkin, beberapa di antaranya mungkin bukan solusi yang berfungsi (Anda tidak dapat memasukkan karakter yang diperlukan). Secara khusus input di atas didasarkan pada solusi:

(Input 1 = 70, Input 3 = 244)


Saya tidak punya rep untuk berkomentar retak pada posting polisi. Bisakah seseorang melakukan itu untuk saya?
KBRON111

4
Selamat datang di PPCG! Kerja bagus! Saya pikir dengan celah ini, Anda akan segera memiliki perwakilan yang cukup :)
Stephen

1
Saya berkomentar di seberang. Dan ya, kerja bagus; Aku setengah berharap Malbolge bertahan minggu ini!
Veedrac

6
Kerja bagus! TIO menggunakan UTF-8, tetapi dengan membungkusnya di Bash, celah Anda masih dapat diverifikasi. tio.run/... Sepertinya Anda tidak membutuhkan apa-apa selain F_ôomong-omong.
Dennis

1
Sekarang saya bisa tidur lagi
Juan Tonina


13

JS (ES6), Juan Tonina

+0,-0

Butuh sedikit mencari Object.isuntuk menemukan. Pada dasarnya, +0 === -0karena ===memeriksa mereka sebagai angka, dan 0terbatas, tetapi Object.ismelihat +0dan -0sebagai objek yang berbeda. Polisi yang sangat pintar :)

Cobalah online!


Ninja mendapatkannya saat aku masuk. Tembak.
user3033745

Sial, terpecahkan lebih cepat daripada waktu saya habiskan memikirkan kode: D
Juan Tonina

11

Python, Siphor

class A:
    i = True
    def __eq__(self, a):
        self.i = not self.i
        return self.i

a = A()
f(a)

Kami hanya mendefinisikan ulang kesetaraan untuk berperilaku tepat seperti yang disyaratkan untuk menghentikan program.


Meskipun saya kira saya bisa saja didefinisikan __eq__untuk raise...
g.rocket

Saya baru saja akan menyerah dengan baru saja kembali 0: p
Jonathan Allan

@ JonathanAllan Bagaimana cara kerjanya?
g.rocket

1
Cukup yakin class A:__eq__=lambda s,o:0dan f(A())melakukan pekerjaannya.
Jonathan Allan

1
Ah ya perlu negasi> _ <
Jonathan Allan


8

PHP, Sisyphus

(-0[0)> deal with it=1

Fungsi parse_str mengubah spasi dan karakter lain menjadi garis bawah. Jika Anda meletakkan [digunakan untuk pembatas Array tanpa menutup, itu mengubahnya menjadi garis bawah tetapi memiliki efek tidak menerjemahkan spasi berikut (saya tidak tahu mengapa).

Cobalah online!


WTF ?! Itu gila ...
Veedrac


7

JavaScript (ES7), Arnauld

Standar

"8e7" adalah solusi

var crack_me = (x=0)=>{for(;~x/x.length**3!=-2962963;);}

var key = "8e7"

crack_me(key)
console.log("stopped :)")

Retas

Tidak perlu menghitung angka ini, kita dapat mendefinisikan kembali lengthproperti

Ini diatur ~x/x.length**3!=-2962963kefalse

var crack_me = (x=0)=>{for(;~x/x.length**3!=-2962963;);}

var key = {toString:()=>"2962962",length:"1"}

crack_me(key)
console.log("stopped :)")

Prioritas operator

~ bitwise bukan yang pertama

** exponentiation kedua

/ division ketiga


6

Bash, Veedrac

LD_TRACE_LOADED_OBJECTS

Cobalah online!

Dari halaman ld.so(8)manual:

LD_TRACE_LOADED_OBJECTS

Jika disetel (ke nilai apa pun), menyebabkan program mencantumkan dependensi dinamisnya, seolah dijalankan oleh ldd(1), alih-alih berjalan secara normal.


Saya pikir ini akan bertahan lebih lama! Kerja bagus.
Veedrac

1
@ Veedrac: Saya kira karena Anda menentukan bash, tidak mungkin Anda akan menemukan yang terhubung secara statis (misalnya busybox?) /bin/yes, Tetapi itu mungkin, dalam hal ini env var ini akan diabaikan.
Peter Cordes

6

Mathematica, JungHwan Min

Unevaluated@Throw@"hammertime"

Tidak tahu apakah ini solusi yang dimaksudkan, tetapi ia meneruskan dalam ekspresi yang tidak dievaluasi sampai direferensikan sebagai #di dalam fungsi, yang akan menyebabkannya kembali dari fungsi segera tanpa melakukan evaluasi lebih lanjut. Anda dapat melihat bahwa fungsi tersebut sebenarnya dipanggil (alih-alih hanya melempar pengecualian bahkan sebelum memanggil fungsi) dengan mengubah fungsi menjadi:

#0[Print@"stop";#;$IterationLimit=∞]&

Yang memang akan mencetak stopsebelum melempar kesalahan.


Bingo! (Sebenarnya saya ingin Unevaluated[Abort[]], tetapi hal yang sama.)
JungHwan Min


5

Rubi

exit

tanpa baris baru. 3.send('exit')tentu tidak sama dengan 5, tetapi dijalankan Kernel#exit:

Memulai penghentian skrip Ruby dengan meningkatkan pengecualian SystemExit

Ini mungkin untuk memanggil exitpada 3 karena :

Modul Kernel disertakan oleh Object kelas, sehingga metodenya tersedia di setiap objek Ruby [sebagai metode pribadi].

abort juga berfungsi:

Hentikan eksekusi segera, secara efektif dengan memanggil Kernel.exit (false). Jika pesan diberikan, pesan itu ditulis ke STDERR sebelum diakhiri.


5

JavaScript (Node.js) , programmer5000

Sudah retak, tapi milik saya sedikit berbeda :) Tidak punya cukup perwakilan untuk berkomentar di polisi. Juga merasa bebas untuk mengedit untuk memperbaiki pemformatan, posting pertama saya di sini.

Terutama saya set __proto__sama dengan fungsi yang melempar. Diambil dari melihat halaman Mozilla untuk proto. (Maaf, perwakilan rendah, tidak dapat memposting tautan.)

x = {}
let No = function () { throw 'halted' }
x.__proto__ = new No()
f = x=>{while(x.__proto__);}

Cobalah online!

EDIT: Dapatkan beberapa perwakilan, jadi inilah tautannya: Mozilla__proto__


Saya mengomentari polisi untuk Anda.
Stephen

1
Terima kasih! Juga terima kasih untuk semuanya, kurasa aku bisa berkomentar sekarang!
Haumed Rahmani

1
Selamat datang di PPCG: D
Conor O'Brien


5

R, Jarko Dubbeldam

function(x)if(is.list(x))return(1)

Pertama kali berkontribusi apa pun, jadi sebutkan kesalahan yang saya buat dalam format.

Cukup yakin ini valid. Hanya penulisan ulang is.list (), kan?


Kebetulan, saya tidak memiliki perwakilan untuk mengomentari yang asli sehingga tangan akan dihargai jika itu valid.
CriminallyVulgar

Berkomentar untuk Anda.
TheLethalCoder

Bukan solusi yang dimaksudkan, tetapi berhasil. Kerja bagus.
JAD

5

Javascript, programmer5000

Panjang string maks

Menggunakan string dengan panjang kurang dari yang didukung mesin Anda. Saat menambahkan "h"ke string ini, kesalahan dilemparkan. Cobalah online!

function getAlmostMaxLenStr() {
  var prevBases = [];
  var base = "a";
  try {
    while(true) {
      prevBases.push(base);
      base += base;
    }
  } catch(e) {}
  for (var i = prevBases.length-1; i>=0; --i) {
    try {
      base += prevBases[i];
    } catch (e) {}
  }
  return base;
}
f(getAlmostMaxLenStr());

Blok asal silang

Sangat terinspirasi oleh jawaban dari @ jadkik94 , tetapi bekerja di mana-mana. Membuat iframe lintas asal, lalu melewati .contentWindowiframe tersebut. Ini gagal ketika fungsi mencoba menggunakan nilai karena keamanan lintas asal.

let f=x=>{
  try {
    console.log(x+"h"); // we don't want to lock up your browser, do we ;)
  } catch (e) { console.log("Halted!\n",e); }
}
let iframe=document.createElement("iframe");
const url = location.host.indexOf("google") === -1 ? "https://google.com" : "https://stackexchange.com";
iframe.src=url;
iframe.onload=a=>f(iframe.contentWindow);
document.body.appendChild(iframe);

Nilai primitif

Varian dari .toString()jawaban - ini hanya menggunakan toPrimitivesebagai gantinya. Ini mengembalikan objek sebagai nilai primitif, yang Javascript tidak tahu bagaimana menangani (sehingga melempar kesalahan). Cobalah online!

f({
  [Symbol.toPrimitive](){return {}}
});

Pekerjaan bagus, tapi tetap bukan solusi yang dimaksudkan! Sangat pintar!
programmer5000

4

Node.js, Adnan

{}dan {}atau 2 objek adalah dua input. Saya bahkan tidak mengerti bagaimana ini bekerja.

Inilah logika perbandingan objek menakjubkan JS:

console.log({} == {});
console.log({} === {});
console.log({} > {});
console.log({} < {});
console.log(!!{});

console.log({} >= {});
console.log({} <= {});


Yup, itu solusi yang dimaksudkan :)
Adnan


4

Javascript (BUKAN node.js) , programmer5000

Ini tidak dapat ditambahkan karena ia menciptakan objek yang tidak memiliki toString karena Setprototipe yang baru tidak melekat dari Object.

memasukkan:

new Set()

Cobalah online!


Ini mungkin solusi yang dimaksudkan, saya akan menyimpannya di dalam kepala saya mulai sekarang: P
Stephen

Maaf sepertinya ini tidak berhasil untuk saya? Cobalah online!
Haumed Rahmani

@HaumedRahmani menambahkan tombol coba online. Saya menggunakan laba-laba monyet, bukan babel.
Grant Davis

Bukan solusi yang dimaksudkan, tetapi pekerjaan yang bagus!
programmer5000



4

Python 2, Foon

__import__("os")._exit(0)

Apa yang tertulis di kaleng, pada dasarnya.

Cobalah online.


Cukup menarik, pada TIO kali ini untuk saya; di bawah Windows (khusus dengan winpty python inputbad.py dan menempelkan di baris), itu keluar seperti yang diinginkan ... dan ya, tidak mengejutkan schtict saya sedang mengeksploitasi "input di bawah Python 2 eval di bawah tenda" bit
Foon

@Foon Hmm, ini bekerja dengan baik pada TIO untuk saya. Lihat tautan sebagai jawaban.
Veedrac

Aneh ... Saya pasti telah menekan tombol play dan kemudian mengetik input pada tautan TIO saya dan tidak menyadarinya
Foon

Saya cukup yakin ini memecahkan setiap pengiriman python ..
enderland

@enderland Hanya jika mereka mengevaluasi input Anda, yang sebagian besar tidak.
Veedrac


4

Python 3, Siphor

Ini sangat menyenangkan. Kita perlu membuat type(x) != strlulus pemeriksaan, jadi kita perlu mengontrol nilai pengembalian type(). Kita harus mengganti __class__atribut dan menggantinya dengan objek kustom, yang meluas type, yang memiliki __ne__metode diganti dengan yang selalu mengembalikan false. Ini membuatnya lulus pemeriksaan tipe, tetapi pencarian akan gagal karena obukan str.

class m(type):
    def __ne__(a,b):
        return False
class c:pass
o=c()
o.__class__=m("",(c,),{})
f(o)

Selamat datang di situs ini! :)
DJMcMayhem

4

C #, TheLethalCoder

System.Nullable`1[[System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]

Atau kelas nullable lainnya.



3

JS (ES6)

"   "

Setiap karakter dengan kode kurang dari 10 harus berfungsi; Saya telah menggunakan tabkarakter di atas, yang dikonversi SE ke spasi.



Maaf :( ditambah saya pikir Anda perlu tanda kutip untuk itu menjadi string
Stephen

@ programmer5000, jadi saya melihat :(
Shaggy

Tidak masalah, @StepHen; sifat permainan. Saya mengambil kutipannya secara implisit, tetapi saya akan mengeditnya.
Shaggy

@ Shaggy Saya tidak tahu apa putusannya, tetapi f(<tab>)sintaksis yang valid (input kosong) dan kita harus membedakan antara f(1)dan f("1")lagi pula
Stephen



Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.