Nouvelle conception du site!

57

Sauf si vous avez un script utilisateur qui modifie la conception du site (ou même si c'est le cas), vous devriez avoir remarqué que nous avons la conception de notre site!

(C'est novembre maintenant)

Alors, pour fêter ça, créons un programme qui applique ce design de manière rétroactive (trop simpliste, bien sûr)!

Donc, les changements les plus importants sont:

  • notre nouveau nom s'appelle désormais Code Golf et Défis de codage
  • notre site n'est plus la couleur bleue par défaut mais un beau vert foncé

Donc, étant donné une chaîne, changez:

  • PPCG à CGCC
  • Programming Puzzles {non-whitespace} Code Golfà Code Golf {same-thing} Coding Challenges(par exemple, Programming Puzzles + Code Golf, and Code Golfet & Code Golfseraient tous changé pour Code Golf + Coding Challenges, and Coding Challengeset & Coding Challenges.
  • #abcpour #acb(permutez le bleu au vert et vice versa - ignorez simplement le fait que le vert ne devrait pas logiquement devenir bleu mais je ne veux pas compliquer le changement de couleur)
  • #abcdefto #abefcd(idem ci-dessus)

Notez que pour les échanges de couleurs, vous devez accepter tout chiffre hexadécimal de 0-9à a-f. Vous pouvez choisir quelle casse de chiffre hexadécimal demander, mais il doit être cohérent et identique d’entrée à sortie.

Vos substitutions peuvent être sensibles à la casse. Dans le cas contraire, veuillez spécifier le fonctionnement de la sortie.

Les substitutions ne doivent avoir lieu que lorsque la chaîne est entourée de limites de mots (y compris le début de la #). En d'autres termes, chacune des substitutions spécifiées ne doit se produire que si la correspondance est au bord de la chaîne ou est bordée de caractères non alphanumériques (des deux côtés).

Les failles standard s'appliquent. Ceci est un défi de code-golf, alors le code le plus court gagne!

Exemples

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

(pour le dernier cas de test, il est important de noter que la chaîne traduite peut être traduite à nouveau mais que la transformation doit être appliquée exactement une fois)

Mise à jour importante

(Merci @tsh)

La Programming Puzzles ... Code Golfrègle de substitution peut inclure les autres règles à l'intérieur de celle-ci ( Programming Puzzles PPCG Code Golfest valide). Dans ce cas, vous pouvez choisir d'appliquer ou non les règles, mais cela doit être déterministe. Je n'exige pas que vous soyez cohérent entre PPCGet #...parce que les réponses semblent mettre en œuvre les règles dans l'ordre de ma liste, ce qui entraîne des incohérences. Ceci est juste une clarification; Je crois que toutes les réponses actuelles restent valables.

HyperNeutrino
la source
3
Ne devrait-on appliquer les substitutions que s'il y a des limites de mots autour des sous-chaînes ou partout?
Erik l'Outgolfer
1
@EriktheOutgolfer Bonne prise; devrait avoir des limites de mots. Je vais préciser cela; Merci.
HyperNeutrino
Définissez "limite de mot" pour un #; Les implémentations de regex ne considèrent généralement pas un # pour commencer un mot.
tomsmeding
1
Oh, je suppose que cela Programming Puzzles and no substitution Code Golfpourrait aussi attraper quelqu'un (même si tout le monde utilise la même expression rationnelle valide)
Veskah
1
Cas de test suggérés Code Golf and Programming Puzzleset Programming Puzzles and Programming Puzzles and Code Golf. @Veskah Hmm, et je pense que le dernier cas de test suggéré a échoué dans ma réponse 05AB1E, car je n’ai pas d’expression régulière ...>. <Retour à la planche à dessin ..
Kevin Cruijssen

Réponses:

12

Ruby -p , 165 164 159 octets

Cela a fini par être très similaire à la réponse sed, mais il abuse de l'interpolation de chaîne de Ruby pour dupliquer le groupe hexadécimal correspondant ([\da-f]{1,2})dans la troisième expression rationnelle trois fois au lieu d'avoir à répéter le tout.

  • -1 octet de @ randomdude999.
  • -5 octets résultant de l'utilisation de la solution Perl de @ 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'}

Essayez-le en ligne!

Valeur d'encre
la source
Ne pas utiliser de {1,2}pause avec des entrées hexagonales de longueur 4 ou 5, par exemple #aabbc? Edit: oui (cet exemple ne doit pas être remplacé car il ne s'agit pas d'une couleur hexadécimale valide).
randomdude999
Échec pour ce cas ( -est un caractère non alphanumérique).
Erik l'Outgolfer
@ randomdude999 ouais, bonne prise. Ajout d'un chèque pour cela.
Value Ink
@EriktheOutgolfer ouais, je suppose. "Word limits" avec le #est un peu ambigu, car /\b/je ne m'inscris pas à côté d'un autre non-alphanumérique, mais j'ai quand même fait le changement pour ne pas changer d'octet (le remplacer \Spar \w)
Value Ink
Ne pouvez-vous pas remplacer votre (?<!\w)avec mon (^|\W)pour 1 personnage?
tomsmeding
9

C ++ (gcc) , 270 285 283 octets

Merci à Neil pour avoir signalé un bug.

-2 octets grâce à 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;};

Essayez-le en ligne!

gastropner
la source
3
Semble se dégonfler #fadeet #facedqu’il ne devrait pas.
Neil
6

Retina 0.8.2 , 153 à 130 octets

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

Essayez-le en ligne! Le lien inclut des cas de test. Toutes les substitutions sont sensibles à la casse. Suppose que les caractères de mots regex normaux sont acceptables, de sorte que \B#seuls les #mots qui ne suivent pas un caractère de mot soient correspondants . Edit: 22 octets enregistrés grâce à @tsh.

Neil
la source
Essayez \B#(?=([\da-f]{3}){1,2}\b)(.+?)(..??)(..??)\b?
Tsh
5

GNU sed -E, 198 caractères

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

Runnable en utilisant par exemple sed -E 'the above'; les nouvelles lignes peuvent être soit incluses littéralement, soit remplacées par ;si vous le souhaitez. Les deux fonctionnent.

@HyperNeutrino viens sur cette règle de limite de mot est stupide. Regardez ce que je devais faire dans le #cas.

Oui, je n'ai même pas essayé. : P

+9 par @Value Ink

tomsmeding
la source
3
Les drapeaux ne sont plus inclus dans le nombre d'octets . Vous pouvez donc extraire l'octet supplémentaire et l'appeler à la place "GNU sed -E".
Valeur d'encre
@ValueInk Whaaaaat? J'ai apparemment été trop déconnecté de cette communauté pendant trop longtemps pour ne pas m'en rendre compte. Je pense que c'est une bonne règle cependant. Aussi, merci de mentionner.
tomsmeding
sedLa correspondance de regex ne permet-elle pas l'utilisation \dcomme raccourci pour 0-9? pourrait vous faire économiser 6 octets
randomdude999
De plus, je viens juste de remarquer que vous renvoyez "Puzzles de programmation ou défis de codage" pour le deuxième cas de test au lieu des "Défis de code ou de codage attendus".
Value Ink
@ randomdude999 La page de manuel re_format (7) de mon Mac semble suggérer que sed devrait prendre en charge \ d, mais apparemment, il ne le fait pas. ¯ \ _ (ツ) _ / ¯
tomsmeding
4

Stax , 85 octets

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

Exécuter et déboguer

récursif
la source
4

05AB1E , 123 109 105 110 114 octets

ž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 octets fixant des cas de test comme Programming Puzzles and no substitution Code Golfet Programming Puzzles and Programming Puzzles and Code Golf.
+4 octets fixant les cas de test comme color-#00f(couleurs avec quelque chose en plus des espaces / des lignes nouvelles l'entourant). Merci à @Grimy pour avoir porté cela à mon attention.

Sensible aux majuscules et minuscules. Les valeurs hexadécimales sont en minuscule abcdef; Programming Puzzles ... Code Golfest dans le titre; PPCGest en majuscule.

Essayez-le en ligne.

Ce n’est vraiment pas le bon langage pour le travail. Il est assez difficile d’imiter les limites des mots et de les remplacer Programming Puzzles \S+ Code Golf, mais pas Code Golf \S+ Programming Puzzlesou Programming Puzzles \S+ \S+ Code Golfsans expressions rationnelles (faire court).>.>

Explication:

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

Voir cette astuce de mes 05AB1E (section Comment utiliser le dictionnaire? ) Pour comprendre pourquoi ”–±ÇÀ”est "Programming Puzzles"; ”ƒËŠˆ”est "Code Golf"; et ”Âïªï”est "Coding Challenges".

Kevin Cruijssen
la source
3

Python 2 , 240 octets

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

Essayez-le en ligne!

Erik le golfeur
la source
3

JavaScript (Node.js) , 174 octets

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

Essayez-le en ligne!

tsh
la source
Échec du scénario de test #abcdecar le qualificatif regex fait apparaître {3,6}entre 3 et 6 caractères, au lieu de 3 ou 6, ce qui, je suppose, vous intéressait.
Value Ink
@ValueInk belle prise. corrigé avec +5 octets.
tsh
Peut-être plus court pour utiliser une fonction replace sur une longue expression
régulière
2

Pyth , 177 173 162 142 octets

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

Voici une version sans les mécanismes de compression de chaîne de Pyth (c'est-à-dire qu'il est sûr de copier-coller):

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

Essayez-le en ligne!

Cela s’est avéré très long, car j’ai essayé d’être aussi pédant que possible avec les expressions rationnelles. J'ai essayé de compresser toutes les chaînes possibles, mais la plupart d'entre elles ne sont pas devenues plus petites ou ne peuvent pas être collées correctement dans TIO.

Explication:

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 grâce à une meilleure expression rationnelle de la réponse Ruby de Value Ink
  • -20 grâce à l'utilisation d'une boucle pour les deux remplacements d'hex, inspirée des réponses Ruby et Perl
randomdude999
la source
1

Perl 5 -p , 152 145 octets

@ValueInk enregistre 7 octets

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}

Essayez-le en ligne!

Xcali
la source
( \S+ )(Code Golf)\b/$2$1Codingenregistre 2 octets. De plus, la dernière expression rationnelle peut se terminer par juste un \bau lieu de(?=\s|$)
Value Ink
Je travaillais sur ce premier pendant que vous tapiez ce commentaire. J'ai effectué l'autre modification pour sauvegarder des octets. Merci!
Xcali
Cela \sdevrait être la \Wplace, sinon il ne le cas ( -un caractère non alphanumérique, de sorte que la substitution doit être appliqué).
Grimmy
137
Grimmy
0

Java 8, 192 octets

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

La réponse de Port of @Neil 's Retina , assurez-vous donc de lui donner une autre voix!

Essayez-le en ligne.

Kevin Cruijssen
la source