Nowy projekt strony!

57

O ile nie masz skryptu użytkownika, który modyfikuje projekt strony (a nawet jeśli tak, to powinieneś zauważyć, że mamy projekt strony!

(Teraz jest listopad)

Aby świętować, stwórzmy program, który zastosuje ten projekt z mocą wsteczną (oczywiście uproszczony)!

Najważniejsze zmiany to:

  • nasza nowa nazwa to teraz Code Golf and Coding Challenges
  • nasza strona nie jest już domyślnym kolorem niebieskim, a zamiast tego jest ładną ciemnozieloną

Tak więc, biorąc pod uwagę ciąg, zmień:

  • PPCG do CGCC
  • Programming Puzzles {non-whitespace} Code Golfdo Code Golf {same-thing} Coding Challenges(na przykład Programming Puzzles + Code Golf, and Code Golfi & Code Golfto wszystko zmieni się Code Golf + Coding Challenges, and Coding Challengesi & Coding Challenges.
  • #abcdo #acb(zamień kolor niebieski na zielony i odwrotnie - po prostu zignoruj ​​fakt, że zieleń nie powinna logicznie stać się niebieska, ale nie chcę komplikować zmiany koloru)
  • #abcdefdo #abefcd(tak samo jak powyżej)

Pamiętaj, że w przypadku zamiany kolorów należy zaakceptować dowolną cyfrę szesnastkową od 0-9do a-f. Możesz wybrać, jaki przypadek cyfry szesnastkowej będzie wymagany, ale musi być spójny i taki sam od wejścia do wyjścia.

W podstawieniach może być rozróżniana wielkość liter, a jeśli nie, proszę określić, jak działa wyjście.

Podstawienia powinny mieć miejsce tylko wtedy, gdy ciąg znaków jest otoczony granicami słów (w tym na początku #). Innymi słowy, każde z podanych podstawień powinno wystąpić tylko wtedy, gdy dopasowanie znajduje się na krawędzi łańcucha lub jest otoczone znakami niealfanumerycznymi (po obu stronach).

Obowiązują standardowe luki. To wyzwanie dla golfa, więc wygrywa najkrótszy kod!

Przykłady

PPCG -> CGCC
Programming Puzzles or Code Golf -> Code Golf or Coding Challenges
PPCG stands for Programming Puzzles and Code Golf and its site color is #abf -> CGCC stands for Code Golf and Coding Challenges and its site color is #afb
The color #00f is much more intense than #5568ed -> The color #0f0 is much more intense than #55ed68
Programming Puzzles and No Substitution -> Programming Puzzles and No Substitution
No Substitution and Code Golf -> No Substitution and Code Golf
Programming Puzzles and no substitution Code Golf -> Programming Puzzles and no substitution Code Golf
Code Golf and Programming Puzzles -> Code Golf and Programming Puzzles
Programming Puzzles and Programming Puzzles and Code Golf -> Programming Puzzles and Code Golf and Coding Challenges

(w ostatnim przypadku testowym należy zauważyć, że przetłumaczony ciąg może zostać ponownie przetłumaczony, ale transformacja musi zostać zastosowana dokładnie raz)

Ważna aktualizacja

(Dzięki @tsh)

Programming Puzzles ... Code GolfZasada substytucji mogą zawierać inne reguły wewnątrz niego ( Programming Puzzles PPCG Code Golfto ważne). W takim przypadku możesz wybrać, czy reguły mają być stosowane, ale musi to być deterministyczne. Nie wymagam, abyś był spójny między, PPCGa #...ponieważ odpowiedzi wydają się implementować reguły na mojej liście, co powoduje niespójności. To tylko wyjaśnienie; Uważam, że wszystkie aktualne odpowiedzi pozostają aktualne.

HyperNeutrino
źródło
3
Czy należy stosować zamiany tylko wtedy, gdy istnieją granice słów wokół podciągów lub wszędzie?
Erik the Outgolfer
1
@EriktheOutgolfer Good catch; powinny mieć granice słów. Sprecyzuję to; dzięki.
HyperNeutrino
Zdefiniuj „granicę słów” dla #; Implementacje wyrażeń regularnych generalnie nie biorą pod uwagę #, aby rozpocząć słowo.
tomsmeding
1
Och, chyba Programming Puzzles and no substitution Code Golfteż kogoś złapię (nawet jeśli wszyscy używają tego samego ważnego wyrażenia regularnego)
Veskah
1
Sugerowane przypadki testowe Code Golf and Programming Puzzlesi Programming Puzzles and Programming Puzzles and Code Golf. @Veskah Hmm i myślę, że ostatni sugerowany przypadek testowy zawodzi w mojej odpowiedzi 05AB1E, ponieważ nie mam wyrażenia regularnego ..>. <Wróć do deski kreślarskiej ..
Kevin Cruijssen

Odpowiedzi:

12

Rubin -p , 165 164 159 bajtów

Okazało się, że jest bardzo podobny do odpowiedzi sed, ale nadużywa interpolacji ciągów Ruby, aby ([\da-f]{1,2})trzykrotnie powielić dopasowanie grupy heksów w trzecim wyrażeniu regularnym, zamiast konieczności powtarzania całej tej sprawy.

  • -1 bajt z @ randomdude999.
  • -5 bajtów od wykorzystania rozwiązania Perla @ Xcali
gsub /\bPPCG\b/,"CGCC"
gsub /\bProgramming Puzzles( \S+ )(Code Golf)\b/,'\2\1Coding Challenges'
[1,2].map{|i|gsub /(^|\s)#\K#{'([\da-f]{%d})'%i*3}\b/,'\2\4\3'}

Wypróbuj online!

Wartość tuszu
źródło
Czy nie używa się {1,2}przerwy z wejściami szesnastkowymi o długości 4 lub 5, np. #aabbc? Edycja: tak (tego przykładu nie należy zastępować, ponieważ nie jest prawidłowym kolorem szesnastkowym).
randomdude999
Nie działa w tym przypadku ( -jest to znak niealfanumeryczny).
Erik the Outgolfer
@ randomdude999 tak, dobry połów. Dodano na to czek.
Wartość tuszu
@EriktheOutgolfer tak, tak myślę. „Granice słowo” z #jest nieco dwuznaczny, ponieważ /\b/nie ma w niej zarejestrować obok innego niealfanumeryczne, ale zrobiłem zmianę jakikolwiek bez zmian bajtów (zastępującego \Sz \w)
Value Ink
Czy nie możesz zamienić swojego na (?<!\w)mój (^|\W)za 1 znak?
tomsmeding
9

C ++ (gcc) , 270 285 283 bajtów

Dzięki Neilowi za wskazanie błędu.

-2 bajty dzięki pułapkowi cat.

#import<regex>
#import<string>
auto f=[](auto s){typeof(s)R[][2]{"bPPCG","CGCC","bProgramming Puzzles( \\S+ )(Code Golf)","$2$1Coding Challenges","B#(?=([\\da-f]{3}){1,2}\\b)(.+?)(..??)(..??)","#$2$4$3"};for(auto r:R)s=std::regex_replace(s,std::regex('\\'+*r+"\\b"),r[1]);return s;};

Wypróbuj online!

gastropner
źródło
3
Wydaje się, że to magia, #fadea #facednie powinna.
Neil
6

Retina 0.8.2 , 153 130 bajtów

\bPPCG\b
CGCC
\bProgramming Puzzles( \S+ )(Code Golf)\b
$2$1Coding Challenges
\B(#(?=([\da-f]{3}){1,2}\b).+?)(..??)(..??)\b
$1$4$3

Wypróbuj online! Link zawiera przypadki testowe. Wszystkie podstawienia uwzględniają wielkość liter. Zakłada, że ​​normalne znaki wyrażenia regularnego są dopuszczalne, więc \B#pasują tylko #do znaków, które nie następują po wyrazie. Edycja: Zapisano 22 bajtów dzięki @tsh.

Neil
źródło
Spróbować \B#(?=([\da-f]{3}){1,2}\b)(.+?)(..??)(..??)\b?
tsh
5

GNU sed -E , 198 znaków

s/\bPPCG\b/CGCC/g
s/\bProgramming Puzzles( \S* Cod)e Golf\b/Code Golf\1ing Challenges/g
s/((^|\W)#[0-9a-f])([0-9a-f])([0-9a-f])\b/\1\4\3/g
s/((^|\W)#[0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})\b/\1\4\3/g

Uruchamiany przy użyciu np . sed -E 'the above'; znaki nowej linii mogą być dołączone dosłownie lub zastąpione przez, ;jeśli chcesz. Oba działają.

@HyperNeutrino, chodź, że zasada granicy słów jest głupia. Zobacz, co musiałem zrobić w #sprawie.

Tak, nawet nie próbowałem. : P

+9 przez @Value Ink

Tomsmeding
źródło
3
Flagi nie są już uwzględniane w liczeniu bajtów, więc możesz wyjąć dodatkowy bajt i nazwać go „GNU sed -E”.
Wartość tuszu
@ValueInk Whaaaaat? Najwyraźniej zbyt długo pozostawałem w kontakcie z tą społecznością, aby tego nie zauważyć. Myślę jednak, że to dobra zasada. Dziękuję również za wzmiankę.
tomsmeding
czy seddopasowanie wyrażenia regularnego nie pozwala na użycie \dskrótu 0-9? może zaoszczędzić ci całe 6 bajtów
randomdude999
Zauważyłem też, że zwracasz „Programowanie łamigłówek lub wyzwania kodowania” dla drugiego przypadku testowego zamiast oczekiwanego „Kodowania lub wyzwań kodowania”.
Wartość tuszu
@ randomdude999 Strona podręcznika re_format (7) na moim Macu wydaje się sugerować, że sed powinien obsługiwać \ d, ale najwyraźniej tak nie jest. ¯ \ _ (ツ) _ / ¯
tomsmeding
4

Stax , 85 bajtów

ì▀¼FΣ¼≤C╛╓ÄydîNû►┘Δ▲Bd♫|α╒oñFτ▒t!↑▌╩┘♦pMc6Hèé▄·│╝∙↔¥^4b5╠·9█&╨^╨♂═î£ε■屫\┴J₧å♠Å≡z╜û♀

Uruchom i debuguj

rekurencyjny
źródło
4

05AB1E , 123 109 105 110 114 bajtów

žKISå_Å¡JεÐć'#QsžhA6£«sSåP*i3äćsRJ«ë"PPCG"Qi"CGCC"]J”–±ÇÀ”DU¡ćsε”ƒËŠˆ”©¡DVćDÁ2ôεðå}ćs_P*YyÊP*i”Âïªï”«s®ý«®ìëyXì]J«

+5 bajtów naprawiających przypadki testowe, takie jak Programming Puzzles and no substitution Code Golfi Programming Puzzles and Programming Puzzles and Code Golf.
+4 bajty naprawiające przypadki testowe, takie jak color-#00f(kolory z czymś poza spacjami / znakami otaczającymi je). Dzięki @Grimy za zwrócenie mojej uwagi na to.

Z uwzględnieniem wielkości liter. Wartości szesnastkowe są pisane małymi literami abcdef; Programming Puzzles ... Code Golfjest w tytule; PPCGjest napisane wielkimi literami.

Wypróbuj online.

Zdecydowanie nieodpowiedni język do pracy. Naśladowanie granic słów i zastępowanie Programming Puzzles \S+ Code Golf, ale nie Code Golf \S+ Programming Puzzleslub Programming Puzzles \S+ \S+ Code Golfbez wyrażeń regularnych jest dość trudne (krótko) ..>.>

Wyjaśnienie:

žK                # Push "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
                  # (NOTE: if '_' also count as word boundary, use `žj` instead)
  IS              # Push the input as a list of characters
    å_            # Check for each character if they are NOT in the string
      Å¡          # Split the (implicit) input on truthy values
        J         # Join each inner character list to a string again
ε                 # Map each word to:
 Ð                #    Triplicate the word
  ć               #    Extract head; push remainder and head separately to the stack
   '#Q           '#    Check if the head equals "#"
    žh            #    Push string "0123456789"
      A6£«        #    Append the first 6 letters of the alphabet: "0123456789abcdef"
   s      sSåP    #    Check if the characters of the remainder are all in this string
   *i             #    If both are truthy:
     3ä           #     Split the 'word' into three parts
                  #      i.e. "#ab12cd" → ["#ab","12","cd"]
       ćs         #     Extract head, and swap
         R        #     Reverse the remainder list
          J«      #     Join them together, and merge them to the head again
    ë"PPCG"Qi     #    Else-if the word is "PPCG":
     "CGCC"       #     Push "CGCC"
                  #    (Implicit else:
                  #      Use the word that's still there from the initial triplicate)
]                 # Close all if statements and the nested map
 J                # Join the mapped words together again
”–±ÇÀ”            # Push dictionary string "Programming Puzzles"
      DU          # Save a copy in variable `X`
        ¡         # Split the string by this
         ćs       # Extract head & swap; pushing head and remainder to the stack
ε                 # Map each substring `y` in the remainder to:
 ”ƒËŠˆ”           #  Push dictionary string "Code Golf"
       ©          #  Save it in variable `®` (without popping)
        ¡         #  Split the current substring we're mapping by it
         DV       #  Save a copy of this list in variable `Y`
           ćD     #  Extract the head and duplicate
                  #  (so the stack is: remainder, head, head)
 Á                #  Rotate the characters in the head-string once towards the right
  2ô              #  Split it into parts of size 2
    εðå}          #  Check in each part if it contains a space
        ćs        #  Extract head and swap again
          _       #  Check if all values are 0
           P      #  And check if this is truthy for all
          *       #  And check if this is truthy, as well as the head
                  #  (this means the current string has a leading and trailing space,
                  #   and no other spaces)
 YyÊP             #   Check that none of the susbtrings in variable `Y`
                  #   are equal to the current substring `y`
 *i               #   If both checks above are truthy:
   ”Âïªï”«        #    Prepend "Coding Challenges" to the duplicated head
          s®ý     #    Join the remainder by variable `®` ("Code Golf")
             «    #    Append it
              ®ì  #    And prepend an additional variable `®` ("Code Golf")
  ë               #   Else:
   y              #    Simply keep the substring `y` as is
    Xì            #    And prepend variable `X` ("Programming Puzzles") 
                  #    since we've split by it
]                 # Close all if-else statements and the map
 J                # Join the mapped substrings together to a single string
  «               # And append it to the initially extracted head
                  # (then output the resulting string implicitly as result)

Zobacz tę końcówkę 05AB1E kopalni (sekcja Jak korzystać ze słownika? ) , Aby zrozumieć, dlaczego ”–±ÇÀ”jest "Programming Puzzles"; ”ƒËŠˆ”jest "Code Golf"; i ”Âïªï”jest "Coding Challenges".

Kevin Cruijssen
źródło
3

Python 2 , 240 bajtów

import re
lambda x,s=re.sub,b='(?<!\w)',e='(?!\w)',h='([\da-f]',t=r'#\1\3\2':s(b+'#%s{2})'%h+h+'{2})%s{2})'%h+e,t,s(b+'#%s)'%h+h+')%s)'%h+e,t,s(b+'Programming Puzzles( \S+ Cod)e Golf'+e,r'Code Golf\1ing Challenges',s(b+'PPCG'+e,'CGCC',x))))

Wypróbuj online!

Erik the Outgolfer
źródło
3

JavaScript (Node.js) , 174 bajty

s=>s[R='replace'](/\bPPCG\b/g,'CGCC')[R](/\bProgramming Puzzles( \S+ )(Code Golf)\b/g,'$2$1Coding Challenges')[R](/\B#(?=([\da-f]{3}){1,2}\b)(.+?)(..??)(..??)\b/ig,'#$2$4$3')

Wypróbuj online!

tsh
źródło
Nie udaje się w przypadku testowym, #abcdeponieważ kwalifikator wyrażenia regularnego {3,6}dopasowuje od 3 do 6 znaków, zamiast 3 lub 6, które, jak zakładam, zamierzałeś.
Wartość tuszu
@ValueInk nice catch. naprawiono za pomocą +5 bajtów.
tsh
Może być krótszy, aby użyć funkcji zamiany w długim wyrażeniu regularnym
Downgoat
2

Pyth , 177 173 162 142 bajtów

J::jb.z"\\bPPCG\\b""CGCC"." z¶NZI°Pÿúd(MÜ_BöIkxnqä'u)"." s6#~ÍN³=<nñu/GÎg"VS2~:J%"(^|\W)#%s\\b"*3%"([\da-f]{%d})"N$r"\1#\2\4\3"$)J

Oto wersja bez mechanizmów kompresji ciągów Pytha (inaczej bezpieczne kopiowanie-wklejanie):

J::jb.z"\\bPPCG\\b""CGCC""\\bProgramming Puzzles( \S+ )(Code Golf)\\b""\\2\\1Coding Challenges"VS2~:J%"(^|\W)#%s\\b"*3%"([\da-f]{%d})"N$r"\1#\2\4\3"$)J

Wypróbuj online!

To skończyło się naprawdę długo, ponieważ starałem się być tak pedantyczny, jak to możliwe przy wyrażeniach regularnych. Próbowałem skompresować każdy możliwy ciąg, ale większość z nich albo się nie zmniejszyła, albo nie można było poprawnie wkleić jej do TIO.

Wyjaśnienie:

J::                      # definition of J to the following 2 regex replacements
   jb.z                  # input to first regex replacement: all input lines joined together
   "\\bPPCG\\b"          # first regex
   "CGCC"                # first replacement
   ."<compressed>"       # second regex: "\\bProgramming Puzzles( \S+ )(Code Golf)\\b"
   ."<compressed>"       # second replacement: "\\2\\1Coding Challenges"
VS2                      # loop twice, N = 1 or 2
  ~:J                    # some weird assignment: J = regex replace in J (would be J := (regex, replacement) if : was python's regex replace operator)
    %                    # third regex: string format
     "(^|\W)#%s\\b"      # format string
     *3                  # repeat 3 times:
       %"([\da-f]{%d})"N # string format, replace %d with N (the loop counter)
    $r"\1#\2\4\3"$       # third replacement: uses python raw literals because it's shorter than escaping the backslashes
    )                    # end for loop
J                        # print J
  • -11 dzięki lepszemu wyrażeniu regularnemu z rubinowej odpowiedzi Value Ink
  • -20 dzięki użyciu pętli dla obu zamienników heksów, zainspirowanych odpowiedziami Ruby i Perl
randomdude999
źródło
1

Perl 5 -p , 152 145 bajtów

@ValueInk zapisuje 7 bajtów

s/\bPPCG\b/CGCC/g;s/\bProgramming Puzzles( \S+ )(Code Golf)\b/$2$1Coding Challenges/g;for$a(1,2){$p="([a-f0-9]{$a})"x3;s/(^|\s)#\K$p\b/$2$4$3/gi}

Wypróbuj online!

Xcali
źródło
( \S+ )(Code Golf)\b/$2$1Codingoszczędza 2 bajty. Ostatni regex może się kończyć tylko \bzamiast(?=\s|$)
Value Ink
Pracowałem nad tym pierwszym, kiedy pisałeś ten komentarz. Wprowadziłem drugą zmianę, aby zaoszczędzić trochę bajtów. Dzięki!
Xcali
Że \spowinno być \Wzamiast tego, w przeciwnym razie to nie ten przypadek ( -jest znak zakaz alfanumeryczny, więc zastąpienie powinna być stosowana).
Grimmy,
137
Grimmy,
0

Java 8, 192 bajty

s->s.replaceAll("\\bPPCG\\b","CGCC").replaceAll("\\bProgramming Puzzles( \\S+ )(Code Golf)\\b","$2$1Coding Challenges").replaceAll("\\B(#(?=([0-9a-f]{3}){1,2}\\b).+?)(..??)(..??)\\b","$1$4$3")

Port odpowiedzi Retina @Neila , więc pamiętajcie o jego głosowaniu!

Wypróbuj online.

Kevin Cruijssen
źródło