Riempi gli spazi vuoti, per favore!


11

(No, né questonessuno di questi )

Data una stringa e un elenco di stringhe, riempire tutti gli spazi vuoti nella stringa di input con le stringhe corrispondenti.

Input Output

La stringa di input contiene solo caratteri alfabetici, spazi e caratteri di sottolineatura. È non vuoto e non inizia con un carattere di sottolineatura. In altre parole, la stringa di input corrisponde alla regex^[a-z A-Z]([a-z A-Z_]*[a-z A-Z])?$

Ogni stringa nell'elenco di input non è vuota e contiene solo caratteri e spazi alfanumerici. In altre parole, corrispondono alla regex ^[a-z A-Z]+$.

Uno spazio vuoto è una sequenza contigua di caratteri di sottolineatura ( _) che non è né preceduta né preceduta da un carattere di sottolineatura.

La stringa di input contiene nspazi vuoti per un numero intero positivo ne l'elenco di stringhe contiene esattamente nstringhe.

L'output si ottiene sostituendo ogni k-th blank nella stringa di input con la k-th stringa nell'elenco di input delle stringhe.

Esempio

Data una stringa di input "I like _____ because _______ _____ing"e un elenco di stringhe ["ice cream", "it is", "satisfy"], possiamo trovare l'output come segue:

  • Il primo spazio vuoto viene subito dopo "like ". Lo riempiamo con "ice cream"per ottenere "I like ice cream because ______ _____ing".
  • Il secondo spazio vuoto viene subito dopo "because ". Lo riempiamo con "it is"per ottenere "I like ice cream because it is _____ing".
  • Il terzo vuoto viene subito dopo "is ". Lo riempiamo con "satisfy"per ottenere "I like ice cream because it is satisfying".

Abbiamo emesso la stringa finale "I like ice cream because it is satisfying".

Casi test

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
Molte spiegazioni per compiti banali.

Risposte:


5

Convesso , 5 byte

'_%.\

Provalo online!

Convex è un linguaggio basato su CJam, e questa risposta è quasi la stessa della mia risposta CJam, tranne per il fatto l~che non è necessario qui, poiché Convex esegue una valutazione automatica degli argomenti all'inizio del programma.

Spiegazione:

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

4

Japt , 8 byte

r"_+"@Vv

Provalo online!

Sento di aver perso alcune catture nascoste nelle regole perché questo è estremamente semplice: "sostituisci ogni serie di caratteri di sottolineatura nella stringa con l'elemento successivo nella matrice".


3

JavaScript, 35 byte

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

Provalo online


1
Stessa cosa che ho avuto. In alternativa,a=>b=>String.raw({raw:a.split(/_+/)},...b)
ETHproductions,


2

MATL , 9 byte

'_+'i1&YX

Provalo online!

Spiegazione

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

Provalo online!

-1 grazie a un trucco intelligente di Martin Ender .

Spiegazione:

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

.\invece di \]z.
Martin Ender,

@MartinEnder Funziona o_o
Erik the Outgolfer,

Certo, \è un operatore binario. :)
Martin Ender,

@MartinEnder Sembra che io abbia ottenuto un po 'troppo su come funziona la mappatura in CJam allora.
Erik the Outgolfer,

@MartinEnder OK al secondo pensiero come non ci ho pensato? Non come se non sapessi come si comporta la mappatura, ad es. [1 2 3]:_-> [1 1 2 2 3 3]allo stesso modo per ....
Erik the Outgolfer,

2

Gelatina , 8 7 byte

ṣ”_¬Ðfż

Provalo online! Modifica: salvato 1 byte grazie a @Erik the Outgolfer. Spiegazione:

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


1

Pyth , 10 byte

s.i:E"_+"3

Provalo qui!

Come funziona?

si: E "_ +" 3 Programma completo.

   : E 3 Dividi il secondo input sulle partite del regex ...
     "_ +" Il regex "_ +" (corrisponde a 1 o più caratteri di sottolineatura)
 .i Interlacciare gli elementi dell'elenco diviso con l'input.
s Unisciti a una stringa.

1

RProgN 2 , 11 byte

x='_+'³[x‘r

Prende una stringa e una pila di stringhe nella parte superiore della pila.

Il primo elemento (superiore) di una pila è a destra, quindi l'input è da destra a sinistra.

spiegato

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.

Provalo online!


1

Java 8, 57 byte

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

Quando ho letto la sfida, all'inizio ho pensato che dovremmo fare una frase grammaticalmente corretta con le parole in ordine casuale, ma è più semplice sostituire le righe con ogni parola sequenziale. ;)

Spiegazione:

Provalo qui.

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

Rubino , 28 + 1 = 29 byte

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

usi -p

La prima riga è la stringa di formato, il resto delle righe è l'array.

Provalo online!


0

Python 2 , 61 byte

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

Provalo online!

Dannazione.

Python 2 , 63 byte

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

Provalo online!


60 byte passando re.subuna funzione
Stephen,

@Stephen Eh ... È troppo vicino alla tua soluzione. Mi limiterò a questo e troverò soluzioni più oscure. : P
totalmente umano il

53 byte utilizzando una funzione per migliorare la proposta di @Stef.
Jonathan Frech,

@JonathanFrech sì, ma questa è esattamente la mia risposta già: P
Stephen,

@Stephen Oh; non ho visto la tua risposta ...: d
Jonathan Frech,


0

SOGL V0.12 , 7 byte

lΔ╔*№≤ŗ

Provalo qui!

Spiegazione:

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

Provalo online!

L'input dell'elenco viene considerato come una tupla. Consentire gli elenchi effettivi come input aggiungerebbe altri sette byte, poiché sarebbe necessaria una conversione ( tuple(...)).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.