Cytaty Tex (UVa 272)

17

Biorąc pod uwagę ciąg, zamień wszystkie lewe podwójne cudzysłowy na dwa znaki odwrotne i wszystkie prawe podwójne cudzysłowy na dwa pojedyncze cudzysłowy.

Lewy cytat oznacza cytat, który rozpoczyna cytat. Prawidłowe cytaty oznaczają cytaty, które kończą cytat. Cytaty nie mogą być zagnieżdżone. Możesz założyć, że w ciągu znajduje się parzysta liczba podwójnych cudzysłowów.

Przykłady

Wejście:

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

Wynik:

``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!''
Wysoce radioaktywny
źródło
Co to są lewe cudzysłowy i prawe podwójne cudzysłowy?
mój zaimek to monicareinstate
1
@ ktoś Lewe podwójne cytaty to cytaty, które rozpoczynają cytat. Właściwe podwójne cytaty to cytaty, które kończą cytat.
Wysoce radioaktywny
Czy można zagnieżdżać cytaty?
mój zaimek to monicareinstate
@someone Nope. Nie mogą.
Wysoce radioaktywny
3
@ LegionMammal978 „Czy można zagnieżdżać cytaty?” ... „@soneone Nope. Nie mogą.”
Jonathan Allan

Odpowiedzi:

18

Nieczytelny , 789 777 bajtów

-12 bajtów przy użyciu zmiennej X34 zamiast X6.

„” „” „” „” „„ ”„ ”„ ”„ „” „” „” „„ ”„ „” „„ ”„ „” „” „” „” „” „” „” „„ ”„ ”„ ”„ ”„ ”„ ”„ „” „„ ”„ „” „” „” „„ ”„ ”„ ” „” „” „” „” „„ ”„ ”„ „” „” „” „„ ”„ „” „„ ”„ „” „” „” „” „” „„” „” „” „” „„ ”„ ”„ ”„ ”„ ”„ ”„ „” „„ ”„ „” „” „” „” „” „” „” „” „” „” „„ ”„ ”„ ”„ ”„ ”„ ”„ „” „„ ”„ „” „” „” „” „” „” „” „” „” „” „„ ”„ ”„ „” „” „” „” „„ ”„ „” „„ ”„ ”„ ”„ ”„ ”„” „” „” „” „„ ”„ ”„ ”„ „” „” „” „” „„ ”„ „” „” „” „” „” „” „” „” „” „” „„ ”„ ”„ ”„ „” „” „” „” „„ ”„ „” „„ ”„ „” „” „” „” „” „” „” „„ ”„ „” „„ ”„ ”„ ”„ „” „„ ”„ „” „” „” „” „” „”„” „” „” „” „„ ”„ ”„ ”„ „” „” „” „” „„ ”„ „” „” „” „” „” „” „” „” „” „” „” „” „” „” „” „” „” „” „” „„ ”„ „” „” „” „” „” „” „” „” „” „„ ”„ ”„ ”„ „” „” „” „” „„ ”„ „” „” „” „” „”„” „” „” „„ ”„ ”„ „” „„ ”„ ”„ ”„ „” „„ ”„ „” „” „” „” „” „” „” „” „” „„ ”„ ”„ ”„ ”„ ”„ ”„ „” „„ ”„ „” „” „” „„ ”„ ”„ ” „” „” „” „” „„ ”„ ”„ ”„ ”„ ”„ ”„ ”„ „” „„ ”„ ”„ ”„ ”„ ”„ ” „„” „” „” „” „„ ”„ „” „” „” „” „” „” „” „”

Wypróbuj online!

Wyświetlany czcionką o zmiennej szerokości, według tradycyjnego hołdu dla nazwy języka.

Nauczyłem się Nieczytelnego do tego wyzwania, ponieważ jest to oczywiście najlepsze narzędzie do tego zadania. Jedynymi postaciami dozwolonymi w Nieczytelnym są 'i "dlatego z pewnością doskonale nadają się do wyzwania polegającego na zmianie "się ''. Czyż nie

Wyjaśnienie:

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

(Wywołania na X34 są w rzeczywistości wywołaniami na X (X5), ponieważ X5 = 34).

Robin Ryder
źródło
1
Język quoty w wyzwaniu quote LOL
HighlyRadioactive
5

Siatkówka , 13 bajtów

Szybka nauka Retiny, ponieważ z jakiegoś powodu nie lubię wygrywania Japt i wydaje mi się, że rozwiązanie C # i tak użyłoby wyrażeń regularnych. Wiem, że istnieje odpowiedź Retina, ale nie użyłem jej podczas jej tworzenia, a także znalazłem ją (dokładnie).

