Nesse desafio, você deve usar uma string que corresponda ao regex ^[a-zA-Z]+$
ou o que for razoável (não é necessário considerar letras maiúsculas ou minúsculas, se quiser) (você pode assumir que a string é longa o suficiente e tem a estrutura correta para todas as operações) e produziu outra string, produzida de maneira semelhante à palavra no final de um recente tweet dadaísta do POTUS ( "Despite the constant negative press covfefe"
).
Como ocultar uma string:
Primeiro, obtenha o primeiro grupo de sons (terminologia composta).
Como você faz isso? Bem:
Encontre a primeira vogal (
y
também é vogal)v creation
Encontre a primeira consoante depois disso
v creation
Remova o restante da string
creat
Esse é o seu primeiro grupo de som.
Próxima Etapa:
Obter a última consoante do grupo de sons
t
e substitua-o pela versão com ou sem voz. Para fazer isso, encontre a letra nesta tabela. Substitua pela letra fornecida (que pode ser a mesma letra)
b: p
c: g
d: t
f: v
g: k
h: h
j: j
k: g
l: l
m: m
n: n
p: b
q: q
r: r
s: z
t: d
v: f
w: w
x: x
z: s
então, nós temos
d
Em seguida, faça a próxima vogal depois dessa consoante. Você pode assumir que essa consoante não está no final da sequência. Junte esses dois e repita-o duas vezes:
didi
Concatene isso para o primeiro grupo de sons:
creatdidi
Você está pronto: a string é cefefificada e agora você pode produzi-la.
Casos de teste:
coverage: covfefe
example: exxaxa
programming: progkaka (the a is the first vowel after the g, even though it is not immediately after)
code: codtete
president: preszizi
Isso é código-golfe , então faça seu programa o mais curto possível!
Respostas:
Geléia ,
5857 bytesUm programa completo que aceita uma lista de caracteres minúsculos e imprime o resultado.
Experimente online!
Quão?
fonte
JavaScript (ES6),
107103 bytesGuardado 4 bytes graças a GOTO 0
Casos de teste
Mostrar snippet de código
fonte
s=>([,a,b,c]=s.match`(.*?[aeiouy]+(.)).*?([aeiouy])`,a+(b=(a="bcdfgszkvtgp")[11-a.search(b)]||b)+c+b+c)
Geléia ,
4539 bytesExperimente online!
Como funciona
fonte
CJam ,
59585756 bytesExperimente online!
Explicação
fonte
C,
219213206179175 bytesExperimente online!
fonte
#define
a função por sinalizadores de pré-processador (-D...
).Perl 5 ,
8172 bytesExperimente online!
fonte
\K
, mas você fez 9 bytes melhor do que eu. Boa resposta!PHP, 121 bytes
Experimente online!
fonte
echo$t[1],$z=strtr($t[2].$t[3],bcdfgkpstvz,pgtvkgbzdfs),$z;
$argn
para algo mais curto?$a
, por exemplo - isso é -3 bytesPitão, 54 bytes
Isso define uma função
y
que espera uma string. Experimente on-line: Test Suitefonte
Python 3,
155139 bytesremoveu 16 bytes graças a @ovs
removido 1 byte graças a Gábor Fekete
fonte
'aeiouy]'
, talvez isso economize alguns bytes. Além disso, você pode remover alguns caracteres das cadeias de substituição, pois são iguais.IndexError
e salvaraeiouy])
não salva nenhum bytes.s='aeiouy])'
, você poderia usarb,c,v=re.findall('(.*?[%s([^%s.*?([%s'%(s,s,s)
. Não é mais curto, mas pode levar a uma maneira de reduzi-lo em geral.k='aeiouy])'
ef'(.*?[{k}([^{k}.*?([{k}'
Java 8,
243236222 bytesUsa
.replaceAll
expressões regulares com grupos de captura para filtrar as partes que não queremos.Explicação:
Experimente aqui.
fonte
Haskell ,
143141138 138137136 bytesExperimente online!
fonte
nx
por algo com uma letra economizará 2 bytes.z
foraf
e alternar para guardas em vez delet
salvar outros dois bytes: Experimente on-line!(s,v)<-break z i,(m,c:x)<-span z v
em(s,(m,c:x))<-span z<$>break z i
.let
, obrigado!z
sair def
?Python,
261260 bytesUma solução não regular, não esotérica. Demorou cerca de 20 minutos para fazer e mais uma hora para jogar golfe.
Provavelmente tem mais compreensão da lista do que toda a biblioteca padrão do python, principalmente porque eu não sei regex ...
Experimente online! (Com caixas de teste)
fonte
Ruby , 90 bytes
Experimente online!
Desprezando um pouco, temos algo equivalente a:
fonte
Python 2,
251246245239237234229211 bytesPrimeira submissão aqui.
Experimente online!
Companheiros de golfe que me ajudaram:
fonte
not n
an<1
para 2 bytes, desde que você saben
nunca será negativo. Você também pode mudarn==3
para,n>2
pois saben
que nunca será maior que3
. Você também pode usar os truques Python para condicionais para encurtar o primeiro e penúltimo ainda mais longe:n=[n,1][i in w and n<1]
;r+=[0,r][n<2]
r,v,c=('',)*3
parar=v=c=''
, pois as strings são imutáveis. Eu tentei vários outros truques inteligentes, mas frustrantemente eles são exatamente o mesmo tempo. Também pode valer a pena adicionar um Experimente-o online! link para sua publicaçãoRubi ,
175141110 bytesExperimente online!
tr
Ungolfed
fonte
Hash[*"bpcgdtfvgkkgpbsztdvfzs".chars]
c=[^aeiou]
é mais curta. Tem o primeiro interpolação para cada variável atribuí-lo simultaneamente para -2 bytes:/^(.*?${v='[aeiou]'}+(#{c='[^aeiou]})).../
. Finalmente, em$2.tr("b-z","pgtevkhijgl-obqrzdufwxys")
vez da solução Hash.\g<n>
) em vez de interpolação, além de outros 14 utilizando @ de ValueInk[^aeiou]
sugestão:s=~/^(.*?([aeiouy])+([^aeiou]))\g<3>*(\g<2>)/
.programming
->progkaka
, que não consigo entender.\g<3>
atualiza o valor de US $ 3, portanto não podemos usar esse atalho.Cristal,
203194187186184163 bytesfonte
c=v
eo+=<...>
MATLAB / Oitava -
159158 bytesOs trabalhos a seguir assumindo que a sequência de entrada esteja em minúscula.
Explicação
a = input('','s');
: Obtém uma seqüência de STDIN e armazena-o na variávela
.m=ismember(a,'aeiouy');
: Retorna uma matriz booleana que é do mesmo tamanho que a sequência quea
determina onde as vogais estão localizadass='pgt vkh jglmn bqrzd fwx s';
Ocovfefe
mapeamento de consoantes como uma sequência. Essa cadeia tem 25 caracteres e omite as vogais. A primeira posição em que a vogal'a'
deve estar é removida, enquanto as outras posições em que as vogais estão localizadas são colocadas com um caractere de espaço simulado. Isso é feito para que, quando determinarmos a primeira consoante que aparece após a vogal, converteremos a consoante em uma posição para acessar um caractere nessa cadeia de caracteres para determinar o primeiro componente da palavra convertida.m(1:find(m,1))=1
: Define a primeira posição da matriz booleana até onde encontramos a primeira vogal como todas as vogais. Isso será feito para que, quando procurarmos a próxima consoante que segue a primeira vogal, ignoraremos esses caracteres.i=find(~m,1);
: Localiza a primeira posição da string que é uma consoante após a primeira vogal.f=a(1:i)
: Remove a string após a primeira consoante que segue a vogal. Simplesmente amostramos da primeira posição da string até este ponto.d=s(f(end)-97);
: Pegue o último caractere da string restante e encontre onde precisamos obter amostras da string de pesquisa e obtenha esse caractere. Subtrair um caractere e um número em MATLAB ou Octave coalesces para formar um número inteiro convertendo o caractere em seu código ASCII. Nesse caso, subtraímos o último caractere pelo caractere no início do alfabeto para nos dar a posição relativa ao início. No entanto, em vez de subtrair porb
(98), subtraímosa
quando o MATLAB inicia a indexação por 1 em vez do'a'
código ASCII do 0. é 97.m(1:i)=0;
: Pega a máscara booleana e define todos os caracteres na sequência de entrada da primeira posição para a primeira consoante após uma vogal como false.v=a(find(m,1));
: Localiza a próxima vogal que segue a primeira consoante da sequência de entrada.[f d v d v]
: Saída nossacovfefe
string ied.Execuções de exemplo
Experimente online!
http://www.tutorialspoint.com/execute_octave_online.php?PID=0Bw_CjBb95KQMdjROYVR0aFNrWXM
Quando você pressiona o botão Executar na parte superior, aguarde alguns instantes e digite a sequência desejada. Digite a sequência lentamente, pois parece haver um atraso ao digitar o texto.
fonte
Clojure,
182156 caracteresComo funciona
Retorna uma seq de
((\p \r) (\e) (\s) (\i) (\d) (\e) (\n \t))
Desestrutura a seq em
s=(\p \r)
,m=(\e)
,c=\s
,n=\i
.Ou de "exemplo" é
s=[]
,m=(\e)
,c=\x
,n=\a
.Retorna a sequência de saída concatenando as partes juntas e as especificando.
E então eu apenas removi o máximo de espaço em branco possível enquanto ainda o compilava.
Desglomerado:
fonte
c
, por exemplo. (Também permitimos funções anônimas, que são mais curtas em muitos idiomas; não tenho certeza se elas estão no Clojure). Vejo que você já fez essa melhoria no interior do seu código, portanto, provavelmente não precisa mudar muito aqui.R, 341 caracteres
Horrenda tentativa R, por que as cordas são tão difíceis?
Versão legível:
fonte
BlitzMax, 190 bytes
Retira uma palavra de stdin e imprime o resultado em stdout. A palavra de entrada é assumida como minúscula e contém pelo menos uma vogal seguida por uma consoante.
Uma versão mais legível do programa com formatação e declarações de variáveis:
Como funciona:
O BlitzMax não possui nenhuma funcionalidade regular de regex ou similar; portanto, um loop é usado para iterar os caracteres da palavra de entrada até encontrar uma vogal seguida por uma cadeia de pelo menos uma consoante. A variável c armazena a posição da última dessas consoantes, v da vogal. O loop continua para ver se há outra vogal após a cadeia e, se houver, v é atualizado de acordo. Em seguida, a consoante em c é pesquisada na cadeia "bpdtfvgkcgsz", que atua como uma tabela de substituição. Se a consoante for encontrada na tabela em qualquer posição, essa posição será XOR-ed com 1 e o caractere na posição resultante será usado como substituto. A operação XOR transforma 0 em 1, 2 em 3, 4 em 5 etc. e vice-versa, para que b seja trocado por p, d com te assim por diante. Por fim, a sequência original até c,
Resultados de exemplo:
fonte
Perl, 71 bytes
Também corra com
perl -pe
. Alguns bytes a menos que a solução Perl anterior. É certo que também obtive alguma inspiração de lá.fonte
05AB1E ,
10110488 bytes-16 bytes graças a Okx
De alguma forma, espero que isso possa ser feito de maneira mais eficiente.
Experimente online!
Explicação
fonte
"bpcgdtfvgkhhjjkgllmmnnpbqqrrsztdvfwwxxzs"
por.•7¶ëÒ—Öb´ƒ≠Ä“šʒƵJ^ÝV“Îpи•
para salvar 15 bytesžOÃćIsk
poržOÃ0èk
para salvar outro byte.žOÃнk>[DIs£¤žPså#\>]©s[DIsèDžOså#\>]s\.•7¶ëÒ—Öb´ƒ≠Ä“šʒƵJ^ÝV“Îpи•S2ôDí«ø`®θkèìDJ
Experimente online. Eu me livrei principalmente de todos os swaps e swaps triplos usando uma variável. E0è
pode serн
, e eu substituí2׫
porDJ
para juntar a pilha inteira. PS: Também publiquei uma resposta 05AB1E de 55 bytes usando uma técnica diferente. (Que também inclui um link para entender melhor compressão em 05AB1E:. D)Cristal, 130 bytes
Como funciona
armazene um regex para pesquisar a primeira vogal para
c
.divida o primeiro argumento em três partes {"", String até um caractere antes da primeira consoante após a primeira vogal, restante da string} e armazene cada um dos elementos em x, ye z.
obtenha o primeiro caractere, a consoante relevante.
obtenha o índice da consoante dentro da string esquerda ou
nil
.caso
i
contrárionil
, use esse índice para a segunda sequência (tipo um hash de golfe).se
i
fornil
, use o caractere original.Em seguida, acrescente a primeira vogal de
z
.finalmente, imprima a primeira parte do primeiro regex
y
, a primeira consoantek
e duas vezes a string calculada anteriorb
.Experimente online .
fonte
Retina , 68 bytes
Experimente online!
fonte
Lua,
164157 bytesEditar 1: foram removidos 7 bytes procurando qualquer caractere após as consoantes (consulte regex)
Experimente online!
Este programa pega uma string no argumento da CLI e imprime sua versão protegida.
Esta é a minha primeira submissão a um código de golfe! Eu não verifiquei os outros em detalhes, por isso poderia ter perdido algumas otimizações comuns (e caído em algumas armadilhas). Eu usei Lua porque passei a gostar dessa pequena linguagem e tentei encontrar um regex que atendesse às minhas necessidades.
Aqui está uma versão mais limpa, usando uma função (eu pretendia usar uma, mas as palavras-chave em Lua são muito longas!):
Sinta-se livre para dar um feedback :)
Nota: Se você está se perguntando, é de 149 bytes usando o MoonScript!
fonte
JavaScript (ES5),
237229 bytesExperimente online!
Provavelmente não é o mais golfista, mas é o ES5.
Corrigido recentemente um erro. Exemplo de saída:
fonte
sed, 106 (105 + 1) bytes
Isso é sed com a
-E
bandeira, que aparentemente conta com um byte.Experimente online!
fonte
C #,
584581 bytes-3 bytes graças ao limão destrutível
Esta é a minha primeira submissão no Code Golf e no Stack Exchange em geral. Eu sei que o C # não é uma ótima linguagem para o golfe e isso provavelmente não está completamente otimizado, mas eu queria tentar: p. Todas as dicas são bem-vindas!
Versão Golfed:
Versão legível:
fonte
x++ < l
, ou seja , ou algo assim (talvezl > x++
se o primeiro não funcionar). Não tenho certeza, porém,SmileBASIC 3, 195 bytes
Muito tarde para essa pergunta, mas como resistir a um bom desafio para o SmileBASIC 3? Recursos como iterar sobre uma sequência ou manipular uma sequência de caracteres não são tão robustos quanto em outros idiomas; portanto, é um desafio fazer o menor possível. Assume que as palavras estão em MAIÚSCULAS.
Explicação detalhada aqui!
fonte
05AB1E , 55 bytes
Experimente online ou verifique todos os casos de teste .
Explicação:
Veja esta dicas 05AB1E da mina (seção Como comprimir cordas não fazem parte do dicionário? ) Para entender por que
.•gÍĆdQ¸G•
é"bcdfkszgvtgp"
.fonte