Как говорят программисты: стремитесь быть ленивыми

25

История

Вы видели этот пост от 9gag ? Может быть, у вас есть чувство, чтобы сделать свои собственные предложения. Но потом вы понимаете, что вы можете просто сыграть сценарий за полчаса, и вам никогда не придется иметь дело с этим.

Представление

Ваша программа получит входную строку, которая будет возвращена с добавленными кавычками, как описано ниже. Стандартные лазейки запрещены. Вывод в виде списка строк разрешен. Конечные пробелы и пустые строки, которые не нарушают вывод, разрешены.

Правила ввода

  • Ввод содержит только печатные символы ASCII.
  • Входные данные могут содержать пробелы. Слова определяются с ними.
  • Гарантируется, что за пробелом никогда не последует другое пробел.
  • Случай отсутствия ввода или пустой строки не имеет значения.

Правила вывода

Если дано одно слово, то программа должна вернуть строку между кавычками.

Если во входной строке 2 или более слов, сначала возвращается начальный ввод, но первое слово в кавычках. Затем на следующей строке он возвращает начальный ввод, но со вторым словом в кавычках. И так далее для остальных слов.

В общем, программа должна вернуть столько строк, сколько есть слов на входе.

Примеры:

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"

Это , поэтому побеждает наименее байтовый ответ!

krinistof
источник
7
Будут ли повторяющиеся слова?
Воплощение Неведения
10
Можем ли мы предположить, что входная строка не будет содержать "символов?
дверная ручка
1
Re «Стремитесь быть ленивым» : Я думаю , что это введение в заблуждение о том, что сказал Ларри Уолл. - « Большинство людей считают лень синонимом бездельника или ленивца, но определение Уолла касается эффективности »,
Питер Мортенсен,
14
Эта «проблема» должна быть «веселой» для «гольфа».
Джоно 2906
3
Можем ли мы использовать различные цитаты, как '', ‘’или “”, скорее , чем ""?
Джузеппе

Ответы:

10

vim, 38 байт

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

Попробуйте онлайн!

Требуется плагин vim -round .

Если ввод не содержит "символов, это может быть сделано в 19 байтах :

qqysW"Ypds"W@qq@qdk

Здесь мы записываем рекурсивный макрос ( qq ... @qq@q), который окружает слово кавычками ( ysW"), дублирует строку ( Yp), удаляет кавычки ( ds") и переходит к следующему слову ( W) перед рекурсивным вызовом самого себя. После его завершения появляются две посторонние строки, которые удаляются с помощью dk.

Полное решение просто оборачивает это :s/"/<C-d>/gв начало, которое заменяет существующие "символы непечатаемым символом, и :%s/<C-d>/"/gв конце, которое отменяет замену.

Дверная ручка
источник
2
Я на самом деле сделал примеры с помощью того же метода: D
krinistof
8

Haskell, 65 байт

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

Возвращает список строк.

Попробуйте онлайн!

Ними
источник
Кажется, что это не работает, когда ввод содержит кавычки, переводы строки или другие экранированные символы.
Пшеничный волшебник
@ SriotchilismO'Zaic: исправлено. Спасибо за указание. Что касается более короткой версии: xnor уже опубликовал это как ответ .
Ними
Не совсем исправлено, так как слова считают \nпробелами, они ведут себя некорректно, когда они присутствуют.
Пшеничный волшебник
@ SriotchilismO'Zaic: «Ввод содержит только печатные символы ASCII», то есть пробел для ~. «Входные данные могут содержать пробелы», а не «пробел».
Ними
7

Сетчатка 0.8.2 , 17 байт

 
" $'¶$` "
^|$
"

Попробуйте онлайн! Ссылка включает тестовый набор. Объяснение:

 
" $'¶$` "

Разверните каждый пробел, продублировав строку и вставив кавычки.

^|$
"

Исправьте первую и последнюю строчки.

Нил
источник
7

Желе ,  15  14 байт

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

Попробуйте онлайн!

Как?

Ḳ⁾""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
Джонатан Аллан
источник
Легко сохранить . (Решил прокомментировать здесь, потому что вы были первым, кто опубликовал подобный код.: P)
Эрик Outgolfer
@EriktheOutgolfer спасибо, вернулся, чтобы опубликовать подобное улучшение сам.
Джонатан Аллан
6

