Inspirado por el C- director #define
.
Desafío
Dada una frase con un alias y una matriz con cada texto de alias. Salida de la frase inicial reemplazando cada alias con su texto respectivo.
Un alias se define por una nitidez #
seguida de su índice en la matriz (el índice puede comenzar en cero o uno). Alias puede contener otro alias dentro de su texto, y debe resolverlos todos (tal vez de forma recursiva). Puede suponer que el alias nunca se ejecutará en un bucle infinito. El alias no tendrá ceros a la izquierda ( #02
no es un alias en el índice 2
, es un alias en el índice 0
seguido del texto 2
).
Puede suponer que la matriz no pasará 20 elementos de longitud.
Puedes escribir un programa, o una función o incluso un #define
- sería bueno :)
También puede usar otro método de entrada que se ajuste mejor a su idioma.
Ejemplo
phrase: "#0 & #3"
array: [
"Programming #1",
"Puzzles",
"Code",
"#2 Golf"
]
output: "Programming Puzzles & Code Golf"
Paso a paso:
0> "#0 & #3"
1> "Programming #1 & #2 Golf"
2> "Programming Puzzles & Code Golf"
Como se trata de código de golf , ¡la respuesta más corta en bytes gana!
Otras muestras
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."
Los ejemplos anteriores utilizan Array con índice que comienza en cero.
#0
debería aparecer? ¿O es#01
válido pero no es un alias (es decir, simplemente se deja como está)?#01
Respuestas:
JavaScript (ES6) 58
Función recursiva
Prueba
fuente
Mathematica, 74 bytes
No muy complicado La mayor parte está dedicada a crear los índices.
fuente
Julia,
11210766 bytesEsta es una función recursiva que acepta una cadena y una matriz y devuelve una cadena. Utiliza indexación basada en 0.
Comenzamos construyendo una cadena r como la cadena de entrada s con todas las coincidencias de la expresión regular
#1?\d
reemplazadas por el elemento de x correspondiente a 1 + el entero analizado fuera de la coincidencia. Si esto es igual a s , devolvemos s , de lo contrario repetimos, pasando r como la cadena.fuente
C,
269232Según lo solicitado, ¡una sola
#define
solución al problema! Las macros C no pueden ser recursivas, por lo que el problema tuvo que resolverse de forma iterativa. La macro toma 3 argumentos; la frasep
, la matriza
y la longitud de la matrizl
.Solo eliminé los espacios en blanco de mi solución no reflejada; Sé que hay algunos personajes más que puedo guardar, pero no creo que me pongan por debajo de 200. Esto definitivamente no será una solución competitiva.La solución está totalmente desarrollada. Solución sin golf en forma de una función a continuación:Y código de prueba:
EDITAR: Trabajó un poco de magia de golf. Es tan corto e ilegible como creo que puede llegar a ser.
fuente