Годинник (транслітерат) Шифр


12

Вступ:

У мене є багато різних шифрів, що зберігаються в документі, який я колись складав у дитинстві, я вибрав декілька тих, які, на мою думку, найкраще підходять для викликів (не надто банальні та не надто жорсткі) та перетворив їх на виклики. Більшість із них досі перебувають у пісочниці, і я ще не впевнений, чи опублікую їх усі, або лише декілька. Ось третій і найпростіший (після комп'ютерного шифру і трифідного шифру я розміщував раніше).


За допомогою годинникового шифру ми використовуємо таке зображення для шифрування тексту:

введіть тут опис зображення
Так вирок, як this is a clock cipherби став:

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

Виклик:

Давши рядок sentence_to_encipher, розшифруйте її, як описано вище.

Правила виклику:

  • Ви можете припустити, що sentence_to_encipherбуде містити лише літери та пробіли.
  • Ви можете використовувати або малі, або великі регістри (будь ласка, вкажіть, який саме ви використовували у своїй відповіді).
  • Вам не дозволяється додавати провідні нулі для одноцифрових зашифрованих літер bнаскрізь j, але дві нулі 00обов'язкові для пробілів.
  • Ви повинні використовувати :як роздільник, і додаткові провідні або слідові :заборонені.
  • Вам дозволяється використовувати малі літери, amа pmне великі регістри AMта PM, поки це буде відповідати.

Загальні правила:

  • Це , тому найкоротша відповідь у байтах виграє.
    Не дозволяйте мовам з кодовим гольфом відштовхувати вас від публікації відповідей з мов, що не кодують гольф. Спробуйте придумати якомога коротшу відповідь на "будь-яку" мову програмування.
  • Для вашої відповіді застосовуються стандартні правила з правилами вводу / виводу за замовчуванням , тому вам дозволяється використовувати STDIN / STDOUT, функції / метод із відповідними параметрами та повним програмами типу повернення. Твій дзвінок.
  • Лазівки за замовчуванням заборонені.
  • Якщо можливо, додайте посилання з тестом для вашого коду (тобто TIO ).
  • Також настійно рекомендується додавати пояснення до своєї відповіді.

Тестові приклади:

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"


Чи дозволено виводити [7, ":", 8, ":", "00", ":", 1, ":", 14, ":", 1]для hi bob, чи повинен приєднатися до результату? До речі, акуратний шифр!
Містер Xcoder

@ Mr.Xcoder Вибачте, заради теми шифрування я б сказав, що його слід приєднати до однієї рядка (або всієї речі як список символів, як ['7', ':', '8', ':', '0', '0', ':', '1', ':', '1', '4', ':', '1']).
Кевін Кройсейсен

Відповіді:



5

05AB1E , 22 21 байт

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

Спробуйте в Інтернеті! або як тестовий набір

Деякі альтернативні 21- байтні рішення:

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

Приємна відповідь, мені вдалося отримати 23 байти за допомогою декількох підходів (один з яких був моєю на даний момент видаленою відповіддю). Це акуратний спосіб влаштувати стек, щоб зберегти байт!
Містер Xcoder

1
Альтернативний 22-байтний комбінат наших відповідей: Спробуйте в Інтернеті!
Містер Xcoder

@ Mr.Xcoder: Моя перша ідея насправді виглядала так, але на 2 байти гірше, тому що я не пам’ятаю, що ªзмінилося :)
Emigna

Я знайшов 20 байт, використовуючи частину підходу @ Mr.Xcoder , але я дозволю вам розібратися в цьому самі, перш ніж розкрити його. :)
Kevin Cruijssen

1
@KevinCruijssen: Я повідомлю вас після того, як я ще трохи подивився;)
Emigna

4

Perl 6 , 47 байт

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

Спробуйте в Інтернеті!

Анонімне Що б не лямбда, що приймає рядок у будь-якому регістрі та повертає зашифровану рядок.

Пояснення:

*.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 байт

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

Спробуйте це в Інтернеті тут або перевірити всі тестові випадки тут .

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 # Interactive Compiler) , 70 байт

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

Вводиться як рядок з малих літер. Спочатку перевіряє, чи знаком є ​​пробіл, і якщо він є, перетворює його 00. Далі він перевіряє, чи є знак char A, і перетворює його в AM. Він знову перевіряє Z і перетворює його, PMякщо він є. Нарешті, якщо знак проходить усі перевірки, він перетворюється на його алфавітний порядок-1.

-2 байти завдяки @dana

Спробуйте в Інтернеті!

// 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 байт

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

Чудово надихнувся 22-байтовим @ Mr.Xcoder у коментарі до відповіді 05AB1E від @Emigna .

Вважає введення як список малих символів (було б 21 байт з провідним, Sякщо я прийму введення як рядок).

Спробуйте в Інтернеті або перевірте всі тестові випадки .

Пояснення:

':ý            '# 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
Ага так. Заміна простору окремо економить байт. Я повинен був це спробувати. Приємно :)
Емінья



1

Вугілля деревне , 26 байт

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

Спробуйте в Інтернеті! Посилання на багатослівну версію коду. Вводить в нижній регістр (може тривіально змінити верхній регістр). Пояснення:

UB:

Встановіть фоновий символ на :. Це заповнює прогалини між вихідними значеннями, створеними правильним рухом.

Fθ«→

Переведіть петлю над кожним символом, залишаючи пробіл кожен раз. (Перший хід не має ефекту, оскільки полотно в цьому місці все ще порожнє.)

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

Увімкніть символ і, якщо це місце, aабо zвиведіть відповідний код. Я використовую ×0²замість 00тут, оскільки останній коштуватиме два байти в додаткових роздільниках.

I⌕βι

В іншому випадку виведіть 0-індексовану позицію букви у нижньому регістрі як алфавіт.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.