Заполните пробелы, пожалуйста!


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

Проверьте это онлайн!

Я чувствую, что пропустил некоторые скрытые уловки в правилах, потому что это очень просто: «заменять каждую серию подчеркиваний в строке следующим элементом в массиве».


3

JavaScript, 35 байт

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

Попробуйте онлайн


1
То же самое, что у меня было. В качестве альтернативыa=>b=>String.raw({raw:a.split(/_+/)},...b)
ETHproductions


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
Эрик Outgolfer

Конечно, \это бинарный оператор. :)
Мартин Эндер

@MartinEnder Похоже, я слишком много понял о том, как тогда работает отображение в CJam.
Эрик Outgolfer

@MartinEnder Хорошо, подумай, а как я об этом не подумал? Не то чтобы я не знал, как ведет себя отображение, например [1 2 3]:_-> [1 1 2 2 3 3]аналогично для ....
Эрик Игрок в гольф


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: Спасибо, что заметили. Я вернулся к своей предыдущей версии, которая справилась с этим.
Emigna

1

C # (.NET Core) , 97 96 + 18 байт

Сохранено 1 байт благодаря Кевину Круйссену !

18 байтов предназначены для использования System.Linq.

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

Попробуйте онлайн!


Вы можете изменить , (s,l)=>чтобы s=>l=>сохранить байты. Попробуйте онлайн!
Кевин Круйссен,


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функцию
Стивен

@ Стефен Эх ... Это слишком близко к твоему решению. Я просто придерживаюсь этого и найду более неясные решения. : P
полностью человек

53 байта , используя функцию для улучшения предложения @ Стивена.
Джонатан Фрех

@JonathanFrech да, но это уже мой ответ : P
Стивен

@ Стефан Ох; не видел вашего ответа ...: 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

0

Python 2 , 49 байт

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

Попробуйте онлайн!

Ввод списка принимается как кортеж. Разрешение фактических списков в качестве входных данных добавит еще семь байтов, поскольку потребуется преобразование ( tuple(...)).

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.