Báo giá Tex (UVa 272)


17

Đưa ra một chuỗi, thay thế tất cả các dấu ngoặc kép trái thành hai dấu ngoặc kép và tất cả dấu ngoặc kép phải thành hai dấu ngoặc đơn.

Dấu ngoặc kép có nghĩa là dấu ngoặc kép bắt đầu một trích dẫn. Dấu ngoặc kép có nghĩa là dấu ngoặc kép kết thúc một trích dẫn. Báo giá không thể được lồng nhau. Bạn có thể giả sử rằng có một số lượng trích dẫn kép trong chuỗi.

Ví dụ

Đầu vào:

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

Đầu ra:

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

Dấu ngoặc kép trái và dấu ngoặc kép phải là gì?
đại từ của tôi là monicareinstate

1
@someone Dấu ngoặc kép trái là dấu ngoặc kép bắt đầu trích dẫn. Dấu ngoặc kép bên phải là dấu ngoặc kép kết thúc một trích dẫn.
HighRiereactive

Báo giá có thể được lồng nhau?
đại từ của tôi là monicareinstate

@someone Không. Họ không thể.
HighRiereactive

2
@ LegionMammal978 "Báo giá có thể được lồng nhau không?" ... "@someone Không. Họ không thể."
Jonathan Allan

Câu trả lời:


18

Không thể đọc được , 789 777 byte

-12 byte bằng cách sử dụng biến X34 thay vì X6.

"" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" " """ "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" " "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" """ "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" """ "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" " "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" " "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" """" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" " """ "" "" "

Hãy thử trực tuyến!

Được hiển thị trong phông chữ có chiều rộng thay đổi, theo cống nạp truyền thống cho tên ngôn ngữ.

Tôi đã học được Unreadable cho thử thách này, bởi vì nó rõ ràng là công cụ tốt nhất cho công việc. Các nhân vật duy nhất được phép trong Unreadable là '", vì vậy chắc chắn nó hoàn toàn phù hợp với một thử thách liên quan đến việc thay đổi "thành ''. Phải không?

Giải trình:

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

(Các cuộc gọi đến X34 thực sự là các cuộc gọi đến X (X5), vì X5 = 34.)


1
Một ngôn ngữ trích dẫn trong một thử thách danh ngôn LOL
HighRiereactive

5

Võng mạc , 13 byte

Học Retina nhanh chóng vì một số lý do tôi không thích chiến thắng Japt và cảm thấy như một giải pháp C # sẽ sử dụng các biểu thức thông thường. Tôi biết có một câu trả lời Retina, nhưng tôi đã không sử dụng nó khi tạo nó và tôi cũng tìm thấy nó (chính xác).

#2$`"
``
"
''

Hãy thử trực tuyến!


1
Tại sao ghét Japt?! : p
Shaggy




4

Japt , 12 byte

Sẽ chỉ là 11 cho một giới hạn của (hoặc có thể đó là một lỗi trong) Japt.

r'"ȲîT°g"`'

Thử nó

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

Thật tệ khi bạn không thể sử dụng Qở đây: \
Oliver

@Oliver, tôi có thể (và ban đầu tôi đã làm); Tôi cũng cần một cái ,.
Xù xì

Ý tôi là nó quá tệ, bạn không thể đơn giản sử dụng Qthay thế'"
Oliver

4

TeX, 54 32 byte

Đối với một thách thức thay thế trích dẫn TeX, chúng tôi cũng cần một phiên bản TeX!

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

... là chuỗi đầu vào, vì vậy nó không thêm vào số byte.


1
Tại sao không đơn giản hơn \def"#1"{``#1''}? (hoặc \long\defnếu bạn mong muốn một trích dẫn vượt qua một ranh giới đoạn)
Phelype Oleinik

1
Vì lý do rõ ràng mà tôi đã không nghĩ về điều đó :-)
siracusa

2

Than , 23 byte

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

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã. Bao gồm 8 byte để tránh định dạng đầu vào rườm rà. Giải trình:

WS⊞υι

Thu thập các dòng đầu vào cho đến khi đạt được một dòng trống.

⪫υ¶¦

Tham gia các dòng trên nhân vật dòng mới.

⪪..."

Tách đầu vào trên dấu ngoặc kép.

⭆...

Ánh xạ qua từng phần và nối các kết quả để in ngầm.

⎇κ...ι

Để lại phần đầu không thay đổi.

⁺ײ§'`κι

Tiền tố trích dẫn thích hợp, nhân đôi.


Tôi đã chờ đợi một giải pháp than. Đẹp!
HighRiereactive

2

