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>

programmer5000
sumber
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
@NoOneIsHere codegolf.meta.stackexchange.com/q/13437/58826
programmer5000

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)

KBRON111
sumber
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
16

JavaScript (di Browser)

document.all

Ini palsu, secara mengejutkan

Sunting: mengapa document.allfalsy ?

Juan Tonina
sumber
4
Saya tidak dapat berkata-kata.
Dennis
3
Aahh ... javascript, di mana semuanya aneh
Juan Tonina
1
Iya! Itulah satu-satunya jawaban yang benar di sini!
tsh
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!

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

g.jaket
sumber
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!

Vicente Gallur Valero
sumber
WTF ?! Itu gila ...
Veedrac
7

JavaScript (Node.js), Adnan

[]dan []sepertinya berhasil. Saya mencoba banyak dari mereka termasuk null, undefined, NaN...

[] >= [] && [] <= [] && [] != [] mengevaluasi ke true.

Moral dari cerita: JavaScript itu aneh .

Cobalah online!

benar-benar manusiawi
sumber
Yap, array hanyalah objek.
programmer5000
Dan objek dilemparkan ke string untuk jenis perbandingan ini.
Conor O'Brien
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

Евгений Новиков
sumber
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.

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

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

Retina , PunPun1000

11111

Cobalah online!

Setiap input dengan n 1 s di mana jumlah pembagi dari n + 1 sama dengan n +1 harus bekerja.

Kritixi Lithos
sumber
Senang melihat seseorang mendapatkan solusi yang dimaksudkan
PunPun1000
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.

Eric Duminil
sumber
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__

Haumed Rahmani
sumber
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?

Kriminal kriminal
sumber
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 {}}
});
Birjolaxew
sumber
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({} <= {});

programmer5000
sumber
Yup, itu solusi yang dimaksudkan :)
Adnan
4

JavaScript (Babel Node) , Conor O'Brien

(Repost, secara tidak sengaja dimasukkan ke dalam polisi.) Tidak yakin apa yang dimaksudkan tetapi desimal positif yang tidak besar semuanya bekerja.

Kurasa aku masih belum bisa berkomentar di Polisi.

f(0.1)
console.log('done')

Cobalah online!

Haumed Rahmani
sumber
Lupa tentang itu juga, bagus.
Conor O'Brien
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!

Grant Davis
sumber
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

Bash 4.2, Dennis

PATH=1

Jelas bukan solusi yang dimaksudkan, karena ia bekerja pada bash yang lebih baru juga.

Cobalah online.

Veedrac
sumber
4

Python 2, Foon

__import__("os")._exit(0)

Apa yang tertulis di kaleng, pada dasarnya.

Cobalah online.

Veedrac
sumber
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)
ebopalisesy
sumber
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.

Luc
sumber
3

Retina

Baris baru diikuti oleh 1karya. Saya segera menemukannya.


1

Cobalah online

mbomb007
sumber
Ninja'd semenit
Kritixi Lithos
@Cowsquack Pertanyaannya mengatakan beberapa retakan untuk pos polisi yang sama diizinkan.
mbomb007
Saya tahu saya seharusnya menghapus baris baru dari input sebagai langkah pertama
PunPun1000
3

JS (ES6)

"   "

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

Shaggy
sumber
Ninja'd
programmer5000
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
3

JavaScript (ES6), programmer5000

"\0"

Cobalah online!

Kondisinya sudah !x||x>="\n". Setiap char tunggal dalam tabel ASCII dengan kode kurang dari \nakan berfungsi.

Stephen
sumber
Ya, saya pikir ini dia, tidak yakin ...
tuskiomi
3

Pertanyaan, Langkah Hen

Apa pun diikuti oleh spasi dan bilangan bulat positif. Ruang memisahkan input, dan input ekstra menjadi jumlah istilah untuk output.

Cobalah online!

PurkkaKoodari
sumber
Saya baru saja memposting a 1! You ninja'd me: /
Mr. Xcoder
@ Mr.Xcoder Saya mengetik ini di ponsel, berharap tidak ada yang mau ninja saya: P
PurkkaKoodari
3

MATL , Luis Mendo (bukan solusi yang dimaksudkan)

Input kosong menghentikan program dan menemukan kesalahan berikut:

input: membaca input pengguna gagal!

Cobalah online!

Tuan Xcoder
sumber