시계 (음역) 암호


12

소개:

나는 한때 어렸을 때 컴파일 된 문서에 다양한 암호가 저장되어 있으며, 도전에 가장 적합하다고 생각되는 것을 선택했습니다 (너무 사소하지 않고 어렵지 않음). 대부분은 여전히 ​​샌드 박스에 있으며, 모두 게시할지 또는 일부만 게시할지 확실하지 않습니다. 다음은 세 번째로 가장 쉬운 방법입니다 ( 이전에 게시 한 Computer CipherTrifid Cipher 이후 ).


Clock 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_encipher문자와 공백만을 포함 한다고 가정 할 수 있습니다 .
  • 소문자 또는 대문자를 사용할 수 있습니다 (답변에 사용한 것을 적어주십시오).
  • 당신은 한 자리 암호화 된 문자에 대한 앞에 0을 추가 할 수 없습니다 b를 통해 j,하지만이 명 제로는 00공간에 대한 필수입니다.
  • :구분 기호로 사용해야 하며 추가 선행 또는 후행 :이 허용되지 않습니다.
  • 당신은 사용 소문자로 허용 am하고 pm대신 대문자의 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됩니까, 아니면 결과에 참여해야합니까? 그건 그렇고, 깔끔한 암호!
Mr. Xcoder

@ Mr.Xcoder 죄송합니다. 암호 테마를 위해 단일 문자열 (또는 전체와 같은 문자 목록)에 연결해야한다고 말하고 싶습니다 ['7', ':', '8', ':', '0', '0', ':', '1', ':', '1', '4', ':', '1'].
Kevin Cruijssen

답변:



5

05AB1E , 22 21 바이트

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

온라인으로 사용해보십시오! 또는 테스트 스위트

일부 대체 21 바이트 솔루션 :

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

좋은 대답, 여러 접근 방식을 통해 23 바이트를 얻었습니다 (그중 하나는 현재 삭제 된 답변이었습니다). 바이트를 절약하기 위해 스택을 정렬하는 깔끔한 방법입니다!
Mr. Xcoder

1
우리의 답변을 결합한 또 다른 대안 : 온라인 시도!
Mr. Xcoder

@ Mr.Xcoder : 나의 첫 번째 아이디어는 실제로는 그렇게 보이지만, 그것이 ª바뀌 었다는 것을 기억하지 못했기 때문에 2 바이트 더 나빠
졌습니다

@ Mr.Xcoder 의 접근 방식 의 일부를 사용하여 20 바이 터를 찾았 지만 공개하기 전에 직접 알아 보겠습니다. :)
Kevin Cruijssen

1
@KevinCruijssen : 좀 더 살펴보면 알려 드리겠습니다;)
Emigna

4

펄 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. 다음으로, 문자가 A인지 확인하고로 변환합니다 AM. Z를 다시 확인하고있는 경우 Z로 변환합니다 PM. 마지막으로, 문자가 모든 검사를 통과하면 알파벳 순서 -1로 변환됩니다.

@dana 덕분에 -2 바이트

온라인으로 사용해보십시오!

// 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ª‡

@Emigna 의 기존 05AB1E 답변에 대한 의견에서 @ Mr.Xcoder 의 22-byter에서 크게 영감 받았습니다 .

입력을 소문자 목록으로 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
아. 넵. 공백을 별도로 바꾸면 바이트가 절약됩니다. 나는 그것을 시도해야했다. Nice :)
Emigna



1

, 26 바이트

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

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. 소문자로 입력합니다 (사소하게 대문자로 변경 될 수 있음). 설명:

UB:

배경 문자를로 설정하십시오 :. 이것은 올바른 움직임으로 생성 된 출력 값 사이의 틈을 채 웁니다.

Fθ«→

매번 간격을두고 각 문자를 반복합니다. (이 시점에서 캔버스가 여전히 비어 있으므로 첫 번째 이동은 효과가 없습니다.)

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

그것의 공간 특성에 그리고 만약 스위치 a또는 z다음 출력 적절한 코드. 후자는 추가 구분 기호로 2 바이트를 소비하므로 여기 ×0²대신에 사용 합니다 00.

I⌕βι

그렇지 않으면 소문자 알파벳에서 문자의 0 인덱스 위치를 문자열로 출력합니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.