Tex Zitate (UVa 272)

17

Ersetzen Sie bei einer gegebenen Zeichenfolge alle linken doppelten Anführungszeichen durch zwei Backticks und alle rechten doppelten Anführungszeichen durch zwei einfache Anführungszeichen.

Linke Anführungszeichen sind die Anführungszeichen, mit denen ein Anführungszeichen beginnt. Rechte Anführungszeichen sind die Anführungszeichen, mit denen ein Anführungszeichen endet. Anführungszeichen können nicht verschachtelt werden. Sie können davon ausgehen, dass die Zeichenfolge eine gerade Anzahl von Anführungszeichen enthält.

Beispiele

Eingang:

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

Ausgabe:

``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!''
Hochradioaktiv
quelle
Was sind linke Anführungszeichen und rechte Anführungszeichen?
Mein Pronomen ist monicareinstate
1
@someone Linke doppelte Anführungszeichen sind die Anführungszeichen, mit denen ein Anführungszeichen beginnt. Rechte doppelte Anführungszeichen sind die Anführungszeichen, die ein Anführungszeichen beenden.
Hochradioaktiv
Können Anführungszeichen verschachtelt werden?
Mein Pronomen ist monicareinstate
@ jemand Nö. Sie können nicht.
Hochradioaktiv
2
@ LegionMammal978 "Können Anführungszeichen verschachtelt werden?" ... "@someone Nope. Sie können nicht."
Jonathan Allan

Antworten:

18

Nicht lesbar , 789 777 Bytes

-12 Bytes mit der Variablen X34 anstelle von X6.

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

Probieren Sie es online!

Wird in Schrift variabler Breite angezeigt, gemäß der traditionellen Hommage an den Namen der Sprache.

Ich habe Unreadable für diese Herausforderung gelernt, weil es offensichtlich das beste Werkzeug für den Job ist. Die einzigen in Unreadable zulässigen Zeichen sind 'und" , so sicher ist es perfekt auf eine Herausforderung geeignet , die beinhaltet Wechsel "in ''. Ist es nicht

Erläuterung:

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

(Anrufe an X34 sind tatsächlich Anrufe an X (X5), da X5 = 34.)

Robin Ryder
quelle
1
Eine Quoty-Sprache in einer Quoty-Challenge LOL
HighlyRadioactive
5

Retina , 13 Bytes

Schnelles Erlernen von Retina, weil ich aus irgendeinem Grund nicht gerne mit Japt gewinne und das Gefühl habe, eine C # -Lösung würde ohnehin reguläre Ausdrücke verwenden. Ich weiß, dass es eine Retina-Antwort gibt, aber ich habe sie beim Erstellen nicht verwendet und sie (genau) auch gefunden.

#2$`"
``
"
''

Probieren Sie es online!

Mein Pronomen ist monicareinstate
quelle
1
Warum der Hass auf Japt ?! : p
Shaggy
5

JavaScript (ES9), 34 Byte

Arbeiten an zitierten Blöcken:

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

Probieren Sie es online!


JavaScript (ES6), 38 Byte

Arbeiten Sie an jedem Anführungszeichen separat:

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

Probieren Sie es online!

Arnauld
quelle
dotall Flagge für RegExp ist neue Funktion von ECMAScript 2018 , nicht in ES6 enthalten.
tsh
@tsh Guter Fang. Aktualisiert.
Arnauld
4

Python 3 , 65 Bytes

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

Probieren Sie es online!

-8 Bytes dank Erik dem Outgolfer

Jitse
quelle
Was die zweite Funktion betrifft, können Sie 8 Bytes entfernen (es ist nicht so unterschiedlich, wie es scheinen mag, ich habe die nur durch s[0].replaceeine explizite s[0]=='"'Prüfung ersetzt, zusammen mit einigen anderen Modifikationen).
Erik der Outgolfer
@EriktheOutgolfer Nizza findet, Dank!
Jitse
4

Japt , 12 Bytes

Würden 11 sein nur für eine Begrenzung der (oder vielleicht ist es ein Bug in) Japt.

r'"ȲîT°g"`'

Versuch es

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
Zottelig
quelle
Es ist schade, dass Sie Qhier nicht verwenden können : \
Oliver
@ Oliver, ich kann (und ich tat es ursprünglich); Ich würde einfach auch einen brauchen ,.
Shaggy
Ich meine, es ist schade, dass Sie nicht einfach Qanstelle von'"
Oliver
4

TeX, 54 32 Bytes

Für eine TeX Quotes Replacement Challenge benötigen wir natürlich auch eine TeX-Version!

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

... ist die Eingabezeichenfolge, wird also nicht zur Bytezahl hinzugefügt.

Siracusa
quelle
1
Warum nicht das einfachere \def"#1"{``#1''}? (oder \long\defwenn Sie erwarten, dass ein Zitat eine
Absatzgrenze
1
Aus dem offensichtlichen Grund , dass ich nicht von :-) dachte
siracusa
2

Holzkohle , 23 Bytes

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

Probieren Sie es online! Link ist eine ausführliche Version des Codes. Beinhaltet 8 Bytes, um ein umständliches Eingabeformat zu vermeiden. Erläuterung:

WS⊞υι

Collect Eingangsleitungen, bis eine leere Zeile erreicht ist.

⪫υ¶¦

Verbinden Sie die Zeilen in Zeilenumbrüchen.

⪪..."

Teilen Sie die Eingabe in Anführungszeichen.

⭆...

Ordnen Sie die Teile zu und verknüpfen Sie die Ergebnisse für implizite Drucke.

⎇κ...ι

