Текс Котировки (UVa 272)


17

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

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

Примеры

Входные данные:

"To be or not to be," quoth the Bard, "that
is the question".
The programming contestant replied: "I must disagree.
To `C' or not to `C', that is The Question!"

Выход:

``To be or not to be,'' quoth the Bard, ``that
is the question''.
The programming contestant replied: ``I must disagree.
To `C' or not to `C', that is The Question!''

Что такое двойные и правые двойные кавычки?
мое местоимение monicareinstate

1
@ someone Левые двойные кавычки - это кавычки, с которых начинается кавычка. Правые двойные кавычки - это кавычки, которые заканчивают цитату.
ВысокоРадиоактивный

Могут ли кавычки быть вложенными?
мое местоимение monicareinstate

@ Кто-то Нет. Они не могут.
ВысокоРадиоактивный

2
@ LegionMammal978 "Можно ли вкладывать кавычки?" ... "@ Кто-то Нет. Они не могут."
Джонатан Аллан

Ответы:


18

Не читается , 789 777 байт

-12 байт, используя переменную X34, а не X6.

«" „“ „“»«»" „“ „„„“““ „„„“““ „„„“““ „„„“““ „„„“““ „„„“““» «"»«»«„“»«»«„“»«»«„“»«»«„“»«»«„“»«»«„“»«»«„“»«»"» «„„““» «„„““» «„„“ „„„“ „“ „“““ „„„“““ „„„“““ „““» «„„““» "» "«„„““» «» «» «» «„“» «» «" „“ „“ „„„“““ „“ „“»«„“ "» „“ „“ „“ „“ „“ «" „“»«»«»«»«„“»«»«„“»«»«„„“„“„“„„„“““„““»«»" "„“„“ «» «„“» «» «„“„„„“„“„“„„„“„„„“„“““„“„“““„“„“„“““"»"«„„““» «» «„“„“» «» «» «» «„“» «» «„“» «» «„„“ „“ „“ „““» «» «» «» «"»«»«„“»«»«„„“„“„““»«„„““»«»«„“ „“ „“ „“»«»«»«»" "„“ «"»«»«"„“„“„“„“» «„“„“„“„„„“““"»„“«"» «„“„“„“"»„“«"»«„“ „“ „“ „“ "» „“ „“ „“ „„„“ „“ „“ „„„“““ „“““ „“ „„„“ „“ „“““ «» «» «» «„“» «» «„„“ „“ „“ „““» «» «"»„“„“„“„„„“““„„„“““«"» «» «„“„“» «» «» «» «„“„“„“„„„“““„“» «» «" „„„“““ „„„“““»"«» «„“» «» «„“» «» «„“» «» «„“» «» «„“» «» «„“» «» «„“» «» «„“» «» «"»«»«„“»«»«„“»«»«„“»«»«„“»«»«„“»«»«„“»«»«„“»«»"» «„„““» «„„““» «„„““» «„„““» «„„““» «„„““» «„„““» «„„““» "» "«„„““» «" „“ „“ „“ „„„“““ „„„“““»" „“ "

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

Отображается шрифтом переменной ширины в соответствии с традиционной данью имени языка.

Я научился нечитаемому для этой задачи, потому что это, очевидно, лучший инструмент для работы. В Unreadable допускаются только символы, 'и ", безусловно, они идеально подходят для вызова, который включает "в себя изменение ''. Не так ли?

Объяснение:

