Durur mu? (Soyguncular)


46

Bu soyguncuların ipliği. Polislerin ipliği burada .

Buradaki zorluk, bir polisin gönderimini yarıda kesen bir giriş bularak çözmektir. Nedenini veya birden fazla varsa onu durduracak tüm girişleri veya polisin amaçladığı girişi sadece bir giriş yapacağını bilmek zorunda değilsiniz.

Bir gönderimi kırdıktan sonra, yorumda bir link gönderin veya polisin gönderisini düzenleyin. Ayrıca, gönderinizi polisin gönderiminde düzenlemesi için bir mod olarak işaretleyebilirsiniz. Ayrıca, kullanılan girdiyi ve bu konudaki cevabında polisin gönderisine bir link gönderin. En fazla başvuruları kıran hırsız kazanır.

Birden fazla kişi, farklı oldukları sürece aynı polis gönderiminde çatlaklar gönderebilir.

(SE, yinelenen yanıtınızı bir yoruma dönüştürürse, bu özellik isteğinde oy kullanmak isteyebilirsiniz )


Uncracked gönderimler mi arıyorsunuz?

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
Farklı anlamına gelen farklı girdiler (örneğin, 2 ile biten tüm girişler, polisin gönderisini kırdı mı - farklı kişilerin 2? İle biten farklı numaralar gönderebilir misiniz) veya farklı girdi aileleri veya farklı girdi türleri?
Stephen,

1
Birden fazla kişi aynı polis gönderisine çatlak gönderebilir ... Lütfen farklı tanımlayın .
Dennis,

Yanıtlar:


49

Malbolge, Kapı Tokmağı

Çevrimiçi deneyin (Teşekkürler Dennis !)

Windows için Giriş: F_⌠1234567890

ISO-8559-1 kullanarak Linux tabanlı sisteme giriş: F_ô1234567890

Malbolge programının nasıl çalıştığının kalbi, Malbolge tercümanının, 33 ile 126 arasında olmayan herhangi bir talimatla karşılaşırsa, sonsuz bir döngüye neden olan davranışına bağlı olmasıdır. tek bir talimat.

Tercümanı, programın bellek durumunu yürütme başlangıcında bırakacak ve programın yürütülmesi sırasında çalışacak olan op kodlarının bir listesini oluşturan 'normalize' kaynak kodunu üretecek şekilde değiştirdim. Bu bilgiyle (yavaşça) programın 13 girdi almasına rağmen gerçekten sadece ilk ve 3. girdilerin önemli olduğunu belirleyebilirsiniz.

Normalleştirilmiş kod ve bellek dökümü (ve hata ayıklayıcı yardım dokunuşuyla) inceleyerek şunları tasarladım:

a = op (giriş 1, 29524)

b = op (giriş 3, a)

c = op (486, b)

d = op (c, 37)

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

e 33 ile 126 arasında olmalıdır

Nerede opşartnamede açıklanan sözde tritwise "op" dir. Bu bilgiyi kullanarak olası girişleri tekrar eden basit bir program yazabilirsiniz (0 - 255) ve yukarıdaki kriterleri karşılayan tüm çözümleri bulur. 2219 olası çözüm bulmuştum, bunlardan bazıları muhtemelen çalışma çözümü olmayacak (gerekli karakterleri giremezsiniz). Spesifik olarak yukarıdaki girişler çözüme dayanmaktadır:

(Input 1 = 70, Input 3 = 244)


Polislerin gönderisine göre yorum yapacak bir temsilcim yok. Birisi benim için bunu yapabilir mi?
KBRON111

4
PPCG'ye Hoşgeldiniz! Aferin! Bence bu çatlak ile yakında yeterince temsilciniz olacak :)
Stephen

1
Ben genelinde yorum yaptı. Ve evet, mükemmel iş; Malbolge'ın haftaya kadar sürmesini bekliyordum!
Veedrac

6
İyi iş! TIO UTF-8 kullanıyor, ancak Bash'e sararak çatlamanız hala doğrulanabilir. tio.run/… Bu F_ôarada, hiçbir şeye ihtiyacınız yok .
Dennis,

1
Şimdi tekrar uyuyabilirim
Juan Tonina


13

JS (ES6), Juan Tonina

+0,-0

Object.isBulmak için biraz içeri girdi . Temelde, +0 === -0çünkü ===sayı olarak çek onları ve 0sonlu olmakla Object.isgörür +0ve -0farklı nesneler olarak. Çok akıllı polis :)

Çevrimiçi deneyin!


Ben giriş yaparken Ninja onu aldı.
user3033745

Kahretsin, kod hakkında düşünerek geçirdiğim zamandan daha hızlı çözüldü: 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)

Sadece programı sonlandırmak için gerektiği gibi davranması için eşitliği yeniden tanımladık.


Sanırım yeni tanımlayabildiğim __eq__halde raise...
g.rocket

Sadece dönen ile göndermek üzereydim 0: p
Jonathan Allan