R , 40 byte

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

Hãy thử trực tuyến!

Đọc đầu vào chuỗi, tách từng chuỗi ", đưa ra một vectơ của chuỗi. Sau đó dán các chuỗi đó, xen kẽ giữa các backticks đôi và dấu nháy đơn làm dấu phân cách, tái chế chúng khi cần thiết.

Ai đó có thể sẽ đăng câu trả lời R ngắn hơn dựa trên regex ... Tuy nhiên, câu trả lời này là điển hình hơn của R, tôi nghĩ vậy.

Giải thích về scan(,"",,,'"',"")phần:

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 byte

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

Hãy thử trực tuyến!

Chết tiệt, giải pháp rõ ràng là ngắn hơn. Thay thế từng phần được trích dẫn bằng một phiên bản với dấu ngoặc kép thích hợp.

Perl 6 , 24 byte

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

Hãy thử trực tuyến!

Thay thế mỗi trích dẫn kép, xen kẽ giữa hai bộ ký tự.





1

Mê cung , (43?) 53 byte

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

Hãy thử trực tuyến!

Một phiên bản golf của chương trình 92 byte đơn giản hơn nhiều này:

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

Nếu chúng ta không cần xử lý đầu vào chứa byte 0 thì 43 byte :

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


1

(GNU) sed , 38 33 30 byte

-4 bằng cách xóa -ncờ và in ngầm n, -1 bằng cách sử dụng lại trước đó /expression/, cảm ơn @Cowsquack. -3 bằng cách sử dụng từ đầu đến cuối.

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

Hãy thử trực tuyến! Hãy thử trực tuyến! Hãy thử trực tuyến!

Một số nhãn nhảy cơ bản khá. Điều này có thể được chơi bằng một hoặc hai 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 thường các cờ được sử dụng được chỉ định trong tiêu đề. Bạn có thể chơi một byte bằng codegolf.stackexchange.com/a/167295/41805 , ngoài ra một số logic phân nhánh có thể được loại bỏ. Sau đó, làm cho giải pháp hoạt động mà không có -ncờ nên tiết kiệm hơn một chút. (Và tất nhiên đó là sed -zgiải pháp tầm thường mà tôi cho rằng bạn đã cố tình tránh)
Kritixi Lithos

Được rồi, tôi đã quay lại man sedmột chút và đến 30. Hãy thoải mái cho tôi biết bất cứ điều gì tôi đã bỏ lỡ, bạn đã có trải nghiệm chơi gôn trên lang này. (Ồ, -zlà người mới đối với tôi, nhưng tôi đồng ý. Tôi sẽ ở lại mà không có nó.)
GammaFactor

Hoàn thành tốt, tôi luôn vui mừng khi thấy một câu trả lời
quyến rũ

1

05AB1E , 15 byte

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

Hãy thử trực tuyến!

Không có regex nào trong 05AB1E, vì vậy chúng tôi chia ra ", lập danh sách xen kẽ ``''sau đó xen kẽ hai.


1
Ok, có vẻ như tôi không phải sửa chữa và phục hồi câu trả lời của mình. ;)
Kevin Cruijssen

1

Haskell , 67 60 58 byte

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

Hãy thử trực tuyến!

Các chức năng có liên quan là (#0).

Vì ban đầu tôi nghĩ câu hỏi cũng yêu cầu chúng tôi chuyển đổi các trích dẫn đơn ở đây là phiên bản xử lý cả hai:

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

Hãy thử trực tuyến!


"\""nên là "''"(hai dấu nháy đơn)
siracusa

@siracusa Cảm ơn, tôi giả sử vì bạn có thể sử dụng "trong tex bạn có thể sử dụng nó ở đây.
Phù thủy lúa mì

1

QuadR , 14 byte

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

Hãy thử trực tuyến!

Tìm / thay thế đơn giản bằng cách sử dụng trình bao bọc của @ Adám cho Dyalog APL's ⎕R chức năng eplace .

Làm sao:

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


0

Thạch , 13 byte

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

Một chương trình đầy đủ.

Hãy thử trực tuyến!

Làm sao?

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

Stax , 11 byte

û╩↕H£ñ╟Uzay

Chạy và gỡ lỗi nó

Thủ tục:

  1. Lấy tất cả đầu vào, dòng mới và tất cả.
  2. Regex thay thế '"'bằng một khối tạo ra đầu ra xen kẽ của các cặp backticks và foreticks (?)

0

Java 8, 40 byte

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

Hãy thử trực tuyến.

Giải trình:

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

Regex giải thích:

 "([^"]+)"                      // 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 ''
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.