소개:
나는 한때 어렸을 때 컴파일 된 문서에 다양한 암호가 저장되어 있으며, 도전에 가장 적합하다고 생각되는 것을 선택했습니다 (너무 사소하지 않고 어렵지 않음). 대부분은 여전히 샌드 박스에 있으며, 모두 게시할지 또는 일부만 게시할지 확실하지 않습니다. 다음은 세 번째로 가장 쉬운 방법입니다 ( 이전에 게시 한 Computer Cipher 및 Trifid 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
대신 대문자의AM
및PM
한이 일관된으로.
일반 규칙:
- 이것은 code-golf 이므로 바이트 단위의 최단 답변이 이깁니다.
코드 골프 언어가 코드 골프 언어 이외의 언어로 답변을 게시하지 못하게하십시오. ‘모든’프로그래밍 언어에 대한 가능한 한 짧은 대답을 생각해보십시오. - 표준 규칙 은 기본 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"
답변
파이썬 2 , 74 72 바이트
lambda s:':'.join(['AM','PM','00',`ord(c)-97`]['az '.find(c)]for c in s)
입력을 모두 소문자로 사용
답변
05AB1E , 22 21 바이트
„AM24L„PM00)˜Að«s‡':ý
일부 대체 21 바이트 솔루션 :
':ýAð«24L„AMš„PMª00ª‡
00„AM24L„PM)˜AIk>è':ý
답변
펄 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
답변
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
답변
자바 스크립트 (Node.js) , 72 바이트
소문자로 입력합니다.
s=>[...s].map(c=>c<1?'00':(x=Buffer(c)[0]-1&31)>24?'PM':x||'AM').join`:`
답변
자바 (JDK) , 95 바이트
s->{int a=0;for(var c:s)System.out.print((a++<1?"":":")+(c<33?"00":c<66?"AM":c>89?"PM":c-65));}
크레딧
- Kevin Cruijssen 덕분에 -1 바이트
답변
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 + ""))