Proszę wypełnić puste pola!

11

(Nie, nie to ani żadne z nich )

Biorąc pod uwagę ciąg i listę ciągów, wypełnij wszystkie puste pola wejściowe odpowiednimi ciągami.

Wejście wyjście

Łańcuch wejściowy zawiera tylko znaki alfabetyczne, spacje i podkreślenia. Jest niepusty i nie zaczyna się od podkreślenia. Innymi słowy, łańcuch wejściowy pasuje do wyrażenia regularnego^[a-z A-Z]([a-z A-Z_]*[a-z A-Z])?$

Każdy ciąg na liście wejściowej jest niepusty i zawiera tylko znaki alfanumeryczne i spacje. Innymi słowy, pasują do wyrażenia regularnego ^[a-z A-Z]+$.

Puste miejsce to ciągła sekwencja znaków podkreślenia ( _), które nie są poprzedzane ani poprzedzane znakiem podkreślenia.

Łańcuch wejściowy zawiera nspacje dla dodatniej liczby całkowitej n, a lista ciągów zawiera dokładnie nłańcuchy.

Dane wyjściowe uzyskuje się przez zastąpienie każdego k-tego pustego miejsca w ciągu wejściowym k-tym ciągiem na liście wejściowej ciągów.

Przykład

Biorąc pod uwagę ciąg wejściowy "I like _____ because _______ _____ing"i listę ciągów ["ice cream", "it is", "satisfy"], możemy znaleźć dane wyjściowe w następujący sposób:

  • Pierwszy blank pojawia się bezpośrednio po "like ". Wypełniamy to, "ice cream"aby uzyskać "I like ice cream because ______ _____ing".
  • Drugi blank pojawia się bezpośrednio po "because ". Wypełniamy to, "it is"aby uzyskać "I like ice cream because it is _____ing".
  • Trzecie puste miejsce następuje bezpośrednio po "is ". Wypełniamy to, "satisfy"aby uzyskać "I like ice cream because it is satisfying".

Wyprowadzamy ostatni ciąg "I like ice cream because it is satisfying".

Przypadki testowe

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
źródło
5
Wiele wyjaśnień dla trywialnych zadań.

Odpowiedzi:

5

Wypukły , 5 bajtów

'_%.\

Wypróbuj online!

Wypukły jest językiem opartym na CJam, a ta odpowiedź jest prawie taka sama jak moja odpowiedź CJam, z wyjątkiem l~ tego, że nie jest tutaj potrzebna, ponieważ Convex dokonuje automatycznej oceny argumentów na początku programu.

Wyjaśnienie:

'_%.\ e# Full program only
'_    e# Push '_'
  %   e# Split and remove empty chunks
   .\ e# Vectorize by Swap
Erik the Outgolfer
źródło
4

Japt , 8 bajtów

r"_+"@Vv

Przetestuj online!

Czuję, że przegapiłem jakiś ukryty haczyk w regułach, ponieważ jest to niezwykle proste: „zamień każdy ciąg znaków podkreślenia w ciągu na następny element w tablicy”.

ETHprodukcje
źródło
3

JavaScript, 35 bajtów

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

Wypróbuj online


źródło
1
To samo miałem. Alternatywnie,a=>b=>String.raw({raw:a.split(/_+/)},...b)
ETHprodukcje
2

Proton , 42 bajty

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

Wypróbuj online!

Głupi import ...

To samo w Pythonie:

Python 3 , 53 bajty

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

Wypróbuj online!

Stephen
źródło
... Jak, do cholery, tęsknię. ._.
całkowicie ludzki,
2

MATL , 9 bajtów

'_+'i1&YX

Wypróbuj online!

Wyjaśnienie

'_+'   % 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
źródło
2

CJam , 7 bajtów

l~'_%.\

Wypróbuj online!

-1 dzięki sprytnej sztuczce Martina Endera .

Wyjaśnienie:

l~'_%.\ e# Full program only
l       e# Input line
 ~      e# Eval
  '_    e# Push '_'
    %   e# Split and remove empty chunks
     .\ e# Vectorize by Swap
Erik the Outgolfer
źródło
.\zamiast \]z.
Martin Ender
@MartinEnder That works o_o
Erik the Outgolfer
Jasne, \jest operatorem binarnym. :)
Martin Ender
@MartinEnder Wygląda na to, że trochę za dużo zrobiłem w mapowaniu w CJam.
Erik the Outgolfer,
@MartinEnder OK, po zastanowieniu się, jak o tym nie pomyślałem? Nie tak, że nie wiedziałem, jak zachowuje się mapowanie, np. [1 2 3]:_-> [1 1 2 2 3 3]podobnie dla ....
Erik the Outgolfer
2

