Invierta el método de formato.
El Format
método de la clase String (o equivalente, comosprintf
) está disponible en la mayoría de los idiomas. Básicamente toma una cadena de "Formato" que puede contener marcadores de posición con algún formato adicional y cero o más valores para insertar en lugar de esos marcadores de posición.
Su tarea es implementar la función inversa en el idioma que elija.
API
El nombre del método debe ser format1
o deformat
.
Entrada : el primer parámetro será la cadena de "Formato", al igual que en el método de formato original. El segundo parámetro será la cadena analizada (ver ejemplos a continuación). No se necesitan ni se permiten otros parámetros.
Salida : una matriz (o el equivalente de su idioma de elección) de valores que se extrajeron correspondientemente con los marcadores de posición en el formato.
Los marcadores de posición son {0}
, {1}
, {2}
, etc.
En caso de mal formato, puede arrojar un error o devolver lo que quiera.
En caso de una entrada no válida, puede lanzar un error o devolver lo que desee. Entrada no válida es tal que no puede ser generada por el uso de String.Format misma cadena de formato, por ejemplo: '{0}{0}', 'AAB'
.
Ejemplos
deformat('{0} {1}', 'hello world') => ['hello', 'world']
deformat('http{0}://', 'https://') => ['s']
deformat('http{0}://', 'http://') => [''] // array of one item which is an empty string
deformat('{0}{1}{0}', 'ABBA') => ['A', 'BB']
Ambigüedad
En caso de ambigüedad, puede devolver cualquier respuesta adecuada. Por ejemplo:
deformat('{0} {1}', 'Edsger W. Dijkstra')
// both ['Edsger', 'W. Dijkstra'] and ['Edsger W.', 'Dijkstra'] are applicable.
Algunas reglas más
- Para hacerlo más fácil, no es necesario admitir el formateo. Puede olvidarse de los ceros a la izquierda, el punto decimal o los problemas de redondeo. Simplemente genere los valores como cadenas.
- Para que no sea trivial, no se permiten expresiones regulares .
- No necesita ocuparse de las llaves en la entrada (es decir, el segundo parámetro de entrada no contendrá ninguna
{
s o}
s).
Victorioso
Este es el código de golf ! (debe leerse como "¡Esto es Esparta!") gana la función correcta que tenga la menor longitud. Las lagunas estándar están prohibidas.
['', 'AAAA']
, ['A', 'AA']
,['AA', '']
deformat('{0}{1}{0}', 'ABBA') => ['', 'ABBA']
? Si es así, hay una solución barata a menos que cada cadena aparezca al menos dos veces.
deformat('{0}_{1}_{0}', 'A_BB_A')
?
deformat('{0}{1}{0}', 'ABBA') => ['A', 'BB']
, ¿qué pasaría si nos dieran en cambiodeformat('{0}{1}{0}', 'AAAA')
?