Neues Site Design!

57

Sofern Sie kein Benutzer-Skript haben, das das Design der Site ändert (oder auch wenn ja), sollten Sie bemerkt haben, dass wir unser Site-Design haben!

(Es ist jetzt November)

Um dies zu feiern, lassen Sie uns ein Programm erstellen, das dieses Design rückwirkend anwendet (natürlich stark vereinfacht)!

Die wichtigsten Änderungen sind also:

  • Unser neuer Name lautet jetzt Code Golf und Coding Challenges
  • Unsere Seite hat nicht mehr die Standardfarbe Blau, sondern ein schönes Dunkelgrün

Wenn Sie also eine Zeichenfolge angeben, ändern Sie Folgendes:

  • PPCG zu CGCC
  • Programming Puzzles {non-whitespace} Code Golfzu Code Golf {same-thing} Coding Challenges(zum Beispiel Programming Puzzles + Code Golf, and Code Golfund & Code Golfalle geändert werden würden Code Golf + Coding Challenges, and Coding Challengesund & Coding Challenges.
  • #abczu #acb(Blau gegen Grün tauschen und umgekehrt - ignorieren Sie einfach die Tatsache, dass Grün logischerweise nicht zu Blau werden sollte, aber ich möchte die Farbverschiebung nicht erschweren)
  • #abcdefbis #abefcd(wie oben)

Beachten Sie, dass Sie für die Farbwechsel jede hexadezimale Ziffer von 0-9bis akzeptieren sollten a-f. Sie können wählen, welche Hexadezimalzahl erforderlich ist, diese muss jedoch konsistent sein und von Eingabe zu Ausgabe identisch sein.

Bei Ihren Ersetzungen kann zwischen Groß- und Kleinschreibung unterschieden werden. Falls nicht, geben Sie bitte an, wie die Ausgabe funktioniert.

Die Ersetzungen sollten nur erfolgen, wenn die Zeichenfolge von Wortgrenzen umgeben ist (einschließlich des Anfangs von #). Mit anderen Worten, jede der angegebenen Ersetzungen sollte nur erfolgen, wenn sich die Übereinstimmung am Rand der Zeichenfolge befindet oder von nicht alphanumerischen Zeichen (auf beiden Seiten) begrenzt wird.

Es gelten Standardlücken. Dies ist eine Code-Golf-Herausforderung, also gewinnt der kürzeste Code!

Beispiele

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

(Für den letzten Testfall muss beachtet werden, dass die übersetzte Zeichenfolge erneut übersetzt werden kann, die Transformation jedoch genau einmal angewendet werden muss. )

Wichtiges Update

(Danke @tsh)

Die Programming Puzzles ... Code GolfErsetzungsregel kann die anderen Regeln enthalten ( Programming Puzzles PPCG Code Golfist gültig). In diesem Fall können Sie wählen, ob die Regeln angewendet werden sollen oder nicht, sie müssen jedoch deterministisch sein. Ich verlange nicht, dass Sie konsistent sind PPCGund #...weil die Antworten die Regeln in meiner Listenreihenfolge zu implementieren scheinen, was zu Inkonsistenzen führt. Dies ist nur eine Klarstellung; Ich glaube, dass alle aktuellen Antworten gültig bleiben.

HyperNeutrino
quelle
3
Sollten die Ersetzungen nur angewendet werden, wenn die Teilzeichenfolgen oder überall Wortgrenzen aufweisen?
Erik der Outgolfer
1
@EriktheOutgolfer Guter Fang; sollte Wortgrenzen haben. Ich werde das spezifizieren; Vielen Dank.
HyperNeutrino
Definiere "Wortgrenze" für ein #; Regex-Implementierungen berücksichtigen im Allgemeinen kein #, um ein Wort zu beginnen.
Tomsmeding
1
Oh, ich schätze, es Programming Puzzles and no substitution Code Golfkönnte auch jemand
erwischt werden
1
Vorgeschlagene Testfälle Code Golf and Programming Puzzlesund Programming Puzzles and Programming Puzzles and Code Golf. @Veskah Hmm, und ich denke, dass der letzte vorgeschlagene Testfall in meiner 05AB1E-Antwort fehlschlägt, da ich keine Regex habe ..>. <Zurück zum Zeichenbrett ..
Kevin Cruijssen

Antworten:

12

Ruby -p , 165 164 159 Bytes

Es war der sed-Antwort sehr ähnlich, aber es missbraucht Rubys String-Interpolation, um die Hex-Gruppenübereinstimmung ([\da-f]{1,2})innerhalb des dritten regulären Ausdrucks dreimal zu duplizieren, anstatt das Ganze noch einmal wiederholen zu müssen.

  • -1 Byte von @ randomdude999.
  • -5 Byte aus der Nutzung der @ Xcali Perl-Lösung
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'}

Probieren Sie es online!

Wert Tinte
quelle
Wird {1,2}break nicht mit Hex-Eingängen der Länge 4 oder 5 verwendet, z #aabbc. Bearbeiten: dies ist der Fall (dieses Beispiel sollte nicht ersetzt werden, da es keine gültige Hex-Farbe ist).
randomdude999
Schlägt in diesem Fall fehl ( -ist kein alphanumerisches Zeichen).
Erik der Outgolfer
@ randomdude999 ja, guter Fang. Fügte einen Scheck dafür hinzu.
Wert Tinte
@EriktheOutgolfer ja, ich denke. "Wortgrenzen" mit dem #ist ein bisschen mehrdeutig, da /\b/es nicht neben einem anderen nicht-alphanumerischen Zeichen registriert wird, aber ich habe die Änderung trotzdem ohne Byteänderung (Ersetzen \Sdurch \w) vorgenommen
Value Ink
Kannst du dein nicht (?<!\w)durch mein (^|\W)für 1 Zeichen ersetzen ?
Tomsmeding
9

C ++ (gcc) , 270 285 283 Bytes

Vielen Dank an Neil , der auf einen Fehler hingewiesen hat.

-2 Bytes dank ceilingcat.

#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;};

Probieren Sie es online!

Gastropner
quelle
3
Scheint zu mangeln #fadeund #facedwas sollte es nicht.
Neil,
6

Retina 0.8.2 , 153 130 Bytes

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

Probieren Sie es online! Link enthält Testfälle. Bei allen Ersetzungen wird zwischen Groß- und Kleinschreibung unterschieden. Es wird davon ausgegangen, dass normale Regex-Wortzeichen zulässig sind, sodass \B#nur #s übereinstimmen , die keinem Wortzeichen folgen. Bearbeiten: 22 Bytes dank @tsh gespeichert.

Neil
quelle
Versuchen \B#(?=([\da-f]{3}){1,2}\b)(.+?)(..??)(..??)\b?
Dienstag,
5

GNU sed -E, 198 Zeichen

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

Lauffähig mit zB sed -E 'the above'; Zeilenumbrüche können entweder wörtlich aufgenommen oder durch ersetzt werden, ;wenn Sie dies wünschen. Beide arbeiten.

@HyperNeutrino komm, diese Wortgrenzenregel ist doof. Schauen Sie, was ich in dem #Fall zu tun hatte .

Ja, ich habe es nicht einmal versucht. : P

+9 von @Value Ink

tomsmeding
quelle
3
Flags sind nicht mehr in der Anzahl der Bytes enthalten, daher können Sie das zusätzliche Byte herausnehmen und es -Estattdessen "GNU sed " nennen.
Wert Tinte
@ValueInk Whaaaaat? Ich habe offenbar zu lange keinen Kontakt zu dieser Community, um das nicht zu bemerken. Ich denke es ist eine gute Regel. Danke auch für die Erwähnung.
Tomsmeding
nicht sed‚s Regex Matching ermöglichen Verwendung \dfür als Abkürzung 0-9? könnte Ihnen ganze 6 Bytes sparen
randomdude999
Außerdem ist mir gerade aufgefallen, dass Sie für den zweiten Testfall "Programming Puzzles or Coding Challenges" anstelle der erwarteten "Code Golf or Coding Challenges" zurückgeben.
Value Ink
@ randomdude999 Die Manpage re_format (7) auf meinem Mac scheint darauf hinzudeuten, dass sed \ d unterstützen sollte, aber anscheinend nicht. ¯ \ _ (ツ) _ / ¯
Tomsmeding
4

05AB1E , 123 109 105 110 114 Bytes

ž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 Bytes zur Korrektur von Testfällen wie Programming Puzzles and no substitution Code Golfund Programming Puzzles and Programming Puzzles and Code Golf.
+4 Bytes zum color-#00fBeheben von Testfällen (Farben mit etwas anderem als Leerzeichen / Zeilenumbrüchen). Vielen Dank an @Grimy , der mich darauf aufmerksam gemacht hat.

Groß- und Kleinschreibung beachten. Hexadezimalwerte werden in Kleinbuchstaben angegeben abcdef. Programming Puzzles ... Code Golfist in Titelbuchstaben; PPCGist in Großbuchstaben geschrieben.

Probieren Sie es online aus.

Auf jeden Fall nicht die richtige Sprache für den Job. Das Nachahmen von Wortgrenzen und Ersetzen Programming Puzzles \S+ Code Golf, aber nicht Code Golf \S+ Programming Puzzlesoder Programming Puzzles \S+ \S+ Code Golfohne Regex, ist ziemlich schwierig (kurz zu machen).>.>

Erläuterung:

ž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)

Sehen Sie diese 05AB1E Spitze von mir (Abschnitt Wie das Wörterbuch benutzen? ) Zu verstehen , warum ”–±ÇÀ”ist "Programming Puzzles"; ”ƒËŠˆ”ist "Code Golf"; und ”Âïªï”ist "Coding Challenges".

Kevin Cruijssen
quelle
3

Python 2 , 240 Bytes

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))))

