Заповніть бланки, будь ласка!


11

(Ні, не це, ані щось із цього )

Враховуючи рядок та список рядків, заповніть усі заготовки у вхідному рядку відповідними рядками.

Введення-виведення

Рядок введення містить лише алфавітні символи, пробіли та підкреслення. Він не порожній і не починається з підкреслення. Іншими словами, рядок введення відповідає рівню^[a-z A-Z]([a-z A-Z_]*[a-z A-Z])?$

Кожен рядок у списку вводу є порожнім і містить лише буквено-цифрові символи та пробіли. Іншими словами, вони відповідають регексу ^[a-z A-Z]+$.

Пустий - це суцільна послідовність підкреслення ( _), перед якою не передує і не переходить підкреслення.

Вхідний рядок містить nпробіли для деякого додатного цілого числа n, а список рядків містить точно nрядки.

Вихід виходить шляхом заміни кожного k-го порожнього у вхідному рядку на k-му рядку в списку вхідних рядків.

Приклад

Враховуючи вхідний рядок "I like _____ because _______ _____ing"і список рядків ["ice cream", "it is", "satisfy"], ми можемо знайти вихід таким чином:

  • Перший бланк з’являється безпосередньо після "like ". Ми це заповнимо, "ice cream"щоб дістати "I like ice cream because ______ _____ing".
  • Другий бланк з’являється безпосередньо після "because ". Ми це заповнимо, "it is"щоб дістати "I like ice cream because it is _____ing".
  • Третій бланк з’являється безпосередньо після "is ". Ми це заповнимо, "satisfy"щоб дістати "I like ice cream because it is satisfying".

Виводимо заключний рядок "I like ice cream because it is satisfying".

Випробування

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
Дуже багато пояснень тривіального завдання.

Відповіді:


5

Опукла , 5 байт

'_%.\

Спробуйте в Інтернеті!

Convex є мовою на основі CJam, і ця відповідь майже така ж, як і моя відповідь CJam, за винятком l~якої тут не потрібно, оскільки Convex робить автоматичну оцінку аргументів на початку програми.

Пояснення:

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

4

Japt , 8 байт

r"_+"@Vv

Перевірте це в Інтернеті!

Я відчуваю, що пропустив деякий прихований улов у правилах, оскільки це надзвичайно просто: "замініть кожен пробіг підкреслення в рядку на наступний елемент масиву".




2

MATL , 9 байт

'_+'i1&YX

Спробуйте в Інтернеті!

Пояснення

'_+'   % 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 байт

l~'_%.\

Спробуйте в Інтернеті!

-1 завдяки розумній хитрості Мартіна Ендера .

Пояснення:

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

.\замість \]z.
Мартін Ендер

@MartinEnder Це працює o_o
Erik the Outgolfer

Звичайно, \є двійковим оператором. :)
Мартін Ендер

@MartinEnder Здається, я занадто сильно набрав того, як працює картографування в CJam.
Ерік Аутгольфер

@MartinEnder Добре, по-друге подумав, як я цього не придумав? Не так, як я не знав, як поводиться картографування, наприклад [1 2 3]:_-> [1 1 2 2 3 3]так само для ....
Erik the Outgolfer


1

Perl 5 , 25 + 1 (-p) = 26 байт

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

Спробуйте в Інтернеті!


Придумали в основному те саме, за винятком використання, <>щоб заперечувати evalта shift: Спробуйте в Інтернеті! . Має бути спосіб уникнути заміни нових рядків ...
Дом Гастінгс

Ця підпрограма також має 26 байт: sub{shift=~s|_+|shift|egr}. Якщо ви змінили аргументи, ви могли б скористатися popі зменшити їх до 22 байт .
nwellnhof

1

Pyth , 10 байт

s.i:E"_+"3

Спробуйте тут!

Як це працює?

si: E "_ +" 3 Повна програма.

   : E 3 Розділіть другий вхід на сірники регексу ...
     "_ +" Регекс "_ +" (відповідає 1 або більше підкресленням)
 .i Перемежуйте елементи спліт-списку із введенням.
s Приєднатись до рядка.

1

RProgN 2 , 11 байт

x='_+'³[x‘r

Бере рядок і стек рядків у верхній частині стека.

Перший (верхній) елемент стека знаходиться праворуч, отже, введення справа ліворуч.

Пояснив

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.

Спробуйте в Інтернеті!


1

Java 8, 57 байт

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

Коли я читав виклик, то спершу думав, що ми повинні скласти граматично правильне речення зі словами у випадковому порядку, але просто замінити рядки кожним послідовним словом простіше. ;)

Пояснення:

Спробуйте тут.

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

1

05AB1E , 12 байт

„__¤:sv'_y.;

Спробуйте в Інтернеті!

Пояснення

„__¤:          # 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


@EriktheOutgolfer: Дякую, що помітили. Я повернувся до своєї попередньої версії, яка впоралася з цим.
Емінья



0

Python 2 , 61 байт

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

Спробуйте в Інтернеті!

Блін.

Python 2 , 63 байти

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

Спробуйте в Інтернеті!


60 байт , передаючи re.subфункцію
Стівен

@Stephen Eh ... Це занадто близько до вашого рішення. Я просто дотримуюся цього і знайду більш незрозумілі рішення. : P
абсолютнолюдський

53 байти за допомогою функції для вдосконалення пропозиції @ Стефана.
Джонатан Фрех

@JonathanFrech Так, але це вже точно моя відповідь : P
Стівен

@Stephen Oh; не бачив вашої відповіді ...: d
Джонатан Фрех


0

SOGL V0.12 , 7 байт

lΔ╔*№≤ŗ

Спробуйте тут!

Пояснення:

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.