Entrada
Uma sequência codificada não vazia que consiste em caracteres ASCII imprimíveis (no intervalo 32-126), onde algumas letras ausentes foram substituídas _
.
Resultado
Uma sequência decodificada do mesmo comprimento com todas as letras em minúsculas, incluindo as que estão faltando.
Quão?
Edit: Como mencionado por @Deusovi nos comentários, esta é uma variante da cifra de Bacon .
- Reúna todas as letras na sequência original e agrupe-as por 5. Letras adicionais que não couberem em um grupo completo de 5 serão ignoradas.
- Converta cada grupo em binário: minúsculo = 0 , maiúsculo = 1 . Isso leva a uma lista de números inteiros.
- Use cada valor N nesta lista para substituir cada um
_
na sequência original pela N- ésima letra do alfabeto (indexada 0), em ordem de aparência.
Exemplo: prOGraMMIng PuZZleS & cOde ____
prOGr --> 00110 --> 6 --> 7th letter = 'g'
aMMIn --> 01110 --> 14 --> 15th letter = 'o'
gPuZZ --> 01011 --> 11 --> 12th letter = 'l'
leScO --> 00101 --> 5 --> 6th letter = 'f'
Substituindo as letras ausentes e convertendo tudo de volta para minúsculas, a sequência original é revelada:
programming puzzles & code golf
Esta é a saída esperada.
Esclarecimentos e regras
- As letras ausentes são garantidas para aparecer no final da seqüência de caracteres. Mais formalmente: nunca haverá nenhuma letra após a primeira
_
na sequência de entrada. No entanto, pode haver outros caracteres ASCII imprimíveis, como espaços e sinais de pontuação. - A entrada é garantida para não conter nenhuma letra maiúscula inútil : todas as letras maiúsculas são bits configurados como 1 necessários para decodificar as letras ausentes. Todo o resto está em minúsculas.
- A sequência de entrada é garantida como válida. Especialmente:
- Sempre conterá grupos completos suficientes de 5 letras para decodificar os sublinhados.
- Os números inteiros codificados em binário estão garantidos no intervalo [0-25] .
- Pode não haver nenhuma
_
na string de entrada; nesse caso, você apenas precisa retornar a entrada. - Isso é código-golfe , então a resposta mais curta em bytes vence!
Casos de teste
Input : hello!
Output: hello!
Input : helLO, worl_!
Output: hello, world!
Input : i aM yoUr faTh__.
Output: i am your father.
Input : prOGraMMIng PuZZleS & cOde ____
Output: programming puzzles & code golf
Input : Can YOu gUesS tHE ENd oF This ____?
Output: can you guess the end of this text?
Input : THe qUICk brown FOx JUMps oVEr the la__ ___.
Output: the quick brown fox jumps over the lazy dog.
Input : RoadS? wHERe we're goinG WE doN't need _____.
Output: roads? where we're going we don't need roads.
Input : thE greatESt Trick thE DeVIl EVer PUllEd wAs CONvInciNg tHe WorLD h_ ____'_ _____.
Output: the greatest trick the devil ever pulled was convincing the world he didn't exist.
Alguns casos de teste extras:
Input : BInar_
Output: binary
Input : 12 MonKey_
Output: 12 monkeys
Input : hyPerbolIZ__
Output: hyperbolized
Input : {[One Last Test ca__]}
Output: {[one last test case]}
_
na string de entrada é um caso especial.The input is guaranteed not to contain any useless capital letter
, caso não haja sublinhado, também não haverá letra maiúscula.[32-126]
. Eu adicionei outro caso de teste.Respostas:
05AB1E , 18 bytes
Código:
Usa a codificação 05AB1E . Experimente online!
Explicação:
fonte
Python 2 , 113 bytes
Experimente online!
fonte
Perl 5
-pF -MList::Util=sum
, 75 bytesExperimente online!
Explicação:
-pF
lê uma linha de entrada na variável$_
e, dividida em caracteres, na matriz@F
.@a=grep!/\W|\d/,@F
define a matriz@a
igual aos membros@F
que não satisfazem a regex\W|\d
.\W
é tudo menos letras, números e_
;\d
são números. Então,\W|\d
tudo é menos letras e_
, e@a
tem todas as letras e_
caracteres. Nós acabaremos nunca examinando os_
personagens@a
. (Observe que isso só funciona porque a entrada é garantida ASCII.)map{a gt shift@a&&16/2**$_}0..4
faz o seguinte para 0 a 4: Desativa o próximo elemento@a
, encurtando-o e avalia sea
é asciibeticamente maior que esse elemento (ou seja, se esse elemento está em maiúsculas). Nesse caso,&&
não está em curto-circuito, portanto, temos 16 divididos por 2 para a potência do valor de entrada (0 a 4). Caso contrário,&&
está em curto-circuito e obtemos 0.map
retorna a lista de cinco númerossum
, que os adiciona.a..z
e é disso que obtemos(a..z)[…]
.s!_!…!eg
converte cada_
no$_
, por sua vez, ao pé da letra apropriada.$_=lc
converte$_
para a versão em minúscula de si e-p
imprime.fonte
J ,
6261 bytesExperimente online!
fonte
Geléia ,
28 2726 bytes-1 graças a Erik the Outgolfer & dylnan
Não é um desafio muito amigo da geléia!
Um link monádico que aceita e retorna listas de caracteres.
Experimente online!
Quão?
fonte
Retina ,
9190 bytesExperimente online! Explicação:
Traduza letras minúsculas
a
e maiúsculas paraA
, excluindo todo o resto.Divida os
Aa
s em grupos de 5.Converter de binário em unário, tratando
A
como 1 ea
como 0. Como havia 5Aa
s originalmente, restam 5a
s, mais um número deA
s, dependendo da posição desejada no alfabeto.Incremente o último de
a
acordo com o número deA
s seguintes .Anexe antecipadamente a entrada original.
Substitua qualquer
_
s pela próxima letra decodificada.Remova todas as letras decodificadas de reposição.
Tudo em minúsculas.
Retina 0.8.2 , 117 bytes
Experimente online! Explicação:
Duplique a entrada.
Minúscula a primeira cópia.
Traduza letras minúsculas para
a
na segunda cópia.Traduza letras maiúsculas para
A
. Eles devem estar na segunda cópia, porque a primeira cópia já estava em minúsculas.Exclua todo o resto da segunda cópia.
Divida a segunda cópia (agora apenas
Aa
s) em grupos de 5.Decodifique as letras e insira-as como antes.
fonte
APL (Dyalog Unicode) , SBCS de 46 bytes
Lambda anônima, assume
⎕IO
(origem do índice) como sendo0
.Experimente online!
{
...⋄
...}
função de dois declaração;⍵
é o argumento,⋄
separa instruções⊢
O argumento (função sem operação),'_'=
onde igual a um sublinhado (ou seja, uma função de mapeamento booleano),_←
atribui essa função a_
A[
…]@_⍵
Coloque os seguintes caracteres deA
em posições de sublinhados no argumento O alfabeto l⎕A
maiúsculo atribui que para minúsculas ( 819 ≈ BIg , sem argumento à esquerda significa não grande, ou seja, minúsculo) precede o alfabeto maiúsculo; isso nos dá todas as letras que cruzam o argumento e aquilo; apenas as letras do argumento, quais delas são membros do alfabeto maiúsculo; bits em maiúsculas … r modelam isso para o seguinte número de linhas e cinco colunas: a máscara de sublinhados no argumento soma isso; número de sublinhadosA←
A
819⌶
A,
⍵∩
A∊⍨
(
)5⍴
_⍵
+/
⍉
transpose (para tratar cada linha como um número e não como uma posição de bit)2⊥
avalie como819⌶
tudo em minúsculas na base 2fonte
Scala , 189 bytes
Experimente online!
Explicação:
fonte
JavaScript (Node.js) ,
125124 bytesExperimente online!
fonte
Geléia , 26 bytes
Experimente online!
Abordagem diferente da de Jonathan Allan. EDIT: Então, eu, aparentemente, pensei na mesma redução de bytes que Jonathan Allan, para não machucar mencionar seu nome novamente.
fonte
CJam , 43 bytes
Experimente online!
fonte
Limpo ,
180... 150 bytesExperimente online!
Define a função
$ :: [Char] -> [Char]
com@ :: [Char] [Char] -> [Char]
como um ajudante para substituir sublinhados, e? :: [Char] -> [Char]
como um auxiliar para gerar os caracteres de substituição.fonte
i<-:""
peça funciona? Os caracteres são convertidos implicitamente em números ao somar ou adicioná-los?JavaScript (Node.js) , 100 bytes
Experimente online!
Graças a @Arnauld, economiza 2 bytes.
fonte
/[a-z]/gi
agora.R ,
153135113 bytesExperimente online!
Emite alguns avisos com o uso de,
matrix
mas isso não deve afetar o resultado. Também emite avisos, pois a[<-
atribuição removerá objetos atribuídos estranhos por padrão.40 (!) Bytes inativos graças às melhorias do JayCe
fonte
,length(L)%/%5
[<-
vai jogar fora elementos passado o comprimento dos índices ...intToUtf8
C (GCC) ,
111109101100 bytesEdit: Adicionado em minúsculas pelo comentário do @ FrownyFrog; obrigado Lynn, Christoph e user5329483 por suas sugestões!
Experimente online!
fonte
i+=i+(*s<97)
.j
introduzindo um bit de marcadori
e reescrevendo o segundo para comofor(i=1;i<32;s++)
. E compense os 32 extras no exterior. Como novato aqui, conto um sobressalente de sete bytes.for(i=3;i<96;s++)
reduz o 65 para um número de um dígito, também conhecido como1
.Go,
219217192210209156 bytesEconomizou 25 bytes graças a @Lynn! Economizou 53 bytes graças a @ovs!
Teve que perder 18 bytes por causa de um bug com strings sem sublinhados :(
Experimente online!
fonte
Stax , 22 bytes
Execute e depure
A abordagem geral é uma substituição de expressão regular do
"_"
uso de uma função de retorno de chamada que corta letras das entradas para calcular cada caractere de substituição.Execute este
fonte
Vermelho , 247 bytes
Experimente online!
Mais legível:
fonte
Java 10, 186 bytes
Experimente online.
Explicação:
fonte
Ruby ,
107106103 bytesExperimente online!
fonte
Japt, 25 bytes
Tente
Explicação
fonte
Pitão, 36 bytes
Experimente aqui
Explicação
fonte
Python 3.5 , 296 bytes
Experimente online
Primeiro código de golfe :)
(Eu sei que não é pequeno em bytes, eu estava apenas me divertindo criando um código de 1 linha)
Aqui está a explicação:
Entrada do usuário
Localiza o índice do primeiro _ na string e o armazena
retira a sequência de todos os caracteres não-alfa
Divide a sequência alfa em uma matriz com cada elemento composto por 5 caracteres
Ex. ['THeqU', 'ICkbr', 'ownFO', 'xJUMp', 'soVEr', 'thela']
Em seguida, converte caracteres minúsculos em 0 e caracteres maiúsculos em 1
Ex. ['11001', '11000', '00011', '01110', '00110', '00000']
e converte a string binária em um número inteiro, adiciona 65 e a converte em um caractere
Ex. ['z', 'y', 'd', 'o', 'g', 'a']
localiza todos os caracteres após o primeiro _ e os empurra para a matriz z em seus respectivos locais (definidos acima)
Ex. ['z', 'y', '', 'd', 'o', 'g', '.', 'a']
dividir nossa string em uma lista de caracteres
fatie nossa string do primeiro _ ao final da lista e substitua-a pela matriz z. Eu também tive que dividir a matriz z no comprimento da string dividida do primeiro _ ao final, porque obtive um caractere extra no exemplo de cachorro preguiçoso (o "a" no final dos exemplos acima)
* imprima a resposta *
fonte
o.islower()
eelse
, e eu penso'1'
efor
. Além disso, você pode alterarif d!="_"
paraif"_"!=d
, mas o comentário acima já faz isso.Haskell , 165 bytes
Experimente online! Exemplo de uso:
g"" "BInar_"
rendimentos"binary"
.fonte
PowerShell , 121 bytes
Experimente online!
Menos golfe:
fonte
Perl 5
-p
, 78 bytesExperimente online!
fonte