กรุณากรอกข้อมูลในช่องว่าง!


11

(ไม่มีไม่ได้นี้มิได้ใด ๆ เหล่านี้ )

รับสตริงและรายการสตริงกรอกข้อมูลในช่องว่างทั้งหมดในสตริงอินพุตด้วยสตริงที่สอดคล้องกัน

Input / Output

สตริงอินพุตมีอักขระแบบตัวอักษรช่องว่างและขีดล่างเท่านั้น มันไม่ว่างเปล่าและไม่ได้เริ่มต้นด้วยการขีดเส้นใต้ กล่าวอีกนัยหนึ่งสตริงอินพุตตรงกับ regex^[a-z A-Z]([a-z A-Z_]*[a-z A-Z])?$

สตริงทั้งหมดในรายการอินพุตไม่ว่างเปล่าและมีเฉพาะอักขระและตัวเลขและช่องว่าง ในคำอื่น ๆ พวกเขาตรง ^[a-z A-Z]+$regex

ช่องว่างคือลำดับที่ต่อเนื่องของขีดล่าง ( _) ซึ่งไม่ได้นำหน้าหรือดำเนินการโดยขีดล่าง

สตริงอินพุตมี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"
  • "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

โปรตอนขนาด 42 ไบต์

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

ลองออนไลน์!

การนำเข้าโง่ ...

สิ่งเดียวกันในหลาม:

Python 3 , 53 ไบต์

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

ลองออนไลน์!


... ฉันคิดถึงวันนั้นได้อย่างไร ._
มนุษย์ทั้งหมด


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แทน
Martin Ender

@MartinEnder นั่นใช้งานได้ o_o
Erik the Outgolfer

แน่นอนว่า\เป็นผู้ประกอบการแบบไบนารี :)
Martin Ender

@MartinEnder ดูเหมือนว่าฉันได้รับมากเกินไปเล็กน้อยในการทำแผนที่ใน CJam แล้ว
Erik the Outgolfer

@MartinEnder ตกลงในวินาทีที่คิดว่าฉันไม่คิดอย่างนั้น? ไม่เหมือนที่ฉันไม่รู้ว่าการทำแผนที่ทำหน้าที่อย่างไรเช่น[1 2 3]:_-> [1 1 2 2 3 3]เช่นเดียวกันสำหรับ....
Erik the Outgolfer


1

Perl 5 , 25 + 1 (-p) = 26 ไบต์

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

ลองออนไลน์!


มาโดยพื้นฐานเหมือนกันยกเว้นการใช้<>เพื่อคัดค้านevalและshift: ลองออนไลน์! . มีก็จะเป็นวิธีการที่จะหลีกเลี่ยงการเปลี่ยนการขึ้นบรรทัดใหม่ที่ ...
Dom เฮสติ้งส์

subroutine นี้ยังมี 26 sub{shift=~s|_+|shift|egr}ไบต์: ถ้าคุณย้อนกลับข้อโต้แย้งคุณสามารถใช้popและได้รับมันลงไป 22 ไบต์
nwellnhof

1

Pyth , 10 ไบต์

s.i:E"_+"3

ลองที่นี่!

มันทำงานอย่างไร?

si: E "_ +" 3 โปรแกรมเต็มรูปแบบ

   : E 3 แยกอินพุตที่สองในการแข่งขันของ regex ...
     "_ +" The regex "_ +" (ตรงกับขีดล่าง 1 หรือมากกว่า)
 .i Interleave องค์ประกอบของรายการแยกกับอินพุต
เข้าร่วมกับสตริง

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 ไบต์ขอบคุณKevin Cruijssen !

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=>เพื่อประหยัดไบต์ ลองออนไลน์!
Kevin Cruijssen


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 bytesโดยส่งผ่านre.subฟังก์ชั่น
Stephen

@ สตีเฟ่นเอ๊ะ ... มันใกล้กับโซลูชันของคุณมากเกินไป ฉันจะทำเช่นนี้และหาทางแก้ปัญหาที่ชัดเจนมากขึ้น : P
มนุษย์

53 ไบต์โดยใช้ฟังก์ชันเพื่อปรับปรุงข้อเสนอของ @ Stephen
Jonathan Frech

@JonathanFrech ใช่ แต่นั่นเป็นคำตอบของฉันอยู่แล้ว: P
Stephen

@ สตีเฟ่นโอ้; ไม่เห็นคำตอบของคุณ ... : d
Jonathan 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

0

Python 2 , 49 ไบต์

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

ลองออนไลน์!

อินพุตรายการถูกใช้เป็น tuple การอนุญาตให้รายการที่แท้จริงเป็นอินพุตจะเพิ่มอีกเจ็ดไบต์เนื่องจากจำเป็นต้องมีการแปลง ( tuple(...))

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.