#2$`"
``
"
''

Wypróbuj online!

mój zaimek to monicareinstate
źródło
1
Dlaczego nienawidzę Japt ?! : p
Shaggy
5

JavaScript (ES9), 34 bajty

Praca na cytowanych blokach:

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

Wypróbuj online!


JavaScript (ES6), 38 bajtów

Praca nad każdym podwójnym cytatem osobno:

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

Wypróbuj online!

Arnauld
źródło
Flaga dotAll dla RegExp to nowa funkcja ECMAScript 2018 , nieuwzględniona w ES6.
tsh
@tsh Good catch. Zaktualizowano
Arnauld
4

Python 3 , 65 bajtów

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

Wypróbuj online!

-8 bajtów dzięki Erikowi Outgolfer

Jitse
źródło
Jeśli chodzi o drugą funkcję, możesz usunąć 8 bajtów (nie jest tak różna, jak mogłoby się wydawać, właśnie zastąpiłem s[0].replaceją jawnym s[0]=='"'sprawdzeniem, wraz z kilkoma innymi modyfikacjami).
Erik the Outgolfer
@EriktheOutgolfer Ładne znaleziska, dzięki!
Jitse,
4

Japt , 12 bajtów

Byłoby 11 tylko dla ograniczenia (a może to jest błąd w) Japt.

r'"ȲîT°g"`'

Spróbuj

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
Kudłaty
źródło
Szkoda, że ​​nie możesz Qtutaj użyć : \
Oliver
@ Oliver, mogę (i pierwotnie tak zrobiłem); Potrzebowałbym ,też.
Kudłaty
Mam na myśli to, że szkoda, że ​​nie można po prostu użyć Qzamiast'"
Oliver,
4

TeX, 54 32 bajty

Do wyzwania wymiany cytatów TeX potrzebujemy oczywiście również wersji TeX!

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

... jest łańcuchem wejściowym, więc nie dodaje się do liczby bajtów.

Siracusa
źródło
1
Dlaczego nie prościej \def"#1"{``#1''} ? (lub \long\defjeśli oczekujesz, że cytat przekroczy granicę akapitu)
Phelype Oleinik
1
Z oczywistego powodu, że o tym nie myślałem :-)
Siracusa
2

Węgiel , 23 bajty

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

Wypróbuj online! Link jest do pełnej wersji kodu. Zawiera 8 bajtów, aby uniknąć kłopotliwego formatu wejściowego. Wyjaśnienie:

WS⊞υι

Zbieraj linie wejściowe, aż do osiągnięcia pustej linii.

⪫υ¶¦

Dołącz do linii na znakach nowej linii.

⪪..."

Podziel dane wejściowe na cytaty.

⭆...

Zamapuj każdą część i połącz wyniki z drukiem niejawnym.

⎇κ...ι

Pozostaw pierwszą część bez zmian.

⁺ײ§'`κι

Przedrostek odpowiedniej wyceny, podwójny.

Neil
źródło
Czekałem na rozwiązanie na węgiel drzewny. Ładny!
Wysoce radioaktywny
2

R , 40 bajtów

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

Wypróbuj online!

Odczytuje ciąg wejściowy, oddzielając je dla każdego " , dając wektor ciągów znaków. Następnie wkleja te struny, naprzemiennie między podwójnymi wsteczne i podwójne apostrofy jako separatory, recykling je w razie potrzeby.

Ktoś prawdopodobnie opublikuje krótszą odpowiedź R na podstawie wyrażenia regularnego ... Myślę jednak, że ta odpowiedź jest bardziej typowa dla R.

Objaśnienie scan(,"",,,'"',"")części:

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
źródło
2

Perl 6 , 23 bajtów

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

Wypróbuj online!

Cholera, oczywiste rozwiązanie jest krótsze. Zastępuje każdą cytowaną część wersją odpowiednimi cytatami.

Perl 6 , 24 bajtów

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

Wypróbuj online!

Zastępuje każdy podwójny cudzysłów na przemian między dwoma zestawami znaków.

Jo King
źródło
1

Siatkówka , 15 bajtów

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

Wypróbuj online! Usuwa nudną odpowiedź Retina 0.8.2 o 1 bajt. Wyjaśnienie:

"
""

Zduplikuj wszystkie cytaty.

