Tex Quotes (UVa 272)


17

กำหนดสตริงให้แทนที่เครื่องหมายอัญประกาศคู่ซ้ายทั้งหมดเป็น backticks สองรายการและเครื่องหมายอัญประกาศคู่ด้านขวาทั้งหมดเป็นเครื่องหมายคำพูดเดี่ยวสองตัว

เครื่องหมายคำพูดซ้ายหมายถึงเครื่องหมายคำพูดที่เริ่มต้นการเสนอราคา คำพูดที่ถูกต้องหมายถึงคำพูดที่จบคำพูด ไม่สามารถซ้อนคำพูดได้ คุณอาจคิดว่ามีจำนวนคู่ของคำพูดคู่ในสตริง

ตัวอย่าง

การป้อนข้อมูล:

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

เอาท์พุท:

``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!''

อะไรคือเครื่องหมายคำพูดคู่ซ้ายและเครื่องหมายคำพูดคู่ขวา
คำสรรพนามของฉันคือ monicareinstate

1
@someone เครื่องหมายคำพูดคู่ซ้ายเป็นเครื่องหมายคำพูดที่เริ่มต้นเครื่องหมายคำพูด เครื่องหมายคำพูดคู่ด้านขวาคือเครื่องหมายคำพูดที่ลงท้ายคำพูด
HighlyRadioactive

คำพูดซ้อนกันได้ไหม
คำสรรพนามของฉันคือ monicareinstate

@someone Nope พวกเขาไม่สามารถ
HighlyRadioactive

2
@ LegionMammal978 "คำพูดซ้อนกันได้หรือไม่" ... "@someone Nope ไม่สามารถทำได้"
Jonathan Allan

คำตอบ:


18

ไม่สามารถอ่านได้789 777 ไบต์

-12 ไบต์โดยใช้ตัวแปร X34 แทนที่จะเป็น X6

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

ลองออนไลน์!

แสดงเป็นแบบอักษรที่มีความกว้างผันแปรตามการส่งส่วยดั้งเดิมไปยังชื่อภาษา

ฉันเรียนรู้ที่อ่านไม่ได้สำหรับความท้าทายนี้เพราะเห็นได้ชัดว่าเป็นเครื่องมือที่ดีที่สุดสำหรับงาน อักขระที่อนุญาตให้ใช้ใน Unreadable มีเพียงตัวเดียว'และ"แน่นอนว่ามันเหมาะอย่างยิ่งสำหรับความท้าทายที่เกี่ยวข้องกับการเปลี่ยน"เป็น''เข้าสู่ไม่ใช่เหรอ

คำอธิบาย:

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

(การโทรไปยัง X34 เป็นการโทรไปยัง X (X5) จริง ๆ ตั้งแต่ X5 = 34)


1
ภาษา quoty ในการท้าทาย quoty LOL
HighlyRadioactive

5

เรติน่า 13 ไบต์

การเรียนรู้จอประสาทตาอย่างรวดเร็วเพราะด้วยเหตุผลบางอย่างฉันไม่ชอบ Japt ชนะและรู้สึกเหมือนโซลูชัน C # จะใช้นิพจน์ทั่วไปอยู่ดี ฉันรู้ว่ามีคำตอบที่จอประสาทตา แต่ฉันไม่ได้ใช้มันเมื่อสร้างมันขึ้นมาและฉันก็พบว่ามันเหมือนกันทุกประการ

#2$`"
``
"
''

ลองออนไลน์!


1
ทำไมความเกลียดชัง Japt! : p
Shaggy

5

JavaScript (ES9), 34 ไบต์

ทำงานกับบล็อกที่ยกมา:

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

ลองออนไลน์!


JavaScript (ES6), 38 ไบต์

การทำงานกับเครื่องหมายคำพูดสองครั้งแยกกัน:

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

ลองออนไลน์!


การตั้งค่าสถานะ dotAll สำหรับ RegExp เป็นคุณลักษณะใหม่ของECMAScript 2018ซึ่งไม่รวมอยู่ใน ES6
TSH

@tsh จับได้ดี Updated
Arnauld


4

Python 3 , 65 ไบต์

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

ลองออนไลน์!

-8 ไบต์ขอบคุณ Erik the Outgolfer


สำหรับฟังก์ชั่นที่สองคุณสามารถลบ 8 ไบต์ได้ (มันไม่ต่างกันอย่างที่เห็นฉันเพิ่งแทนที่s[0].replaceด้วยการs[0]=='"'ตรวจสอบอย่างชัดเจนพร้อมกับการดัดแปลงอื่น ๆ )
Erik the Outgolfer

@EriktheOutgolfer Nice พบแล้วขอบคุณ!
Jitse

4

Japt , 12 ไบต์