JavaScript (ES6),  43 42 41  38 байт

Сохранено 3 байта благодаря @mazzy

Использует нестандартные, но широко поддерживаемые RegExp.left​Contextи RegExp.rightContext. Это много разных цитат ...

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

Попробуйте онлайн!

Arnauld
источник
Умная! Но посмотрите на запятую в контрольном случаеThis is a significantly "longer,"...
Маззи
Не /(\S+)/gсработает?
лохматый
1
@ mazzy О, спасибо. Я на самом деле сделал это специально, потому что неправильно прочитал контрольный пример с запятой. Сейчас исправлено.
Арно
@ Shaggy Я думаю, нам нужно захватить пространство, чтобы оно не отображалось в левом контексте следующего слова.
Арно
1
@ mazzy Полагаю, это нормально. Благодарность!
Арно
6

Java, 235 183 132 байта

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 байта, злоупотребляя различными вещами (статический доступ, список по сравнению с массивом, печать вместо возврата и т. Д. Спасибо @ValueInk!)
-51 байт, ленивый и позволяющий @KevinCruijssen делать работу за меня
Попробуйте онлайн

Бенджамин Уркхарт
источник
Это сумасшедшие накладные расходы, которые вам нужны java.util.Arrays.copyOfRange. Если вы используете, java.util.Listвы можете использовать subListдля более коротких и печатать в STDOUT вместо построения массива. Я получил 193 байта с этими идеями, а также злоупотребил ключевым словом var.
Value Ink
@ValueInk спасибо! Я также заменить String.joinс s.joinдля этих дополнительных предупреждений IDE (и -10 байт).
Бенджамин Уркхарт
1
@ OlivierGrégoire нет, спасибо: ^)
Бенджамин Уркхарт
2
@ OlivierGrégoire Вызов принят и побежден, сэр! ; p 71 байт
Кевин Круйссен
1
@KevinCruijssen Отлично! Я даже не думал, что регулярное выражение сделает эту работу. Молодцы ;-)
Оливье Грегуар
5

Первая попытка игры в гольф кода, надеюсь, это не страшно, и, надеюсь, это не нарушение правил

Котлин, 105 112 147 117 байт / символов

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

Попробуйте онлайн!

Quinn
источник
4

05AB1E , 14 байтов

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

Попробуйте онлайн!


+1 байт (и это работает для крайнего случая) благодаря Emigna. -1 байт благодаря Кевину!

Урна волшебного осьминога
источник
1
К сожалению, вам нужно использовать ð¡для обработки ввода, такие как test.
Эминья
1
-1 байт с помощью карты и» .
Кевин Круйссен
4

JavaScript, 91 97 75 78 байт

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

Выводит список строк в виде массива JavaScript. Последняя запись имеет завершающий пробел, как это разрешено в вопросе. Тестовый код записывает каждую запись в консоль в отдельной строке для демонстрационных целей.

Благодаря Shaggy за 19 байт и отсутствие начальных пробелов - когда оператор расширения используется в пустом массиве для инициализации литерала массива, в массиве, созданном оператором распространения, не создаются слоты:

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

(91-байтовая версия имела начальный пробел в первой строке, 97-байтовая версия заняла 6 байт, чтобы удалить ее.)

