빈칸을 채워주세요.


11

(아니, 이들의 )

문자열과 문자열 목록이 제공되면 입력 문자열의 모든 공백을 해당 문자열로 채우십시오.

입출력

입력 문자열은 알파벳 문자, 공백 및 밑줄 만 포함합니다. 비어 있지 않으며 밑줄로 시작하지 않습니다. 즉, 입력 문자열이 정규식과 일치합니다.^[a-z A-Z]([a-z A-Z_]*[a-z A-Z])?$

입력 목록의 모든 문자열은 비어 있지 않으며 영숫자 및 공백 만 포함합니다. 즉, 정규식과 일치합니다 ^[a-z A-Z]+$.

공백은 연속적인 밑줄 ( _) 이며 밑줄 이 앞에 오지 않습니다.

입력 문자열에는 n양의 정수에 대한 공백이 n포함되며 문자열 목록에는 정확히 n문자열이 포함 됩니다.

k입력 문자열의 각- 번째 공백을 입력 문자열 k목록의-번째 문자열 로 대체하여 출력을 얻습니다 .

입력 문자열 "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 기반 언어이며,이 대답은 필자 l~가 필요하지 않은 점을 제외하고는 CJam의 대답과 거의 동일합니다. Convex는 프로그램 시작시 자동 인수 평가를 수행하기 때문입니다.

설명:

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




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~'_%.\

온라인으로 사용해보십시오!

Martin Ender 의 영리한 속임수 덕분에 -1 .

설명:

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
Outgolfer Erik

물론 \이진 연산자입니다. :)
Martin Ender

@MartinEnder CJam에서 매핑이 작동하는 방식이 너무 많은 것처럼 보입니다.
Outgolfer Erik

@MartinEnder 두 번째 생각은 어떻게 생각하지 않습니까? 아니 내가 알고하지 않았다 같은 방법 매핑 동작합니다 예 [1 2 3]:_-> [1 1 2 2 3 3]마찬가지로위한 ....
에릭 Outgolfer

2

젤리 , 8 7 바이트

ṣ”_¬Ðfż

온라인으로 사용해보십시오! 편집 : @Erik the Outgolfer 덕분에 1 바이트가 절약되었습니다. 설명:

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

1

펄 5 , 25 + 1 (-p) = 26 바이트

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

온라인으로 사용해보십시오!


사용을 제외하고 기본적으로 동일한 함께했다 <>을 부정 eval하고 shift: 온라인으로보십시오! . ... 교체하는 개행을 피할 수있는 방법이있을거야
돔 헤이스팅스에게

이 서브 루틴에는 26 바이트도 있습니다 sub{shift=~s|_+|shift|egr}. 당신이 인수를 반대하는 경우, 당신은 사용할 수 pop그것을 얻기 22 바이트까지 .
nwellnhof

1

Pyth , 10 바이트

s.i:E"_+"3

여기 사용해보십시오!

어떻게 작동합니까?

si : E "_ +"3 전체 프로그램.

   : E 3 정규 표현식과 일치하는 두 번째 입력을 분할합니다.
     "_ +"정규식 "_ +"(1 개 이상의 밑줄과 일치)
 .i 분할 목록의 요소를 입력과 인터리브하십시오.
s 문자열에 결합합니다.

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

자바 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




0

파이썬 2 , 61 바이트

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

온라인으로 사용해보십시오!

제길.

파이썬 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

@Stephen Eh ... 솔루션에 너무 가깝습니다. 나는 이것을 고집하고 더 모호한 해결책을 찾을 것이다. : P
완전히 인간적인

@Stephen의 제안을 개선하는 함수를 사용하여 53 바이트 .
Jonathan Frech

@JonathanFrech 예, 그러나 그것은 이미 내 대답입니다 . : P
Stephen

@ 스티븐 오; 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.