新网站设计!


57

除非您有修改站点设计的用户脚本(即使这样做),否则您应该已经注意到我们拥有站点设计!

(现在是十一月)

因此,为了庆祝这一点,让我们制作一个追溯应用此设计的程序(当然,这过于简化了!)!

因此,最重要的更改是:

  • 我们现在的新名称是Code Golf和Coding挑战赛
  • 我们的网站不再是默认的蓝色,而是深绿色

因此,给定一个字符串,请更改:

  • PPCGCGCC
  • Programming Puzzles {non-whitespace} Code GolfCode Golf {same-thing} Coding Challenges(例如,Programming Puzzles + Code Golfand Code Golf,和& Code Golf将所有被改变为Code Golf + Coding Challengesand Coding Challenges,和& Coding Challenges
  • #abc#acb(交换蓝色到绿色,反之亦然-只是忽视的事实是绿色的应该不是逻辑变成蓝色,但我不想色移复杂)
  • #abcdef#abefcd(与上面相同)

请注意,对于颜色交换,您应该接受从0-9到的任何十六进制数字a-f。您可以选择所需的十六进制数字大小写,但输入与输出之间必须保持一致且相同。

您的替换内容区分大小写,如果不区分大小写,请指定输出的工作方式。

仅当字符串被单词边界包围时(包括的开始),才应进行替换#。换句话说,只有当匹配项位于字符串的边缘或以非字母数字字符为边界(在两侧)时,才应进行每个指定的替换。

有标准漏洞。这是一个代码挑战,所以最短的代码胜出!

例子

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

(对于最后一个测试用例,重要的是要注意,转换后的字符串可以再次转换,但是转换必须恰好应用一次)

重要更新

(感谢@tsh)

Programming Puzzles ... Code Golf置换规则可以包括它里面的其他规则(Programming Puzzles PPCG Code Golf有效)。在这种情况下,您可以选择是否应用规则,但是必须确定。我并不需要您之间保持一致PPCG#...因为答案似乎会在我的列表顺序中实施规则,从而导致不一致。这只是一个澄清;我相信所有当前答案仍然有效。


3
仅在子字符串周围或各处存在单词边界时才应应用替换吗?
暴民埃里克

1
@EriktheOutgolfer好收获;应该有单词边界。我会具体说明;谢谢。
HyperNeutrino

为#定义“单词边界”;正则表达式实现通常不以#开头。
6

1
哦,我猜Programming Puzzles and no substitution Code Golf可能还会抓到一个人(即使每个人都使用相同的有效正则表达式)
Veskah

1
建议的测试用例Code Golf and Programming PuzzlesProgramming Puzzles and Programming Puzzles and Code Golf。@Veskah Hmm,我认为最后一个建议的测试用例在我的05AB1E答案中失败了,因为我没有正则表达式。>> <返回绘图板
。–

Answers:


12

红宝石 -p165个 164 159字节

最终它与sed答案非常相似,但是它滥用Ruby的字符串插值法([\da-f]{1,2})将第三次正则表达式中的十六进制组匹配项重复了三遍,而无需再次重复整个过程。

  • @ randomdude999的-1个字节。
  • 利用@Xcali的Perl解决方案获得-5个字节
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'}

在线尝试!


{1,2}例如,长度不为4或5的十六进制输入不使用break #aabbc吗?编辑:可以(此示例不应替换,因为它不是有效的十六进制颜色)。
randomdude999

这种情况下失败(-是非字母数字字符)。
暴民埃里克

@ randomdude999是的,很好。为此添加了检查。
价值墨水

@EriktheOutgolfer是的,我猜是。带有的“单词边界” #有点模棱两可,因为/\b/它没有在另一个非字母数字旁边注册,但是我还是做了更改,没有字节更改(替换\S\w
Value Ink

您不能(?<!\w)用我(^|\W)的1个字符替换您的字符吗?
6

9

C ++(GCC) 270个 285 283字节

感谢Neil指出错误。

-2个字节,感谢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;};

