Isi Bagian yang Kosong, Tolong!

11

(Tidak, bukan ini atau semua ini )

Diberikan string dan daftar string, isi semua kosong di string input dengan string yang sesuai.

Input output

String input hanya berisi karakter alfabet, spasi, dan garis bawah. Ini kosong dan tidak dimulai dengan garis bawah. Dengan kata lain, string input cocok dengan regex^[a-z A-Z]([a-z A-Z_]*[a-z A-Z])?$

Setiap string dalam daftar input adalah kosong dan hanya berisi karakter dan spasi alfanumerik. Dengan kata lain, mereka cocok dengan regex ^[a-z A-Z]+$.

Kosong adalah urutan garis bawah ( _) yang berdekatan yang tidak didahului atau diproses oleh garis bawah.

String input berisi nkosong untuk beberapa bilangan bulat positif n, dan daftar string berisi nstring yang tepat .

Output diperoleh dengan mengganti masing-masing kblank-in dalam string input dengan kstring -th dalam daftar input string.

Contoh

Diberikan string input "I like _____ because _______ _____ing"dan daftar string ["ice cream", "it is", "satisfy"], kita dapat menemukan output sebagai berikut:

  • Blank pertama langsung muncul setelahnya "like ". Kami mengisinya dengan "ice cream"untuk mendapatkan "I like ice cream because ______ _____ing".
  • Blank kedua langsung muncul setelahnya "because ". Kami mengisinya dengan "it is"untuk mendapatkan "I like ice cream because it is _____ing".
  • Kosong ketiga datang langsung setelahnya "is ". Kami mengisinya dengan "satisfy"untuk mendapatkan "I like ice cream because it is satisfying".

Kami mengeluarkan string terakhir "I like ice cream because it is satisfying".

Uji Kasus

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"
fireflame241
sumber
5
Banyak penjelasan untuk tugas sepele.

Jawaban:

5

Cembung , 5 byte

'_%.\

Cobalah online!

Convex adalah bahasa berbasis CJam, dan jawaban ini hampir sama dengan jawaban CJam saya, kecuali l~yang tidak dibutuhkan di sini, karena Convex melakukan evaluasi argumen otomatis pada awal program.

Penjelasan:

'_%.\ e# Full program only
'_    e# Push '_'
  %   e# Split and remove empty chunks
   .\ e# Vectorize by Swap
Erik the Outgolfer
sumber
4

Japt , 8 byte

r"_+"@Vv

Uji secara online!

Saya merasa saya melewatkan beberapa tangkapan tersembunyi dalam aturan karena ini sangat sederhana: "ganti setiap garis bawah pada string dengan item berikutnya dalam array."

Produksi ETH
sumber
3

JavaScript, 35 byte

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

Cobalah online


sumber
1
Hal yang sama yang saya miliki. Atau,a=>b=>String.raw({raw:a.split(/_+/)},...b)
ETHproduksi
2

Proton , 42 byte

a=>b=>re.sub("_+",_=>b.pop(0),a)
import re

Cobalah online!

Impor bodoh ...

Hal yang sama dengan python:

Python 3 , 53 byte

lambda a,b:re.sub("_+",lambda _:b.pop(0),a)
import re

Cobalah online!

Stephen
sumber
... Bagaimana aku bisa melewatkan itu. ._.
totallyhuman
2

MATL , 9 byte

'_+'i1&YX

Cobalah online!

Penjelasan

'_+'   % 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
Luis Mendo
sumber
2

CJam , 7 byte

l~'_%.\

Cobalah online!

-1 berkat trik pintar oleh Martin Ender .

Penjelasan:

l~'_%.\ e# Full program only
l       e# Input line
 ~      e# Eval
  '_    e# Push '_'
    %   e# Split and remove empty chunks
     .\ e# Vectorize by Swap
Erik the Outgolfer
sumber
.\bukannya \]z.
Martin Ender
@ MartinEnder Itu berfungsi o_o
Erik the Outgolfer
Tentu, \adalah operator biner. :)
Martin Ender
@ MartinEnder Sepertinya saya sudah terlalu banyak dalam bagaimana pemetaan bekerja di CJam kalau begitu.
Erik the Outgolfer
@ MartinEnder OK pada pemikiran kedua bagaimana saya tidak memikirkan itu? Tidak seperti saya tidak tahu bagaimana perilaku pemetaan misalnya [1 2 3]:_-> [1 1 2 2 3 3]juga untuk ....
Erik the Outgolfer
2

