Cita mi cita!

13

Una cita es "la repetición de una expresión como parte de otra". En inglés americano, una cita está entre comillas dobles ("), como en la oración anterior. Sin embargo, esta regla difiere cuando una cita aparece dentro de otra cita. En este caso, la cita interna está entre comillas simples (').

Desafío

Dada una cadena como entrada, genera una versión que se puede citar de esa cadena intercambiando comillas dobles y simples que se utilizan para las comillas internas.

Sin embargo, solo hay una trampa: ¡no todas las comillas simples se usan para las citas! Para este desafío, las comillas simples se usan para las citas si y solo si:

  • La marca está precedida por un carácter no alfanumérico, o
  • A la marca le sigue un carácter no alfanumérico que no es un espacio

Se garantiza que las marcas utilizadas para las citas están equilibradas; es decir, no necesita manejar entradas no válidas. Además, las comillas dobles solo se usarán en situaciones donde las comillas simples se pueden usar para representar las comillas.

Casos de prueba

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

Puntuación

Este es el , por lo que gana la respuesta más corta en cada idioma.

musicman523
fuente
Sandbox
musicman523
2
... if' it" runs' deep"tiene comillas simples que no van precedidas de un carácter no alfanumérico, ni están seguidas de "carácter no alfanumérico que no es un espacio", ¡pero se están transformando!
Value Ink
1
Personalmente, no creo que manejar apóstrofes agregue mucho valor al desafío.
ATaco
1
@JonathanAllan Sí. Creo que es difícil determinar si esas comillas simples se usan para citas o posesión sin complicar profundamente las reglas. Creo que sería un desafío decente por sí solo.
musicman523
1
"Nested, 'quotes, it's unfortunate', to be sure."- Creo que necesitas un caso anidado con contracciones.
Magic Octopus Urn

Respuestas:

2

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

+1 byte para la -nbandera.

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

Pruébalo en línea!

Tinta de valor
fuente
No parece hacer lo correcto para las comillas simples precedidas por un espacio (que de hecho se usan para las citas)
musicman523
@ musicman523 gracias, arreglado!
Value Ink
2

Retina , 34 27 bytes

-7 bytes gracias a @Leo

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

Pruébalo en línea!

ovs
fuente
Con @carusocomputing said, "Nested, 'quotes, it's unfortunate', to be sure."como entrada, la siguiente comilla simple unfortunateno se cambia a una comilla doble, pero debería serlo. Si le ayuda a depurar, funciona cuando la coma aparece antes de la cotización. (No conozco Retina, así que realmente no puedo ayudar más)
Musicman523
@ musicman523 lo arregló
ovs
Puedes usar \ w directamente dentro de tu clase de personaje
Leo
0

JavaScript (ES6), 90 bytes

Asume que la cadena no contiene #.

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

Darrylyeo
fuente