在线尝试!


3
似乎裂伤#fade#faced它不应该。
尼尔

6

视网膜0.8.2153个 130字节

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

在线尝试!链接包括测试用例。所有替换均区分大小写。假定正常的正则表达式单词字符是可接受的,因此\B#仅匹配#不跟随单词字符的s。编辑:由于@tsh,节省了22个字节。


试试\B#(?=([\da-f]{3}){1,2}\b)(.+?)(..??)(..??)\b
tsh

5

GNU sed -E,198个字符

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

可使用例如sed -E 'the above';; 换行符可以按原样包含,也可以根据需要替换为;。两者都可以。

@HyperNeutrino认为单词边界规则很愚蠢。看看我在这种#情况下要做的。

是的,我什至没有尝试。:P

@Value墨水+9


3
标志不再包含在字节数中,因此您可以取出多余的字节并将其称为“ GNU sed -E”。
价值墨水

@ValueInk Whaaaaat?很显然,我与这个社区已经失去联系很长时间了,以至于没有注意到这一点。我认为这是个好规则。另外,感谢您的提及。
6

sed的正则表达式匹配不可以\d用作的快捷方式0-9吗?可以为您节省整个6个字节
randomdude999

我也注意到,您为第二个测试用例返回了“编程难题或编码挑战”,而不是预期的“ Code Golf或编码挑战”。
价值墨水

@ randomdude999 Mac上的re_format(7)手册页似乎暗示sed应该支持\ d,但显然不支持。¯\ _(ツ)_ /¯
tomsmeding

4

Stax,85 个字节

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

运行并调试


4

05AB1E123个 109 105 110 114 字节

ž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字节修复测试用例,如Programming Puzzles and no substitution Code GolfProgramming Puzzles and Programming Puzzles and Code Golf
+4字节固定测试用例,例如color-#00f(颜色周围带有空格/换行符的颜色)。感谢@Grimy引起我的注意。

区分大小写。十六进制值带有小写abcdef; Programming Puzzles ... Code Golf在标题中;PPCG大写。

在线尝试。

绝对不适合工作的正确的语言..模仿单词边界和更换Programming Puzzles \S+ Code Golf,但不Code Golf \S+ Programming Puzzles还是Programming Puzzles \S+ \S+ Code Golf没有任何的正则表达式是相当困难的(做短)。>>

说明:

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

见矿(部此次05AB1E提示如何使用字典?理解为什么”–±ÇÀ”"Programming Puzzles"; ”ƒËŠˆ”"Code Golf"; 并且”Âïªï”"Coding Challenges"


3

Python 2,240个字节

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

在线尝试!


3

JavaScript(Node.js),174个字节

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

在线尝试!


测试用例失败,#abcde因为regex限定符{3,6}匹配3到6个字符,而不是我认为要使用的3或6个字符。
价值墨水

@ValueInk不错。固定为+5个字节。
tsh

在较长的正则表达式上使用替换功能可能会更短
Downgoat

2

Pyth177个 173 162 142字节

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

这是一个没有Pyth的字符串压缩机制的版本(aka复制粘贴是安全的):

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

在线尝试!

由于我试图对正则表达式尽可能学究,所以最终的结果确实很长。我尝试压缩所有可能的字符串,但是其中大多数都没有变小或无法正确粘贴到TIO中。

说明:

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感谢Value Ink的Ruby答案提供更好的正则表达式
  • -20感谢在Ruby和Perl答案的启发下对两个十六进制替换使用循环

1

Perl 5中 -p152个 145字节

@ValueInk保存7个字节

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}

在线尝试!


( \S+ )(Code Golf)\b/$2$1Coding保存2个字节。同样,最后一个正则表达式可以以\b(?=\s|$)
-Value Ink

当您输入评论时,我正在研究第一个。我进行了其他更改以节省一些字节。谢谢!
Xcali

\s应该是\W代替,否则失败这种情况下-是一个非字母数字字符,所以替代应适用)。
Grimy


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.