Jelly , 8 7 byte

ṣ”_¬Ðfż

Cobalah online! Sunting: Disimpan 1 byte berkat @Erik the Outgolfer. Penjelasan:

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

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

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

Cobalah online!

Xcali
sumber
Datang pada dasarnya sama, kecuali menggunakan <>untuk meniadakan evaldan shift: Coba online! . Pasti ada cara untuk menghindari penggantian baris baru ...
Dom Hastings
Subroutine ini juga memiliki 26 byte: sub{shift=~s|_+|shift|egr}. Jika Anda membalikkan argumen, Anda bisa menggunakan popdan menurunkannya menjadi 22 byte .
nwellnhof
1

Pyth , 10 byte

s.i:E"_+"3

Coba di sini!

Bagaimana itu bekerja?

si: E "_ +" 3 Program lengkap.

   : E 3 Membagi input kedua pada kecocokan ...
     "_ +" Regex "_ +" (cocok dengan 1 atau lebih garis bawah)
 .i Interleave elemen daftar split dengan input.
s Gabung ke sebuah string.
Tuan Xcoder
sumber
1

RProgN 2 , 11 byte

x='_+'³[x‘r

Mengambil string dan setumpuk string di bagian atas tumpukan.

Elemen pertama (atas) dari stack adalah ke kanan, maka input kanan ke kiri.

Dijelaskan

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.

Cobalah online!

ATaco
sumber
1

Java 8, 57 byte

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

Ketika saya membaca tantangan saya pada awalnya berpikir kita harus membuat kalimat yang benar secara tata bahasa dengan kata-kata yang berada dalam urutan acak, tetapi hanya mengganti baris dengan setiap kata berurutan lebih mudah. ;)

Penjelasan:

Coba di sini.

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
Kevin Cruijssen
sumber
1

05AB1E , 12 byte

„__¤:sv'_y.;

Cobalah online!

Penjelasan

„__¤:          # 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
Emigna
sumber
1
whoops fix for +3: p
Erik the Outgolfer
@EriktheOutgolfer: Terima kasih telah memperhatikan. Saya memutar kembali ke versi saya sebelumnya yang menangani itu.
Emigna
1

C # (.NET Core) , 97 96 + 18 byte

Disimpan 1 byte berkat Kevin Cruijssen !

18 byte untuk digunakan System.Linq.

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

Cobalah online!

Ian H.
sumber
Anda dapat mengubah (s,l)=>ke s=>l=>untuk menyimpan satu byte. Cobalah online!
Kevin Cruijssen
0

Ruby , 28 + 1 = 29 byte

$_=gsub(/_+/){|i|gets[/.*/]}

Penggunaan -p

Baris pertama adalah format string, sisanya adalah array.

Cobalah online!

Pavel
sumber
0

Python 2 , 61 byte

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

Cobalah online!

Sial.

Python 2 , 63 byte

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

Cobalah online!

benar-benar manusiawi
sumber
60 byte dengan melewatkan re.subfungsi
Stephen
@Stephen Eh ... Itu terlalu dekat dengan solusi Anda. Saya hanya akan berpegang pada ini dan menemukan lebih banyak solusi yang tidak jelas. : P
totallyhuman
53 byte dengan menggunakan fungsi untuk meningkatkan proposal @ Stephen.
Jonathan Frech
@ JonathanFrech ya, tapi itulah jawaban saya : P
Stephen
@Stephen Oh; tidak melihat jawaban Anda ...: d
Jonathan Frech
0

Ditumpuk , 21 byte

[@y'_+'[y shift]repl]

Cobalah online!

Mengganti semua proses _dengan y shift. Tidak ada yang asli, seperti yang terlihat.

Conor O'Brien
sumber
0

SOGL V0.12 , 7 byte

lΔ╔*№≤ŗ

Coba Di Sini!

Penjelasan:

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
dzaima
sumber
0

Python 2 , 49 byte

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

Cobalah online!

Input daftar diambil sebagai tuple. Mengizinkan daftar aktual sebagai input akan menambah tujuh byte lainnya, karena konversi diperlukan ( tuple(...)).

Jonathan Frech
sumber