Comme le disent les programmeurs: efforcez-vous d'être paresseux

25

Récit

Avez-vous vu ce post de 9gag ? Vous avez peut-être le sentiment de faire vos propres phrases. Mais alors vous vous rendez compte que vous pourriez simplement jouer un script en une demi-heure, et vous n'aurez jamais à vous en occuper.

La soumission

Votre programme recevra une chaîne d'entrée qu'il renverra avec des guillemets ajoutés comme expliqué ci-dessous. Les failles standard sont interdites. La sortie sous forme de liste de lignes est autorisée. Les espaces de fin et les lignes vides qui ne cassent pas la sortie sont autorisés.

Les règles de saisie

  • L'entrée contient uniquement des caractères ASCII imprimables.
  • L'entrée peut contenir des espaces. Les mots sont déterminés avec eux.
  • Il est garanti qu'un espace ne sera jamais suivi d'un autre espace.
  • Le cas d'aucune entrée ou chaîne vide n'a pas d'importance.

Les règles de sortie

Si un mot est donné, le programme doit renvoyer la chaîne entre guillemets.

Si la chaîne d'entrée contient 2 mots ou plus, elle renvoie d'abord l'entrée initiale, mais le premier mot est entre guillemets. Ensuite, sur la ligne suivante, il renvoie l'entrée initiale, mais avec le deuxième mot entre guillemets. Et ainsi de suite pour les mots restants.

En général, le programme doit renvoyer autant de lignes qu'il y a de mots dans l'entrée.

Exemples:

test -> "test"

This is codegolf -> "This" is codegolf
                    This "is" codegolf
                    This is "codegolf"

This is a significantly longer, but not the longest testcase -> "This" is a significantly longer, but not the longest testcase
                                                                This "is" a significantly longer, but not the longest testcase
                                                                This is "a" significantly longer, but not the longest testcase
                                                                This is a "significantly" longer, but not the longest testcase
                                                                This is a significantly "longer," but not the longest testcase
                                                                This is a significantly longer, "but" not the longest testcase
                                                                This is a significantly longer, but "not" the longest testcase
                                                                This is a significantly longer, but not "the" longest testcase
                                                                This is a significantly longer, but not the "longest" testcase
                                                                This is a significantly longer, but not the longest "testcase"

Here is an another one -> "Here" is an another one
                          Here "is" an another one
                          Here is "an" another one
                          Here is an "another" one
                          Here is an another "one"

C'est le , donc la réponse du moindre octet gagne!

krinistof
la source
7
Y aura-t-il des mots en double?
Incarnation de l'ignorance
10
Pouvons-nous supposer que la chaîne d'entrée ne contiendra pas de "caractères?
Poignée de porte
1
Re "Efforcez-vous d'être paresseux" : Je pense que c'est une fausse représentation de ce que Larry Wall a dit. - " La plupart des gens voient la paresse comme synonyme de fainéant ou de pomme de terre de canapé, mais la définition de Wall est une question d'efficacité. "
Peter Mortensen
14
Ce «problème» devrait être «amusant» au «golf».
Jono 2906
3
Peut - on utiliser des citations, comme '', ‘’ou “”plutôt que ""?
Giuseppe

Réponses:

10

vim, 38 octets

:s/"/<C-d>/g
qqysW"Ypds"W@qq@qdk:%s/<C-d>/"/g

Essayez-le en ligne!

Nécessite le plugin vim-surround .

Si l'entrée ne contient pas de "caractères, cela peut être fait en 19 octets :

qqysW"Ypds"W@qq@qdk

Ici, nous enregistrons une macro récursive ( qq ... @qq@q) qui entoure un mot avec des guillemets ( ysW"), duplique la ligne ( Yp), supprime les guillemets ( ds") et passe au mot suivant ( W) avant de s'appeler récursivement. Après sa fin, il y a deux lignes superflues, qui sont supprimées avec dk.

La solution complète enveloppe simplement cela :s/"/<C-d>/gau début, qui remplace les "caractères existants par un caractère non imprimable, et :%s/<C-d>/"/gà la fin, ce qui annule le remplacement.

Poignée de porte
la source
2
En fait, j'ai fait les exemples avec la même méthode: D
krinistof
8

Haskell, 65 octets

