Saat (harf çevirisi) Şifre


12

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. İşte üçüncü ve en kolay olanı ( daha önce yayınladığım Bilgisayar Şifresi ve Trifid Şifresinden sonra ).


Saat Şifresi ile metni şifrelemek için aşağıdaki resmi kullanırız:

resim açıklamasını buraya girin
Yani şöyle bir cümle this is a clock cipherolur:

t  h i s     i s     a     c l  o  c k     c i p  h e r    (without additional spaces of course, but added as clarification)
19:7:8:18:00:8:18:00:AM:00:2:11:14:2:10:00:2:8:15:7:4:17

Meydan okuma:

Bir dize verildiğinde sentence_to_encipher, yukarıda açıklandığı gibi şifreleyin.

Zorluk kuralları:

  • İrade sentence_to_encipheryalnızca harf ve boşluk 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).
  • Sen tek haneli şifreli mektuplar için baştaki sıfırları eklemek için izin verilmez byoluyla j, ancak iki sıfır 00alanlar için zorunludur.
  • :Ayırıcı olarak kullanmalısınız ve ek bir satır aralığı veya sondaki izlemeye :izin verilmez.
  • Sen kullanımı küçük harfe izin verilir amve pmyerine büyük harfe ait AMve PMsürece tutarlı olarak,.

Genel kurallar:

  • Bu , 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 önemle tavsiye edilir.

Test senaryoları:

Input:  "this is a clock cipher"
Output: "19:7:8:18:00:8:18:00:AM:00:2:11:14:2:10:00:2:8:15:7:4:17"

Input:  "test"
Output: "19:4:18:19"

Input:  "what time is it"
Output: "22:7:AM:19:00:19:8:12:4:00:8:18:00:8:19"

Input:  "acegikmoqsuwy bdfhjlnprtvxz"
Output: "AM:2:4:6:8:10:12:14:16:18:20:22:24:00:1:3:5:7:9:11:13:15:17:19:21:23:PM"

Input:  "easy peazy"
Output: "4:AM:18:24:00:15:4:AM:PM:24"


O çıkışa serbest mi [7, ":", 8, ":", "00", ":", 1, ":", 14, ":", 1]için hi bob, ya da bir sonuç katılmalısınız? Bu arada, temiz şifre!
Bay Xcoder

@ Mr.Xcoder Üzgünüm, şifre teması uğruna tek bir dizeye (ya da tüm karakterlerin bir listesi olarak her şeye) birleştirilmesi gerektiğini söyleyebilirim ['7', ':', '8', ':', '0', '0', ':', '1', ':', '1', '4', ':', '1'].
Kevin Cruijssen

Yanıtlar:



5

05AB1E , 22 21 bayt

„AM24L„PM00)˜Að«s‡':ý

Çevrimiçi deneyin! veya Test Paketi olarak

Alternatif 21 baytlık çözümler:

':ýAð«24L„AMš„PMª00ª‡
00„AM24L„PM)˜AIk>è':ý

Güzel cevap, birden fazla yaklaşımla 23 bayt almayı başardım (bunlardan biri şu anda silinen cevabımdı). Bu, yığınızı bir bayt tasarrufu sağlayacak şekilde düzenlemenin temiz bir yoludur!
Bay Xcoder

1
Yanıtlarımızı birleştiren alternatif 22 bayt: Çevrimiçi Deneyin!
Bay Xcoder

@ Mr.Xcoder: İlk fikrim aslında böyle görünüyordu, ama 2 bayt daha kötü çünkü ªdeğiştiğini hatırlamıyorum :)
Emigna

@ Mr.Xcoder'ın yaklaşımının bir kısmını kullanarak 20 bayt buldum , ama ondan önce kendiniz bulmanıza izin vereceğim. :)
Kevin Cruijssen

1
@KevinCruijssen: Biraz daha baktıktan sonra size haber vereceğim;)
Emigna

4

Perl 6 , 47 bayt

*.ords>>.&{<<00 AM{1..24}PM>>[$_%32]}.join(":")

Çevrimiçi deneyin!

Anonymous Her iki durumda da bir dize alan ve şifrelenmiş dizeyi döndüren lambda ne olursa olsun.

Açıklama:

*.ords>>.&{                         } # Map the ordinal values to
           <<              >>[$_%32]  # The index in the list
              00 AM{1..24}PM  # 00, AM, the numbers 1 to 24 and PM
                                     .join(":")   # And join with colons

3

Pyth, 25 bayt

