Remplissez les blancs, s'il vous plaît!

11

(Non, ni ceci ni aucun d'entre eux )

Étant donné une chaîne et une liste de chaînes, remplissez tous les blancs de la chaîne d'entrée avec les chaînes correspondantes.

Entrée sortie

La chaîne d'entrée ne contient que des caractères alphabétiques, des espaces et des traits de soulignement. Il n'est pas vide et ne commence pas par un trait de soulignement. En d'autres termes, la chaîne d'entrée correspond à l'expression régulière^[a-z A-Z]([a-z A-Z_]*[a-z A-Z])?$

Chaque chaîne de la liste d'entrée n'est pas vide et ne contient que des caractères alphanumériques et des espaces. En d'autres termes, ils correspondent à l'expression régulière ^[a-z A-Z]+$.

Un blanc est une séquence contiguë de traits de soulignement ( _) qui n'est ni précédée ni précédée d'un trait de soulignement.

La chaîne d'entrée contient des nespaces pour un entier positif n, et la liste des chaînes contient exactement des nchaînes.

La sortie est obtenue en remplaçant chaque k-ième blanc dans la chaîne d'entrée par la k-ième chaîne dans la liste d'entrée de chaînes.

Exemple

Étant donné une chaîne d'entrée "I like _____ because _______ _____ing"et une liste de chaînes ["ice cream", "it is", "satisfy"], nous pouvons trouver la sortie comme suit:

  • Le premier blanc vient directement après "like ". Nous remplissons cela avec "ice cream"pour obtenir "I like ice cream because ______ _____ing".
  • Le deuxième blanc vient directement après "because ". Nous remplissons cela avec "it is"pour obtenir "I like ice cream because it is _____ing".
  • Le troisième blanc vient juste après "is ". Nous remplissons cela avec "satisfy"pour obtenir "I like ice cream because it is satisfying".

Nous sortons la chaîne finale "I like ice cream because it is satisfying".

Cas de test

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"
fireflame241
la source
5
Beaucoup d'explications pour une tâche triviale.

Réponses:

5

Convexe , 5 octets

'_%.\

Essayez-le en ligne!

Convex est un langage basé sur CJam, et cette réponse est presque la même que ma réponse CJam, à l'exception de celle l~qui n'est pas nécessaire ici, car Convex effectue une évaluation automatique des arguments au début du programme.

Explication:

'_%.\ e# Full program only
'_    e# Push '_'
  %   e# Split and remove empty chunks
   .\ e# Vectorize by Swap
Erik le Outgolfer
la source
4

Japt , 8 octets

r"_+"@Vv

Testez-le en ligne!

Je sens que j'ai raté une capture cachée dans les règles parce que c'est extrêmement simple: "remplacez chaque série de traits de soulignement dans la chaîne par l'élément suivant dans le tableau."

ETHproductions
la source
3

JavaScript, 35 octets

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

Essayez-le en ligne


la source
1
Même chose que j'avais. Alternativement,a=>b=>String.raw({raw:a.split(/_+/)},...b)
ETHproductions
2

Proton , 42 octets

a=>b=>re.sub("_+",_=>b.pop(0),a)
import re

Essayez-le en ligne!

Importations stupides ...

Même chose en python:

Python 3 , 53 octets

lambda a,b:re.sub("_+",lambda _:b.pop(0),a)
import re

Essayez-le en ligne!

Stephen
la source
... Comment ai-je pu rater ça? ._.
2017 totalement humain
2

MATL , 9 octets

'_+'i1&YX

Essayez-le en ligne!

Explication

'_+'   % 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
Luis Mendo
la source
2

CJam , 7 octets

l~'_%.\

Essayez-le en ligne!

-1 grâce à un astucieux tour de Martin Ender .

Explication:

l~'_%.\ e# Full program only
l       e# Input line
 ~      e# Eval
  '_    e# Push '_'
    %   e# Split and remove empty chunks
     .\ e# Vectorize by Swap
Erik le Outgolfer
la source
.\au lieu de \]z.
Martin Ender
@MartinEnder Ça marche o_o
Erik the Outgolfer
Bien sûr, \est un opérateur binaire. :)
Martin Ender
@MartinEnder On dirait que j'en ai trop appris sur le fonctionnement du mappage dans CJam.
Erik the Outgolfer
@MartinEnder OK à la réflexion, comment n'y ai-je pas pensé? Pas comme si je ne savais pas comment se comportait la cartographie, par exemple [1 2 3]:_-> de [1 1 2 2 3 3]même pour ....
Erik the Outgolfer
2

