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"

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

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”.


3

JavaScript, 35 bajtów

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

Wypróbuj online


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


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

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

.\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


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.

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!


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




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!


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

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

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(...)).

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.