Kutip kutipan saya!

13

Sebuah kutipan adalah "pengulangan satu ekspresi sebagai bagian dari satu sama lain". Dalam bahasa Inggris Amerika, kutipan dikelilingi oleh tanda kutip ganda ("), seperti pada kalimat sebelumnya. Namun, aturan ini berbeda ketika kutipan muncul di dalam kutipan lain. Dalam hal ini, kutipan dalam dikelilingi oleh tanda kutip tunggal (').

Tantangan

Diberikan string sebagai input, output versi quotable string yang dengan menukar tanda kutip ganda dan tunggal yang digunakan untuk kutipan dalam.

Hanya ada satu tangkapan, tidak semua tanda kutip tunggal digunakan untuk kutip! Untuk tantangan ini, tanda kutip tunggal digunakan untuk kutip jika dan hanya jika:

  • Tanda diawali oleh karakter non-alfanumerik, atau
  • Tanda diikuti oleh karakter non-alfanumerik yang bukan spasi

Tanda yang digunakan untuk kutipan dijamin seimbang; artinya, Anda tidak perlu menangani input yang tidak valid. Selain itu, tanda kutip ganda hanya akan digunakan dalam situasi di mana tanda kutip tunggal dapat digunakan untuk mewakili kutipan.

Uji Kasus

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

Mencetak gol

Ini , jadi jawaban tersingkat di setiap bahasa menang!

musicman523
sumber
Sandbox
musicman523
2
... if' it" runs' deep"memiliki tanda kutip tunggal yang tidak didahului oleh non-alfanumerik, juga tidak diikuti oleh "karakter non-alfanumerik yang bukan spasi", namun sedang diubah!
Value Ink
1
Secara pribadi saya tidak merasa bahwa menangani apostrof menambah banyak nilai pada tantangan.
ATaco
1
@ JonathanAllan Ya. Saya pikir sulit untuk menentukan apakah tanda kutip tunggal itu digunakan untuk kutip atau kepemilikan tanpa menyulitkan aturan. Saya pikir itu akan membuat tantangan yang layak sendiri.
musicman523
1
"Nested, 'quotes, it's unfortunate', to be sure."- Saya pikir Anda perlu kasus bersarang dengan kontraksi.
Magic Gurita Guci

Jawaban:

2

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

+1 byte untuk -nbendera.

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

Cobalah online!

Nilai Tinta
sumber
Sepertinya tidak melakukan hal yang benar untuk tanda kutip tunggal yang didahului oleh spasi (yang memang digunakan untuk kutipan)
musicman523
@ musicman523 terima kasih, sudah diperbaiki!
Value Ink
2

Retina , 34 27 byte

-7 byte terima kasih kepada @Leo

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

Cobalah online!

ovs
sumber
Dengan @carusocomputing said, "Nested, 'quotes, it's unfortunate', to be sure."sebagai input, tanda kutip tunggal unfortunatetidak berubah menjadi tanda kutip ganda, tetapi seharusnya. Jika itu membantu Anda men-debug, itu berfungsi ketika koma datang sebelum kutipan. (Saya tidak tahu Retina jadi saya benar-benar tidak bisa membantu lebih jauh.)
musicman523
@ musicman523 memperbaikinya
ovs
Anda dapat menggunakan \ w langsung di dalam kelas karakter Anda
Leo
0

JavaScript (ES6), 90 byte

Mengasumsikan string tidak mengandung #.

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

Darrylyeo
sumber