空白を埋めてください!


11

(いいえ、これこれらのいずれでもありません)

文字列と文字列のリストを指定して、入力文字列のすべての空白を対応する文字列で埋めます。

入出力

入力文字列には、アルファベット文字、スペース、およびアンダースコアのみが含まれます。空ではなく、アンダースコアで始まりません。つまり、入力文字列は正規表現と一致します^[a-z A-Z]([a-z A-Z_]*[a-z A-Z])?$

入力リストのすべての文字列は空ではなく、英数字とスペースのみが含まれています。つまり、正規表現に一致し^[a-z A-Z]+$ます。

ブランクとは、アンダースコアが前後に連続しない連続したアンダースコア(_)シーケンスです。

入力文字列にはn正の整数の空白がn含まれ、文字列のリストには文字列が正確に含まれnます。

出力はk、入力文字列の各-th空白をk文字列の入力リストの-th文字列で置き換えることにより取得されます。

入力文字列"I like _____ because _______ _____ing"と文字列のリストを指定すると、["ice cream", "it is", "satisfy"]次のように出力を見つけることができます。

  • 最初の空白はの直後にあり"like "ます。を"ice cream"取得するにはを入力します"I like ice cream because ______ _____ing"
  • 2番目の空白はの直後にあり"because "ます。を"it is"取得するにはを入力します"I like ice cream because it is _____ing"
  • 3番目の空白はの直後にあり"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
些細な作業に関する多くの説明。

回答:






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 Martin Enderの巧妙なトリックに感謝します。

説明:

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
エリック・ザ・アウトゴルファー

確かに\、二項演算子です。:)
マーティン・エンダー

@MartinEnderは、CJamでマッピングがどのように機能するかについてあまりにも多くを得たようです。
エリックアウトゴルファー

@MartinEnderよく考えて、どう思いましたか?ではない私は知らなかったようなどのようにマッピング振る舞いなど[1 2 3]:_- > [1 1 2 2 3 3]同様のための....
エリックOutgolfer


1

Perl 5、25 + 1(-p)= 26バイト

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

オンラインでお試しください!


<>を否定するために使用することを除いて、基本的に同じものを見つけました:オンラインで試してみてください!。そこには...改行を置き換える回避する方法があるはずだevalshift
ドムヘイスティングス

このサブルーチンには26バイトもありますsub{shift=~s|_+|shift|egr}。あなたは、引数を逆にした場合は、使用することができますpopし、それを得る22のバイトまで
nwellnhof

1

Pyth、10バイト

s.i:E"_+"3

ここで試してみてください!

使い方?

si:E "_ +" 3完全なプログラム。

   :E 3正規表現の一致で2番目の入力を分割します...
     「_ +」正規表現「_ +」(1つ以上の下線と一致)
 .i分割リストの要素を入力とインターリーブします。
■文字列に結合します。

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

オンラインでお試しください!


re.sub関数を渡すことで60バイト
スティーブン

@Stephen Eh ...それはあなたのソリューションに近すぎます。私はこれに固執し、もっとあいまいな解決策を見つけます。:P
完全に人間の

関数を使用して@Stephenの提案を改善することで53バイト
ジョナサンフレッチ

@JonathanFrechええ、しかしそれはすでに私の答えです:P
スティーブン

@Stephen Oh; ...あなたの答えを見ていない:D
ジョナサンFRECH


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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.