'""""""'""'""" assign to X2
'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""" 34 (double quote sign)
'""""""'""'""'""'""'""" assign to X5
'""'""'""'""'""'"""""""'""'""" X2+5 (apostrophe sign)
'"""""'""'""""""'"""'"""""""""" while (1+ (assign to X1 a value read from stdin, or -1 if stdin is empty) != 0)
 '"""" do 2 things
 '""""""'""'""'""'""" assign to X4
 '"""""""'""'""" the value of X2
 AND
 '"""" do 2 things
 '""""""'""'""'""" assign to X3
 '"""""""'""" the value of X1
 AND
 '"""" do 2 things
 '"""""'"""""""'""'""'""'""" while(X4 != 0)
  '"""" do 2 things
  '""""""'""'""'""'""" assign to X4
  '""""""""'"""""""'""'""'""'""" X4-1
  AND
  '""""""'""'""'""" assign to X3
  '""""""""'"""""""'""'""'""" X3-1
 end while
 AND
 '"""""""""'"""""""'""'""'""" if(X3 != 0)
  '"'"""""""'""" print X1
 else
  '" print the output of
  '"""""""""'"""""""'"""""""'""'""" if(X34 !=0)
   '"""" do 2 things
   '""""""'"""""""'""'"""'""""""""'""" assign X34=0
   AND
   '"'"""""""'""'""'""'""'""" print X5
  else
   '"""" do 2 things
   '""""""'"""""""'""'"""'""" assign X34=1
   AND
   '"'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'"""""""'""'""'""'""'""" print X5+57
 end if
end while

(Звонки в X34 на самом деле являются звонками в X (X5), поскольку X5 = 34.)


1
Язык цитат в тесте квот LOL
HighlyRadioactive

5

Сетчатка , 13 байт

Быстрое изучение Retina, потому что по какой-то причине я не люблю побеждать Джапта и чувствую, что решение C # все равно будет использовать регулярные выражения. Я знаю, что есть ответ Retina, но я не использовал его при создании, и я все равно нашел его (точно).

#2$`"
``
"
''

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


1
Почему ненавидят Джапта ?! : p
Лохматый

5

JavaScript (ES9), 34 байта

Работаем над указанными блоками:

s=>s.replace(/"(.*?)"/gs,"``$1''")

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


JavaScript (ES6), 38 байт

Работаем над каждой двойной кавычкой отдельно:

s=>s.replace(/"/g,_=>(c="'`"[s^=1])+c)

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


Флаг dotAll для RegExp - это новая функция ECMAScript 2018 , не включенная в ES6.
TSH

@tsh Хороший улов. Обновлено.
Арно


4

Python 3 , 65 байт

f=lambda s:s and(s[0],"`'"[s.count('"')%2]*2)[s[0]=='"']+f(s[1:])

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

-8 байтов благодаря Эрику Аутгольферу


Что касается второй функции, вы можете удалить 8 байт (она не так отличается, как может показаться, я просто заменил s[0].replaceее явной s[0]=='"'проверкой вместе с некоторыми другими модификациями).
Эрик Outgolfer

@EriktheOutgolfer Хорошие находки, спасибо!
Джитс

4

Japt , 12 байт

Было бы 11 только для ограничения (или, возможно, это ошибка в) Japt.

r'"ȲîT°g"`'

Попытайся

r'"ȲîT°g"`'     :Implicit input of string
r'"              :Replace double quotes
   È             :Pass each match through a function
    ²            :  Duplicate
     î           :  Replace each character with
      T°         :    Postfix increment T (initially 0)
        g"`'     :    Index into "`'" with wrapping


@ Оливер, я могу (и я первоначально сделал); Мне просто нужно ,тоже.
Лохматый

Я имею в виду, это очень плохо, что вы не могли бы просто использовать Qвместо'"
Оливер

4

TeX, 54 32 байта

Для задачи замены котировок TeX нам также нужна версия TeX!

\catcode`"13\def"#1"{``#1''}...\bye

... является входной строкой, поэтому она не добавляет к количеству байтов.


1
Почему не проще \def"#1"{``#1''}? (или \long\defесли вы ожидаете, что цитата пересекает границу абзаца)
Phelype Oleinik

1
По очевидной причине, что я не думал об этом :-)
siracusa

2

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

WS⊞υι⭆⪪⪫υ¶¦"⎇κ⁺ײ§'`κιι

Попробуйте онлайн! Ссылка на подробную версию кода. Включает 8 байтов, чтобы избежать громоздкого формата ввода. Объяснение:

WS⊞υι

Соберите входные строки, пока не будет достигнута пустая строка.

⪫υ¶¦

Присоединяйтесь к строкам на символах новой строки.

⪪..."

Разделить ввод на кавычки.

⭆...

Нанесите на карту каждую часть и объедините результаты для неявной печати.

⎇κ...ι

Оставьте первую часть без изменений.

⁺ײ§'`κι

Префикс соответствующей цитаты, удвоенный.


Я ждал угольного раствора. Ницца!
СильноРадиоактивный

2

R , 40 байт

cat(scan(,"",,,'"',""),sep=c("``","''"))

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

Читает строку ввода, отделяя в каждом " , давая вектор строк. Затем вставьте эти строки, чередуя двойные обратные метки и двойные апострофы в качестве разделителей, перерабатывая их по мере необходимости.

Кто-то, вероятно, опубликует более короткий R-ответ, основанный на регулярном выражении ... Тем не менее, этот ответ более типичен для R, я думаю.

Объяснение scan(,"",,,'"',"")части:

scan(, # empty first parameter: read from STDIN
  "",  # type of input is a string
  ,    # default 3rd parameter nmax
  ,    # default 4th parameter n
  '"', # separate on character "
  "")  # do not treat any characters as quotations marks (necessary to handle ' in the input)

2

Perl 6 , 23 байта

{S:g/\"(.*?)\"/``$0''/}

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

Черт, очевидное решение короче. Заменяет каждую цитируемую часть версией с соответствующими цитатами.

Perl 6 , 24 байта

{S:g{\"}=<`` ''>[$++%2]}

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

Заменяет каждую двойную кавычку, чередуя два набора символов.


1

Сетчатка , 15 байт

"
""
Y`"`\`\`''

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

"
""

Дублируйте все цитаты.

Y`"`\`\`''

Циклически заменяйте кавычки парами обратных галочек и одинарных кавычек.

Скучная 16-байтовая Retina 0.8.2 отвечает за полноту:

s`"(.*?)"
``$1''

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




1

Лабиринт , (43?) 53 байта

396"
 } "",)@
  ~"  (
 "~ 3_:
""" 4
" .;-
=   ;
..::;

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