([]#).words
a#(b:c)=unwords(a++('"':b++"\""):c):(a++[b])#c
_#_=[]

Renvoie une liste de lignes.

Essayez-le en ligne!

nimi
la source
Cela semble échouer lorsque l'entrée contient des guillemets, des sauts de ligne ou d'autres caractères d'échappement.
Wheat Wizard
@ SriotchilismO'Zaic: fixe. Merci d'avoir souligné. Concernant la version plus courte: xnor a déjà posté cela comme réponse .
nimi
Pas tout à fait fixe, puisque les mots sont considérés \ncomme des espaces, ils ne se comportent pas correctement lorsqu'ils sont présents.
Wheat Wizard
@ SriotchilismO'Zaic: "L'entrée ne contient que des caractères ASCII imprimables", qui est Espace pour ~. "L'entrée peut contenir des espaces" - pas "des espaces".
nimi
7

Retina 0.8.2 , 17 octets

 
" $'¶$` "
^|$
"

Essayez-le en ligne! Le lien inclut une suite de tests. Explication:

 
" $'¶$` "

Développez chaque espace en dupliquant la ligne, puis en insérant des guillemets.

^|$
"

Fixez les première et dernière lignes.

Neil
la source
7

Gelée ,  15  14 octets

Ḳ⁾""j$€⁹¦K¥ⱮJ$

Essayez-le en ligne!

Comment?

Ḳ⁾""j$€⁹¦K¥ⱮJ$ - Link: list of characters, S
Ḳ              - split (S) at spaces -> A
             $ - last two links as a monad:
           Ɱ   -   map...
            J  -   ...across: range of length -> I = [1,2,...len(A)]
          ¥    -   ...doing: last two links as a dyad: i.e. f(A, i) for i in I
      € ¦      -     sparse application...
       ⁹       -     ...to indices: chain's right argument, i
     $         -     ...action: last two links as a monad:
 ⁾""           -       literal list of characters = ['"', '"']
    j          -       join (with A[i]) -> (e.g. with ['i','s']) ['"','i','s','"']
         K     -     join with spaces
Jonathan Allan
la source
Enregistrement facile . (Décidé de commenter ici parce que vous avez été le premier à publier un code similaire.: P)
Erik the Outgolfer
@EriktheOutgolfer merci, je suis revenu pour publier moi-même une amélioration similaire.
Jonathan Allan,
6

JavaScript (ES6),  43 42 41  38 octets

Sauvegardé 3 octets grâce à @mazzy

Utilise le non standard mais largement pris en charge RegExp.left​Contextet RegExp.rightContext. C'est beaucoup de citations différentes ...

s=>s.replace(/(\S+) ?/g,`$\`"$1" $'
`)

Essayez-le en ligne!

Arnauld
la source
Intelligent! Mais voyez sur la virgule dans le cas de testThis is a significantly "longer,"...
mazzy
Ça ne /(\S+)/gmarcherait pas ?
Shaggy
1
@mazzy Oh, merci. En fait, je l'ai fait exprès, car j'ai mal lu le cas de test avec une virgule. Maintenant corrigé.
Arnauld
@Shaggy Je pense que nous devons capturer l'espace pour qu'il n'apparaisse pas dans le contexte de gauche du mot suivant.
Arnauld
1
@mazzy je suppose que c'est bien en effet. Merci!
Arnauld
6

Java, 235183132 octets

s->{String a[]=s.split(" "),r="",t;for(int l=a.length,i=0,j;i<l;i++,r+="\n")for(j=0;j<l;)r+=(t=i==j?"\"":"")+a[j++]+t+" ";return r;}

-52 octets en abusant d'une variété de choses (accès statique, liste vs tableau, imprimer au lieu de retourner, etc. Merci @ValueInk!)
-51 octets par beung paresseux et laisser @KevinCruijssen faire le travail pour moi
Essayez-le en ligne

Benjamin Urquhart
la source
C'est des frais généraux fous dont vous avez besoin pour java.util.Arrays.copyOfRange. Si vous java.util.Listutilisez, vous pouvez utiliser subListpour plus court et imprimer sur STDOUT au lieu de construire un tableau. J'ai obtenu 193 octets avec ces idées, et j'ai également abusé du mot-clé var.
Value Ink
@ValueInk merci! J'ai également remplacé String.joinpar s.joinpour ces avertissements IDE supplémentaires (et -10 octets).
Benjamin Urquhart
1
@ OlivierGrégoire non merci: ^)
Benjamin Urquhart
2
@ OlivierGrégoire Challenge accepté et battu, monsieur! ; p 71 octets
Kevin Cruijssen
1
@KevinCruijssen Nice! Je n'ai même pas pensé que regex ferait le travail. Bravo ;-)
Olivier Grégoire
5

