Introdução:
Tenho muitas cifras diferentes armazenadas em um documento que compilei quando criança, escolhi algumas das que achei mais adequadas para desafios (não muito triviais e nem muito difíceis) e as transformei em desafios. A maioria deles ainda está na caixa de areia, e ainda não tenho certeza se vou postar todos, ou apenas alguns. Aqui está o terceiro e mais fácil (depois da Cifra para Computador e da Trifid que eu postei anteriormente).
Com uma cifra de relógio, usamos a seguinte imagem para codificar texto:
Assim, uma frase como this is a clock cipher
se tornaria:
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
Desafio:
Dada uma string sentence_to_encipher
, codifique-a como descrito acima.
Regras do desafio:
- Você pode assumir
sentence_to_encipher
que conterá apenas letras e espaços. - Você pode usar letras minúsculas ou maiúsculas completas (indique qual delas você usou na sua resposta).
- Você não tem permissão para adicionar zeros à esquerda para as letras de um dígito enciphered
b
atravésj
, mas dois zeros00
são obrigatórias para os espaços. - Você deve usar
:
como separador, e:
não é permitido um início ou final adicional . - Você tem permissão para usar letras minúsculas
am
epm
não maiúsculasAM
ePM
, desde que seja consistente.
Regras gerais:
- Isso é código-golfe , então a resposta mais curta em bytes vence.
Não permita que idiomas com código de golfe o desencorajem a postar respostas com idiomas que não sejam codegolf. Tente encontrar uma resposta o mais curta possível para 'qualquer' linguagem de programação. - As regras padrão se aplicam à sua resposta com as regras de E / S padrão , para que você possa usar STDIN / STDOUT, funções / método com os parâmetros adequados e programas completos do tipo retorno. Sua chamada.
- As brechas padrão são proibidas.
- Se possível, adicione um link com um teste para o seu código (ou seja, TIO ).
- Além disso, é altamente recomendável adicionar uma explicação para sua resposta.
Casos de teste:
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]
parahi bob
, ou tem um juntar o resultado? A propósito, cifra legal!['7', ':', '8', ':', '0', '0', ':', '1', ':', '1', '4', ':', '1']
).Respostas:
Python 2 ,
7472 bytesExperimente online!
Recebe entrada como todas as minúsculas
fonte
05AB1E ,
2221 bytesExperimente online! ou como um conjunto de testes
Algumas soluções alternativas de 21 bytes:
fonte
ª
tinha mudado :)Perl 6 , 47 bytes
Experimente online!
Anônimo Qualquer que seja o lambda que pega uma sequência de ambos os casos e retorna a sequência criptografada.
Explicação:
fonte
Pitão, 25 bytes
Experimente online aqui ou verifique todos os casos de teste de uma vez aqui .
fonte
JavaScript (Node.js) , 72 bytes
Recebe entrada em minúsculas.
Experimente online!
fonte
Java (JDK) , 95 bytes
Experimente online!
Créditos
fonte
char
paravar
. :)C # (compilador interativo do Visual C #) , 70 bytes
Recebe a entrada como uma sequência de letras minúsculas. Primeiro, verifica se o caractere é um espaço e, se for, converte-o em
00
. Em seguida, verifica se o caractere é um A e o converte emAM
. Ele verifica novamente o Z e o converte emPM
se estiver. Por fim, se o caractere passar em todas as verificações, ele será convertido em sua ordem alfabética-1.-2 bytes graças a @dana
Experimente online!
fonte
Ruby , 49 bytes
Experimente online!
Resposta Perl do porto de Jo King . Recebe a entrada como uma matriz de caracteres, retorna uma string com AM / PM em maiúsculas.
fonte
Vermelho ,
124121110109 bytesExperimente online!
fonte
05AB1E , 20 bytes
Muito inspirado por @ Mr.Xcoder 22 Byter 's no comentário do 05AB1E resposta existente por @Emigna .
Aceita a entrada como uma lista de caracteres em minúsculas (seria 21 bytes com um avanço,
S
se eu pegar a entrada como uma string).Experimente online ou verifique todos os casos de teste .
Explicação:
fonte
Tcl , 100 bytes
Experimente online!
fonte
C # (compilador interativo do Visual C #) , 98 bytes
Recebe a entrada como uma matriz de caracteres (minúscula). Experimente online!
fonte
s=>string.Join(':',s.Select(c=>new[]{c-97+"","AM","PM","00"}["az ".IndexOf(c)+1]))
.Carvão , 26 bytes
Experimente online! Link é a versão detalhada do código. Recebe entrada em letras minúsculas (pode ser trivialmente alterado para maiúsculas). Explicação:
Defina o caractere de plano de fundo para
:
. Isso preenche as lacunas entre os valores de saída criados pelo movimento certo.Passe por cada caractere, deixando um espaço a cada vez. (O primeiro movimento não tem efeito, pois a tela ainda está vazia neste momento.)
Ative o caractere e, se for espaço,
a
ouz
emita o código apropriado. Eu uso em×0²
vez de00
aqui, pois o último custaria dois bytes em separadores adicionais.Caso contrário, imprima a posição indexada em 0 da letra no alfabeto em minúsculas como uma sequência.
fonte
Gelatina , 24 bytes
Experimente online!
fonte