¡Complete los espacios en blanco, por favor!


11

(No, no esto ni ninguno de estos )

Dada una cadena y una lista de cadenas, complete todos los espacios en blanco en la cadena de entrada con las cadenas correspondientes.

De entrada y salida

La cadena de entrada contiene solo caracteres alfabéticos, espacios y guiones bajos. No está vacío y no comienza con un guión bajo. En otras palabras, la cadena de entrada coincide con la expresión regular^[a-z A-Z]([a-z A-Z_]*[a-z A-Z])?$

Cada cadena de la lista de entrada no está vacía y contiene solo caracteres alfanuméricos y espacios. En otras palabras, coinciden con la expresión regular ^[a-z A-Z]+$.

Un espacio en blanco es una secuencia contigua de guiones bajos ( _) que no está precedida ni precedida por un guión bajo.

La cadena de entrada contiene nespacios en blanco para algún número entero positivo n, y la lista de cadenas contiene exactamente ncadenas.

La salida se obtiene reemplazando cada kenésimo en blanco en la cadena de entrada por la kenésima cadena en la lista de entrada de cadenas.

Ejemplo

Dada una cadena de entrada "I like _____ because _______ _____ing"y una lista de cadenas ["ice cream", "it is", "satisfy"], podemos encontrar la salida de la siguiente manera:

  • El primer espacio en blanco viene directamente después "like ". Completamos eso con "ice cream"para obtener "I like ice cream because ______ _____ing".
  • El segundo espacio en blanco viene directamente después "because ". Completamos eso con "it is"para obtener "I like ice cream because it is _____ing".
  • El tercer espacio en blanco viene directamente después "is ". Completamos eso con "satisfy"para obtener "I like ice cream because it is satisfying".

Sacamos la cadena final "I like ice cream because it is satisfying".

Casos de prueba

input string, input list => output
"Things _____ for those who ____ of how things work out _ Wooden",["work out best","make the best","John"] => "Things work out best for those who make the best of how things work out John Wooden"
"I like _____ because _______ _____ing",["ice cream","it is","satisfy"] => "I like ice cream because it is satisfying"
"If you are ___ willing to risk _____ you will ha_o settle for the ordi_____Jim ______n",["not","the usual","ve t","nary ","Roh"] => "If you are not willing to risk the usual you will have to settle for the ordinary Jim Rohn"
"S____ is walking from ____ to ____ with n_oss of ___ W_____ Churchill",["uccess","failure","failure","o l","enthusiasm","inston"] => "Success is walking from failure to failure with no loss of enthusiasm Winston Churchill"
"If_everyone_is_thinking ____ ____ somebody_isnt_thinking G____e P____n",[" "," "," ","alike","then"," "," ","eorg","atto"] => "If everyone is thinking alike then somebody isnt thinking George Patton"
"Pe_________e __say ____motivation does__ last Well___her doe_ bathing____thats why we rec____nd it daily _ __________lar",["opl","often ","that ","nt"," neit","s","  ","omme","Zig","Zig"] => "People often say that motivation doesnt last Well neither does bathing  thats why we recommend it daily Zig Ziglar"

55
Muchas explicaciones para la tarea trivial.

Respuestas:


5

Convexo , 5 bytes

'_%.\

Pruébalo en línea!

Convex es un lenguaje basado en CJam, y esta respuesta es casi la misma que mi respuesta de CJam, excepto l~que aquí no es necesaria, ya que Convex realiza una evaluación automática de argumentos al inicio del programa.

Explicación:

'_%.\ e# Full program only
'_    e# Push '_'
  %   e# Split and remove empty chunks
   .\ e# Vectorize by Swap

4

Japt , 8 bytes

r"_+"@Vv

¡Pruébalo en línea!

Siento que me perdí algo oculto en las reglas porque esto es extremadamente simple: "reemplace cada ejecución de guiones bajos en la cadena con el siguiente elemento en la matriz".


3

JavaScript, 35 bytes

a=>b=>a.replace(/_+/g,a=>b.shift())

Pruébalo en línea


1
Lo mismo que tuve. Alternativamente,a=>b=>String.raw({raw:a.split(/_+/)},...b)
ETHproductions


2

MATL , 9 bytes

'_+'i1&YX

Pruébalo en línea!

Explicación

'_+'   % Push this string: regexp pattern
i      % Input cell array of replacement strings
1      % Push 1
&YX    % Four-input regexp replacement. This implicitly inputs the original
       % string, and consecutively replaces each first occurrence of the 
       % regexp pattern in that string by one of the replacement strings.
       % Implicitly display

