Tex Quotes (UVa 272)

17

Diberikan string, ganti semua tanda kutip kiri-ganda menjadi dua tanda kutip dan semua tanda kutip kanan-ganda menjadi dua tanda kutip tunggal.

Kutipan Kiri berarti kutipan yang memulai penawaran. Kutipan Benar berarti kutipan yang mengakhiri penawaran. Kutipan tidak dapat disarangkan. Anda dapat berasumsi bahwa ada sejumlah tanda kutip ganda dalam string.

Contohnya

Memasukkan:

"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!"

Keluaran:

``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!''
Sangat Radioaktif
sumber
Apa yang merupakan tanda kutip ganda kiri dan ganda?
kata ganti saya adalah monicareinstate
1
@someone Kutipan dobel kiri adalah kutipan yang memulai penawaran. Kutipan ganda kanan adalah kutipan yang mengakhiri penawaran.
HighlyRadioactive
Bisakah kutipan diulang?
kata ganti saya adalah monicareinstate
@ seseorang Tidak. Mereka tidak bisa.
HighlyRadioactive
2
@ LegionMammal978 "Bisakah kutipan diulang?" ... "@seseorang tidak. Mereka tidak bisa."
Jonathan Allan

Jawaban:

18

Tidak dapat dibaca , 789 777 byte

-12 byte dengan menggunakan variabel X34 daripada X6.

'"" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" '"" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" " "'" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" " ""'" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" '"" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" " "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" """'" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" '"" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" " '"" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""'"' "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" " "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" """ "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" " '"" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" " "'" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" " ""'" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "

Cobalah online!

Ditampilkan dalam font lebar variabel, per upeti tradisional untuk nama bahasa.

Saya belajar Tidak terbaca untuk tantangan ini, karena itu jelas alat terbaik untuk pekerjaan itu. Satu-satunya karakter yang diizinkan dalam Unreadable adalah 'dan ", jadi pasti sangat cocok untuk tantangan yang melibatkan perubahan "menjadi'' . Bukan?

Penjelasan:

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

(Panggilan ke X34 sebenarnya adalah panggilan ke X (X5), karena X5 = 34.)

Robin Ryder
sumber
1
Bahasa quoty dalam tantangan quoty LOL
HighlyRadioactive
5

Retina , 13 byte

Mempelajari Retina dengan cepat karena karena alasan tertentu saya tidak suka Japt menang dan merasa seperti solusi C # tetap menggunakan ekspresi reguler. Saya tahu ada jawaban Retina, tetapi saya belum menggunakannya saat membuat ini, dan saya menemukannya (tepatnya) juga.

#2$`"
``
"
''

Cobalah online!

kata ganti saya adalah monicareinstate
sumber
1
Mengapa benci untuk Japt ?! : p
Shaggy
5

JavaScript (ES9), 34 byte

Bekerja pada blok yang dikutip:

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

Cobalah online!


JavaScript (ES6), 38 byte

Bekerja pada setiap penawaran ganda secara terpisah:

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

Cobalah online!

Arnauld
sumber
Bendera dotAll untuk RegExp adalah fitur baru ECMAScript 2018 , tidak termasuk dalam ES6.
tsh
@ tsh Bagus. Diperbarui.
Arnauld
4

Jelly , 15 13 byte

⁾``⁾''2ƭ”"Ƒ¡€

Cobalah online!

Program lengkap.

Erik the Outgolfer
sumber
4

Python 3 , 65 byte

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

Cobalah online!

-8 byte terima kasih kepada Erik the Outgolfer

Jitse
sumber
Sedangkan untuk fungsi kedua, Anda dapat menghapus 8 byte (itu tidak berbeda seperti kelihatannya, saya hanya mengganti s[0].replacedengan pemeriksaan eksplisit s[0]=='"', bersama dengan beberapa modifikasi lainnya).
Erik the Outgolfer
@EriktheOutgolfer Nice menemukan, terima kasih!
Jitse
4

Japt , 12 byte

Akan menjadi 11 hanya untuk batasan (atau mungkin itu bug di) Japt.

r'"ȲîT°g"`'

Cobalah

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
Shaggy
sumber
Sayang sekali Anda tidak dapat menggunakan di Qsini: \
Oliver
@Liver, saya bisa (dan saya awalnya); Saya hanya perlu ,juga.
Shaggy
Maksudku itu terlalu buruk Anda tidak bisa hanya menggunakan Qdi tempat'"
Oliver
4

TeX, 54 32 byte

Untuk tantangan penggantian kutipan TeX kami juga memerlukan versi TeX tentunya!

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

... adalah string input, sehingga tidak menambah jumlah byte.

siracusa
sumber
1
Kenapa tidak lebih sederhana \def"#1"{``#1''}? (atau \long\defjika Anda mengharapkan penawaran melewati batas paragraf)
Phelype Oleinik
1
Untuk alasan yang jelas bahwa saya tidak memikirkan itu :-)
siracusa
2

Arang , 23 byte

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

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Termasuk 8 byte untuk menghindari format input yang rumit. Penjelasan:

WS⊞υι

Kumpulkan jalur input sampai garis kosong tercapai.

⪫υ¶¦

Bergabunglah dengan garis pada karakter baris baru.

⪪..."

Pisahkan input pada tanda kutip.

⭆...

Petakan setiap bagian dan gabungkan hasilnya untuk cetakan implisit.

⎇κ...ι

Biarkan bagian pertama tidak berubah.

⁺ײ§'`κι

Awali kutipan yang sesuai, dua kali lipat.

Neil
sumber
Saya sedang menunggu solusi Arang. Bagus!
HighlyRadioactive
2

R , 40 byte

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

Cobalah online!