@JonathanAllan Bu nasıl çalışır?
g.rocket

1
Oldukça emin class A:__eq__=lambda s,o:0ve sadece f(A())iş yapıyor.
Jonathan Allan

1
Ah evet olumsuzlamaya ihtiyacım var> _ <
Jonathan Allan


8

PHP, Sisifos

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

Parse_str işlevi boşlukları ve diğer karakterleri alt çizgi olarak değiştirir. Eğer bir dizi kapatmadan Array sınırlayıcı için kullanılırsa, bunu bir alt çizgi olarak değiştirir, ancak aşağıdaki boşlukları çevirmeme etkisi vardır (nedenini bilmiyorum).

Çevrimiçi deneyin!


O NE LAN?! Bu delilik ...
Veedrac

7

JavaScript (Node.js), Adnan

[]ve []iş gibi görünüyor. Ben de dahil olmak üzere bunlardan bir demet denedik null, undefined, NaN...

[] >= [] && [] <= [] && [] != [] doğru olarak değerlendirir.

Hikayenin ahlaki: JavaScript tuhaf .

Çevrimiçi deneyin!


Evet, diziler sadece nesnelerdir.
programmer5000

Ve bu tür karşılaştırmalar için nesneler dizgilere dökülür.
Conor O'Brien,

7

JavaScript (ES7), Arnauld

Standart

"8e7" çözüm

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

var key = "8e7"

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

Hile

Bu sayıyı hesaplamanıza gerek yok, lengthözelliği yeniden tanımlayabiliriz

Bu kümeler ~x/x.length**3!=-2962963içinfalse

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

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

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

Operatör önceliği

~ bitsel değil ilk

** exponentiation ikinci

/ division üçüncü


6

Bash, Veedrac

LD_TRACE_LOADED_OBJECTS

Çevrimiçi deneyin!

Gönderen ld.so(8)man:

LD_TRACE_LOADED_OBJECTS

Ayarlanırsa (herhangi bir değere ayarlanmışsa), programın ldd(1)normal çalışmaktansa, çalışmış gibi dinamik bağımlılıklarını listelemesine neden olur .


Bunun daha uzun süreceğini düşündüm! Harika iş.
Veedrac

1
@Veedrac: Bash belirttiğinizden beri, statik olarak bağlanmış (örneğin, meşgul kutusu?) Bulmanız pek /bin/yesmümkün değil, ancak bu env değişkeninin göz ardı edilmesi olasıdır.
Peter Cordes

6

Mathematica, JungHwan Min

Unevaluated@Throw@"hammertime"

Bunun amaçlanan çözüm olup olmadığına dair hiçbir ipucu yok, ancak #işlevin içinde olduğu gibi referans alınana kadar değerlendirilemeyen bir ifadeden geçiyor , bu da başka bir değerlendirme yapmadan hemen işlevden geri dönmesine neden olacak. İşlevin gerçekten değiştirildiğini görebilirsiniz (işlevi çağırmadan önce sadece istisna atmak yerine):

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

Hangi gerçekten stophata atmadan önce yazdıracak .


Bingo! (Aslında Unevaluated[Abort[]], ama aynı şey için gidiyordum .)
JungHwan Min


5

Yakut

exit

Newline olmadan 3.send('exit')elbette eşit değil 5, ama yürütür Kernel#exit:

SystemExit istisnasını yükselterek Ruby komut dosyasının sonlandırılmasını başlatır.

Bu çağrı mümkündür exitüzerine 3 çünkü :

Çekirdek modülü, Object sınıfına dahil edilmiştir, bu yüzden yöntemleri, her Ruby nesnesinde [özel yöntemler] kullanılabilir.

abort ayrıca çalışır:

Yürütmeyi derhal etkin bir şekilde Kernel.exit (false) olarak arayarak sonlandırın. Eğer msj verilirse, sonlandırmadan önce STDERR'ye yazılır.


5

JavaScript (Node.js) , programcı5000

Zaten çatlak, ama benimki biraz farklı :) Polisler hakkında yorum yapmak için yeterli temsilciniz yok. Ayrıca biçimlendirmeyi düzeltmek için düzenleme yapmaktan çekinmeyin, buradaki ilk gönderim.

Temelde __proto__atan bir işleve eşit ayarlayın . Proto için Mozilla sayfasına bakmaktan alınmıştır. (Üzgünüz, düşük rep, bağlantı gönderemiyorum.)

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

Çevrimiçi deneyin!

EDIT: Bazı temsilcisi var, işte bağlantı: Mozilla__proto__


Polise senin için yorum yaptım.
Stephen

1
Teşekkürler! Ayrıca tüm üyeler için teşekkürler, şimdi yorum yapabilirim sanırım!
Haumed Rahmani,

1
PPCG'ye Hoş Geldiniz: D
Conor O'Brien


5

R, Jarko Dubbeldam

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

