Boşlukları Doldurun, Lütfen!


11

(Hayır, bu ne de hiçbiri )

Bir dize ve bir dize listesi verildiğinde, giriş dizesindeki tüm boşlukları karşılık gelen dizelerle doldurun.

Giriş çıkış

Giriş dizesi yalnızca alfabetik karakterler, boşluklar ve alt çizgiler içerir. Boş değildir ve alt çizgi ile başlamaz. Başka bir deyişle, giriş dizesi normal ifadeyle eşleşir^[a-z A-Z]([a-z A-Z_]*[a-z A-Z])?$

Giriş listesindeki her dize boş değildir ve yalnızca alfasayısal karakterler ve boşluklar içerir. Başka bir deyişle, normal ifadeyle eşleşirler ^[a-z A-Z]+$.

Boş, bitişik olmayan ve alt çizgi ile _devam etmeyen alt çizgi ( ) dizisidir .

Giriş dizesi, nbazı pozitif tamsayılar için boşluklar içerir nve dizeler listesi tam olarak ndizeler içerir .

Çıktı, kgirdi dizesindeki her bir boşluğun k, dizeler girdi listesindeki -th dize ile değiştirilmesiyle elde edilir .

Misal

Bir giriş dizesi "I like _____ because _______ _____ing"ve dizelerin bir listesi verildiğinde ["ice cream", "it is", "satisfy"], çıktıyı aşağıdaki gibi bulabiliriz:

  • İlk boşluk hemen sonra gelir "like ". Biz birlikte bu doldurmak "ice cream"olsun "I like ice cream because ______ _____ing".
  • İkinci boşluk hemen sonra gelir "because ". Biz birlikte bu doldurmak "it is"olsun "I like ice cream because it is _____ing".
  • Üçüncü şahit doğrudan gelir "is ". Biz birlikte bu doldurmak "satisfy"olsun "I like ice cream because it is satisfying".

Son dizgiyi çıkarırız "I like ice cream because it is satisfying".

Test Durumları

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
Önemsiz görev için birçok açıklama.

Yanıtlar:


5

Dışbükey , 5 bayt

'_%.\

Çevrimiçi deneyin!

Convex CJam tabanlı bir dildir ve l~Convex programın başında otomatik argüman değerlendirmesi yaptığı için, bu cevap burada gereksiz olanlar dışında CJam cevabımla neredeyse aynıdır .

Açıklama:

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




2

MATL , 9 bayt

'_+'i1&YX

Çevrimiçi deneyin!

açıklama

'_+'   % 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 bayt

l~'_%.\

Çevrimiçi deneyin!

-1 Martin Ender tarafından yapılan akıllıca bir numara sayesinde .

Açıklama:

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

.\yerine \]z.
Martin Ender

@MartinEnder That works o_o
Erik the Outgolfer

Tabii ki, \ikili bir operatördür. :)
Martin Ender

@MartinEnder Haritalamanın CJam'de nasıl çalıştığı konusunda biraz fazla şey kazandığım anlaşılıyor.
Outgolfer Erik

@MartinEnder Tamam ikinci düşündüm bunu nasıl düşünmedim? Haritalamanın nasıl davrandığını bilmiyormuşum gibi değil mesela [1 2 3]:_-> [1 1 2 2 3 3]aynı şekilde ....
Erik Outgolfer

2

Jöle , 8 7 bayt

ṣ”_¬Ðfż

Çevrimiçi deneyin! Düzenleme: @Erik Outgolfer sayesinde 1 bayt kaydedildi. Açıklama:

ṣ”_         Split on underscores
   ¬Ðf      Discard empty values
      ż     Zip with second input
            Implicit concatenated output

1

Perl 5 , 25 + 1 (-p) = 26 bayt

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

Çevrimiçi deneyin!


Kullanılması dışında temelde aynı ile geldi <>etkisiz hale getirmesine evalve shift: çevrimiçi deneyin! . Yeni satırların değiştirilmesinden kaçınmanın bir yolu olmalı ...
Dom Hastings

Bu altprogram da 26 bayt vardır: sub{shift=~s|_+|shift|egr}. Argümanları tersine çevirirseniz, 22 baytapop kadar kullanabilir ve alabilirsiniz .
nwellnhof

1

Pyth , 10 bayt

s.i:E"_+"3

Burada deneyin!

Nasıl çalışır?

si: E "_ +" 3 Tam program.

   : E 3 Normal girdinin maçlarında ikinci girişi böl ...
     "_ +" Normal ifade "_ +" (1 veya daha fazla alt çizgiyle eşleşir)
 .i Bölünmüş listenin öğelerini girdiye ekleyin.
s Bir dizeye katılın.

1

RProgN 2 , 11 bayt

x='_+'³[x‘r

Bir dize ve yığının üstünden bir dize yığını alır.

Bir yığının ilk (üst) öğesi sağdadır, dolayısıyla girdi sağdan sola doğrudur.

Açıklaması

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.

Çevrimiçi deneyin!


1

Java 8, 57 bayt

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

Meydan okumayı okuduğumda, ilk önce kelimeler rasgele sırada olan dilbilgisel olarak doğru bir cümle yapmamız gerektiğini düşündüm, ancak satırları her sıralı kelimeyle değiştirmek daha kolay. ;)

Açıklama:

Burada deneyin.

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 bayt

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

Çevrimiçi deneyin!

Lanet olsun.

Python 2 , 63 bayt

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

Çevrimiçi deneyin!


re.subBir fonksiyonu geçerek 60 bayt
Stephen

@Stephen Eh ... Bu çözümünüze çok yakın. Sadece buna bağlı kalacağım ve daha belirsiz çözümler bulacağım. : P
totallyhuman

@ Stephen'ın önerisini iyileştirmek için bir işlev kullanarak 53 bayt .
Jonathan Frech

@JonathanFrech evet, ama bu zaten benim cevabım : P
Stephen

@ Ahen Oh; Cevabınızı görmedim ...: d
Jonathan Frech


0

SOGL V0.12 , 7 bayt

lΔ╔*№≤ŗ

Buradan Deneyin!

Açıklama:

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 bayt

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

Çevrimiçi deneyin!

Liste girişi bir demet olarak alınır. Gerçek listelerin girdi olarak kullanılmasına izin verilmesi, dönüşüm gerekeceğinden yedi bayt daha ekler ( tuple(...)).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.