J'espère que ce n'est pas terrible

Kotlin, 105 112 147 117 octets / caractères

fun main(a:Array<String>){val q=a[0].split(" ")
q.forEach{println(q.fold(""){i,n->i+if(it==n)"\"$n\" " else n+" "})}}

Essayez-le en ligne!

Quinn
la source
4

05AB1E , 14 octets

ð¡©ε®y…"ÿ"Nǝ}»

Essayez-le en ligne!


+1 octet (et cela fonctionne pour le cas de bord) grâce à Emigna. -1 octet merci à Kevin!

Urne de poulpe magique
la source
1
Malheureusement, vous devez utiliser ð¡pour gérer des entrées telles que test.
Emigna
4

JavaScript, 91 97 75 78 octets

f= 

t=>t.split` `.map((c,i,a)=>[...a.slice(0,i),`"${c}"`,...a.slice(i+1)].join` `)

// and test
console.log(f("Hello folks and world").join('\n'));

Génère une liste de lignes sous forme de tableau JavaScript. La dernière entrée a un espace de fin comme autorisé dans la question. Le code de test écrit chaque entrée dans la console sur une ligne distincte à des fins de démonstration.

Grâce à Shaggy pour 19 octets de moins et aucun espace de tête - lorsque l'opérateur de propagation est utilisé sur un tableau vide pour initialiser un littéral de tableau, aucun emplacement n'est créé dans le tableau produit par l'opérateur de propagation:

let empty = [];
let array = [...empty, value]
//  produces an array of length 1 containing value 

(La version 91 octets avait un espace de tête sur la première ligne, la version 97 octets prenait 6 octets pour le supprimer.)

traktor53
la source
2
78 octets
Shaggy
1
L'extrait ne s'exécute pas car vous avez défini la ffonction. Autrement vérifié. Bon travail!
krinistof
@krinistof l'a corrigé, merci!
traktor53
Les mots après le mot cité sont séparés par des virgules au lieu d'espaces (Firefox,
je
1
@wastl Golfé 3 octets de trop et n'a pas vu les virgules à cause des yeux flous. Remettre le deuxième opérateur de propagation (comme dans le lien de Shaggy) supprime les virgules. Note à soi ... mettre mes lunettes la prochaine fois ;-(
traktor53
4

Python 3 , 79 , 69 , 65 octets

w,i=input(),0
while~i:m=w.split();m[i]='"%s"'%m[i];print(*m);i+=1

Essayez-le en ligne!

Rasé de 10 octets grâce à xnor. Et maintenant, c'est 65 octets selon Erik la solution Outgolfer. Le programme se termine avec IndexError mais c'est très bien.

Андрей Ломакин
la source
2
Terminer avec une erreur est très bien pour les programmes . Une astuce pratique: vous pouvez utiliser print(*l)en Python 3 à la place de print(" ".join(l)).
xnor
Encore mieux, utilisez le déballage itératif étendu .
xnor
2
65 octets : au lieu d'attribuer wà input().split(), attribuez-le à input(), puis, dans la whileboucle, attribuez mà w.split(), ce qui créera une nouvelle liste à chaque itération pour éviter les problèmes de référence, puis définissez m[i]sur '"%s"'%m[i]et print(*m).
Erik the Outgolfer
4

Java 8, 72 71 67 62 octets

s->s.replaceAll("(?<=(^.*))(\\S+) ?(?=(.*$))","$1\"$2\" $3\n")

Essayez-le en ligne.

Explication:

s->                    // Method with String as both parameter and return-type
  s.replaceAll("...",  //  Replace all matches in this regex
               "...")  //  With this
                       //  And then return the result

Explication de l'expression régulière:

(?<=(^.*))(\\S+) ?(?=(.*$))   # === MATCH ===
(?<=     )                    # A positive look-behind to:
     ^.*                      #  The optional leading portion of the string
    (   )                     #  (which is captured in capture group 1)
           \\S+               # Followed by one or more non-space characters,
                              # so the next word in line
          (    )              # (which is captured in capture group 2)
                 ?            # Followed by an optional space
                  (?=     )   # Followed by a positive look-ahead to:
                      .*$     #  The trailing optional portion of the string
                     (   )    #  (which is captured in capture group 3)