traktor53
источник
2
78 байт
лохматый
1
Фрагмент не запускается, потому что вы определили fфункцию. В противном случае проверено. Отличная работа!
кринистоф
@krinistof исправил это, спасибо!
traktor53
Слова после слова в кавычках разделяются запятыми вместо пробелов (Firefox, не уверен, что это проблема браузера)
wastl
1
@wastl Гольфил 3 байта слишком много и не видел запятых из-за размытых глаз. Возврат второго оператора спреда (как в ссылке Шегги) удаляет запятые. Примечание для себя ... наденьте мои очки в следующий раз
;-(
4

Python 3 , 79 , 69 , 65 байт

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

Попробуйте онлайн!

Shaved 10 bytes thanks to xnor. And now this is 65 bytes as per Erik the Outgolfer solution. Program ends with IndexError but this is fine.

Андрей Ломакин
источник
2
Terminating with error is fine for programs. A handy trick: you can use print(*l) in Python 3 in place of print(" ".join(l)).
xnor
Even better, use Extended Iterable Unpacking.
xnor
2
65 bytes: Instead of assigning w to input().split(), assign it to input(), then, in the while loop, assign m to w.split(), which will create a new list at each iteration to avoid reference issues, then set m[i] to '"%s"'%m[i] and print(*m).
Erik the Outgolfer
4

Java 8, 72 71 67 62 bytes

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

Try it online.

Explanation:

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

Regex explanation:

(?<=(^.*))(\\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
источник
2
You have just paved the way for a multitude of regex answers. Well done.
Benjamin Urquhart
I tried to port this to Python. Sometimes I wish regex parsers were consistent across languages.
Benjamin Urquhart
1
@BenjaminUrquhart Unfortunately they aren't.. Java regex is different than C# regex, Python is different again, Perl is different again, etc. Indeed a bit annoying.
Kevin Cruijssen
4

Ruby with -an, 53 bytes

The flags -an are read each line and split to $F.

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

Try it online!

Value Ink
источник
3

Ruby, 98 chars.

First submission ever. This can definitely be shortened. I just wanted to get an answer in quickly.

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

Try it online!

snowe
источник
Welcome to PPCG! My suggestion would be for each index, save s.split as a variable and edit the index you want to have the quotes around it, instead of using the overly verbose each_with_index.map. Also, you can submit the anonymous lambda without naming it, and join can be replaced with a * operator. This drops your byte count to 64 bytes.
Value Ink
Fantastic! I knew there was a shorter way to do the join, but I was trying to get out of the office and wanted to submit something before leaving XD. I didn't realize the rules allowed for anonymous lambdas like that.
snowe
3

Perl 6, 43 40 bytes

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

Try it online!

Matches all possible words, then joins each list by quotes. This could be one byte shorter if we could output lines in reverse order.

Explanation:

{                                      }  # 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
источник
3

Reflections, 229 bytes

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

Test it!

I "quickly" "golfed" this in a "funny" "golfing" language.

Глядя на все эти пробелы, он может быть короче.

Wastl
источник
3

Haskell , 64 байта

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

Попробуйте онлайн!

Выводит список строк. На основании ответа Ними .

XNOR
источник
Этот ответ, как у nimi, не работает должным образом, когда ввод содержит экранированные символы, такие как \nили ".
Пшеничный волшебник
2

Stax , 10 байт

▓¼MY@≈╢∞◙╗

Запустите и отладьте его

Распакованный, размазанный и прокомментированный, это выглядит так.

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

Запустите этот

рекурсивный
источник
2

C (gcc) , 136 133 байта

Поскольку токенизирующие функции C будут портить строку при будущих чтениях, я вместо этого вычисляю число и смещения для каждого слова, а затем заканчиваю, когда общее количество итераций внешнего цикла совпадает с количеством слов.

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

Попробуйте онлайн!

ErikF
источник
Обмен "\""+!!(i-++j)на i-++j?"":"\""сэкономит вам байт.
гастропнер
2

PowerShell , 60 40 36 байт

-20 байтов, вдохновленных Арно

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

Попробуйте онлайн!

Результат имеет один дополнительный пробел и одну пустую строку в хвосте.


Powershell, без регулярных выражений, 60 байтов

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

Попробуйте онлайн!

Менее гольф:

$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
источник
Ни один из них не работает, если входные слова содержат вкладки или другие пробелы. Из задачи, только пробелы отделяют слова.
AdmBorkBork
Вы правы, конечно. Но правила таковы: 1. The input only contains printable ASCII characters., 2 The input may contain spaces.. Вкладки и другие пробелы не для печати ASCII, не так ли? :)
Маззи
1
Я полагаю , что это правда - я только основывая свое заявление от комментария Ора в здесь , но это не было отредактировано в вызов ... так что я полагаю , ваше представление в порядке , как это в настоящее время.
AdmBorkBork
2

JavaScript, 62 байта

Спасибо @Shaggy за 10 байтов

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

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

объяснение

  • Функция разбивает строку на каждый пробел (x.split` `)
  • Для каждого элемента в полученном массиве выполняют следующую функцию
  • Создать поверхностную копию массива (s = [... a])
  • Замените n-й элемент массива на себя, заключив его в кавычки (s [i] = `" $ {c} "`)
  • вернуть мелкую копию с пробелами (s.join` `)
fənɛtɪk
источник
62 байта
лохматый
2

R , 94 76 байт

-18 байт благодаря Джузеппе

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

Попробуйте онлайн!

Спасибо digEmAll за правильную настройку TIO. Он принимает, например, This is codegolfи выводит правильно

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

Он использует матричный формат с повторением предложения n; тогда нам нужно только изменить диагональные записи. Обратите внимание, что обычно в R-гольф-коде строки считываются с scan(,""), но вместо пустой строки можно использовать любую строку вместоwhat (илиw ) .

Объяснение старой версии без золота:

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
Робин Райдер
источник
76 байтов
Джузеппе
@ Giuseppe Спасибо! Как я не увидел, что мне не нужно два звонка scan?
Робин Райдер
Иногда вы просто попадаете в игру в гольф. Если мы можем использовать другие цитаты , чем ""мы можем сократить до 68 байт , используя sQuote.
Джузеппе
2

Это мой первый кодовый гольф. надеюсь, это не дерьмо.

РЕДАКТИРОВАТЬ: сократил до 54 байтов с лучшим регулярным выражением.

** РЕДАКТИРОВАТЬ 2: в соответствии с предложениями исправил ошибку и сделал ее короче **

JavaScript (V8) , 46 байт

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

Попробуйте онлайн!

r3wt
источник
5
Если входные данные содержат повторяющиеся слова, последующие копии никогда не цитируются.
рекурсивный
Разделение на пробелы будет короче.
лохматый
@recursive должен быть исправлен.
r3wt
@ Shaggy спасибо, я включил ваше предложение
r3wt
1
Все еще не работает для дублирующих слов
Джо Кинг
2

C # (интерактивный компилятор Visual C #) с /u:System.Text.RegularExpressions.Regexфлагом, 59 40 байт

s=>Replace(s,"(\\S+) ?","$`\"$1\" $'\n")

Порт моего ответа Java 8 , так что ищите объяснения.
-19 байт путем переноса регулярного выражения @Arnauld , так как $`и $'поддерживаются в C # .NET.

Попробуйте онлайн.

Кевин Круйссен
источник
2

Elm Используя рекурсию, 132 130 121 211 100 99 байт

Благодаря технике Кевина Круйссена удалось сократить объем до 9 байт, а еще 22 байта были обработаны только ASCII . Обратился к нехвостовой рекурсии во время игры в гольф.

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

Попробуйте онлайн

85 байт после выставления Stringфункций в текущей области видимости

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

Ungolfed версия (с использованием хвостовой рекурсии)

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

Попробуй без золота

Евгений Малютин
источник
2

Japt , 14 12 байт

¸£¸hYQ²i1X)¸

Попытайся

2 байта сохранены благодаря Оливеру.

¸£¸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
мохнатый
источник
12 байтов
Оливер
D'о! Конечно! Спасибо, @Oliver.
лохматый
1

PowerShell , 70 65 байт

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

Попробуйте онлайн!

Имеет набор тестов в испытании. Имеет 1 пробел в первом ряду и 1 пробел в последнем ряду. Попытка рефакторинга.

KGlasier
источник
4
Это не работает, если в тестовой строке есть повторяющееся слово.
снег
1

Древесный уголь , 19 байт

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

Попробуйте онлайн! Ссылка на подробную версию кода. Примечание: конечный пробел. Объяснение:

  θ                     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
Нил
источник
1

Атташе , 34 байта

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

Попробуйте онлайн! Анонимная функция, возвращающая список строк.

объяснение

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
Конор О'Брайен
источник
1

C # (интерактивный компилятор Visual C #) , 123 байта

Интересно, можно ли это сократить с помощью регулярных выражений?

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

Попробуйте онлайн!

мое местоимение monicareinstate
источник
118 байт
Innat3
110 байт
дана
Порт Java ответ - 104 :)
Дана
1
@dana Мой порт короче;)
Кевин Круйссен
@KevinCruijssen - Я видел, что вы получили это регулярное выражение ранее :) Я подумал, что это был совершенно другой подход, поэтому я не пытался перенести его, но да, это хорошее решение!
Дана