Existe uma cifra muito simples que substitui uma letra pela sua posição no alfabeto. Por exemplo, abc
ficaria 1 2 3
nessa cifra.
Esse desafio é uma abordagem alternativa a essa cifra.
O desafio
Crie um programa que receba uma entrada de caracteres ASCII e produza uma sequência separada por espaço de:
números inteiros
-26
através26
cartas
a
atravésj
A saída deve vir do STDOUT ou da alternativa mais próxima do seu idioma.
Especificações
Letras maiúsculas devem ser negadas. Uma capital
D
por exemplo seria-4
, enquanto uma minúsculad
seria4
.Os dígitos devem ser alterados para seus equivalentes alfa.
1
sera
e assim por diante. Quaisquer zeros na entrada serãoj
.Todos os caracteres não alfanuméricos (exceto espaços) devem ser ignorados.
Os espaços são
0
.Os espaços adjacentes na saída devem ser reduzidos para um único espaço.
Input: You + Me Correct Output: -25 15 21 0 -13 5 Incorrect Output: -25 15 21 0 0 0 -13 5
Um único espaço à direita ou nova linha é permitido.
Exemplos
Input: programming puzzles
Output: 16 18 15 7 18 1 13 13 9 14 7 0 16 21 26 26 12 5 19
Input: Code Golf
Output: -3 15 4 5 0 -7 15 12 6
Input: Programming Puzzles & Code Golf
Output: -16 18 15 7 18 1 13 13 9 14 7 0 -16 21 26 26 12 5 19 0 -3 15 4 5 0 -7 15 12 6
Input: C0d3 G0lf
Output: -3 j 4 c 0 -7 j 12 6
Input: abc_ABC
Output: 1 2 3 -1 -2 -3
Placar
Para que sua pontuação apareça no quadro, ela deve estar neste formato:
# Language, Bytes
Tachado não deve causar problemas.
fonte
Respostas:
CJam,
585754515049 bytesApenas quando eu escrevi a explicação, eu notei que uma das 50 versões alternativas de bytes pode ser encurtado por um byte ...
Teste aqui.
Soluções de 50 bytes:
Explicação
Essa deve ser a primeira vez que o comportamento do módulo de CJam para valores negativos foi útil para mim.
fonte
JavaScript (ES6),
110107133120 bytesTome isso, meu velho!
Há potencialmente muito mais espaço para jogar golfe,
especialmente nas regexes, que diminuíram bastante. Versão não destruída:Sugestões são bem-vindas!
fonte
All non-alphanumeric characters should be ignored.
. Teste: 'A $ b' deve ser-1 2
Pitão,
5049 bytesExperimente aqui .
Editar: higienização reestruturada das cordas para garantir que os sublinhados sejam manipulados corretamente. Até salvou um byte também, yay!
Este programa cria uma cadeia de pesquisa, que é usada para limpar a entrada. Isso é mapeado para o índice correspondente nessa sequência. Por fim, qualquer índice maior que 26 é convertido no caractere ASCII correto.
Versão anterior, que utilizava
\W
regex, em 50 bytes:fonte
Julia,
145136 bytesUngolfed:
Para obter os dígitos como letras, adicionamos 58 ao valor ASCII e subtraímos 10 se o caractere atual não for 0. Isso garante que 0 seja mapeado para
j
e os outros dígitos sejam mapeados paraa
-i
.Negar letras maiúsculas é feito usando
cmp
. Isso retornará -1 para letras maiúsculas e 1 para letras minúsculas.Experimente online
fonte
Perl 5,
120116113105 BytesPrimeiro limpa os caracteres indesejados e espaços extras.
Então desce a tabela ascii para cada personagem.
Teste
fonte
s/ +/ /g
, o primeiro regex está errado porque \ w corresponde ao caractere sublinhado.s/[^\w ]|_//g
C,
142138135Ungolfed um pouco:
Passa nos testes indicados no GCC 4.9.3 e Clang 3.5.2.
fonte
> <> (peixe),
219209 bytesExperimente aqui
Esta é a minha primeira resposta de código de golfe! Finalmente pude usar o idioma que eu queria usar para um desafio de golfe com código, e este parecia o perfeito, pois os caracteres são automaticamente convertidos em decimais.
Eu esperava que meu resultado fosse bem menor, mas aparentemente não. No entanto, eu não joguei muito esse. Existem alguns lugares em que o código pode ser mais limpo / com mais sentido, mas não salvará bytes, pois eles estão em locais onde o espaço em branco é necessário. Pode haver uma maneira de salvar alguns bytes no último bit na segunda linha, fazendo com que ele vá na direção oposta e se misture com o 00 já lá, vou ter que jogar mais tarde
Basicamente, isso verifica se o caractere atual é um espaço, número, letra maiúscula ou minúscula, verificando se está no intervalo dos valores mais altos / mais baixos desse grupo. Se não for um desses, é descartado. Se estiver em um desses, será convertido em um número, se for uma letra, e uma letra, se for um número (ou melhor, um número de 97 a 106, que são os valores das letras aj). Em seguida, verifica se o valor superior é menor que 28; nesse caso, é um número e gera um número; caso contrário, é uma letra e gera a letra que esse número representa, gera um espaço e circula até a pilha ficar vazia.
fonte
JavaScript (ES6), 108
122 124Editar Usando o regexp do comentário de @ Max
Editar2 14 bytes salvos graças ETHProductions
O EcmaScript 6 apenas para as funções de seta, deve funcionar no Firefox e no Chrome mais recente.
Teste a execução do snippet abaixo
fonte
[R](/ +/g,' ')[R](/./g,
para[R](/ +|./g,
. (Desculpe por trazer um post antigo, btw)Pitão, 57 bytes
Demonstração ao vivo e casos de teste.
fonte
CJam, 52 bytes
Experimente online
A parte principal da solução é que ela usa o
er
operador CJam (transliteração). Como argumentos para o operador, ele precisa da lista de todos os caracteres e de uma lista dos valores correspondentes.Como uma etapa de pré-processamento na entrada, ele remove caracteres que não fazem parte da tabela de conversão (caracteres especiais) e reduz os espaços repetidos em um único espaço.
Explicação:
fonte
Python 2,
191179177173172168160 bytesTeste
fonte
PHP, 116 bytes
recebe entrada do STDIN; correr com
-nR
.demolir
Você pode substituir o
@
por um bastão para manipular espaços na parte minúscula.Comjabcdefghi0
os dígitos, você também pode usar:
.fonte
"#_|[^\w ]#"
vez de"#[^\w ]|_#"
.Hássio , 1156 bytes
Resposta muito longa
fonte
You + Me
produz a saída-25 15 21 0 0 -13 5
.Dec
coluna.)Geleia , 32 bytes, desafio de pós-datas de idiomas
Experimente online!
Explicação
Função auxiliar
1Ŀ
(converte cada alfanumérico / espaço na entrada em um número)Função auxiliar
2£
(retorna a cadeia constante“jabcdefghi”
)Programa principal
fonte
Retina,
7470 bytes (não concorrente)Observe o espaço à esquerda na linha 3, o espaço à direita na linha 6 e a segunda linha vazia.
Experimente Online!
Embora o idioma tenha sido criado antes do desafio, acho que alguns dos recursos de idioma que eu usei após o desafio foram marcados como não concorrentes.
fonte
Java 7,
257254 bytesExperimente aqui.
Explicação:
Exemplo de entrada e saída:
fonte