Điền vào chỗ trống, xin vui lòng!


11

(Không, không phải cái này cũng không phải cái nào trong số này )

Đưa ra một chuỗi và một danh sách các chuỗi, điền vào tất cả các khoảng trống trong chuỗi đầu vào với các chuỗi tương ứng.

Đầu ra đầu vào

Chuỗi đầu vào chỉ chứa các ký tự chữ cái, dấu cách và dấu gạch dưới. Nó không trống và không bắt đầu bằng dấu gạch dưới. Nói cách khác, chuỗi đầu vào khớp với biểu thức chính quy^[a-z A-Z]([a-z A-Z_]*[a-z A-Z])?$

Mỗi chuỗi trong danh sách đầu vào là không trống và chỉ chứa các ký tự chữ và số. Nói cách khác, chúng khớp với biểu thức chính quy^[a-z A-Z]+$ .

Một khoảng trống là một chuỗi liền kề của dấu gạch dưới (_ ) không có trước hoặc không được tiến hành bởi một dấu gạch dưới.

Chuỗi đầu vào chứa nkhoảng trống cho một số nguyên dương nvà danh sách các chuỗi chứa chính xácn chuỗi.

Đầu ra thu được bằng cách thay thế từng kkhoảng trống thứ trong chuỗi đầu vào bằng kchuỗi thứ-thứ ba trong danh sách đầu vào của chuỗi.

Thí dụ

Đưa ra một chuỗi đầu vào "I like _____ because _______ _____ing"và một danh sách các chuỗi ["ice cream", "it is", "satisfy"], chúng ta có thể tìm thấy đầu ra như sau:

  • Các trống đầu tiên đến trực tiếp sau "like ". Chúng tôi điền vào đó "ice cream"để có được"I like ice cream because ______ _____ing" .
  • Trống thứ hai đến trực tiếp sau "because ". Chúng tôi điền vào đó "it is"để có được"I like ice cream because it is _____ing" .
  • Trống thứ ba đến trực tiếp sau "is ". Chúng tôi điền vào đó "satisfy"để có được "I like ice cream because it is satisfying".

Chúng tôi xuất chuỗi cuối cùng "I like ice cream because it is satisfying" .

Các trường hợp thử nghiệm

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
Rất nhiều lời giải thích cho nhiệm vụ tầm thường.

Câu trả lời:


5

Lồi , 5 byte

'_%.\

Hãy thử trực tuyến!

Convex là một ngôn ngữ dựa trên CJam và câu trả lời này gần giống với câu trả lời của tôi về CJam, ngoại trừ l~không cần thiết ở đây, vì Convex thực hiện đánh giá đối số tự động khi bắt đầu chương trình.

Giải trình:

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




2

MATL , 9 byte

'_+'i1&YX

Hãy thử trực tuyến!

Giải trình

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

l~'_%.\

Hãy thử trực tuyến!

-1 nhờ một mánh khóe thông minh của Martin Ender .

Giải trình:

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

.\thay vì \]z.
Martin Ender

@MartinEnder Điều đó hoạt động o_o
Erik the Outgolfer

Chắc chắn, \là một toán tử nhị phân. :)
Martin Ender

@MartinEnder Có vẻ như tôi đã nhận được một chút quá nhiều về cách lập bản đồ hoạt động trong CJam.
Erik the Outgolfer

@MartinEnder OK vào lần thứ hai nghĩ làm thế nào tôi không nghĩ về điều đó? Không giống như tôi không biết cách lập bản đồ ứng xử, ví dụ [1 2 3]:_-> [1 1 2 2 3 3]tương tự như vậy đối với ....
Erik the Outgolfer

2

Thạch , 8 7 byte

ṣ”_¬Ðfż

Hãy thử trực tuyến! Chỉnh sửa: Đã lưu 1 byte nhờ @Erik the Outgolfer. Giải trình:

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

1

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

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

Hãy thử trực tuyến!


Về cơ bản là giống nhau, ngoại trừ việc sử dụng <>để phủ nhận evalshift: Hãy thử trực tuyến! . Phải có một cách để tránh việc thay thế các dòng mới ...
Dom Hastings

Chương trình con này cũng có 26 byte : sub{shift=~s|_+|shift|egr}. Nếu bạn đảo ngược các đối số, bạn có thể sử dụng popgiảm xuống còn 22 byte .
nwellnhof

1

Bình thường , 10 byte

s.i:E"_+"3

Hãy thử nó ở đây!

Làm thế nào nó hoạt động?

si: E "_ +" 3 Chương trình đầy đủ.

   : E 3 Chia đầu vào thứ hai cho các trận đấu của regex ...
     "_ +" Regex "_ +" (khớp với 1 hoặc nhiều dấu gạch dưới)
 .i Xen kẽ các yếu tố của danh sách phân chia với đầu vào.
s Tham gia vào một chuỗi.

1

RProgN 2 , 11 byte

x='_+'³[x‘r

Lấy một chuỗi và một chuỗi các chuỗi trên đỉnh của ngăn xếp.

Phần tử đầu tiên (trên cùng) của ngăn xếp là ở bên phải, do đó đầu vào là phải sang trái.

Giải thích

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.

Hãy thử trực tuyến!


1

Java 8, 57 byte

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

Khi tôi đọc thử thách, ban đầu tôi nghĩ chúng ta nên tạo một câu đúng ngữ pháp với các từ theo thứ tự ngẫu nhiên, nhưng chỉ cần thay thế các dòng bằng mỗi từ nối tiếp thì dễ dàng hơn. ;)

Giải trình:

Hãy thử nó ở đây.

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 byte

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

Hãy thử trực tuyến!

Chỉ trích.

Python 2 , 63 byte

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

Hãy thử trực tuyến!


60 byte bằng cách chuyển re.submột hàm
Stephen

@Stephen Eh ... Điều đó quá gần với giải pháp của bạn. Tôi sẽ chỉ bám vào điều này và tìm thêm giải pháp tối nghĩa. : P
hoàn toàn là

53 byte bằng cách sử dụng một hàm để cải thiện đề xuất của @ Stephen.
Jonathan Frech

@JonathanFrech vâng, nhưng đó chính xác là câu trả lời của tôi : P
Stephen

@Stephen ơi; không thấy câu trả lời của bạn ...: d
Jonathan Frech


0

SOGL V0.12 , 7 byte

lΔ╔*№≤ŗ

Hãy thử nó ở đây!

Giải trình:

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 byte

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

Hãy thử trực tuyến!

Đầu vào danh sách được lấy dưới dạng một tuple. Cho phép các danh sách thực tế làm đầu vào sẽ thêm bảy byte nữa, vì một chuyển đổi sẽ được yêu cầu ( tuple(...)).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.