$1\"$2\" $3\n                 # === REPLACEMENT ===
$1                            # The match of capture group 1
                              # (the leading portion)
    $2                        # Followed by the match of capture group 2
                              # (the current word in the 'iteration'),
  \"  \"                      # surrounded by quotation marks
                              # Followed by a space character
         $3                   # Followed by the match of capture group 3
                              # (the trailing portion)
           \n                 # Followed by a trailing newline
Kevin Cruijssen
la source
2
Vous venez d'ouvrir la voie à une multitude de réponses regex. Bien joué.
Benjamin Urquhart
J'ai essayé de porter cela sur Python. Parfois, je souhaite que les analyseurs d'expressions rationnelles soient cohérents dans toutes les langues.
Benjamin Urquhart
1
@BenjaminUrquhart Malheureusement, ils ne le sont pas. L'expression regex Java est différente de l'expression regex C #, Python est à nouveau différent, Perl est à nouveau différent, etc. En effet, un peu ennuyeux.
Kevin Cruijssen
4

Rubis avec-an , 53 octets

Les drapeaux -ansont lus sur chaque ligne et divisés en $F.

$F.size.times{|i|a=$F.dup;a[i]=?"+a[i]+?";puts a*' '}

Essayez-le en ligne!

Encre de valeur
la source
3

Rubis , 98 caractères.

Première soumission jamais. Cela peut certainement être raccourci. Je voulais juste obtenir une réponse rapidement.

a=->s{s.split.each_index{|i|puts s.split.each_with_index.map{|a,j|i==j ? "\"#{a}\"":a}.join(" ")}}

Essayez-le en ligne!

snowe
la source
Bienvenue chez PPCG! Ma suggestion serait pour chaque index, enregistrer en s.splittant que variable et modifier l'index que vous souhaitez avoir les guillemets autour, au lieu d'utiliser le trop verbeux each_with_index.map. En outre, vous pouvez soumettre le lambda anonyme sans le nommer et la jointure peut être remplacée par un *opérateur. Cela réduit votre nombre d'octets à 64 octets.
Value Ink
Fantastique! Je savais qu'il y avait un moyen plus court de faire la jointure, mais j'essayais de sortir du bureau et je voulais soumettre quelque chose avant de quitter XD. Je ne savais pas que les règles permettaient des lambdas anonymes comme ça.
snowe
3

Perl 6 , 43 40 octets

{m:ex/^(.*?<<)(\S+)(>>.*)$/>>.join('"')}

Essayez-le en ligne!

Correspond à tous les mots possibles, puis joint chaque liste par des guillemets. Cela pourrait être un octet plus court si nous pouvions produire des lignes dans l'ordre inverse.

Explication:

{                                      }  # Anonymous code block
 m:ex/^                  $/               # Match all strings
       (.*?)         (.*)                 # Match before and after sections
            <<(\S+)>>                     # And the actual word (with no spaces)
                           >>.join('"')   # And join each line by "s
Jo King
la source
3