j\:m@+++"AM"S24"PM""00"xG

Online Deneyin burada ya bir kerede tüm test durumları doğrulamak burada .

j\:m@+++"AM"S24"PM""00"xGdQ   Implicit: Q=eval(input()), G=lowercase alphabet
                              Trailing dQ inferred
            S24               [1-24]
       +"AM"                  Prepend "AM"
      +        "PM"           Append "PM"
     +             "00"       Append "00" - this is the dictionary
   m                      Q   Map each element of Q, as d, using:
                       xGd      Get the index of d in G, -1 if not present (i.e. space)
    @                           Get the element from the dictionary at the above index
j\:                           Join the result on ":", implicit print



3

C # (Visual C # Etkileşimli Derleyici) , 70 bayt

s=>string.Join(":",s.Select(a=>a<33?"00":a<66?"AM":a>89?"PM":a%65+""))

Girişi küçük harflerden oluşan bir dize olarak alır. İlk olarak karakterin bir boşluk olup olmadığını kontrol eder ve eğer ise, dönüştürür 00. Ardından, karakterin A olup olmadığını kontrol eder ve dönüştürür AM. Tekrar Z'yi kontrol eder ve PMvarsa dönüştürür . Son olarak, eğer char tüm kontrolleri geçerse, alfabetik sıra-1'e dönüştürülür.

@Dana sayesinde -2 bayt

Çevrimiçi deneyin!

// Input taking a string
s => 
// Join the following IEnumerable<char> with a ":" character
string.Join(":", 
// Map all the characters in the string
s.Select(a => 
// Is the char less than 33, aka a space?
a < 33 ? 
// If so, it's a "00"
"00" 
// Else, is this an 'A'?
: a < 66 ?
// If so, convert it to "AM"
"AM" : 
// If it's not 'A' or a space, could it be a 'Z'?
a > 89 ?
// If it is, turn the character into "PM"
"PM" : 
// If it fails all of the checks above, get the characters position in the alphabet and subtract one from that.
a % 65 + ""))



2

05AB1E , 20 bayt

':ýð00:A24L„AMš„PMª‡

@Emigna'nın mevcut 05AB1E cevabının yorumunda @ Mr.Xcoder'ın 22-byterinden büyük ilham aldı .

Girdiyi küçük harfli karakterlerin listesi olarak Salır (girdiyi dize olarak alırsam baş harfi ile 21 bayt olur).

Çevrimiçi deneyin veya tüm test senaryolarını doğrulayın .

Açıklama:

':ý            '# Join the (implicit) input list of characters by ":"
                #  i.e. ["e","a","s","y"," ","p","e","a","z","y"] → "e:a:s:y: :p:e:a:z:y"
ð00:            # Replace all spaces " " with "00"
                #  i.e. "e:a:s:y: :p:e:a:z:y" → "e:a:s:y:00:p:e:a:z:y"
A               # Push the lowercase alphabet
 24L            # Push a list in the range [1,24]
    AMš        # Prepend "AM" at the start of this list
        PMª    # And append "PM" at the end of the list
               # Transliterate; mapping letters to the list-items at the same indices
                # (and output the result implicitly)
                #  i.e. "e:a:s:y:00:p:e:a:z:y" → "4:AM:18:24:00:15:4:AM:PM:24"

1
Ah evet. Alanı ayrı ayrı değiştirmek bir bayt tasarrufu sağlar. Bunu denemeliydim. Güzel :)
Emigna



1

Kömür , 26 bayt

UB:Fθ«→≡ι ×0²a¦AM¦z¦PMI⌕βι

Çevrimiçi deneyin! Bağlantı, kodun ayrıntılı versiyonudur. Küçük harfle girdi alır (önemsiz olarak büyük harfle değiştirilebilir). Açıklama:

UB:

Arka plan karakterini olarak ayarlayın :. Bu, sağ hareketin yarattığı çıkış değerleri arasındaki boşlukları doldurur.

Fθ«→

Her karakterin üzerine gelin ve her seferinde boşluk bırakın. (Bu noktada kanvas hala boş olduğu için ilk hareketin bir etkisi yoktur.)

≡ι ×0²a¦AM¦z¦PM

Karakteri ve boşluk olup olmadığını açın aveya zuygun kodu verin. Ben burada ×0²yerine 00ikincisi ek ayırıcılar iki bayt mal olacağını kullanın .

I⌕βι

Aksi takdirde, küçük harfli alfabe harfin 0 dizinli konumunu bir dize olarak çıktı.


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.