텍스 따옴표 (UVa 272)


17

문자열이 주어지면 모든 왼쪽 큰 따옴표를 두 개의 백틱으로 바꾸고 모든 오른쪽 큰 따옴표를 두 개의 작은 따옴표로 바꾸십시오.

왼쪽 따옴표는 따옴표를 시작하는 따옴표를 의미합니다. 오른쪽 따옴표는 따옴표를 끝내는 따옴표를 의미합니다. 따옴표는 중첩 할 수 없습니다. 문자열에 짝수의 큰 따옴표가 있다고 가정 할 수 있습니다.

입력:

"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

@ 누군가. 그들은 할 수 없습니다.
HighlyRadioactive

2
@ LegionMammal978 "따옴표를 중첩 할 수 있습니까?" ... "@ 아무도 없습니다. 그들은 할 수 없습니다."
Jonathan Allan

답변:


18

읽을 수 없음 , 789777 바이트

X6 대신 변수 X34를 사용하여 -12 바이트

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

온라인으로 사용해보십시오!

언어 이름에 대한 기존의 찬사에 따라 가변 폭 글꼴로 표시됩니다.

나는이 과제에 대해 읽을 수없는 것을 배웠습니다. 그것은 그 일에 가장 적합한 도구이기 때문입니다. 읽을 수 없음에서 허용되는 유일한 문자는 '"이므로 반드시 "로 변경해야하는 문제에 완벽하게 적합합니다 ''. 그렇지 않습니까?

설명:

'""""""'""'""" 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에 대한 호출은 X5 = 34이므로 실제로 X (X5)에 대한 호출입니다.)


1
인용 도전 LOL
HighlyRadioactive

5

레티 나 , 13 바이트

어떤 이유로 Japt 우승을 좋아하지 않고 C # 솔루션이 정규 표현식을 사용하는 것처럼 느껴지기 때문에 Retina를 빠르게 학습하십시오. 나는 Retina 답변이 있다는 것을 알고 있지만 이것을 만들 때 그것을 사용하지 않았으며 어쨌든 그것을 정확히 발견했습니다.

#2$`"
``
"
''

온라인으로 사용해보십시오!


1
왜 apt을 싫어하는가?! : p
얽히고 설킨

5

자바 스크립트 (ES9), 34 바이트

인용 블록 작업 :

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

온라인으로 사용해보십시오!


자바 스크립트 (ES6), 38 바이트

각 큰 따옴표에 대해 개별적으로 작업 :

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

온라인으로 사용해보십시오!


RegExp의 dotAll 플래그 는 ES6에 포함되지 않은 ECMAScript 2018새로운 기능입니다 .
tsh

@tsh 잘 잡아라. 업데이트되었습니다.
Arnauld '



4

Japt , 12 바이트

Japt의 제한 (또는 버그가있을 수 있음)의 경우에만 11이됩니다.

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

@Oliver, 나는 (그리고 나는 원래했다); 난 그냥 필요 했어 ,너무.
Shaggy

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 11

2

R , 40 바이트

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

온라인으로 사용해보십시오!

각각에서 분리하여 문자열 입력을 읽습니다. " 문자열 벡터를 제공합니다. 그런 다음 해당 문자열을 붙여넣고 이중 백틱과 이중 아포스트로피를 구분 기호로 번갈아 가며 필요에 따라 재활용합니다.

누군가 정규식을 기반으로 더 짧은 R 답변을 게시 할 것입니다 ... 여전히이 답변은 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)







1

(GNU) sed , 38 33 30 바이트

-4 , 제거하여 -n플래그와 암시에 인쇄 n, -1 이전 재사용 /expression/, 감사 @Cowsquack을. 암시 적 분기 간을 사용하여 -3 .

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

온라인으로 사용해보십시오! 온라인으로 사용해보십시오! 온라인으로 사용해보십시오!

꽤 기본적인 레이블 점프. 이것은 아마도 1 또는 2 바이트로 골프를 칠 수 있습니다.

: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에 도착했다. 내가 놓친 것을 알려 주시기 바랍니다. 당신은이 랭에서 골프를 경험했습니다. (아, -z나에게는 새로운 것이지만, 나는 동의한다. 나는 그것없이 머무를 것이다.)
GammaFunction

멋지게 난 항상 나오지도 대답 만나서 다행이다, 수행
Kritixi LITHOS


1

하스켈 , 67 60 58 바이트

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

온라인으로 사용해보십시오!

관련 기능은 (#0) 입니다.

원래 질문에 작은 따옴표를 변환해야한다고 생각했기 때문에 두 가지를 모두 처리하는 버전이 있습니다.

하스켈 , 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에서 사용할 수 있기 때문에 여기에서 사용할 수 있다고 가정 했습니다.
Post Rock Garf Hunter 14

1

QuadR , 14 바이트

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

온라인으로 사용해보십시오!

Dyalog APL 용 @ Adám 래퍼를 사용한 간단한 찾기 / 바꾸기 ⎕R eplace 기능을 .

어떻게:

"(.*?)"  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

Stax , 11 바이트

û╩↕H£ñ╟Uzay

실행 및 디버깅

순서:

  1. 모든 입력, 개행 및 모두 가져 가라.
  2. 정규 표현식 '"'은 백틱과 포틱의 쌍을 번갈아 출력하는 블록으로 대체합니다 (?).

0

자바 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 

정규식 설명 :

 "([^"]+)"                      // 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 ''
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.