时钟(音译)密码


12

介绍:

在我小时候编写的文档中,我存储了许多不同的密码,我选择了一些我认为最适合挑战的密码(不太琐碎,也不太难),并将它们转变为挑战。它们中的大多数仍位于沙箱中,我不确定是否要全部发布还是仅发布其中几个。这是第三个也是最简单的一个(在我之前发布的Computer CipherTrifid Cipher之后)。


对于时钟密码,我们使用以下图像对文本进行加密:

在此处输入图片说明
因此,类似的句子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_encipherwill只包含字母和空格。
  • 您可以使用完整的小写字母或完整的大写字母(请说明您在答案中使用了哪一个)。
  • 你不允许添加前导零的单个数字加密信件b通过j,但两个零00是强制性的空间。
  • 您应将其:用作分隔符,并且:不允许使用其他前导或尾随。
  • 只要保持一致,就可以使用小写字母ampm而不能使用大写字母AMPM

通用规则:

  • 这是,因此最短答案以字节为单位。
    不要让代码高尔夫球语言阻止您使用非代码高尔夫球语言发布答案。尝试针对“任何”编程语言提出尽可能简短的答案。
  • 标准规则适用于具有默认I / O规则的答案,因此您可以使用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先生19年

@ Mr.Xcoder抱歉,出于密码主题,我想说它应该连接到单个字符串(或整个字符串,如字符列表['7', ':', '8', ':', '0', '0', ':', '1', ':', '1', '4', ':', '1'])。
凯文·克鲁伊森

Answers:



5

05AB1E22 21字节

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

在线尝试! 或作为测试套件

一些备用的21字节解决方案:

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

好的答案,我设法通过多种方法获得了23个字节(其中之一是我当前删除的答案)。这是一种整理堆栈以节省字节的好方法!
Xcoder先生19年

1
结合我们的答案的另一种22字节:在线尝试!
Xcoder先生19年

@ Mr.Xcoder:我的第一个想法实际上看起来像那样,但是差了2个字节,因为我不记得那ª已经改变了:)
Emigna

我已经使用@ Mr.Xcoder的一部分方法找到了20个字节,但是让我在揭露它之前先让您自己弄清楚。:)
Kevin Cruijssen

1
@KevinCruijssen:看了更多之后,我会告诉你;)
Emigna

4

Perl 6,47个字节

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

在线尝试!

匿名无论哪种lambda都采用任意一种情况的字符串并返回加密的字符串。

说明:

*.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#交互式编译器),70字节

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

将输入作为一串小写字母输入。首先检查char是否为空格,如果是,则将其转换为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ª‡

极大地启发@ Mr.Xcoder的22 byter在现有05AB1E答复的评论@Emigna

将输入作为小写字符的列表(S如果我将输入作为字符串,则将为21个字节,带前导)。

在线尝试验证所有测试用例

说明:

':ý            '# 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
是的。单独替换空间可节省一个字节。我应该尝试过的。尼斯:)
艾米娜(Emigna)



1

木炭,26字节

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

在线尝试!链接是详细版本的代码。以小写输入(可以小写更改为大写)。说明:

UB:

将背景字符设置为:。这将填补由正确运动创建的输出值之间的空隙。

Fθ«→

循环遍历每个字符,每次都留一个空白。(第一步不起作用,因为此时画布仍为空。)

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

交换机上的字符,如果它的空间,a或者z再输出相应的代码。我用这里×0²代替,00因为后者在附加的分隔符中将花费两个字节。

I⌕βι

否则,将字母在小写字母中的0索引位置输出为字符串。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.