Füllen Sie bitte die Lücken aus!

11

(Nein, weder dies noch eines davon )

Füllen Sie bei einer Zeichenfolge und einer Liste von Zeichenfolgen alle Lücken in der Eingabezeichenfolge mit den entsprechenden Zeichenfolgen aus.

Input-Output

Die Eingabezeichenfolge enthält nur alphabetische Zeichen, Leerzeichen und Unterstriche. Es ist nicht leer und beginnt nicht mit einem Unterstrich. Mit anderen Worten, die Eingabezeichenfolge stimmt mit dem regulären Ausdruck überein^[a-z A-Z]([a-z A-Z_]*[a-z A-Z])?$

Jede Zeichenfolge in der Eingabeliste ist nicht leer und enthält nur alphanumerische Zeichen und Leerzeichen. Mit anderen Worten, sie stimmen mit dem regulären Ausdruck überein ^[a-z A-Z]+$.

Ein Leerzeichen ist eine zusammenhängende Folge von Unterstrichen ( _), denen weder ein Unterstrich vorangestellt noch vorangestellt wird.

Die Eingabezeichenfolge enthält nLeerzeichen für eine positive Ganzzahl n, und die Liste der Zeichenfolgen enthält genau nZeichenfolgen.

Die Ausgabe wird erhalten, indem jedes k-te Leerzeichen in der Eingabezeichenfolge durch die k-te Zeichenfolge in der Eingabeliste der Zeichenfolgen ersetzt wird.

Beispiel

Bei einer Eingabezeichenfolge "I like _____ because _______ _____ing"und einer Liste von Zeichenfolgen ["ice cream", "it is", "satisfy"]können wir die Ausgabe wie folgt finden:

  • Das erste Leerzeichen kommt direkt danach "like ". Wir füllen das aus "ice cream", um zu bekommen "I like ice cream because ______ _____ing".
  • Das zweite Leerzeichen kommt direkt danach "because ". Wir füllen das aus "it is", um zu bekommen "I like ice cream because it is _____ing".
  • Das dritte Leerzeichen kommt direkt danach "is ". Wir füllen das aus "satisfy", um zu bekommen "I like ice cream because it is satisfying".

Wir geben die letzte Zeichenfolge aus "I like ice cream because it is satisfying".

Testfälle

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
quelle
5
Viele Erklärungen für triviale Aufgaben.

Antworten:

5

Konvex , 5 Bytes

'_%.\

Probieren Sie es online aus!

Convex ist eine CJam-basierte Sprache, und diese Antwort ist fast dieselbe wie meine CJam-Antwort, außer dass l~dies hier nicht erforderlich ist, da Convex zu Beginn des Programms eine automatische Argumentauswertung durchführt.

Erläuterung:

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

Japt , 8 Bytes

r"_+"@Vv

Testen Sie es online!

Ich habe das Gefühl, dass ich einen versteckten Haken in den Regeln verpasst habe, weil dies extrem einfach ist: "Ersetzen Sie jeden Lauf von Unterstrichen in der Zeichenfolge durch das nächste Element im Array."

ETH-Produktionen
quelle
3

JavaScript, 35 Bytes

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

Probieren Sie es online aus


quelle
1
Das gleiche was ich hatte. Alternativa=>b=>String.raw({raw:a.split(/_+/)},...b)
ETHproductions
2

MATL , 9 Bytes

'_+'i1&YX

Probieren Sie es online aus!

Erläuterung

'_+'   % 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
quelle
2

CJam , 7 Bytes

l~'_%.\

Probieren Sie es online aus!

-1 dank eines cleveren Tricks von Martin Ender .

Erläuterung:

l~'_%.\ e# Full program only
l       e# Input line
 ~      e# Eval
  '_    e# Push '_'
    %   e# Split and remove empty chunks
     .\ e# Vectorize by Swap
Erik der Outgolfer
quelle
.\statt \]z.
Martin Ender
@ MartinEnder Das funktioniert o_o
Erik der Outgolfer
Sicher, \ist ein binärer Operator. :)
Martin Ender
@MartinEnder Scheint, als hätte ich etwas zu viel darüber gelernt, wie Mapping in CJam funktioniert.
Erik der Outgolfer
@MartinEnder OK beim zweiten Gedanken, wie habe ich nicht daran gedacht? Nicht als ob ich nicht wüsste wie sich Mapping verhält zB [1 2 3]:_-> [1 1 2 2 3 3]ebenfalls für ....
Erik der Outgolfer
2

