Dada una entrada de dos cadenas con secuencias de guiones bajos que representan las palabras correspondientes, genera las oraciones con los "espacios en blanco" rellenados.
La mejor manera de describir este desafío es con el ejemplo. Aquí hay un ejemplo de entrada:
programming _____________ and code golf
programming puzzles ______ code ____
Y aquí está la salida correspondiente:
programming ___puzzles___ and code golf
programming puzzles _and__ code golf
Para los propósitos de este desafío, una "palabra" se define como una secuencia de una o más letras minúsculas, y un "espacio en blanco" se define como uno o más guiones bajos (la entrada siempre contendrá solo letras minúsculas, espacios y guiones bajos) . Las palabras y los espacios en blanco en las cadenas de entrada están separadas por espacios individuales, y la suma del número de palabras y espacios en blanco en las oraciones siempre será igual.
El objetivo del desafío es llenar todos los espacios en blanco con las palabras correctas , que son las palabras que ocupan el mismo índice en la otra cadena cuando se dividen por espacios.
La palabra debe estar centrada en el espacio en blanco, como se muestra con la palabra "rompecabezas" en el ejemplo anterior; un número igual de guiones bajos permanece a cada lado.
Si la palabra no puede estar exactamente centrada, el guión bajo adicional puede ir a la izquierda o a la derecha (por ejemplo, la palabra "y" en el ejemplo anterior).
Siempre habrá suficientes guiones bajos para que la palabra se ajuste, pero puede haber exactamente tantos como la longitud de la palabra (por ejemplo, la palabra "golf" en el ejemplo anterior).
Nunca habrá un espacio en blanco en la misma posición en ambas cadenas.
La entrada / salida puede ser cualquiera de los siguientes (la entrada / salida no necesariamente tiene que ser a través del mismo método):
cadena simple separada por cualquier carácter que no sea alfabético, un espacio o un guión bajo (por ejemplo, línea nueva o cadena separada por comas)
una matriz / lista / etc. de dos cuerdas
dos argumentos de línea de función / comando (solo entrada)
Como se trata de código golf , el código más corto en bytes ganará.
El ejemplo anterior se puede usar como un caso de prueba. Aquí hay un caso de prueba más grande (la segunda cadena en la salida puede variar ligeramente debido a un comportamiento de centrado diferente):
lorem _____ dolor _____ amet _______________ adipiscing elit mauris dapibus tincidunt _____________________________ accumsan fringilla proin vulputate viverra lorem fermentum dictum
lorem ipsum ______ sit _______ consectetur _______________ elit mauris dapibus tincidunt metus accumsan fringilla proin vulputate viverra lorem ____________________________ dictum
lorem ipsum dolor _sit_ amet __consectetur__ adipiscing elit mauris dapibus tincidunt ____________metus____________ accumsan fringilla proin vulputate viverra lorem fermentum dictum
lorem ipsum dolor_ sit _amet__ consectetur __adipiscing___ elit mauris dapibus tincidunt metus accumsan fringilla proin vulputate viverra lorem _________fermentum__________ dictum
Respuestas:
Pyth, 30
Toma entradas y salidas como una lista de dos cadenas. Utiliza un enfoque bastante básico de división-zip-doble mapa-centro-zip-unión.
Pruébalo aquí
Expandido:
Explicaré más una vez que esté realmente satisfecho de que no puedo seguir jugando al golf, aunque debería ser bastante claro, dada la ubicuidad del enfoque de división-zip-doble mapa-centro-zip-unión y todo.
fuente
Retina ,
1021009388 bytesEl recuento de bytes asume la codificación ISO 8859-1.
Las cadenas estarán separadas por un salto de línea. Si queda un número impar de guiones bajos, el extraño aparecerá después de la palabra.
Pruébalo en línea!
Explicación
Supongo que este es el enfoque "duplicar-agregar-mirar hacia atrás-coincidir-agregar-centro", o algo parecido ...
Comenzamos duplicando la entrada (separada con un
!
y un salto de línea). El propósito de esto es que podemos procesar ambas líneas buscando palabras de la siguiente línea (en lugar de tener que tratar la segunda línea por separado).Esto antepone la palabra correcta a cada espacio. Comenzamos contando la posición actual de la palabra con la mirada hacia atrás
(?<=^(\w+ )*)
(la posición se almacena como la profundidad del grupo1
). Luego, la búsqueda anticipada a) asegura que estamos al comienzo de una brecha al hacer coincidir_
, luego salta a la siguiente línea con.*¶
, coincide con el número correcto de palabras con(?<-1>\w+ )*
para llegar a la posición correcta, y luego coincide con la palabra encontrada allí(\w+)
en grupo2
.Esta etapa hace tres cosas:
2
con([a-z])+
y luego a juego que muchos guiones (que nunca están de vuelta escrito).(_*)\3
y escribir de$3$1$3
nuevo.!\D+
y reemplazando con nada.fuente
Pitón 2, 109
La función toma dos cadenas como argumentos e imprime la salida como en los ejemplos. Utiliza un enfoque aburrido,
str.center(width, fillchar)
haciendo la mayor parte del trabajo.Pruébalo en línea .
fuente
z
, a menos que me falte algo, simplemente puede hacer el intercambio después de la impresión y en líneaz
.Ruby,
111109 caracteresEntrada: conjunto de 2 cadenas; salida: conjunto de 2 cadenas.
Ejecución de muestra:
fuente
JavaScript,
194185bytesToma dos cadenas como parámetros y genera dos cadenas como matriz / lista
Mostrar fragmento de código
fuente
Mathematica 223
Debe haber una forma más corta de hacer esto.
Ejecución de la muestra
fuente
Gema,
208203 caracteresEl hecho de que Gema tiene la función perfecta para esta tarea: .
@fill-center{background;value}
Entrada: 2 líneas separadas por nueva línea (sin nueva línea final); salida: 2 líneas separadas de nueva línea (con espacios finales, no parece estar prohibido).
Ejecución de muestra:
fuente
C, 197 bytes
Salida
fuente
ES6, 122 bytes
Toma una matriz de dos cadenas como un solo parámetro y devuelve otra matriz de dos cadenas.
fuente