Seperti yang dikatakan programmer: Berusahalah untuk malas

25

Cerita

Pernahkah Anda melihat posting ini dari 9gag ? Mungkin Anda punya perasaan untuk membuat kalimat sendiri. Tapi kemudian Anda menyadari bahwa Anda bisa bermain golf hanya dalam waktu setengah jam, dan Anda tidak akan pernah harus berurusan dengan itu.

Pengajuan

Program Anda akan mendapatkan string input yang akan dikembalikan dengan tanda kutip tambahan seperti yang dijelaskan di bawah ini. Celah standar dilarang. Output sebagai daftar baris diperbolehkan. Membuntuti spasi dan garis kosong yang tidak merusak output diizinkan.

Aturan input

  • Input hanya berisi karakter ASCII yang dapat dicetak.
  • Input mungkin berisi spasi. Kata-kata ditentukan bersama mereka.
  • Dijamin bahwa ruang tidak akan pernah diikuti oleh ruang lain.
  • Kasus tanpa input atau string kosong tidak masalah.

Aturan output

Jika satu kata diberikan maka program harus mengembalikan string di antara tanda kutip.

Jika string input memiliki 2 kata atau lebih, itu pertama mengembalikan input awal, tetapi kata pertama dalam tanda kutip. Kemudian pada baris berikutnya, ia mengembalikan input awal, tetapi dengan kata kedua dalam tanda kutip. Demikian seterusnya untuk kata-kata yang tersisa.

Secara umum, program harus mengembalikan banyak baris karena ada kata-kata dalam input.

Contoh:

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"

Ini adalah , jadi jawaban byte terkecil menang!

krinistof
sumber
7
Apakah akan ada kata-kata rangkap?
Perwujudan Ketidaktahuan
10
Bisakah kita menganggap string input tidak akan mengandung "karakter?
Gagang pintu
1
Re "Strive to be malas" : Saya pikir ini adalah pernyataan yang salah dari apa yang Larry Wall katakan. - " Kebanyakan orang melihat kemalasan sebagai sinonim dari slack atau couch potato, tetapi definisi Wall adalah tentang efisiensi. "
Peter Mortensen
14
"Masalah" ini harus "menyenangkan" hingga "golf".
Jono 2906
3
Bisakah kita menggunakan tanda kutip yang berbeda, seperti '', ‘’, atau “”, bukan ""?
Giuseppe

Jawaban:

10

vim, 38 byte

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

Cobalah online!

Membutuhkan plugin vim-surround .

Jika input tidak mengandung "karakter, ini dapat dilakukan dalam 19 byte :

qqysW"Ypds"W@qq@qdk

Di sini, kami merekam makro rekursif ( qq ... @qq@q) yang mengelilingi sebuah kata dengan tanda kutip ( ysW"), menduplikasi baris ( Yp), menghapus tanda kutip ( ds"), dan pindah ke kata berikutnya ( W) sebelum memanggil dirinya secara rekursif. Setelah itu berakhir, ada dua baris asing, yang dihapus dengan dk.

Solusi lengkap hanya membungkus ini dengan :s/"/<C-d>/gdi awal, yang menggantikan "karakter yang ada dengan karakter yang tidak diinginkan, dan :%s/<C-d>/"/gpada akhirnya, yang membatalkan penggantian.

Gagang pintu
sumber
2
Saya benar - benar membuat contoh dengan metode yang sama: D
krinistof
8

Haskell, 65 byte

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

Mengembalikan daftar garis.

Cobalah online!

nimi
sumber
Ini tampaknya gagal ketika input berisi tanda kutip, baris baru atau karakter lain yang lolos.
Wheat Wizard
@ SriotchilismO'Zaic: diperbaiki. Terima kasih telah menunjukkan. Mengenai versi yang lebih pendek: xnor sudah memposting ini sebagai jawaban .
nimi
Tidak cukup pasti, karena kata-kata dianggap \nsebagai spasi, itu berperilaku tidak benar ketika itu ada.
Wheat Wizard
@ SriotchilismO'Zaic: "Input hanya berisi karakter ASCII yang dapat dicetak", yang merupakan Spasi ~. "Input mungkin berisi spasi" - bukan "spasi putih".
nimi
7

Retina 0.8.2 , 17 byte

 
" $'¶$` "
^|$
"

Cobalah online! Tautan termasuk test suite. Penjelasan:

 
" $'¶$` "

Perluas setiap ruang dengan menduplikasi baris dan kemudian menyisipkan tanda kutip.

^|$
"

Perbaiki baris pertama dan terakhir.

Neil
sumber
7

Jelly ,  15  14 byte

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

Cobalah online!

Bagaimana?