Y`"`\`\`''

Cyklicznie zamieniaj cudzysłowy na pary odwrotnych znaków i pojedyncze cudzysłowy.

Nudna 16-bajtowa odpowiedź Retina 0.8.2 za kompletność:

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

Wypróbuj online!

Neil
źródło
1

C (gcc) , 69 68 bajtów

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

Wypróbuj online!

Jeden bajt wygolony przez @ceilingcat!

G. Sliepen
źródło
1

Labirynt , (43?) 53 bajtów

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

Wypróbuj online!

Golfowa wersja tego, znacznie prostszego, 92-bajtowego programu:

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

Jeśli nie musimy obsługiwać danych wejściowych zawierających bajt zerowy, to 43 bajty :

39}9
@  6
`,""
`  "
: ."=..
_ ;   "
34-;;::
Jonathan Allan
źródło
1

(GNU) sed , 38 33 30 bajtów

-4 przez usunięcie -nflagi i niejawne drukowanie n, -1 przez ponowne użycie poprzednich /expression/, dzięki @Cowsquack. -3 przy użyciu niejawnej gałęzi do końca.

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

Wypróbuj online! Wypróbuj online! Wypróbuj online!

Kilka dość podstawowych skoków z wytwórni. Prawdopodobnie można to zagrać w bajt lub dwa.

: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. 
Funkcja Gamma
źródło
1
Btw zwykle używane flagi są określone w nagłówku. Możesz zagrać w bajt za pomocą codegolf.stackexchange.com/a/167295/41805 , a ponadto można usunąć część logiki rozgałęziania. Dzięki temu rozwiązanie działające bez -nflagi powinno zaoszczędzić nieco więcej. (I oczywiście istnieje trywialne sed -zrozwiązanie, które, jak zakładam, umyślnie
unikałeś
Dobra, wróciłem na man sedchwilę i doszedłem do 30. Nie krępuj się i daj mi znać, co przegapiłem, masz doświadczenie w golfa na tym języku. (Och, -zjest dla mnie nowy, ale zgadzam się. Zostanę bez niego.)
GammaFunction
Dobrze zrobione, zawsze cieszę się, że widzę odpowiedź sed
Kritixi Lithos
1

05AB1E , 15 bajtów

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

Wypróbuj online!

Brak Wyrażenia regularne w 05AB1E, więc podzielony na ", zrób listę przemiennego ``i '', następnie przeplot dwóch.

Ponury
źródło
1
Ok, wygląda na to, że nie muszę poprawiać i przywracać mojej odpowiedzi. ;)
Kevin Cruijssen
1

Haskell , 67 60 58 bajtów

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

Wypróbuj online!

Odpowiednią funkcją jest (#0).

Ponieważ początkowo myślałem, że pytanie wymaga również od nas konwersji pojedynczych cudzysłowów, tutaj jest wersja, która obsługuje oba:

Haskell , 125 bajtów

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

Wypróbuj online!

Post Rock Garf Hunter
źródło
"\""powinny być "''"(dwa apostrofy)
siracusa
@siracusa Dzięki, założyłem, że ponieważ możesz używać "w tekscie, możesz go użyć tutaj.
Post Rock Garf Hunter
1

QuadR , 14 bajtów

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

Wypróbuj online!

Proste wyszukiwanie / zamiana za pomocą otoki @ Adám dla aplikacji APL firmy Dyalog ⎕R .

W jaki sposób:

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

Czerwony , 79 bajtów

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

Wypróbuj online!

Galen Iwanow
źródło
0

Galaretka , 13 bajtów

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

Pełny program.

Wypróbuj online!

W jaki sposób?

ṣ”"µ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
źródło
0

Lua , 36 bajtów

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

Wypróbuj online!

Wow, tylko dwa znaki dłuższe niż rozwiązanie js.

val mówi Przywróć Monikę
źródło
0

Stax , 11 bajtów

û╩↕H£ñ╟Uzay

Uruchom i debuguj

Procedura:

  1. Weź wszystkie dane wejściowe, nowe linie i wszystko.
  2. Regex zamień '"'na blok, który wytwarza naprzemienne wyjścia z par backticks i foreticks (?)
rekurencyjny
źródło
0

Java 8, 40 bajtów

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

Wypróbuj online.

Wyjaśnienie:

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

Wyjaśnienie 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
źródło
0

Wren , 91 bajtów

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

Wypróbuj online!

Wyjaśnienie

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
}
za'_'
źródło
0

GolfScript ,35 34 bajty

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

Wypróbuj online!

Wyjaśnienie

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
za'_'
źródło