Gizli Ters Çevirmeler (Soyguncuların Konusu)


16

Bu bir bulmacası, polislerin iş parçacığını burada bulabilirsiniz.

Göreviniz, polislerin iş parçacığında, sol tersini gerçekleştiren sağlanan programların bir anagramını bulmak olacaktır.

Bir yanıtı kırdığınızda, çözümü aşağıdaki yanıt olarak gönderin ve orijinal yanıtlayıcıyı bilgilendirin.

İlk kırdığınız program sayısına göre puanlanacaksınız.

Yanıtlar:


21

Python 3, 46 bayt, Lynn

lambda x0223334566789:(x0223334566789*89)//178

"Orijinal cevaplayanı nasıl bilgilendiririm"?
GB

Cevabınızı orijinal üzerine bağlayan bir yorum
Sefa

f=
0 '

Bitti, çok çabuk kopyaladım.
GB

16
Burada aslında bir çözümü zorluyorum (ve hatta bir tane var olduğunu varsayarak) ve tüm problemi kaldırıyorsunuz! +1
orlp

14

Python 2, 225 bayt, orlp

p=90930641353124136621573325641513715557077985927835294018496194596645372722158;q=101979812089012306249375934082966806799688507587087308196267706260111970225882#--223444799
lambda n:pow(n,pow(65537,(p*q-2*(p+q))/4,p*q),~p*~q)

Sanırım bütün gün rastgele baş bölücüler tahmin ettikten sonra şanslıyım ...

(Varsayılan c4.8xlarge spot sınırı 4'tür, ancak geçen yıl 10'a çarpmayı başardım. FAAS yapılandırmasını 16 köleden 6'ya (+3 mpi, 1 master) değiştirmeliydim. 20m poliselect, 12h 50m eleme, 2h 25m linalg, 30m sq. Toplam maliyet ~ 70 $ En azından @orlp çözülebilir bir boyut alabilecek kadar güzeldi, ama bunu tekrar yapmıyorum! Son adım için @IlmariKaronen sayesinde ve evet şaka yapıyorum tahmin: P)


Ben .. Ne ... Şimdi ben kasıtlı hala makul küçük olacak bir boyut aldı ama çok yüksek bir maliyet saldırı :( para maliyet için kötü hissediyorum Aslında herkes bu para harcamak düşünmüyordu..
orlp

1
@orlp Tamamen benim için bir kerelik bir deneyim olarak buna değer. Umarım insanlar vahşi doğada 512 bit RSA güvenliği hakkında bir şeyler öğrenir :)
Sp3000

Bu sadece zaman değil para harcamak, golf gerçek bir özveri! Bir saldırganın, bulut bilgi işlem hizmeti denemeleri yoluyla 512 bit RSA'yı ücretsiz olarak bozabileceğini belirtmek ilginçtir.
mil

Eğer denemek isterse AWS'nin öğrenciler için kredisi olduğunu belirtmeliyim ve diğer hizmetler de aynısını yaparsa şaşırmam. Bu nedenle, muhtemelen en azından ilk kez bu deneme fikrinden uzak değilsiniz. (Birisi yine de denemek isterse - tamamlandıktan sonra tüm hacimleri, AMI'leri vb. Sildiğinizden emin olun çünkü aksi takdirde depolama için ücretlendirilirsiniz)
Sp3000

11

Python 2, 83 bayt, orlp

Orijinal:

#((()))****+,,---/2289;==oppppppqqqqqw~~
lambda n:pow(n,65537,10998167423251438693)

crack:

p=3207399658;q=3428998126#--11
lambda n:pow(n,pow(65537,(p*q-2*(p+q))/4,p*q),~p*~q)

Çevrimiçi deneyin!

RSA çatlaması Wolfram Alpha tarafından yapılmıştır . ;)


Az önce fark ettiğimden ~p*~qdaha kısa -~p*-~q.
orlp

Buna (p*q-2*(p+q))/4rağmen parçayı nasıl tersine mühendislik ettiniz ? :)
orlp

En zor kısmı buydu, değil mi? Temel olarak, Carmichael işlevi hakkında bilgi vep/2 ve q/2hem tek asal ve mevcut karakterleri kullanarak çalışacak bir şey bulmak için deneme yanılma bir demet idi.
Ilmari Karonen

