Bu program yazdırılamayan karakterlerle dolu, bu yüzden burada bir hexdump:
00000000: 2573 dc01 7e13 dcb6 1f %s..~....
Not: Bu, negatif sayıları giremeyen sayısal bir giriş yordamı kullanır, bu nedenle bu gönderim yalnızca negatif olmayan tamsayılarla sınırlıdır.
Polis ve soyguncunun karşılaştığı zorluklarla ilgili bir sorun , kodun açıklamalarını yazmamanızdır (kırılmasını zorlaştırmak için). Öte yandan, bu, benim başımın belaya girmesine gerek olmadığı anlamına geliyor.
Dil olarak 7'yi seçtim çünkü özellikle sıkıştırılmış gösterimde, okuması oldukça zor ve neden yazılan 8 bitlik programlarda gezinmekle başa çıkmak zorunda olanların sadece benim olması gerektiğini anlamıyorum . 3 bit kodlama. İyi şanslar!
açıklama
Şimdi programın kırıldığına göre (kaba kuvvetle, ne yazık ki; bu kısa çözümlerde her zaman bir tehlikedir), ne aldığımı da açıklayabilirim. Bu aslında programı okuyarak çözülebilirdi; Bunu çok daha zorlaştırabilirdim, ama kaba kuvvet çatlakları olduğunda kötü bir fikir gibi geldi.
Programı daha doğal bir kodlamayla temsil ederek başlayacağız. ; Her zamanki gibi, kalın sayılar (bir programda Temsil değildir hepsi hemen çalışır komutları gösterir 6
ve 7
ancak 2
etmek 5
, unbolded sayılar onların kaçtı eşdeğerleri (temsil değildir) 0
için 5
orijinal programda Temsil bunların tümü; notu bu 0
bir kaçtı 6
ve 1
kaçtı 7
):
112 7 1 7 34002 77 023 67 13303
7 program kaynağında mevcut olan komutlar dizisi, temelde sadece orijinal yığını temsil eden bir hazır bilgi olduğu anlamına gelir (sadece kaçan komutlarla yapabileceğiniz başka hiçbir şey yoktur 6
ve 7
). Yani bir programın yapacağı ilk şey, yığına bir sürü şey itmek. Programın çalışmasından sonra yığının nasıl göründüğü aşağıda açıklanmaktadır ( |
7'de her zamanki gibi yığın öğelerini ayırır):
772 | 7 | 34662 | 023 | 73363
Son yığın elemanı daha sonra çalıştırılacak kod (yığın üzerinde kalırken) olmak üzere kopyalanır. Olduğu gibi, bu kodun programın tek kısmı; her şey sadece veridir. İşte onun için çevirdiği şey:
73363
7 Yığına boş bir eleman itin
3 Üst yığın elemanını çıkarın , elemanı aşağıdan atın
73 Bunların birleşik etkisi: üst yığın elemanını atın
3 Üst yığın elemanını çıkarın, elemanı aşağıdan atın
6 Üst yığın elemanından kaçın, sonra Aşağıdaki elemana ekle
3 Üst elek elemanını çıkar, aşağıdaki elemana at
Başka bir deyişle, bu çoğunlukla sadece bir grup I / O talimatıdır. Bunu detaylı olarak inceleyelim:
73
73363
hala yığının en üstünde olanı atar .
3
çıktılar 023
ve atar 34662
. Böylece 34662
, programın diğer sürümünde ihtiyaç duyulan baytları depolamak için kullanılan bir yorum olduğu görülebilir . 023
Çıktı ne zaman gelince, G / Ç formatı 0'ı (tamsayılar) seçer, daha sonra 23
uygulamanın bir tamsayı girmesini isteyen bir yönergedir (7'de, giriş isteyen özel kodlar yazarak giriş yaparsınız). Girdi, aşağıdaki yığın elemanının kopyaları yapılarak yapılır, örneğin giriş tamsayısı 10 ise, bir sonraki yığın elemanı (şu anda 7
) olacaktır 7777777777
. Bu nedenle, kullanıcıdan girdiyi ondalık olarak kabul ediyoruz, ancak birleşik olarak depolanıyor.
6
üst yığın elemanının kaçar (her bir örneğini değiştirmek 7
için 1
, tamamen oluşan şeritler bu olduğunu 7
s öncelenir), daha önce yığın elemanı için ekler ( 772
). Yani verilerimiz artık bir şeylere benziyor 7721111111111
.
- Son olarak, söz
3
konusu yığın öğesini çıkarır (ve varsayılan başlangıç yığınının parçası olan boş bir yığın öğesi çıkar). Onun değeri sayısını alınarak hesaplanır 1
s ve 7
s ve sayısını çıkararak 0
s ve 6
s. ( 2
Ortada çoğu durumda yoksayılır; dizenin sonunda ise yok sayılmak yerine izleyen bir yeni satır olur, ancak PPCG kuralları bunu önemsemez.) Bu nedenle çıktı orijinaldir giriş artı 2.
Bu noktada, yığında yararlı bir şey yoktur ve programdaki hiçbir şey yoktur, bu yüzden program sona erer.
Bunu nasıl tersine çeviririz? Bu değişen basit bir mesele 11
için 00
biz doğrusu yüksek 2'den, bu 2 alt hale girişine karakterleri prepending ediyoruz böylece. Bir var 00
elverişli gizli sekiz sekizlik rakam biz takas basitçe yapabilirsiniz programında (şimdiye sekizlik rakam ve bayt birbirleri ile bir hizaya), bu yüzden ilgili daha 11
başlangıcında.