Bu yorumdan ilham alan ...
Kullanıcılara, adım önce göndermeden önce bu zorluğun özelliklerini sağlamlaştırmama yardımcı oldukları için Adım Tavuk , Buğday Sihirbazı ve Dennis'i sağlayın!
Bu, Polislerin konusu. Robbers'ın ipliği için buraya gidin
Gelen bu meydan , kendi dil artık bir programlama dili olma bizim ölçütlerini karşılayan böylece yapan bazı kod çalıştıran görevli bulunmaktadır. Bu zorlukta, bu dilin artık yapamayacağı şekilde yapmak anlamına gelir ...
Sayısal giriş ve çıkış al
Birlikte iki sayı ekle
Belirli bir sayının asal olup olmadığını sınayın.
Bu, iki farklı amaç için iki farklı zorluğun olduğu polisler ve soyguncular mücadelesidir: Polisler , dili çoğunlukla kullanılmaz kılan bazı kodlar yazmaya çalışacak ve soyguncular , polislere izin veren gizli geçici çözümü bulmaya çalışacaklardır. dillerini kurtarmak için.
Bir polis olarak iki kod snippet'i yazmalısınız:
Dilinizi çoğunlukla kullanılamaz hale getiren, örneğin giriş / çıkış ve sayısal işlemleri yapmak için yerleşik işlevleri kaldırarak. Ne kadar çok özellik çıkarırsanız, o kadar iyidir. Bu kod edilir değil çökmesine veya çıkış izin verdi. Bu snippet'in sonuna kod eklemek mümkün olmalı ve bu kod değerlendirilecektir . Ve...
... iki negatif olmayan tam sayıyı girdi olarak alan, bunları bir araya getiren ve toplamlarını veren bir kod snippet'i. Bu pasajın, birinci pasajı çalıştırdıktan sonra bile hala doğru çalışması gerekir. İki snippet birlikte kullanıldığında, iki sayı ekleyen tam bir program oluşturmaları veya iki sayı ekleyen bir işlev tanımlamaları gerekir. İdeal olarak, bu pasajın bulunması daha zor olması için çok belirsiz davranışlara dayanmalıdır.
Herhangi bir standart giriş ve çıkış yöntemini seçebilirsiniz . Ancak, tam olarak hangi formatı (giriş ve çıkış) kullandığınızı göstermelisiniz. Bir hırsız, seninle aynı biçimi kullanmadıkça cevabını kıramaz.
Bu iki parçacığın her ikisini de yazdıktan sonra, ikincisini açıklamadan ilkini cevap olarak göndermelisiniz. Cevabınız aşağıdaki bilgilerin tümünü içermelidir:
Birinci kısmı (tabii ki ikinci değil).
Dil (küçük sürümler de dahil olmak üzere, çoğu başvuru muhtemelen garip kenar davalarına dayanacaktır)
Bir fonksiyon mu yoksa tam program mı olduğu dahil olmak üzere IO formatı. Soyguncular , çatlaklarının geçerli olması için aynı formatı kullanmalıdır.
Cevabınızın çalışması için gereken garip kenar durumları. Örneğin, sadece Linux üzerinde çalışır veya bir İnternet bağlantısı gerektirir . Açıkçası, bu biraz subjektiftir, ancak bir polisin çatlamasını önleyen bazı aşırı uç vakalara sahipse, ve o zaman bunu yalnızca güvende olduktan sonra ortaya çıkarırsa, bu zayıf sporculuğu düşünüyorum. Potansiyel bir soyguncu, cevabınızı kırılmadan önce kırmak için gerekli tüm bilgilere sahip olmalıdır .
Cevabınız güvende olana kadar bayt sayınızı açıklamanıza gerek yoktur.
İşte bir örnek. İlk snippet için aşağıdaki Python 3 programını gönderebilirsiniz:
Python 3
print=None
STDIN'den girdi alır ve STDOUT'dan çıktı alır
Ve sonra ikinci snippet'iniz olarak şunları yazabilirsiniz:
import sys
a,b=int(input()),int(input())
sys.stdout.write(a+b)
Bu geçerlidir, çünkü giriş olarak iki sayı alacaktır ve iki parçacığı birleştirseniz bile toplamlarının çıktısını alacaktır, örn.
print=None
import sys
a,b=int(input()),int(input())
sys.stdout.write(a+b)
Ancak, bir soyguncunun çözüm bulması son derece kolay olacaktır. Bu, çözülmesi çok kolay olacağından, bu özel yaklaşımı şu şekilde düzeltmeye çalışabilirsiniz:
import sys
sys.stdout=None
print=None
Bununla birlikte, bunun bile çok kolay bir çözümü vardır:
del print
a,b=int(input()),int(input())
print(a+b)
Bir polis olarak amacınız, soyguncuların onu bulmasını engellemek için gizli geçici çözümü mümkün olduğunca belirsiz hale getirmektir.
Soyguncular cevaplar biri bakmak ve onu kırmak için çalışacaktır. Snippet 2 olarak çalışabilecek herhangi bir geçerli snippet yazarak kırabilir (dil çoğunlukla kullanılamaz hale getirildikten sonra iki sayı ekleyerek). Bu, başlangıçta tasarladığınız aynı snippet olmak zorunda değildir . Bir soyguncunun cevabını kırması durumunda, cevabınıza bir yorum bırakacaklardır ve daha sonra kırıldığını belirtmek için düzenlemelisiniz. Yayınınız çatlamışsa, cevabınızı, orijinal olarak tasarladığınız çözümü (pasaj 2) göstermek için düzenlemelisiniz. Bu başlı başına bir kural değildir , sadece oyunu eğlenceli kılmak için dostane bir öneri. Zorunda değilsin.
Bir hafta boyunca bir cevap hala açık kalırsa, ikinci snippet'inizde düzenleme yapabilir ve cevabınızın şimdi güvenli olduğunu belirtebilirsiniz . Hafta bittikten sonra düzenleme yapmazsanız, diğer kullanıcılar siz bunu yapana kadar hala başarabilirler. İkinci snippet'inizi açığa çıkarmazsanız, cevabınız için puan talep edemez veya güvenli olarak arayamazsınız.
Polislerin iplik kazanan kısa güvenli cevaptır hem snippet'ların da byte olarak sayılır ve bu cevap olacak yeterli süre geçtikten sonra kabul edilmeyecektir. Sen do not cevap güvende olana kadar bayt sayısı puanınıza alakasız beri Cevabınız, güvenlidir kadar bayt sayısını ortaya çıkarmak gerekir. Yeterli zamanın geçmesi ve hiçbir cevabın kırılmaması durumunda, kazanan en uzun süre boyunca çatlak olarak kalmamış olan cevap olacaktır.
İyi eğlenceler!
Kural açıklamaları
İlk snippet, herhangi bir giriş yapmadan düzgün şekilde çalışmalıdır . İstediğiniz şekilde çıktı verebilir ve bu çıktı yoksayılır - snippet yapıldıktan sonra, ikinci snippet düzgün çalışır.
Cevabınızın geçerli olması için ikinci pasajın gerçekten yürütülmesi gerekiyor. Bu gibi bir cevap anlamına gelir
import sys sys.exit()
geçerli değil çünkü dili bozmuyor. Bu sadece sonlandırılıyor. Benzer şekilde, sonsuz bir döngüye girmek geçerli değildir, çünkü ikinci snippet hiçbir zaman yürütülmeyecektir.
Güvende olduktan sonra, puanınız her iki snippet'in bayt sayısıdır .
Bu kadar uzanır çalışmak Cevabınız için gerekli her türlü garip sınır durumları ortaya Lütfen Gönderdiğiniz yeterli bilgi içermesi gerekir ... önce tekrarlanabilir olması açığa çıkmalarını sonra gün ışığına çıkarılıyor. Bu, cevabınız güvende olursa ve sonra da düzenlemeyi yaptığınız anlamına gelir: İşte cevabım. Oh, BTW bu sadece Solaris'te çalıştırıyorsanız çalışır, şaka size! Cevabınız geçersiz ve silinecek ve kazanmaya uygun kabul edilmeyecektir.
İkinci snippet toplamı çıkardıktan sonra çökmesine izin verilir - çıkış hala doğru olduğu sürece (örneğin, STDERR'ye çıkış yapmayı seçerseniz ve sonra bir sürü çökme bilgisi alırsanız, bu geçersizdir).
Bir cevap gönderdikten sonra kodunuzu düzenleyemezsiniz.
Şifreleme, karma işlevler, CSPRNG'ler vb. Gibi şifreleme işlevlerine güvenemeyebilirsiniz.
int main(){ do_evil_stuff(); }
kullanıcı kodu nereye gitmeli? Bir fonksiyonda mı? Tüm ifadelerden sonramain
?