İlk defa bir şeye katkıda bulunmak, bu yüzden formatta yaptığım tüm hataları söyleyin.

Bunun geçerli olduğuna eminim. Sadece bir yeniden sarma is.list (), değil mi?


Bu arada, orijinal hakkında yorum yapacak bir temsilcim yok, bu yüzden eğer geçerli olursa bir el takdir edilebilir.
CriminallyVulgar

Senin için yorum yaptı.
TheLethalCoder

Amaçlanan çözüm değil, işe yarıyor. Aferin.
JAD,

5

Javascript, programcı5000

Maksimum dize uzunluğu

Motorunuzun desteklediğinden daha kısa bir uzunlukta bir dize kullanır. "h"Bu dizgeye eklerken bir hata atılır. Çevrimiçi deneyin!

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());

Köken öbek bloğu

@ Jadkik94 tarafından verilen cevaptan çok esinlenmiştir , ancak her yerde çalışır. Çapraz kökenli bir iframe oluşturur, ardından .contentWindowbelirtilen iframe'den geçer . Bu, işlev çapraz kaynak güvenliği nedeniyle değeri kullanmaya çalıştığında başarısız olur.

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);

İlkel değer

.toString()Cevapların varyantı - bu sadece toPrimitivebunun yerine kullanır . Bir nesneyi, Javascript'in nasıl işleneceğini bilmediği ilkel değer olarak döndürür (bir hata atar). Çevrimiçi deneyin!

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

Güzel iş, ama yine de çözüm amaçlı değil! Çok zeki!
programmer5000

4

Node.js, Adnan

{}ve {}veya herhangi bir 2 nesne iki girdidir. Bunun nasıl çalıştığını bile anlamadım.

İşte JS'nin şaşırtıcı nesnesi mantık karşılaştırması:

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

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


Evet, bu amaçlanan çözümdü :)
Adnan


4

Javascript (NOT node.js) , programcı5000

Bu eklenemez, çünkü tostring Setiçermeyen bir nesne oluşturur, çünkü yeni bir prototip doğurmaz Object.

giriş:

new Set()

Çevrimiçi deneyin!


Muhtemelen amaçlanan çözüm buydu, bundan sonra kafamın çantasında saklayacağım: P
Stephen

Üzgünüm bu benim için işe yaramıyor mu? Çevrimiçi deneyin!
Haumed Rahmani,

@HaumedRahmani bir deneme çevrimiçi düğmesi ekledi. Örümcek maymunu kullandım, babil değil.
Grant Davis

Amaçlanan çözüm değil, ama güzel iş!
programmer5000



4

Python 2, Foon

__import__("os")._exit(0)

Temelde teneke ne diyor.

Çevrimiçi deneyin.


İlginçtir ki, TIO'da bu benim için zaman aşımına uğradı; Windows altında (özellikle winpty python inputbad.py ve çizgide yapıştırma ile), istenildiği gibi çıkıyor ... ve evet, şaşırtıcı bir şekilde benim schtict'im "Python 2 altındaki girdi başlık altında değerlendiriliyor" bitini kullanıyordu
Foon

@ Foon Hmm, benim için TIO üzerinde iyi çalışıyor. Cevaptaki bağlantıya bakınız.
Veedrac

Tuhaf ... Çalma oyununu izlemeli ve TIO bağlantımdaki girişi yazmalı ve bunu fark etmemiş olmalıyım
Foon

Bunun her python gönderimini
kırdığına eminim

@enderland Yalnızca girişinizi değerlendirirse, ki bunların çoğu yapmaz.
Veedrac


4

Python 3, Siphor

Bu komikti. Biz yapmak gerekir type(x) != strbiz dönüş değerini kontrol gerekir, böylece çek pas type(). __class__Özniteliği geçersiz kılmalı ve onu her zaman yanlış döndüren bir yöntemle değiştiren type, genişleyen özel bir nesneyle __ne__değiştirmeliyiz. Bu, tür kontrolünü geçmesini sağlar, ancak ostr olmadığından arama başarısız olur .

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

Siteye Hoşgeldiniz! :)
DJMcMayhem

4

C #, TheLethalCoder

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

Veya başka bir nULL olabilecek sınıf.



3

JS (ES6)

"   "

10'dan küçük kodlu herhangi bir karakter çalışması gerekir; tabSE'nin boşluklara dönüştürdüğü bir karakter kullandım .



Üzgünüz :( plus Bunun bir dize olması için etrafında alıntılara ihtiyacınız olacağını düşünüyorum
Stephen

@ programmer5000, bu yüzden görüyorum :(
Shaggy

Hiç sorun değil, @StepHen; Oyunun doğası. Örtük olmak için teklifleri aldım, ancak onları düzenleyeceğim.
Shaggy

@Shaggy Kararın ne olduğunu bilmiyorum, ama f(<tab>)geçerli bir sözdizimi (boş girdi) f(1)ve f("1")yine de arasındaki farkı ayırt etmemiz gerekiyor
Stephen



Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.