Ben kasıtlı olarak seçti pve q(gerçek olanlar, kodda olan p-1ve q-1golf amaçlıdır) böyle (p-1)/2başbakan yani φ(φ(pq)) = ((p-1)/2-1)((q-1)/2-1). Bu, modüler tersi hesaplamamızı sağlar.65537φ(pq) Euler kimliğini kullanarak modun (RSA için neye ihtiyacımız olduğunu) , bu da cevabı çok daha kısaltır, çünkü modüler ters mantık veya hardcode'u başka bir büyük sabit uygulamamıza gerek yoktur. Dışında -~q*-~p-> ~q*~p, tam olarak benim işlev buldum :)
orlp

1
Aslında, küçük bir nit seçmek φ(φ(pq)) = 2((p-1)/2-1)((q-1)/2-1)için, güvenli asallara inanıyorum pve qçünkü φ(4) = 2. Ama λ(φ(pq)) = lcm(2, (p-1)/2-1, (q-1)/2-1)en fazla ((p-1)/2-1)((q-1)/2-1)/2, ve bunun katları, eksi bir, üs için yapacak. :)
Ilmari Karonen

7

Python 3, 80 bayt, Wolfram

from bisect import*
q=int(input())
print(bisect([(h+1)**2 for h in range(q)],q))

Bunu kırmak gerçekten zordu! Python 3 dağıtımında bulunan bisect kütüphanesini kullanıyorum . bisectFonksiyon sıralı bir liste ve bir öğe alır ve eleman düzeni korumak için yerleştirilebilecek en sağdaki dizini döndürür. Sadece ona qbaşlayan karelerin uzunluk listesini 1ve elemanını veriyoruz q.


1
Ben değişen önerecektim (h+1)için -~h. Sonra fark ettim ki bu meydan okuma bu değil: P
ETHproductions 20:17

@ETHproductions Operatör önceliği nedeniyle zaten yanlış olurdu.
Sp3000

@ Sp3000 Ha, Python'dan **daha yüksek önceliğe sahip olduğum hakkında hiçbir fikrim yoktu ~. Ben bu -~2**2sözdizimi hatası atıyor JS, daha iyi olduğunu düşünüyorum ("geçersiz kılsız tek ifade" ** "sol tarafında görünemez").
17'de ETHproductions

@ETHproductions Ekleyebileceğim gibi çoğu JS tasarımının çok karakteristik olmayan belirsizliklerinden kaçınmak için bunu yaptılar .
Esolanging Fruit

@ Challenger5 Aslında, orada seninle aynı fikirde olmam gerekecekti: Son yıllarda TC39, eklenen yeni özelliklerin ( **ES2017'de eklenen operatörü içeren) mümkün olduğunca tamamen belirsiz olduğundan emin olmak için son derece dikkatli olmuştur.
ETHproductions

6

Javascript, 21 bayt, Arnauld

orijinal

b=>Math.pow(b,torc=3)

çatlak

o=>Math.cbrt(o,pbw=3)

Küp kökünü döndürür.


İşte böyle! ;)
Arnauld

@Arnauld: JS'nin tanımlandıklarından daha fazla argümanla işlevleri çağırmanıza izin vermesi biraz garip buluyorum. Bunun arkasındaki düşüncenin ne olduğunu merak ediyorum.
17'de Emigna

6
Haklısın, JS tasarımla buna izin veriyor. Ek işlevler, işlev tarafından manuel olarak erişilebilen arguments nesnesinde saklandıkları için tamamen kaybolmaz .
Arnauld

5

7, 9 bayt, ais523

00000000: 0173 dc25 7e13 dcb6 1f                   .s.%~....

Çünkü kaba kuvvet her zaman kazanır ve 9! sadece 362880


4

Processing.js, 59 bayt, Kritixi Lithos

Orijinal:

float igetuwebaoli(int p){return p*(((17*-4*-3)))+0+0;}//,,

crack:

int loabewuteg(float p,i){return (i+0**+0,(p/17/(-4*-3)));}

Bu yeterince kolaydı. En zor kısım, fazladan virgüllerin ve yıldız işaretlerinin nereye yapıştırılacağını bulmaktı. Neyse ki, İşleme, C tarzı virgül ifadelerinin yanı sıra ekstra kullanılmayan işlev parametrelerine izin veriyor gibi görünüyor.


1
Anlaşılan bağladığım tercüman yanlıştı. Aslında, çevrimiçi tercümanların çoğu (hatta tümü) büyük olasılıkla yanlış olacaktır çünkü Processing-java Processing.js için önceden derlenmiştir. Şu anda en iyi hareket yolunun benim için olacağını ve yanıtlarımızı İşleme yerine "Processing.js" olarak değiştireceğinizi düşünüyorum, çünkü cevabınız geçerli olacaktır (Processing-java tonlarca hata veriyor). Processing-java ile aynı kodla ayrı bir cevap göndereceğim, ancak bunun için yuva yorumlayıcısı işleme.org'dan yüklemek olacaktır. Yine de aferin!
Kritixi Lithos