จะเป็น 11 เท่านั้นสำหรับข้อ จำกัด ของ (หรืออาจเป็นข้อบกพร่องใน) Japt

r'"ȲîT°g"`'

ลองมัน

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

มันแย่มากที่คุณไม่สามารถใช้Qที่นี่: \
โอลิเวอร์

@Oliver ฉันสามารถ (และฉันทำ) ฉันก็ต้องการ,เช่นกัน
ปุย

ฉันหมายความว่ามันเลวร้ายเกินไปคุณอาจจะไม่ได้เป็นเพียงแค่ใช้Qในสถานที่ของ'"
โอลิเวอร์

4

TeX, 54 32 ไบต์

สำหรับความท้าทายในการเปลี่ยนคำพูดของ TeX เราจำเป็นต้องมีรุ่นของ TeX ด้วย!

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

... เป็นสตริงป้อนข้อมูลดังนั้นจึงไม่เพิ่มในการนับไบต์


1
ทำไมไม่ง่ายกว่า\def"#1"{``#1''}? (หรือ\long\defหากคุณคาดว่าจะมีการเสนอราคาข้ามเขตแดนย่อหน้า)
Phelype Oleinik

1
ด้วยเหตุผลที่ชัดเจนที่ฉันไม่ได้คิดถึง :-)
siracusa

2

ถ่าน 23 ไบต์

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

ลองออนไลน์! การเชื่อมโยงคือการใช้รหัสเวอร์ชันอย่างละเอียด รวม 8 ไบต์เพื่อหลีกเลี่ยงรูปแบบอินพุตที่ยุ่งยาก คำอธิบาย:

WS⊞υι

รวบรวมบรรทัดอินพุตจนกว่าจะถึงบรรทัดว่าง

⪫υ¶¦

เข้าร่วมบรรทัดกับอักขระขึ้นบรรทัดใหม่

⪪..."

แยกอินพุตด้วยเครื่องหมายคำพูด

⭆...

จัดทำแผนที่แต่ละส่วนและเชื่อมผลลัพธ์เพื่อทำการพิมพ์โดยปริยาย

⎇κ...ι

ปล่อยให้ส่วนแรกไม่เปลี่ยนแปลง

⁺ײ§'`κι

ใส่เครื่องหมายคำพูดที่เหมาะสมเป็นสองเท่า


ฉันรอวิธีแก้ปัญหาถ่าน ดี!
HighlyRadioactive

2

R , 40 ไบต์

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

ลองออนไลน์!

อ่านอินพุตสตริงโดยแยกแต่ละค่า "ให้เวกเตอร์ของสตริง จากนั้นวางสตริงเหล่านั้นสลับกันระหว่าง backticks สองครั้งและเครื่องหมายอัญประกาศคู่เป็นตัวคั่นและรีไซเคิลตามความจำเป็น

บางคนอาจโพสต์คำตอบ R ที่สั้นกว่าตาม regex ... ถึงกระนั้นคำตอบนี้ก็เป็นเรื่องปกติของ R ฉันคิดว่า

คำอธิบายของscan(,"",,,'"',"")ส่วน:

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)

2

Perl 6 , 23 ไบต์

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

ลองออนไลน์!

ยี้ทางออกที่ชัดเจนสั้นกว่า แทนที่แต่ละส่วนที่ยกมาด้วยรุ่นที่มีคำพูดที่เหมาะสม

Perl 6 , 24 ไบต์

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

ลองออนไลน์!

แทนที่แต่ละเครื่องหมายคำพูดคู่สลับระหว่างอักขระสองชุด


1

จอตาติน่า 15 ไบต์

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

ลองออนไลน์!ขอบจอประสาทตาที่น่าเบื่อ 0.8.2 ตอบโดย 1 ไบต์ คำอธิบาย:

"
""

คัดลอกเครื่องหมายคำพูดทั้งหมด