Ḳ⁾""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
sumber
Mudah disimpan . (Memutuskan untuk berkomentar di sini karena Anda adalah orang pertama yang memposting kode yang serupa.: P)
Erik the Outgolfer
@EriktheOutgolfer terima kasih, kembali untuk memposting peningkatan yang sama sendiri.
Jonathan Allan
6

JavaScript (ES6),  43 42 41  38 byte

Disimpan 3 byte berkat @mazzy

Menggunakan non-standar tetapi banyak didukung RegExp.left​Contextdan RegExp.rightContext. Itu banyak kutipan berbeda ...

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

Cobalah online!

Arnauld
sumber
Pintar! Tapi lihat pada koma dalam test caseThis is a significantly "longer,"...
mazzy
Tidak akan /(\S+)/gbekerja
Shaggy
1
@ Mazzy Oh, terima kasih. Saya sengaja melakukannya dengan sengaja karena saya salah membaca test case dengan koma. Sekarang sudah diperbaiki.
Arnauld
@ Shaggy Saya pikir kita perlu menangkap ruang sehingga tidak muncul dalam konteks kiri kata berikutnya.
Arnauld
1
@ Mazzy kurasa itu baik-baik saja. Terima kasih!
Arnauld
6

Jawa, 235 183 132 byte

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 byte dengan menyalahgunakan berbagai hal (akses statis, daftar vs array, mencetak bukannya kembali, dll. Terima kasih @ValueInk!)
-51 byte oleh beung lazy dan membiarkan @KevinCruijssen melakukan pekerjaan untuk saya
Cobalah online

Benjamin Urquhart
sumber
Itu beberapa overhead gila yang Anda butuhkan untuk java.util.Arrays.copyOfRange. Jika Anda menggunakan, java.util.ListAnda dapat menggunakan subListuntuk lebih pendek, dan mencetak ke STDOUT daripada membangun array. Saya mendapat 193 byte dengan ide-ide itu, dan juga menyalahgunakan kata kunci var.
Value Ink
@ Nilai, terima kasih! Saya juga diganti String.joindengan s.joinuntuk peringatan IDE ekstra (dan -10 byte).
Benjamin Urquhart
1
@ OlivierGrégoire no terima kasih: ^)
Benjamin Urquhart
2
@ OlivierGrégoire Challenge diterima dan dikalahkan, Pak! ; p 71 byte
Kevin Cruijssen
1
@KevinCruijssen Bagus! Saya bahkan belum berpikir regex akan melakukan pekerjaan itu. Bagus ;-)
Olivier Grégoire
5

Usaha kode golf pertama mudah-mudahan itu tidak buruk dan mudah-mudahan itu tidak melanggar aturan

Kotlin, 105 112 147 117 byte / karakter

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

Cobalah online!

Quinn
sumber
4

05AB1E , 14 byte

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

Cobalah online!


+1 byte (dan berfungsi untuk kasus tepi) berkat Emigna. -1 byte terima kasih kepada Kevin!

Guci Gurita Ajaib
sumber
1
Sayangnya Anda perlu menggunakan ð¡untuk menangani input seperti test.
Emigna
4

JavaScript, 91 97 75 78 byte

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'));

Menghasilkan daftar garis sebagai array JavaScript. Entri terakhir memiliki ruang tambahan seperti yang diizinkan dalam pertanyaan. Kode uji menulis setiap entri ke konsol pada baris terpisah untuk tujuan demonstrasi.

Berkat Shaggy selama 19 byte dan tidak ada spasi utama - saat operator spread digunakan pada array kosong untuk menginisialisasi array literal, tidak ada slot yang dibuat dalam array yang diproduksi oleh operator spread:

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

(Versi 91 byte memiliki ruang terdepan di baris pertama, versi 97 byte membutuhkan 6 byte untuk menghapusnya.)