Lass den ersten Teil unverändert.

⁺ײ§'`κι

Stellen Sie das entsprechende Zitat doppelt voran.

Neil
quelle
Ich war für eine Charcoal Lösung warten. Nett!
Hochradioaktiv
2

R , 40 Bytes

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

Probieren Sie es online!

Liest die Zeichenketteneingabe und trennt sie bei jedem " , einen Vektor von Zeichenketten gibt. Dann werden diese Zeichenfolgen im Wechsel zwischen den doppelten Backticks und den doppelten Apostrophen als Trennzeichen eingefügt und bei Bedarf recycelt.

Jemand wird wahrscheinlich eine kürzere R-Antwort auf der Grundlage eines regulären Ausdrucks posten ... Trotzdem ist diese Antwort, glaube ich, typischer für R.

Erklärung des scan(,"",,,'"',"")Teils:

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
quelle
2

Perl 6 , 23 Bytes

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

Probieren Sie es online!

Verdammt, die offensichtliche Lösung ist kürzer. Ersetzt jeden zitierte Abschnitt mit einer Version mit den entsprechenden Zitaten.

Perl 6 , 24 Bytes

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

Probieren Sie es online!

Ersetzt jedes doppelte Anführungszeichen, zwischen den beiden Sätzen von Zeichen abwechseln.

Scherzen
quelle
1

Retina , 15 Bytes

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

Probieren Sie es online! Verdrängt die langweilige Retina 0.8.2 Antwort um 1 Byte. Erläuterung:

"
""

Duplizieren Sie alle Anführungszeichen.

Y`"`\`\`''

Ersetzen Sie die Anführungszeichen zyklisch durch Backticks und einfache Anführungszeichen.

Langweilige 16-Byte- Retina 0.8.2- Antwort auf Vollständigkeit:

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

Probieren Sie es online!

Neil
quelle
1

Labyrinth , (43?) 53 Bytes

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

Probieren Sie es online!

Eine Golf-Version dieses viel einfacheren 92-Byte-Programms:

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

Wenn wir keine Eingabe mit dem Null-Byte brauchen, dann 43 Bytes :

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

Python 2 , 57 Bytes

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

Probieren Sie es online!

Obwohl ich Jitses Antwort wirklich mag .

Chas Brown
quelle
-4 Bytes, wenn Sie Inline-Flags anstelle des flagsArguments verwenden:r'(?s)"(.*?)"'
Triggernometrie
1

(GNU) sed , 38 33 30 Bytes

-4 durch Entfernen des -nFlags und implizites Drucken auf n, -1 durch Wiederverwenden der vorherigen /expression/, danke @Cowsquack. -3 durch implizite Verzweigung zum Ende.

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

Probieren Sie es online! Probieren Sie es online! Probieren Sie es online!

Einige ziemlich grundlegende Label Jumping. Dies kann wahrscheinlich durch ein oder zwei Bytes golfen werden.

: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. 
GammaFunktion
quelle
1
In der Regel werden die verwendeten Flags im Header angegeben. Sie können ein Byte mit codegolf.stackexchange.com/a/167295/41805 golfen . Außerdem kann ein Teil der Verzweigungslogik entfernt werden. Wenn Sie die Lösung dann ohne -nFlag ausführen, sollten Sie etwas mehr sparen. (Und natürlich gibt es die triviale sed -zLösung, von der ich
annehme
Okay, ich habe man sedmich ein bisschen umgesehen und bin auf 30 gekommen. Fühlen Sie sich frei, mir mitzuteilen, was ich verpasst habe. Sie haben das Golferlebnis auf dieser Sprache. (Oh, -zist neu für mich, aber ich stimme zu. Ich werde ohne es bleiben.)
GammaFunction
Gut gemacht, ich freue mich immer über eine sed-Antwort
Kritixi Lithos
1

05AB1E , 15 Bytes

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

Probieren Sie es online!

Keine regulären Ausdrücke in 05AB1E, also haben wir uns getrennt " , eine Liste mit abwechselnden ``und ''verschachtelten die beiden.

Grimmig
quelle
1
Ok, es sieht so aus, als müsste ich meine Antwort nicht reparieren und wiederherstellen. ;)
Kevin Cruijssen
1

Haskell , 67 60 58 Bytes

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

Probieren Sie es online!

Die relevante Funktion ist (#0) .

Da ich ursprünglich dachte, dass die Frage auch die Konvertierung einzelner Anführungszeichen erfordert, handelt es sich hier um eine Version, die beides behandelt:

Haskell , 125 Bytes

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

Probieren Sie es online!

Weizen-Assistent
quelle
"\""sollte sein "''"(zwei Apostrophe)
Siracusa
@siracusa Danke, ich nahm an, da du "in tex verwenden kannst, könntest du es hier verwenden.
Weizen-Zauberer
1

QuadR , 14 Bytes

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

Probieren Sie es online!

Einfaches Suchen / Ersetzen mit @ Adáms Wrapper für Dyalog APLs ⎕R Eplace-Funktion von .

Wie:

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

Rot , 79 Bytes

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

Probieren Sie es online!

Galen Ivanov
quelle
0

Gelee , 13 Bytes

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

Ein volles Programm.

Probieren Sie es online!

Wie?

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

Lua , 36 Bytes

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

Probieren Sie es online!

Wow, nur zwei Zeichen länger als js Lösung.

val sagt Reinstate Monica
quelle
0

Java 8, 40 Bytes

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

Probieren Sie es online aus.

Erläuterung:

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

Regex Erklärung:

 "([^"]+)"                      // 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
quelle