Gelee , 8 7 Bytes

ṣ”_¬Ðfż

Probieren Sie es online aus! Bearbeiten: 1 Byte dank @Erik the Outgolfer gespeichert. Erläuterung:

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

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

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

Probieren Sie es online aus!

Xcali
quelle
Kam im Grunde das gleiche mit, außer mit <>, um das evalund zu negieren shift: Versuchen Sie es online! . Es muss einen Weg geben, das Ersetzen der Zeilenumbrüche zu vermeiden ...
Dom Hastings
Diese Unterroutine hat auch 26 Bytes : sub{shift=~s|_+|shift|egr}. Wenn Sie die Argumente umgekehrt haben, können Sie sie verwenden popund auf 22 Byte reduzieren .
Nwellnhof
1

Pyth , 10 Bytes

s.i:E"_+"3

Probieren Sie es hier aus!

Wie es funktioniert?

si: E "_ +" 3 Vollständiges Programm.

   : E 3 Teilen Sie den zweiten Eingang bei Übereinstimmungen mit dem regulären Ausdruck ...
     "_ +" Der reguläre Ausdruck "_ +" (entspricht 1 oder mehr Unterstrichen)
 .i Verschachteln Sie die Elemente der Teilungsliste mit der Eingabe.
s Mit einer Zeichenfolge verbinden.
Mr. Xcoder
quelle
1

RProgN 2 , 11 Bytes

x='_+'³[x‘r

Nimmt eine Zeichenfolge und einen Stapel von Zeichenfolgen oben auf dem Stapel.

Das erste (obere) Element eines Stapels befindet sich rechts, daher erfolgt die Eingabe von rechts nach links.

Erklärt

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.

Probieren Sie es online aus!

Ein Taco
quelle
1

Java 8, 57 Bytes

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

Als ich die Herausforderung las, dachte ich zuerst, wir sollten einen grammatikalisch korrekten Satz bilden, wobei die Wörter in zufälliger Reihenfolge sind, aber es ist einfacher, nur Zeilen durch jedes aufeinanderfolgende Wort zu ersetzen. ;)

Erläuterung:

Probieren Sie es hier aus.

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
quelle
1

05AB1E , 12 Bytes

„__¤:sv'_y.;

Probieren Sie es online aus!

Erläuterung

„__¤:          # 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
quelle
1
whoops behoben für +3: p
Erik der Outgolfer
@EriktheOutgolfer: Danke, dass du es bemerkt hast. Ich habe auf meine vorherige Version zurückgesetzt, die das erledigt hat.
Emigna
0

Ruby , 28 + 1 = 29 Bytes

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

Verwendet -p

Die erste Zeile ist die Formatzeichenfolge, der Rest der Zeilen ist das Array.

Probieren Sie es online aus!

Pavel
quelle
0

Python 2 , 61 Bytes

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

Probieren Sie es online aus!

Verdammt.

Python 2 , 63 Bytes

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

Probieren Sie es online aus!

total menschlich
quelle
60 Bytes durch Übergeben re.subeiner Funktion
Stephen
@ Stephen Eh ... Das ist einfach zu nah an Ihrer Lösung. Ich bleibe einfach dabei und finde dunkelere Lösungen. : P
totalhuman
53 Bytes durch Verwendung einer Funktion zur Verbesserung des Vorschlags von @ Stephen.
Jonathan Frech
@ JonathanFrech ja, aber genau das ist schon meine Antwort : P
Stephen
@ Stephen Oh; habe deine Antwort nicht gesehen ...: d
Jonathan Frech
0

Gestapelt , 21 Bytes

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

Probieren Sie es online aus!

Ersetzt alle Läufe von _durch y shift. Nichts Originelles, wie es scheint.

Conor O'Brien
quelle
0

SOGL V0.12 , 7 Bytes

lΔ╔*№≤ŗ

Probieren Sie es hier aus!

Erläuterung:

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
quelle
0

Python 2 , 49 Bytes

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

Probieren Sie es online aus!

Die Listeneingabe wird als Tupel verwendet. Wenn Sie tatsächliche Listen als Eingabe zulassen, werden weitere sieben Bytes hinzugefügt, da eine Konvertierung erforderlich wäre ( tuple(...)).

Jonathan Frech
quelle