Membaca input string, memisahkan pada masing-masing ", memberikan vektor string. Kemudian tempelkan string itu, bergantian antara backtick ganda dan apostrof ganda sebagai pemisah, daur ulang sesuai kebutuhan.

Seseorang mungkin akan memposting jawaban R pendek berdasarkan pada regex ... Namun, jawaban ini lebih khas dari R, saya pikir.

Penjelasan scan(,"",,,'"',"")bagian:

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)
Robin Ryder
sumber
2

Perl 6 , 23 byte

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

Cobalah online!

Sial, solusi yang jelas lebih pendek. Ganti setiap bagian yang dikutip dengan versi dengan kutipan yang sesuai.

Perl 6 , 24 byte

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

Cobalah online!

Mengganti setiap kutipan ganda, bergantian di antara dua set karakter.

Jo King
sumber
1

Retina , 15 byte

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

Cobalah online! Menggeser keluar membosankan Retina 0.8.2 jawaban oleh 1 byte. Penjelasan:

"
""

Gandakan semua kutipan.

Y`"`\`\`''

Ganti kutipan secara berulang dengan pasangan backtick dan single.

Membosankan 16-byte Retina 0.8.2 jawaban untuk kelengkapan:

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

Cobalah online!

Neil
sumber
1

C (gcc) , 69 68 byte

t=39,z;f(char*s){z=*s-34?*s:257*(t^=71);printf("%s",&z);*++s&&f(s);}

Cobalah online!

Satu byte dicukur oleh @ceilingcat!

G. Sliepen
sumber
1

Labyrinth , (43?) 53 byte

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

Cobalah online!

Versi golf dari program 92 byte yang lebih sederhana ini:

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

Jika kita tidak perlu menangani input yang berisi byte nol maka 43 byte :

39}9
@  6
`,""
`  "
: ."=..
_ ;   "
34-;;::
Jonathan Allan
sumber
1

Python 2 , 57 byte

lambda s:re.sub('"(.*?)"',r"``\1''",s,flags=16)
import re

Cobalah online!

Meski aku sangat suka jawaban Jitse .

Chas Brown
sumber
-4 Bytes jika Anda menggunakan flag sebaris alih-alih flagsargumen:r'(?s)"(.*?)"'
Triggernometry
1

(GNU) sed , 38 33 30 byte

-4 dengan menghapus -nbendera dan secara implisit mencetak n, -1 dengan menggunakan kembali sebelumnya /expression/, terima kasih @Cowsquack. -3 dengan menggunakan branch-to-end implisit.

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

Cobalah online! Cobalah online! Cobalah online!

Beberapa label melompat cukup mendasar. Ini mungkin bisa golf dengan satu atau dua byte.

: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. 
Fungsi Gamma
sumber
1
Btw, biasanya flag yang digunakan ditentukan di header. Anda dapat mengirim byte ke golf menggunakan codegolf.stackexchange.com/a/167295/41805 , selain itu beberapa logika percabangan dapat dihapus. Maka membuat solusinya bekerja tanpa -ntanda harus menyimpan lebih banyak. (Dan tentu saja ada sed -zsolusi sepele yang saya anggap sengaja Anda hindari)
Kritixi Lithos
Baiklah, saya gali kembali man seddan mendapat 30. Jangan ragu untuk memberi tahu saya apa pun yang saya lewatkan, Anda punya pengalaman golf di sini. (Oh, -zbaru bagi saya, tapi saya setuju. Saya akan tetap tanpanya.)
GammaFunction
Bagus, saya selalu senang melihat jawaban sed
Kritixi Lithos
1

05AB1E , 15 byte

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

Cobalah online!

Tidak ada regex di 05AB1E, jadi kami membagi ", membuat daftar bolak-balik ``dan '', kemudian interleave keduanya.

Grimmy
sumber
1
Oke, sepertinya saya tidak perlu memperbaiki dan membatalkan penghapusan jawaban saya. ;)
Kevin Cruijssen
1

Haskell , 67 60 58 byte

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

Cobalah online!

Fungsi yang relevan adalah (#0) .

Karena saya awalnya berpikir pertanyaan itu juga mengharuskan kami untuk mengkonversi tanda kutip tunggal di sini adalah versi yang menangani keduanya:

Haskell , 125 byte

(#(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

Cobalah online!

Posting Rock Garf Hunter
sumber
"\""seharusnya "''"(dua tanda kutip)
siracusa
@ Siracusa Terima kasih, saya berasumsi karena Anda dapat menggunakan "tex Anda dapat menggunakannya di sini.
Post Rock Garf Hunter
1

QuadR , 14 byte

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

Cobalah online!

Temukan / ganti sederhana menggunakan @ Adám's wrapper untuk Dyalog APL ⎕R .

Bagaimana:

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

Merah , 79 byte

func[s][q:"^""parse s[any[to change[q copy t to q q](rejoin["``"t"''"])skip]]s]

Cobalah online!

Galen Ivanov
sumber
0

Jelly , 13 byte

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

Program lengkap.

Cobalah online!

Bagaimana?

ṣ”"µ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''...
Jonathan Allan
sumber
0

Lua , 36 byte

print((...):gsub('"(.-)"',"``%1''"))

Cobalah online!

Wow, hanya dua karakter lebih panjang dari solusi js.

val mengatakan Reinstate Monica
sumber
0

Stax , 11 byte

û╩↕H£ñ╟Uzay

Jalankan dan debug itu

Prosedur:

  1. Ambil semua input, baris baru, dan semua.
  2. Ganti Regex '"'dengan blok yang menghasilkan keluaran bolak-balik dari pasangan backticks dan foreticks (?)
rekursif
sumber
0

Java 8, 40 byte

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

Cobalah online.

Penjelasan:

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

Penjelasan 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 ''
Kevin Cruijssen
sumber