traktor53
sumber
2
78 byte
Shaggy
1
Cuplikan tidak berjalan karena Anda mendefinisikan ffungsi. Jika tidak diverifikasi. Kerja bagus!
krinistof
@rinistof memperbaikinya, thx!
traktor53
Kata-kata setelah kata yang dikutip dipisahkan dengan koma alih-alih spasi (Firefox, tidak yakin apakah itu masalah browser)
wastl
1
@wastl Golfed 3 byte terlalu banyak dan tidak melihat koma karena mata buram. Menempatkan kembali operator spread kedua (seperti pada tautan Shaggy) menghilangkan koma. Catatan untuk diri sendiri ... letakkan kacamata saya di waktu berikutnya ;-(
traktor53
4

Python 3 , 79 , 69 , 65 byte

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

Cobalah online!

Dicukur 10 byte berkat xnor. Dan sekarang ini adalah 65 byte per Erik solusi Outgolfer. Program berakhir dengan IndexError tetapi ini baik-baik saja.

Андрей Ломакин
sumber
2
Mengakhiri kesalahan cukup baik untuk program . Trik praktis: Anda dapat menggunakan print(*l)Python 3 sebagai pengganti print(" ".join(l)).
xnor
Lebih baik lagi, gunakan Extended Iterable Unpacking .
xnor
2
65 bytes : Alih-alih menugaskan wuntuk input().split(), menetapkan ke input(), kemudian, dalam whilelingkaran, menetapkan muntuk w.split(), yang akan membuat daftar baru di setiap iterasi untuk masalah referensi menghindari, kemudian mengatur m[i]untuk '"%s"'%m[i]dan print(*m).
Erik the Outgolfer
4

Java 8, 72 71 67 62 byte

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

Cobalah online.

Penjelasan:

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

Penjelasan regex:

(?<=(^.*))(\\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
sumber
2
Anda baru saja membuka jalan untuk banyak jawaban regex. Sudah selesai dilakukan dengan baik.
Benjamin Urquhart
Saya mencoba untuk port ini ke Python. Terkadang saya berharap regex parser konsisten di semua bahasa.
Benjamin Urquhart
1
@BenjaminUrquhart Sayangnya mereka tidak .. Java regex berbeda dari C # regex, Python berbeda lagi, Perl berbeda lagi, dll. Memang agak menyebalkan.
Kevin Cruijssen
4

Ruby dengan -an, 53 byte

Bendera -andibaca setiap baris dan dibagi menjadi $F.

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

Cobalah online!

Nilai Tinta
sumber
3

Ruby , 98 karakter.

Pengiriman pertama. Ini pasti bisa dipersingkat. Saya hanya ingin mendapatkan jawaban dengan cepat.

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

Cobalah online!

salju
sumber
Selamat datang di PPCG! Saran saya adalah untuk setiap indeks, simpan s.splitsebagai variabel dan edit indeks yang ingin Anda kutip di sekitarnya, daripada menggunakan verbose yang terlalu banyak each_with_index.map. Anda juga dapat mengirimkan lambda anonim tanpa menyebutkan namanya, dan bergabung bisa diganti dengan *operator. Ini menurunkan jumlah byte Anda menjadi 64 byte.
Value Ink
Fantastis! Saya tahu ada cara yang lebih singkat untuk bergabung, tetapi saya berusaha keluar dari kantor dan ingin mengirimkan sesuatu sebelum meninggalkan XD. Saya tidak menyadari aturan yang diizinkan untuk lambda anonim seperti itu.
bersalju
3

Perl 6 , 43 40 byte

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

Cobalah online!

Cocokkan semua kata yang mungkin, kemudian gabungkan setiap daftar dengan kutipan. Ini bisa menjadi satu byte lebih pendek jika kita bisa mengeluarkan garis dalam urutan terbalik.

Penjelasan:

{                                      }  # 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
sumber
3

Refleksi , 229 byte

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

Menguji!

Saya "cepat" "bermain golf" dalam bahasa "lucu" "bermain golf".

Melihat semua ruang putih itu, mungkin bisa lebih pendek.

wastl
sumber
3

Haskell , 64 byte

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

Cobalah online!

Menghasilkan daftar string. Berdasarkan jawaban nimi .

Tidak
sumber
Jawaban ini seperti nimi tidak berfungsi dengan baik ketika input berisi karakter yang keluar seperti \natau ".
Wheat Wizard
2

Stax , 10 byte

▓¼MY@≈╢∞◙╗

Jalankan dan debug itu

Dibongkar, tidak diserang, dan dikomentari, sepertinya ini.

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

Jalankan yang ini

rekursif
sumber
2

C (gcc) , 136 133 byte

Karena fungsi tokenizing C akan mengacaukan string pada bacaan di masa mendatang, saya sebagai gantinya menghitung jumlah dan offset untuk setiap kata dan kemudian selesai ketika jumlah total iterasi loop luar cocok dengan jumlah kata.

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));}

Cobalah online!

ErikF
sumber
Bertukar "\""+!!(i-++j)untuk i-++j?"":"\""menghemat satu byte.
gastropner
2

PowerShell , 60 40 36 byte

-20 byte terinspirasi oleh Arnauld

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

Cobalah online!

Hasilnya memiliki satu ruang ekstra dan satu garis kosong di bagian ekor.


Powershell, tanpa regexp, 60 byte

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

Cobalah online!

Kurang bermain 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
sumber
Tidak berfungsi jika kata input berisi tab atau spasi putih lainnya. Dari tantangan, hanya spasi yang membatasi kata-kata.
AdmBorkBork
kamu benar, tentu saja. Tetapi aturannya adalah: 1. The input only contains printable ASCII characters., 2 The input may contain spaces.. Tab dan spasi lain tidak bisa dicetak ASCII, bukan? :)
mazzy
1
Saya kira itu benar - saya hanya mendasarkan pernyataan saya dari komentar OP di sini , tapi itu belum diedit ke dalam tantangan ... jadi saya kira kiriman Anda baik-baik saja seperti saat ini.
AdmBorkBork
2