Réflexions , 229 octets

  _1 +\ /\/(3\  /(0\
/+_:   # \#_: v1=2#_ \
\     /_+/:3; / 1/\:1)
/v(3(2/ \3)(3 ;\#@ \ /
   /:#_(0\:_ / (0*  /0  \
 0 >~    <>~   <0 \  *#_/
 \       /     /\/ v/ 
   \=2#_1/\2#_>  (0~
                 \ ^\
\                   /

Essaye-le!

J'ai "rapidement" "joué au golf" dans une langue "drôle" de "golf".

En regardant tout cet espace, il pourrait probablement être plus court.

wastl
la source
3

Haskell , 64 octets

map unwords.g.words
g(h:t)=(('"':h++"\""):t):map(h:)(g t)
g _=[]

Essayez-le en ligne!

Génère une liste de chaînes. Basé sur la réponse de Nimi .

xnor
la source
Cette réponse comme celle de nimi ne fonctionne pas correctement lorsque l'entrée contient des caractères d'échappement comme \nou ".
Wheat Wizard
2

Stax , 10 octets

▓¼MY@≈╢∞◙╗

Exécuter et déboguer

Déballé, non golfé et commenté, il ressemble à ceci.

jY      split on spaces and store in y register
m       for each word, run the rest of the program and implicitly output
  '"|S  surround with double quotes
  yia&  start with register y, and replace the ith element, where i is the iteration index
  J     join with spaces

Exécutez celui-ci

récursif
la source
2

C (gcc) , 136133 octets

Comme les fonctions de tokenisation de C gâcheraient la chaîne lors des lectures futures, je calcule plutôt le nombre et les décalages pour chaque mot, puis je termine lorsque le nombre total d'itérations de la boucle externe correspond au nombre de mots.

i,j=1;f(s,c,t)char*s,*c,*t;{for(i=0;i++<j;puts(""))for(j=0,c=t=s;t;t=c+!!c)printf("%3$s%.*s%s ",(c=index(t,32))-t,t,"\""+!!(i-++j));}

Essayez-le en ligne!

ErikF
la source
L'échange "\""+!!(i-++j)de i-++j?"":"\""vous fait économiser un octet.
gastropner
2

PowerShell , 60 40 36 octets

-20 octets inspirés par Arnauld

$args-replace'(\S+) ?','$`"$1" $''
'

Essayez-le en ligne!

Le résultat a un espace supplémentaire et une ligne vide dans la queue.


Powershell, pas d'expression régulière, 60 octets

($w=-split$args)|%{$p=++$c
"$($w|%{$q='"'*!--$p
"$q$_$q"})"}

Essayez-le en ligne!

Moins golfé:

$words=-split $args                     # split by whitespaces
$words|%{
    $position=++$counter
    $array=$words|%{
        $quotation='"'*!--$position     # empty string or quotation char
        "$quotation$_$quotation"
    }
    "$($array)"                         # equivalent to $array-join' '
}
mazzy
la source
Neither works if the input words contain tabs or other whitespace. From the challenge, only spaces delimit words.
AdmBorkBork
you are right, of course. But rules are: 1. The input only contains printable ASCII characters., 2. The input may contain spaces. Tabs and other whitespace is not printable ASCII, is not it? :)
mazzy
1
I suppose that's true - I was only basing my statement off of the OP's comment here, but that hasn't been edited into the challenge ... so I suppose your submission is fine as it currently is.
AdmBorkBork
2

JavaScript, 62 bytes

Thanks @Shaggy for golfing off 10 bytes

f=
x=>x.split` `.map((c,i,a)=>(s=[...a],s[i]=`"${c}"`,s.join` `))

console.log(f("Hello folks and world").join('\n'));

Explanation

  • The function splits the string at each space (x.split` `)
  • For each element in the resulting array perform the following function
  • Create a shallow copy of the array (s=[...a])
  • Replace the nth element in the array with itself surrounded with quotation marks (s[i]=`"${c}"`)
  • return the shallow copy joined with spaces (s.join` `)
fəˈnɛtɪk
la source
62 bytes
Shaggy
2

Java (JDK), 104 bytes

t->{var w=t.split(" ");int i=0;for(var s:w){w[i]='"'+s+'"';System.out.println(s.join(" ",w));w[i++]=s;}}

Try it online!

Olivier Grégoire
la source
2

R, 94 76 bytes

-18 bytes thanks to Giuseppe

m=matrix(s<-scan(,a<-'"'),n<-length(s),n);diag(m)=paste0(a,s,a);write(m,1,n)

Try it online!

Thanks to digEmAll for setting up the TIO properly. It takes in e.g. This is codegolf and outputs correctly

"This" is codegolf 
 This "is" codegolf 
 This is "codegolf" 

It uses a matrix format with the sentence repeated n times; then we only need to change the diagonal entries. Note that usually, in R code-golf, strings are read in with scan(,""), but any string can be used instead of the empty string as the what (or w) parameter.

Explanation of old ungolfed version:

s <- scan(t=scan(,''),w=t)    # read in input and separate by spaces
n <- length(s)                # number of words
m = matrix(s, n, n)           # fill a matrix, one word per entry, each column corresponds to the whole sentence. The sentence is repeated n times.
diag(m) = paste0('"', s, '"') # replace diagonal entries with the corresponding word surrounded by quotes
cat(rbind(m,"\n"))        # add a \n at the end of each column, then print column-wise
Robin Ryder
la source
76 bytes
Giuseppe
@Giuseppe Thanks! How did I not see that I didn't need two calls to scan??
Robin Ryder
Sometimes you just get into a golfing groove. If we can use other quotes than "", we can reduce to 68 bytes using sQuote.
Giuseppe
2

This is my first code golf. hopefully its not shit.

EDIT: got it down to 54 bytes with a better regular expression.

**EDIT 2: per suggestions, fixed a bug and made it shorter **

JavaScript (V8), 46 bytes

t=>t.split(' ').map(v=>t.replace(v,'"'+v+'"'))

Try it online!

r3wt
la source
5
If the input contains duplicate words, subsequent copies never get quoted.
recursive
Splitting on spaces would be shorter.
Shaggy
@recursive should be fixed.
r3wt
@Shaggy thanks, i incorporated your suggestion
r3wt
1
Still doesn't work for duplicate words
Jo King
2

Elm Using recursion, 132,130,121,111,100 99 bytes

Golfed down 9 bytes thanks to Kevin Cruijssen technique and another 22 bytes were cracked by ASCII-only. Turned to non-tail recursion during the golf.

f b a=case a of
 c::r->String.join" "(b++("\""++c++"\"")::r)::f(b++[c])r
 _->[]
u=f[]<<String.words

Try it online

85 bytes after exposing String functions to the current scope

f b a=case a of
 c::r->join" "(b++("""++c++""")::r)::f(b++[c])r
 _->[]
u=f[]<<words

Ungolfed version (Using tail recursion)

push : List a -> a -> List a
push list el =
    list ++ [ el ]

zip : (List a -> a -> List a -> b) -> List a -> List a -> List b -> List b
zip transform before after mapped =
    case after of
        [] ->
            mapped

        current :: rest ->
            transform before current rest
                |> push mapped
                |> zip transform (push before current) rest

wrap : appendable -> appendable -> appendable
wrap v str =
    v ++ str ++ v

cb : List String -> String -> List String -> String
cb before current rest =
    before ++ wrap "\"" current :: rest
        |> String.join " "

result : List String
result =
    zip cb [] (String.words "This is code golf") []

Try ungolfed

Evgeniy Malyutin
la source
2

Japt, 14 12 bytes

¸£¸hYQ²i1X)¸

