Giriş:
Bir zamanlar çocukken derlediğim bir belgede saklanan birçok farklı şifrem var, zorluklar için en uygun olduğunu düşündüğüm birkaç tanesini (çok önemsiz ve çok zor değil) seçtim ve onları zorluklara dönüştürdüm. Birçoğu hala sanal alanda ve hepsini mi yoksa sadece birkaçını mı göndereceğimden henüz emin değilim. Ama işte bunlardan ilki olan ilk kişi.
Bir Bilgisayar Şifresi, verilen metni belirli bir 'rastgele' karakter gruplarına şifreleyecektir length. Böyle bir grup bir rakam içeriyorsa, şifrelenmiş karakter için kendi grubunu dizine eklemek için bu rakamı kullanır. Grupta hiçbir rakam yoksa, bu ilk karakterin kullanıldığı anlamına gelir.
Örneğin, metnin this is a computer cipherbelirli bir uzunluğunu şifrelemek istediğimizi varsayalım 5. Bu potansiyel bir çıktıdır (not: sayılar aşağıdaki örnekte 1 dizinlenmiştir):
t h i s i s a c o m p u t e r c i p h e r (without spaces of course, but added as clarification)
qu5dt hprit k3iqb osyw2 jii2o m5uzs akiwb hwpc4 eoo3j muxer z4lpc 4lsuw 2tsmp eirkr r3rsi b5nvc vid2o dmh5p hrptj oeh2l 4ngrv (without spaces of course, but added as clarification)
Grubun nasıl deşifre edileceğini açıklamak için birkaç grubu örnek olarak ele alalım:
qu5dtBu grup, bir basamak içeren5bu grubun (1-endeksli) 5. karakter şifresi çözülmüş metin için kullanılan bir karakter, yani:t.hprit: Bu gruptaki ilk karakteri şifresi çözülmüş metin için dolaylı kullanılır Bu gruba hiçbir basamak içerir:h.osyw2Bu gruplar, bir basamak içeren2bu grubun (1-endeksli) 2. karakter şifresi çözülmüş metin için kullanılan bir karakter, yani:s.
Meydan okuma:
Bir tamsayıyı verilen lengthve dize word_to_encipherbir çıkış, rasgele , yukarıda tarif edildiği gibi şifrelenmiş dize.
Yalnızca verilen encipher zorunda lengthve word_to_enciphergerek de bir deşifre programı / fonksiyonu oluşturmak, böylece. Ancak gelecekte deşifre için bir bölüm 2 meydan okuma yapabilir.
Zorluk kuralları:
lengthAralıkta olacağını varsayabilirsiniz[3,9].- Vasiyetnamenin
word_to_enciphersadece harf içerdiğini varsayabilirsiniz . - Tam küçük harf veya tam büyük harf kullanabilirsiniz (lütfen yanıtınızda hangisini kullandığınızı belirtin).
- Çıktılarınız, her grup ve bir gruptaki (varsa) basamakların konumları eşit olarak rastgele olmalıdır . Yani alfabenin tüm rastgele harfleri aynı olma şansına sahiptir; şifrelenmiş mektubun her gruptaki konumu aynı olma şansına sahiptir; ve basamağın konumu aynı olma şansına sahiptir (ilk karakter olduğu ve hiçbir basamağın bulunmadığı durumlar hariç ve açıkça şifrelenmiş karakterle aynı konumda olamaz).
- Ayrıca, 1 dizinli yerine 0 dizinli rakamlar kullanmanıza izin verilir. Lütfen yanıtınızda kullandığınız ikisinden hangisini kullandığınızı belirtin.
- Rakam
1(veya00 dizinli olduğunda) çıkışta hiçbir zaman mevcut olmaz. Yanib1ndhkarakteri 'b' şifrelemek için geçerli bir grup değil. Bununla birlikte,b4tbwburada, geçerlidir4şifrelemektedirb4. (1-endeksli) konumu ve diğer karakterb,t,w(tesadüfen aynı zamanda içeren rasgeleb). Diğer olası geçerli gruplarlength: 5 karakteri 'b' olan şifrelemek içinabcd2,ab2de,babbk,hue5b, vb
Genel kurallar:
- Bu kod golf , bayt en kısa cevap kazanır.
Kod golf dillerinin, kod yazmayan dillerle yanıt göndermenizi engellemesine izin vermeyin. 'Herhangi bir' programlama dili için mümkün olduğunca kısa bir cevap bulmaya çalışın. - Varsayılan I / O kuralları ile cevabınız için standart kurallar geçerlidir , bu nedenle STDIN / STDOUT, fonksiyonlar / yöntem, uygun parametreler ve dönüş tipi, tam programlar ile kullanılabilir. Çağrınız.
- Varsayılan Loopholes yasaktır.
- Mümkünse, lütfen kodunuz için bir test içeren bir bağlantı ekleyin (örn. TIO ).
- Ayrıca, cevabınız için bir açıklama eklemeniz şiddetle tavsiye edilir.
Test senaryoları:
Input:
Length: 5
Word to encipher: thisisacomputercipher
Possible output:
qu5dthpritk3iqbosyw2jii2om5uzsakiwbhwpc4eoo3jmuxerz4lpc4lsuw2tsmpeirkrr3rsib5nvcvid2odmh5phrptjoeh2l4ngrv
Input:
Length: 8
Word to encipher: test
Possible output:
ewetng4o6smptebyo6ontsrbtxten3qk
Input:
Length: 3
Word to encipher: three
Possible output:
tomv3h2rvege3le
abcd2, ab2de, babbkhepsi aynı? Ayrıca b1akkgeçerli mi?
b1akkhayır derdim. Açıklığa kavuşturmak için meydan açıklamasında düzenleyecektir. İlk karakter şifrelenmişse, hiçbir rakam olmamalıdır.
"a??"676 olası sonuçları vardır, ama "1a?", "?a1", "2?a", "?2a", only104 sonuçları vardır. Yani, tüm bu 780 sonuçlardan bir sonuç seçmeye çalışıyorsam, "şifrelenmiş mektubun konumu" dağılımı 13: 1: 1, 1: 1: 1 değil. Ve bunu "tekdüze rastgele" nasıl çalıştığını düşünürüm.