2

CJam , 7 bytes

l~'_%.\

Pruébalo en línea!

-1 gracias a un ingenioso truco de Martin Ender .

Explicación:

l~'_%.\ e# Full program only
l       e# Input line
 ~      e# Eval
  '_    e# Push '_'
    %   e# Split and remove empty chunks
     .\ e# Vectorize by Swap

.\en lugar de \]z.
Martin Ender

@MartinEnder Eso funciona o_o
Erik the Outgolfer

Claro, \es un operador binario. :)
Martin Ender

@MartinEnder Parece que he aprendido demasiado sobre cómo funciona el mapeo en CJam.
Erik the Outgolfer

@MartinEnder OK, pensándolo bien, ¿cómo no pensé en eso? No es como si no supiera cómo se comporta el mapeo, por ejemplo, [1 2 3]:_-> [1 1 2 2 3 3]igualmente para ....
Erik the Outgolfer

2

Jalea , 8 7 bytes

ṣ”_¬Ðfż

Pruébalo en línea! Editar: guardado 1 byte gracias a @Erik the Outgolfer. Explicación:

ṣ”_         Split on underscores
   ¬Ðf      Discard empty values
      ż     Zip with second input
            Implicit concatenated output


1

Pyth , 10 bytes

s.i:E"_+"3

Pruébalo aquí!

¿Cómo funciona?

si: E "_ +" 3 Programa completo.

   : E 3 Divide la segunda entrada en las coincidencias de la expresión regular ...
     "_ +" La expresión regular "_ +" (coincide con 1 o más guiones bajos)
 .i Intercalar los elementos de la lista dividida con la entrada.
s Únete a una cadena.

1

RProgN 2 , 11 bytes

x='_+'³[x‘r

Toma una cuerda y una pila de cuerdas en la parte superior de la pila.

El primer elemento (superior) de una pila está a la derecha, por lo tanto, la entrada es de derecha a izquierda.

Explicado

x='_+'³[x‘r
x=          # Set the stack of replacements to x
  '_+'³   r # Replace each chunk of _'s with the function...
       [    # Pop off the group of _'s
        x‘  # Pop the top element off x. Use that.

Pruébalo en línea!


1

Java 8, 57 bytes

a->s->{for(String i:a)s=s.replaceFirst("_+",i);return s;}

Cuando leí el desafío, al principio pensé que deberíamos hacer una oración gramaticalmente correcta con las palabras en orden aleatorio, pero reemplazar las líneas con cada palabra secuencial es más fácil. ;)

Explicación:

Pruébalo aquí.

a->s->{            // Method with String-array and String parameter and String return-type
  for(String i:a)  //  Loop over the input-array
    s=s.replaceFirst("_+",i);
                   //   Replace the first line (1 or more adjacent "_") with the substring
                   //  End of loop (implicit / single-line body)
  return s;        //  Return the result
}                  // End of method




0

Python 2 , 61 bytes

import re
s,l=input()
for i in l:s=re.sub('_+',i,s,1)
print s

Pruébalo en línea!

Maldición.

Python 2 , 63 bytes

import re
f=lambda s,l:l and f(re.sub('_+',l[0],s,1),l[1:])or s

Pruébalo en línea!


60 bytes pasando re.subuna función
Stephen

@Stephen Eh ... Eso está demasiado cerca de su solución. Me limitaré a esto y encontraré soluciones más oscuras. : P
totalmente humano

53 bytes utilizando una función para mejorar la propuesta de @ Stephen.
Jonathan Frech

@ JonathanFrech, sí, pero esa es exactamente mi respuesta : P
Stephen

@Stephen Oh; no vi su respuesta ...: d
Jonathan Frech


0

SOGL V0.12 , 7 bytes

lΔ╔*№≤ŗ

Pruébalo aquí!

Explicación:

l        get the strings length
 Δ       range
  ╔*     multiply an underscore with each of the numbers
    №    reverse vertically (so the longest underscores get replaced first)
     ≤   put the array on top - order parameters for ŗ correctly
      ŗ  replace in the original string each any occurence of the underscores with its corresponding item in the array

0

Python 2 , 49 bytes

s,l=input();import re;print re.sub("_+","%s",s)%l

Pruébalo en línea!

La entrada de la lista se toma como una tupla. Permitir listas reales como entrada agregaría otros siete bytes, ya que se requeriría una conversión ( tuple(...)).

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.