Gelée , 8 7 octets

ṣ”_¬Ðfż

Essayez-le en ligne! Edit: 1 octet enregistré grâce à @Erik the Outgolfer. Explication:

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

Perl 5 , 25 + 1 (-p) = 26 octets

@a=eval<>;s|_+|shift@a|eg

Essayez-le en ligne!

Xcali
la source
Entré avec essentiellement la même chose, sauf en utilisant <>pour annuler le evalet shift: Essayez-le en ligne! . Il doit y avoir un moyen d'éviter le remplacement des nouvelles lignes ...
Dom Hastings
Ce sous - programme a également 26 octets: sub{shift=~s|_+|shift|egr}. Si vous inversez les arguments, vous pouvez les utiliser popet les réduire à 22 octets .
nwellnhof
1

Pyth , 10 octets

s.i:E"_+"3

Essayez-le ici!

Comment ça fonctionne?

si: E "_ +" 3 Programme complet.

   : E 3 Divisez la deuxième entrée sur les correspondances de l'expression régulière ...
     "_ +" L'expression régulière "_ +" (correspond à 1 ou plusieurs traits de soulignement)
 .i Entrelace les éléments de la liste fractionnée avec l'entrée.
s Joindre à une chaîne.
M. Xcoder
la source
1

RProgN 2 , 11 octets

x='_+'³[x‘r

Prend une chaîne et une pile de chaînes en haut de la pile.

Le premier élément (supérieur) d'une pile est à droite, donc l'entrée est de droite à gauche.

Expliqué

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.

Essayez-le en ligne!

ATaco
la source
1

Java 8, 57 octets

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

Quand j'ai lu le défi, j'ai d'abord pensé que nous devrions faire une phrase grammaticalement correcte avec les mots dans un ordre aléatoire, mais simplement remplacer les lignes par chaque mot séquentiel est plus facile. ;)

Explication:

Essayez-le ici.

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
Kevin Cruijssen
la source
1

05AB1E , 12 octets

„__¤:sv'_y.;

Essayez-le en ligne!

Explication

„__¤:          # replace all runs of multiple "_" with a single "_"
     sv        # for each y in the list of replacements
       '_y.;   # replace the first instance of "_" with y
Emigna
la source
1
whoops corrigé pour +3: p
Erik the Outgolfer
@EriktheOutgolfer: Merci d'avoir remarqué. Je suis revenu à ma version précédente qui gérait cela.
Emigna
1

C # (.NET Core) , 97 96 + 18 octets

1 octet enregistré grâce à Kevin Cruijssen !

Les 18 octets sont à utiliser System.Linq.

s=>l=>string.Concat(s.Split('_').Where(x=>x!="").Zip(l.Concat(new[]{""}),(x,y)=>x+y).ToArray());

Essayez-le en ligne!

Ian H.
la source
Vous pouvez changer (s,l)=>pour s=>l=>enregistrer un octet. Essayez-le en ligne!
Kevin Cruijssen
0

Ruby , 28 + 1 = 29 octets

$_=gsub(/_+/){|i|gets[/.*/]}

Les usages -p

La première ligne est la chaîne de format, les autres lignes sont le tableau.

Essayez-le en ligne!

Pavel
la source
0

Python 2 , 61 octets

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

Essayez-le en ligne!

Zut.

Python 2 , 63 octets

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

Essayez-le en ligne!

totalement humain
la source
60 octets en passant re.subune fonction
Stephen
@Stephen Eh ... C'est tout simplement trop proche de votre solution. Je vais m'en tenir à cela et trouver des solutions plus obscures. : P
totalement humain
53 octets en utilisant une fonction pour améliorer la proposition de @ Stephen.
Jonathan Frech
@JonathanFrech oui, mais c'est exactement ma réponse déjà: P
Stephen
@Stephen Oh; n'a pas vu votre réponse ...: d
Jonathan Frech
0

Empilé , 21 octets

[@y'_+'[y shift]repl]

Essayez-le en ligne!

Remplace toutes les séries de _par y shift. Rien d'original, semble-t-il.

Conor O'Brien
la source
0

SOGL V0.12 , 7 octets

lΔ╔*№≤ŗ

Essayez-le ici!

Explication:

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
dzaima
la source
0

Python 2 , 49 octets

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

Essayez-le en ligne!

L'entrée de liste est considérée comme un tuple. Autoriser les listes réelles en entrée ajouterait encore sept octets, car une conversion serait nécessaire ( tuple(...)).

Jonathan Frech
la source