Probieren Sie es online!

Erik der Outgolfer
quelle
3

JavaScript (Node.js) , 174 Byte

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

Probieren Sie es online!

tsh
quelle
Der Testfall #abcdeschlägt fehl, da das Regex-Qualifikationsmerkmal {3,6}zwischen 3 und 6 Zeichen anstelle von 3 oder 6 Zeichen enthält, für die Sie sich entschieden haben.
Wert Tinte
@ ValueInk schönen Fang. fest mit +5 Bytes.
Dienstag,
Könnte
2

Pyth , 177 173 162 142 Bytes

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

Hier ist eine Version ohne Pyths String-Komprimierungsmechanismen (auch bekannt als sicheres Kopieren und Einfügen):

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

Probieren Sie es online!

Das endete wirklich lange, weil ich versuchte, mit den Regexen so pedantisch wie möglich umzugehen. Ich habe versucht, alle möglichen Zeichenfolgen zu komprimieren, aber die meisten wurden entweder nicht kleiner oder konnten nicht richtig in TIO eingefügt werden.

Erläuterung:

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 dank einer besseren Regex von Value Ink's Ruby-Antwort
  • -20 dank der Verwendung einer Schleife für beide Hex-Ersetzungen, inspiriert von den Ruby- und Perl-Antworten
randomdude999
quelle
1

Perl 5 -p , 152 145 Bytes

@ValueInk speichert 7 Bytes

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}

Probieren Sie es online!

Xcali
quelle
( \S+ )(Code Golf)\b/$2$1CodingSpart 2 Bytes. Auch der letzte reguläre Ausdruck kann mit einem \bstatt(?=\s|$)
Value Ink
Ich habe an dem ersten gearbeitet, als Sie diesen Kommentar geschrieben haben. Ich habe die andere Änderung vorgenommen, um einige Bytes zu speichern. Vielen Dank!
Xcali
Das \ssollte \Wstattdessen sein, andernfalls schlägt dieser Fall fehl ( -ist ein nicht alphanumerisches Zeichen, daher sollte die Ersetzung angewendet werden).
Grimmy
137
Grimmy
0

Java 8, 192 Bytes

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 of @Neils Retina - Antwort , also stelle sicher, dass du ihn positiv bewertest!

Probieren Sie es online aus.

Kevin Cruijssen
quelle