4

JavaScript (ES6), 63 bayt, SLuck49

Orijinal:

x=>eval(atob`eCp4KzEvLyAgfXBModLS4TvEn4wp1iys9YRRKC85KLIhNMC=`)

crack:

x=>eval(atob`CgpNYXRoLnBvdyh4LTEsMC41KSAvLw4589CEIKKMRefipyz=`)

Yukarıdaki base64 kodunun kodu:



Math.pow(x-1,0.5) //...

nerede ... bir yorumda olduğu için JS yorumlayıcısı tarafından göz ardı edilen bir grup rastgele çöp anlamına gelmektedir.

Bu çözümü deneme yanılma yoluyla buldum. Sonunda, sadece gerçekten zor kısmı düzgün dinlenme hattını telafi etmek ve almak için gereken kod başında iki yeni satırlar vardı Miçinde Mathorijinal karakter kümesinde mevcut bir şey haline base64 encode. İlk boşluk denedim, ancak " M"base64-kodlar içine "ICBN"ve daha sonra kodda Bkodlamak için sadece kullanılabilir gerekli ".po". "0+M", "1*M","1?M" Veya düşünebildiğim başka benzer hiçbir-op önekleri da işe yaramadı, ama yeni satırlar yaptı.

Bunun tam olarak amaçlanan bir çözüm olmayabileceğinden şüpheleniyorum, ama ne olursa olsun - işe yarıyor. :)

Demo:

var f = x=>eval(atob`eCp4KzEvLyAgfXBModLS4TvEn4wp1iys9YRRKC85KLIhNMC=`)
var g = x=>eval(atob`CgpNYXRoLnBvdyh4LTEsMC41KSAvLw4589CEIKKMRefipyz=`)
for (var i = -0; i <= 10; i++) console.log(i, '->', f(i), '->', g(f(i)))


İyi bir iş işe
yarayan

Etkileyici :) Aynı yaklaşımı aldım ama newline'ı denemeyi düşünmedim. Başka bir yerde bir C kaybetmeye çalışıyordum ama hiçbir yere gitmiyordum.
Chris M

3

Brain-Flak, 26 bayt, Buğday Sihirbazı

Orijinal (13 ekler)

((((()()())){}[()]){}{}{})

Çatlak (13 çıkartır)

([(((()())()){}){}{}](){})

3

J, 8 bayt, mil

[:]-:[+:

Basit takas +:için -:(yarısındaki için çift).


Ayrıca sağ ve sol fiilleri takas edebilirsiniz: [:[+:]-:.
randomra



3

JavaScript (ES6), 46 bayt, SLuck49

Orijinal (ln (x + 1) değerini hesaplar)

x=>Math.log(x+(+String(t=985921996597669)[5]))

çatlak

x=>Math[(lg=19979699+55686).toString(9+25)](x)

Tersinin Mathyerleşik olduğunu fark etmemiş olsaydım bunu asla kırmazdım . (lg=19979699+55686).toString(9+25)sadece geri dönüşün kıvrık bir yoludur "expm1".


Güzel yapılmış! Evet, ne kullanacağına, ne gördüğüne karar vermek için Math'daki işlevleri inceliyordum expm1ve "Bekle, bu bir şey mi?"
SLuck49

2

J, 10 bayt, mil

1%:@*~>:[<

Buraya bir şeyler yazmam gerekiyor çünkü cevap çok kısa.


2

J, 29 bayt, Zgarb

orijinal

5#.[:,(3 5&#:(-$]-)7)#.inv"0]

çatlak

[:(](07-5)"3 #.-:&#$,)5#.inv]

Çevrimiçi deneyin!

Başka bir çatlak eşdeğeri

[:((3 ]7-5)#.-:&#$,)5#.inv"0]

açıklama

[:(](07-5)"3 #.-:&#$,)5#.inv]  Input: integer n
                            ]  Get n
                      5        The constant 5
                       #.inv   Get the digits of n in base 5
[:(                  )         Operate on those digits D
                    ,            Flatten D (does nothing since it is already a list)
                  #              Get the length of D
               -:&               Halve it
                   $             Reshape D to half its length (only the base 2 digits)
    (07-5)"3                     The constant 2 with rank 3
             #.                  Convert the front-half of D to a decimal from base 2
   ]                             Return the right result

Evet, işe yarıyor! Benim çözümümden biraz farklı, ama çok fazla boşluk var. Temel mantık aynıdır.
Zgarb
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.