Try it

2 bytes saved thanks to Oliver.

¸£¸hYQ²i1X)¸     :Implicit input of string
¸                :Split on spaces
 £               :Map each X at index Y
  ¸              :  Split input on spaces
   hY            :  Set the element at index Y to
     Q           :    Quotation mark
      ²          :    Repeat twice
       i1X       :    Insert X at 0-based index 1
Shaggy
la source
12 bytes
Oliver
D'oh! Of course! Thanks, @Oliver.
Shaggy
1

PowerShell, 70 65 bytes

param($a)$a.Split()|%{$a-replace[regex]"( |^)$_( |$)"," ""$_"" "}

Try it online!

Has test suite in trial. Has 1 leading space on first row, and 1 trailing space on last row. Attempting to refactor.

KGlasier
la source
4
This doesn't work if you have a duplicate word in the test string.
snowe
1

Charcoal, 19 bytes

E⪪θ ⪫E⪪θ ⎇⁼κμ⪫""λλ 

Try it online! Link is to verbose version of code. Note: Trailing space. Explanation:

  θ                     Input string
 ⪪                      Split on literal space
E                       Map over words
       θ                Input string
      ⪪                 Split on literal space
     E                  Map over words
            μ           Inner index
          ⁼             Equals
           κ            Outer index
         ⎇             If true then
               ""       Literal string `""`
              ⪫         Joined i.e. wrapping
                 λ      Current word
                  λ     Otherwise current word
    ⪫                  Joined with literal space
                        Implicitly print each result on its own line
Neil
la source
1

Attache, 34 bytes

Join&sp=>{On&_&Repr=>Iota@_}@Split

Try it online! Anonymous function returning a list of lines.

Explanation

Join&sp=>{On&_&Repr=>Iota@_}@Split
                             Split      Splits the input on whitespace
         {         =>Iota@_}            Over each number K, 0 to #words - 1
          On  &Repr                     Apply the Repr (quoting) function
            &_                          on the Kth element in the input
Join&sp=>                               then rejoin the words of each inner sentence
Conor O'Brien
la source
1

C# (Visual C# Interactive Compiler), 123 bytes

I wonder if can this be shortened with regular expressions.

s=>(r=s.Split(' ')).Select((a,i)=>(string.Join(" ",r.Take(i))+" \""+a+"\" "+string.Join(" ",r.Skip(i+1))).Trim());string[]r

Try it online!

my pronoun is monicareinstate
la source
118 bytes
Innat3
110 bytes
dana
Port of Java answer - 104 :)
dana
1
@dana My port is shorter, though ;)
Kevin Cruijssen
@KevinCruijssen - I saw you got that regex earlier :) Figured that was a totally different approach so I didn't try porting it over, but yeah that is a good solution!
dana