Cite minha citação!

13

Uma citação é "a repetição de uma expressão como parte de outra". No inglês americano, as aspas são cercadas por aspas duplas ("), como na frase anterior. No entanto, essa regra difere quando uma aspas aparece dentro de outra aspas. Nesse caso, a aspas internas é cercada por aspas simples (')

Desafio

Dada uma sequência como entrada, produza uma versão cotável dessa sequência trocando aspas duplas e simples que são usadas para aspas internas.

Porém, existe apenas uma captura - nem todas as aspas simples são usadas para cotação! Para esse desafio, aspa simples são usadas para cotação se e somente se:

  • A marca é precedida por um caractere não alfanumérico ou
  • A marca é seguida por um caractere não alfanumérico que não é um espaço

As marcas usadas nas cotações são garantidas como equilibradas; isto é, você não precisa manipular entrada inválida. Além disso, aspas duplas serão usadas apenas em situações em que aspas simples podem ser usadas para representar aspas.

Casos de teste

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.'"

Pontuação

Isso é , então a resposta mais curta em cada idioma vence!

musicman523
fonte
Sandbox
musicman523
2
... if' it" runs' deep"possui aspas simples que não são precedidas por um não alfanumérico, nem são seguidas por "caracteres não alfanuméricos que não são um espaço" e, no entanto, estão sendo transformados!
Valor de tinta
1
Pessoalmente, não acho que lidar com apóstrofos agregue muito valor ao desafio.
ATaco 13/06
1
@JonathanAllan Sim. Acho difícil determinar se essas aspas simples são usadas para cotação ou posse sem complicar profundamente as regras. Eu acho que isso seria um desafio decente por si só.
musicman523
1
"Nested, 'quotes, it's unfortunate', to be sure."Acho que você precisa de um caso aninhado com contrações.
Magic Octopus Urn

Respostas:

2

Ruby , 64 66 65 64 + 1 = 65 67 66 65 bytes

+1 byte para o -nsinalizador.

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

Experimente online!

Value Ink
fonte
Não parece fazer a coisa certa para marcas de aspas simples precedidos por um espaço (que são, de fato utilizado para a citação)
musicman523
@ musicman523 obrigado, corrigido!
Value Ink
2

Retina , 34 27 bytes

-7 bytes graças a @Leo

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

Experimente online!

ovs
fonte
Com @carusocomputing said, "Nested, 'quotes, it's unfortunate', to be sure."como entrada, o seguinte aspas simples unfortunatenão é alterado para aspas duplas, mas deve ser. Se ele ajudar na depuração, funcionará quando a vírgula chegar antes da cotação. (Eu não sei Retina, então não posso realmente ajudar ainda mais.)
musicman523
@ musicman523 corrigiu
ovs 13/06
Você pode usar \ w diretamente dentro da classe de personagem
Leo
0

JavaScript (ES6), 90 bytes

Assume que a sequência não contém #.

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

darrylyeo
fonte