Гольф-версия этой, гораздо более простой, 92-байтовой программы:

3 """
9 " ",)@
}96 " (
    " :_34-;;
    "     ; :
   """"""". :
   "        .
   """"""""=.

Если нам не нужно обрабатывать ввод, содержащий нулевой байт, то 43 байта :

39}9
@  6
`,""
`  "
: ."=..
_ ;   "
34-;;::


1

(GNU) sed , 38 33 30 байт

-4 , убрав -nфлаг и неявно печатая n, -1 путем повторного использования предыдущего /expression/, спасибо @Cowsquack. -3 с помощью неявного перехода к концу.

:a
s/"/``/;T
:b
s//''/;ta
n;bb

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

Некоторые довольно простые метки прыжков. Это, вероятно, можно сыграть в байт или два.

:a          # label a
s/"/``/;T   # replace " -> ``. If unsuccessful, move to next line
:b          # label b
s//''/;ta   # replace " (implicit) -> ''. If successful, jump to a (w/o reading new line)
n;bb        # read in the next line, but jump to label b. 

1
Кстати, обычно используемые флаги указаны в заголовке. Вы можете сыграть в байт с помощью codegolf.stackexchange.com/a/167295/41805 , кроме того, можно удалить некоторую логику ветвления. Тогда заставить решение работать без -nфлага должно сэкономить немного больше. (И, конечно, есть тривиальное sed -zрешение, которое, я полагаю, вы намеренно избежали)
Kritixi Lithos

Хорошо, я man sedнемного покопался и добрался до 30. Не стесняйтесь, дайте мне знать, что я пропустил, у вас есть опыт игры в гольф на этом языке. (О, -zэто ново для меня, но я согласен. Я останусь без него.)
GammaFunction

Отлично, я всегда рад видеть ответ sed
Kritixi Lithos

1

05AB1E , 15 байтов

'"¡ā¨„'`sè2×.ιJ

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

В 05AB1E нет регулярных выражений, поэтому мы разделимся, составим "список чередующихся ``и ''затем чередуем их .


1
Хорошо, похоже, мне не нужно исправлять и восстанавливать свой ответ. ;)
Кевин Круйссен

1

Haskell , 67 60 58 байт

(#0)
('"':x)#n=["``","''"]!!n++x#(1-n)
(a:b)#n=a:b#n
x#n=x

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

Соответствующая функция есть (#0).

Поскольку я изначально думал, что вопрос также требует от нас преобразования одинарных кавычек, здесь есть версия, которая обрабатывает оба:

Haskell , 125 байт

(#(1<0,1<0))
('"':x)#(m,n)=last("``":["\""|m])++x#(not m,n)
('\'':x)#(m,n)=last('`':['\''|n]):x#(m,not n)
(a:x)#n=a:x#n
x#n=x

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


"\""должно быть "''"(два апострофа)
Сиракуза

@ Siracusa Спасибо, я предположил, что, поскольку вы можете использовать "текст, вы можете использовать его здесь.
Пост Рок Гарф Хантер

1

QuadR , 14 байт

"(.*?)"
``\1''

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

Простой поиск / замена с помощью оболочки @ Adám для Dyalog APL ⎕R функции eplace Dyalog .

Как:

"(.*?)"  PCRE, finding anything between two double quotes and assigning it to group 1
``\1''   Transformation string, replacing the match with ``group_1''.


0

Желе , 13 байт

ṣ”"µJḊ⁾`'ṁḤż@

Полная программа.

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

Как?

ṣ”"µJḊ⁾`'ṁḤż@ - Main Link: list of characters, T   e.g. ..."hi" - she "said"...
 ”"           - character '"'                           '"'
ṣ             - split (T) at ('"')                      ["...","hi"," - she ","said","..."]
   µ          - (call that X) start a new monadic chain
    J         - range of length (of X)                  [1,2,3,4,5]
     Ḋ        - dequeue                                 [2,3,4,5]
      ⁾`'     - list of characters                      ["`","'"]
         ṁ    - mould like                              ["`","'","`","'"]
          Ḥ   - double                                  ["``","''","``","''"]
           ż@ - (with reversed @rguments) zip (with X)  [["...","``"],["hi","''"],[" - she ","``"],["said","''"],["..."]]
              - implicit (smashing) print               ...``hi'' - she ``said''...




0

Java 8, 40 байт

s->s.replaceAll("\"([^\"]+)\"","``$1''")

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

Объяснение:

s->                             // Method with String as both parameter and return-type
  s.replaceAll("\"([^\"]+)\"",  //  Replace all these matches,
               "``$1''")        //  with this replacement 

Regex объяснение:

 "([^"]+)"                      // MATCH:
 "                             "//  A literal "
   [^"]+                       "//  Followed by 1 or more non-" characters
  (     )                       //  (captured in capture group 1)
         "                     "//  Followed by a literal " again

``$1''                          // REPLACEMENT:
``                              //  Literal ``
  $1                            //  Followed by the match of capture group 1
    ''                          //  Followed by a literal ''
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.