Galaretka , 8 7 bajtów

ṣ”_¬Ðfż

Wypróbuj online! Edycja: Zapisano 1 bajt dzięki @Erik the Outgolfer. Wyjaśnienie:

ṣ”_         Split on underscores
   ¬Ðf      Discard empty values
      ż     Zip with second input
            Implicit concatenated output
Neil
źródło
1

Perl 5 , 25 + 1 (-p) = 26 bajtów

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

Wypróbuj online!

Xcali
źródło
Przyszedł w zasadzie z tym samym, z wyjątkiem użycia <>do negowania evali shift: Wypróbuj online! . Musi być sposób na uniknięcie zastąpienia nowych linii ...
Dom Hastings,
Ten podprogram ma również 26 bajtów: sub{shift=~s|_+|shift|egr}. Jeśli odwrócisz argumenty, możesz użyć popi sprowadzić go do 22 bajtów .
nwellnhof
1

Pyth , 10 bajtów

s.i:E"_+"3

Wypróbuj tutaj!

Jak to działa?

si: E „_ +” 3 Pełny program.

   : E 3 Podziel drugie wejście na dopasowania wyrażenia regularnego ...
     „_ +” Wyrażenie regularne „_ +” (dopasowuje 1 lub więcej znaków podkreślenia)
 .i Przeplataj elementy listy podziału z danymi wejściowymi.
s Dołącz do łańcucha.
Pan Xcoder
źródło
1

RProgN 2 , 11 bajtów

x='_+'³[x‘r

Pobiera ciąg i stos ciągów na górze stosu.

Pierwszy (górny) element stosu znajduje się po prawej stronie, stąd dane wejściowe są od prawej do lewej.

Wyjaśniono

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.

Wypróbuj online!

ATaco
źródło
1

Java 8, 57 bajtów

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

Kiedy czytałem wyzwanie, na początku pomyślałem, że powinniśmy sformułować poprawne gramatycznie zdanie z wyrazami w kolejności losowej, ale po prostu zastąpienie wierszy każdym kolejnym słowem jest łatwiejsze. ;)

Wyjaśnienie:

Wypróbuj tutaj.

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
źródło
1

05AB1E , 12 bajtów

„__¤:sv'_y.;

Wypróbuj online!

Wyjaśnienie

„__¤:          # 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
źródło
1
whoops naprawiono dla +3: p
Erik the Outgolfer
@EriktheOutgolfer: Dzięki za zauważenie. Cofnąłem się do mojej poprzedniej wersji, która to obsługiwała.
Emigna
1

C # (.NET Core) , 97 96 + 18 bajtów

Zaoszczędził 1 bajt dzięki Kevinowi Cruijssenowi !

18 bajtów jest do użycia System.Linq.

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

Wypróbuj online!

Ian H.
źródło
Możesz zmienić (s,l)=>na, s=>l=>aby zapisać bajt. Wypróbuj online!
Kevin Cruijssen
0

Rubinowy , 28 + 1 = 29 bajtów

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

Używa -p

Pierwszy wiersz to ciąg formatu, a pozostałe wiersze to tablica.

Wypróbuj online!

Pavel
źródło
0

Python 2 , 61 bajtów

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

Wypróbuj online!

Cholera.

Python 2 , 63 bajty

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

Wypróbuj online!

całkowicie ludzki
źródło
60 bajtów , przekazując re.subfunkcję
Stephen
@ Stephen Eh ... To jest zbyt blisko twojego rozwiązania. Pozostanę przy tym i znajdę bardziej niejasne rozwiązania. : P
całkowicie ludzki,
53 bajty przy użyciu funkcji ulepszającej propozycję @ Stephen.
Jonathan Frech,
@JonathanFrech tak, ale to już moja odpowiedź : P
Stephen
@Stephen Oh; nie widziałem twojej odpowiedzi ...: d
Jonathan Frech
0

Skumulowane , 21 bajtów

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

Wypróbuj online!

Zastępuje wszystkie serie _z y shift. Nic oryginalnego, jak się wydaje.

Conor O'Brien
źródło
0

SOGL V0.12 , 7 bajtów

lΔ╔*№≤ŗ

Wypróbuj tutaj!

Wyjaśnienie:

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
źródło
0

Python 2 , 49 bajtów

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

Wypróbuj online!

Dane wejściowe na liście są traktowane jako krotka. Dopuszczenie rzeczywistych list jako danych wejściowych spowodowałoby dodanie kolejnych siedmiu bajtów, ponieważ wymagana byłaby konwersja ( tuple(...)).

Jonathan Frech
źródło