Y`"`\`\`''

แทนที่ใบเสนอราคาด้วยคู่ของ backticks และอัญประกาศเดี่ยว

คำตอบน่าเบื่อ 16- เรตRetina 0.8.2สำหรับความครบถ้วน:

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

ลองออนไลน์!




1

เขาวงกต (43?) 53 ไบต์

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

ลองออนไลน์!

เวอร์ชันของ golfed นี้ง่ายกว่ามากโปรแกรม 92 ไบต์:

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

หากเราไม่ต้องการจัดการอินพุตที่มีศูนย์ไบต์แล้ว 43 ไบต์ :

39}9
@  6
`,""
`  "
: ."=..
_ ;   "
34-;;::


1

(GNU) sed , 38 33 30 ไบต์

-4โดยการเอา-nธงและโดยปริยายพิมพ์บนn, -1โดยการนำก่อนหน้า/expression/ขอบคุณ @Cowsquack -3โดยใช้กิ่งถึงท้าย

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

ลองออนไลน์! ลองออนไลน์! ลองออนไลน์!

การกระโดดของฉลากพื้นฐานค่อนข้างสวย นี่อาจเป็น golfed 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. 

1
Btw มักจะใช้ธงระบุไว้ในส่วนหัว คุณสามารถตีกอล์ฟด้วยไบต์โดยใช้codegolf.stackexchange.com/a/167295/41805นอกจากนี้ยังสามารถลบตรรกะการแตกแขนงบางส่วนออกได้ จากนั้นการทำให้โซลูชันทำงานโดยไม่มี-nแฟล็กควรประหยัดอีกเล็กน้อย (และแน่นอนว่ามีsed -zวิธีแก้ปัญหาเล็ก ๆ น้อย ๆที่ฉันคิดว่าคุณควรหลีกเลี่ยงโดยเจตนา)
Kritixi Lithos

เอาล่ะฉันขุดกลับมาman sedสักหน่อยและถึง 30 อย่าลังเลที่จะแจ้งให้ฉันทราบทุกสิ่งที่ฉันพลาดไปคุณได้รับประสบการณ์การเล่นกอล์ฟที่ lang นี้ (โอ้-zเป็นเรื่องใหม่สำหรับฉัน แต่ฉันเห็นด้วยฉันจะอยู่โดยไม่มีมัน)
GammaFunction

ทำได้ดีมากฉันดีใจเสมอที่ได้เห็นคำตอบที่ไม่ดี
Kritixi Lithos

1

05AB1E , 15 ไบต์

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

ลองออนไลน์!

ไม่มี regexes ใน 05AB1E ดังนั้นเราจึงแยกกัน"ทำรายการการสลับ``และ''จากนั้นแทรกทั้งสอง


1
ตกลงดูเหมือนว่าฉันไม่ต้องแก้ไขและยกเลิกคำตอบของฉัน ;)
Kevin Cruijssen

1

Haskell , 67 60 58 ไบต์

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

ลองออนไลน์!

ฟังก์ชั่นที่เกี่ยวข้องคือ (#0)ฟังก์ชั่นที่เกี่ยวข้องคือ

เนื่องจากเดิมฉันคิดว่าคำถามนี้ยังทำให้เราต้องแปลงราคาเดียวนี่คือรุ่นที่จัดการทั้งสอง:

Haskell , 125 ไบต์

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

ลองออนไลน์!


"\""ควรเป็น"''"(เครื่องหมายสองอัน)
siracusa

@Siracusa ขอบคุณฉันคิดว่าเนื่องจากคุณสามารถใช้"ใน tex คุณสามารถใช้ที่นี่
โพสต์ Rock Garf Hunter

1

QuadR , 14 ไบต์

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

ลองออนไลน์!

ค้นหา / แทนที่อย่างง่ายโดยใช้เครื่องห่อของ @ Adámสำหรับ Dyalog APL ⎕Rฟังก์ชั่น eplace Dyalog

วิธี:

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


0

เยลลี่ขนาด 13 ไบต์

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

โปรแกรมเต็มรูปแบบ

ลองออนไลน์!

อย่างไร?

ṣ”"µ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''...




0

Java 8, 40 ไบต์

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

ลองออนไลน์

คำอธิบาย:

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

คำอธิบาย 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 ''

0

นกกระจิบ , 91 ไบต์

Fn.new{|n|
var c=1
for(i in n.split("\"")[1..-1])System.write(((c=-~c)%2==0?"``":"''")+i)
}

ลองออนไลน์!

คำอธิบาย

Fn.new{|n| // New anonymous function
var c=1    // Set the index counter as 1
for(i in n.split("\"")                                                 // For each over n splitted with quotes
                      [1..-1])                                         // Get rid of the first quote
                              System.write(                          ) // Output this to the console
                                           (
                                            (c=-~c)                    // Increment the counter
                                                   %2==0?"``"          // If that's divisible by 2, output a backquote
                                                             :"''"     // Otherwise, output a frontquote
                                                                  )+i  // Join the result with i
}

0

GolfScript ,35 34 ไบต์

1:c;{.34={;c)2%:c'""'"``"if}""if}%

ลองออนไลน์!

คำอธิบาย

1:c;                                # Set 1 to the current item counter

    {                            }% # Map for every character in the input:
     .34=                      if   #     If the character isn't the quote,
                             ""     #         Just leave it alone
         {                  }       #     Otherwise:
          ;                         #         Remove the copy of the input
           c):c                     #         Increment the counter
                2%        if        #         If the counter isn't divisible by 2, 
                  '""'              #             Output the double-quote
                      "``"          #         Otherwise: Output the double backtick
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.