Cytuj mój cytat!

13

Cytat jest „powtórzenie jednej wypowiedzi jako część innego”. W amerykańskim angielskim cytat jest otoczony podwójnymi cudzysłowami („), jak w poprzednim zdaniu. Jednak ta zasada różni się, gdy cytat pojawia się w innym cytacie. W tym przypadku wewnętrzny cytat jest otoczony pojedynczymi cudzysłowami (').

Wyzwanie

Biorąc pod uwagę ciąg wejściowy, wypisz cytowaną wersję tego ciągu, wymieniając znaki podwójnego i pojedynczego cudzysłowu, które są używane do cytowania wewnętrznego.

Jest tylko jeden haczyk - nie wszystkie cudzysłowy są używane do cytowania! W przypadku tego wyzwania w cudzysłowie stosowany jest pojedynczy cudzysłów, tylko jeśli:

  • Znak jest poprzedzony znakiem niealfanumerycznym lub
  • Po znaku następuje znak inny niż alfanumeryczny, który nie jest spacją

Znaki używane w ofertach mają zagwarantowane wyważenie; oznacza to, że nie musisz obsługiwać nieprawidłowych danych wejściowych. Ponadto znaki podwójnego cudzysłowu będą stosowane tylko w sytuacjach, w których można użyć pojedynczych cudzysłowów do przedstawienia cudzysłowu.

Przypadki testowe

A man, a plan, a canal, Panama.
"A man, a plan, a canal, Panama."

Socrates once said, "An unexamined life is not worth living."
"Socrates once said, 'An unexamined life is not worth living.'"

@musicman523 said, "Socrates once said, 'An unexamined life is not worth living.'"
"@musicman523 said, 'Socrates once said, "An unexamined life is not worth living."'"

"Nested 'quotes "can 'cause "recursion," if,' it," runs,' deep!"
"'Nested "quotes 'can "cause 'recursion,' if," it,' runs," deep!'"

"Contractions' behaviors can't be easy to account for," he warned.
"'Contractions' behaviors can't be easy to account for,' he warned."

@carusocomputing said, "Nested, 'quotes, it's unfortunate', to be sure."
"@carusocomputing said, 'Nested, "quotes, it's unfortunate", to be sure.'"

Punktacja

To jest , więc wygrywa najkrótsza odpowiedź w każdym języku!

musicman523
źródło
Piaskownica
musicman523
2
... if' it" runs' deep"ma pojedyncze cudzysłowy, które nie są poprzedzone nie alfanumerycznym, ani po nich nie występuje „znak niealfanumeryczny, który nie jest spacją”, a jednak są one przekształcane!
Wartość tuszu
1
Osobiście nie uważam, że posługiwanie się apostrofami wnosi dużą wartość do wyzwania.
ATaco,
1
@JathanathanAllan Tak. Myślę, że trudno jest ustalić, czy te cudzysłowy są używane do cytowania czy posiadania, bez głębokiego komplikowania zasad. Myślę, że samo w sobie byłoby to przyzwoite wyzwanie.
musicman523
1
"Nested, 'quotes, it's unfortunate', to be sure."- Myślę, że potrzebujesz zagnieżdżonej skrzynki ze skurczami.
Magic Octopus Urn

Odpowiedzi:

2

Rubinowy , 64 66 65 64 + 1 = 65 67 66 65 bajtów

+1 bajt dla -nflagi.

gsub(/"|(?<!\w)'|'(?!\w|\s)/){"'\""["\"'".index$&]}
$><<?"+$_+?"

Wypróbuj online!

Wartość tuszu
źródło
Wydaje się, że nie robi to dobrze w przypadku pojedynczych cudzysłowów poprzedzonych spacją (które w rzeczywistości są używane do cytowania)
musicman523,
@ musicman523 dzięki, naprawiono!
Wartość tuszu
2

Retina , 34 27 bajtów

-7 bajtów dzięki @Leo

T`'"`"'`\W'|"|'[^\w ]
^|$
"

Wypróbuj online!

ovs
źródło
Ze @carusocomputing said, "Nested, 'quotes, it's unfortunate', to be sure."jako wejście dodaje apostrofu unfortunatenie zostanie zmieniona na cudzysłów, ale powinno być. Jeśli pomaga w debugowaniu, działa, gdy przecinek pojawia się przed cytatem. (Nie znam Retiny, więc nie mogę już nic więcej pomóc).
musicman523,
@ musicman523 naprawił to
2017
Możesz użyć \ w bezpośrednio w swojej klasie postaci
Leo
0

JavaScript (ES6), 90 bajtów

Zakłada, że ​​ciąg nie zawiera #.

s=>'"'+s[r='replace'](/"/g,'#')[r](/(\W)'/g,'$1"')[r](/'([^\w ])/g,'"$1')[r](/#/g,"'")+'"'

darrylyeo
źródło