JavaScript, 62 byte

Terima kasih @Shaggy untuk bermain golf 10 byte

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

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

Penjelasan

  • Fungsi ini membagi string di setiap spasi (x.split` `)
  • Untuk setiap elemen dalam array yang dihasilkan melakukan fungsi berikut
  • Buat salinan dangkal dari array (s = [... a])
  • Ganti elemen ke-n dalam array yang dikelilingi tanda kutip (s [i] = `" $ {c} "`)
  • kembalikan salinan dangkal bergabung dengan spasi (s.join` `)
fəˈnɛtɪk
sumber
62 byte
Shaggy
2

Java (JDK) , 104 byte

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

Cobalah online!

Olivier Grégoire
sumber
2

R , 94 76 byte

-18 byte terima kasih kepada Giuseppe

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

Cobalah online!

Terima kasih kepada DigEmAll untuk mengatur TIO dengan benar. Itu mengambil misalnya This is codegolfdan output dengan benar

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

Ini menggunakan format matriks dengan kalimat yang berulang nkali; maka kita hanya perlu mengubah entri diagonal. Perhatikan bahwa biasanya, dalam R code-golf, string dibaca bersama scan(,""), tetapi string apa pun dapat digunakan sebagai ganti string kosong sebagai parameter what(atau w).

Penjelasan dari versi lama ungolfed:

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
sumber
76 byte
Giuseppe
@Giuseppe Terima kasih! Bagaimana saya tidak melihat bahwa saya tidak perlu dua panggilan scan??
Robin Ryder
Terkadang Anda hanya masuk ke jalur golf. Jika kita dapat menggunakan tanda kutip selain "", kita dapat mengurangi menggunakan 68 bytesQuote .
Giuseppe
2

Ini golf kode pertamaku. mudah-mudahan itu bukan omong kosong.

EDIT: turun ke 54 byte dengan ekspresi reguler yang lebih baik.

** EDIT 2: per saran, memperbaiki bug dan membuatnya lebih pendek **

JavaScript (V8) , 46 byte

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

Cobalah online!

r3wt
sumber
5
Jika input berisi kata-kata rangkap, salinan selanjutnya tidak pernah dikutip.
Rekursif
Membagi ruang akan lebih pendek.
Shaggy
@recursive harus diperbaiki.
r3wt
@Shaggy terima kasih, saya memasukkan saran Anda
r3wt
1
Masih tidak berfungsi untuk kata
Jo King
2

Elm Menggunakan rekursi, 132.130.121.111.100 99 byte

Golf turun 9 byte berkat teknik Kevin Cruijssen dan 22 byte lainnya dipecahkan oleh ASCII saja . Beralih ke rekursi non-ekor selama golf.

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

Cobalah online

85 byte setelah mengekspos Stringfungsi ke lingkup saat ini

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

Versi tidak disatukan (Menggunakan rekursi ekor)

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") []

Coba ungolfed

Evgeniy Malyutin
sumber
2

Japt , 14 12 byte

¸£¸hYQ²i1X)¸

Cobalah

2 byte disimpan berkat 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
sumber
12 byte
Oliver
Doh! Tentu saja! Terima kasih, @Oliver.
Shaggy
1

PowerShell , 70 65 byte

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

Cobalah online!

Memiliki test suite dalam uji coba. Memiliki 1 ruang terdepan di baris pertama, dan 1 ruang tambahan di baris terakhir. Mencoba melakukan refactor.

KGlasier
sumber
4
Ini tidak berfungsi jika Anda memiliki kata duplikat dalam string uji.
bersalju
1

Arang , 19 byte

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

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Catatan: Ruang tambahan. Penjelasan:

  θ                     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
sumber
1

Attache , 34 byte

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

Cobalah online!Fungsi anonim mengembalikan daftar baris.

Penjelasan

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
sumber
1

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

Saya ingin tahu apakah ini dapat dipersingkat dengan ekspresi reguler.

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

Cobalah online!

kata ganti saya adalah monicareinstate
sumber
118 byte
Innat3
110 byte
dana
Port of Java answer - 104 :)
dana
1
@dana Port saya lebih pendek, meskipun;)
Kevin Cruijssen
@KevinCruijssen - Saya melihat Anda mendapatkan regex sebelumnya :) Mengira itu pendekatan yang sama sekali berbeda, jadi saya tidak mencoba porting, tapi ya itu solusi yang bagus!
dana