Inspirado pelo C- diretivo #define
.
Desafio
Dada uma frase com algum apelido e uma matriz com cada texto de apelido. Saída a frase inicial substituindo cada alias pelo seu respectivo texto.
Um alias é definido por um acentuado #
seguido por seu índice na matriz (o índice pode começar em zero ou um). Alias can contém outro alias dentro de seu texto e você deve resolvê-los (talvez recursivamente). Você pode assumir que o alias nunca funcionará em um loop infinito. O alias não terá zeros à esquerda ( #02
não é alias no índice 2
, é alias no índice 0
seguido pelo texto 2
).
Você pode assumir que a matriz não passará 20 itens de comprimento.
Você pode escrever um programa, uma função ou até um #define
- seria bom :)
Você também pode usar outro método de entrada que se adapte melhor ao seu idioma.
Exemplo
phrase: "#0 & #3"
array: [
"Programming #1",
"Puzzles",
"Code",
"#2 Golf"
]
output: "Programming Puzzles & Code Golf"
Passo a passo:
0> "#0 & #3"
1> "Programming #1 & #2 Golf"
2> "Programming Puzzles & Code Golf"
Como se trata de código-golfe , a resposta mais curta em bytes vence!
Outras amostras
phrase: "#0!"
array: [
"We are #1",
"#2",
"#3",
"#4 !",
"graduating"
]
output: "We are graduating !!"
phrase: "##0#1#0#21#3#4"
array: [
"a",
"m",
"z",
"n",
"g"
]
output: "#amaz1ng"
phrase: "##1#23"
array: [
"WEIRD",
"0 C",
"AS"
]
output: "WEIRD CAS3"
phrase: "#1#7#6y#4#7#10s#7b#11#0#0#11r#7#0h#6#5#2#5#9#4."
array: [
"t",
"#12#3",
"#11ga#3",
"#0#10v#11",
"#0h#10#8g",
"#7#8",
"a#8",
" ",
"n",
"o",
"i",
"e",
"P#9s#10"
]
output: "Positive anything is better than negative nothing."
Os exemplos acima usavam a matriz com o índice começando em zero.
#0
não deve aparecer? Ou é#01
válido, mas não é um alias (ou seja, é deixado como está)?#01
Respostas:
JavaScript (ES6) 58
Função recursiva
Teste
fonte
Mathematica, 74 bytes
Não é muito complicado. A maior parte é dedicada apenas à criação dos índices.
fonte
Julia,
11210766 bytesEsta é uma função recursiva que aceita uma string e uma matriz e retorna uma string. Ele usa indexação baseada em 0.
Começamos construindo uma string r como a string de entrada s com todas as correspondências da expressão regular
#1?\d
substituídas pelo elemento x correspondente a 1 + o número inteiro analisado. Se isso é igual a s , retornamos s , caso contrário, recorremos, passando r como a string.fonte
C,
269232Conforme solicitado, um único
#define
resolvendo o problema! As macros C não podem ser recursivas; portanto, o problema teve que ser resolvido iterativamente. A macro leva 3 argumentos; a frasep
, a matriza
e o comprimento da matrizl
.Apenas tirei o espaço em branco da minha solução não destruída; Eu sei que existem mais alguns personagens que posso salvar, mas acho que não me deixará abaixo de 200. Isso definitivamente não será uma solução competitiva.Solução é totalmente golfed. Solução não destruída na forma de uma função abaixo:E código de teste:
EDIT: Trabalhou alguma mágica de golfe. É tão curto e ilegível quanto eu acho que pode ficar.
fonte