새로운 사이트 디자인!


57

사이트 디자인을 수정하는 사용자 스크립트가 없거나 사이트 디자인이 수정되지 않았다면 사이트 디자인이 있음을 알아야합니다!

(지금 11 월입니다)

축하하기 위해이 디자인을 소급 적용하는 프로그램을 만드십시오 (물론 단순화되었습니다)!

따라서 가장 중요한 변경 사항은 다음과 같습니다.

  • 우리의 새로운 이름은 이제 Code Golf and Coding Challenges입니다.
  • 우리 사이트는 더 이상 기본 파란색이 아니며 대신 멋진 진한 녹색입니다.

따라서 문자열이 주어지면 다음을 변경하십시오.

  • PPCGCGCC
  • Programming Puzzles {non-whitespace} Code Golf에은 Code Golf {same-thing} Coding Challenges(예를 들어 Programming Puzzles + Code Golf, and Code Golf& Code Golf모두로 변경됩니다 Code Golf + Coding Challenges, and Coding Challenges그리고 & Coding Challenges.
  • #abc#acb(파란색을 녹색으로 바꾸고 그 반대의 경우도 마찬가지입니다. 녹색이 논리적으로 파란색이 아니어야하지만 색상 이동을 복잡하게하고 싶지 않다는 사실을 무시하십시오)
  • #abcdef~ #abefcd(위와 동일)

색상 스왑의 경우에서 16 진수를 허용해야 0-9합니다 a-f. 16 진수 숫자를 요구할 수 있지만 입력과 출력이 동일해야합니다.

대체는 대소 문자를 구분할 수 있으며 그렇지 않은 경우 출력 작동 방식을 지정하십시오.

대체는 문자열이 단어 경계로 둘러싸인 경우에만 발생해야합니다 (시작 부분 포함 #). 다시 말해, 지정된 각 치환은 일치하는 것이 문자열의 가장자리에 있거나 영숫자가 아닌 문자 (양쪽)로 경계가 지정된 경우에만 발생해야합니다.

표준 허점이 적용됩니다. 이것은 코드 골프 도전이므로 가장 짧은 코드가 승리합니다!

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
부분 문자열 주위 또는 모든 곳에 단어 경계가있는 경우에만 대체를 적용해야합니까?
Outgolfer Erik

1
@EriktheOutgolfer 좋은 캐치; 단어 경계가 있어야합니다. 나는 그것을 지정할 것이다; 감사.
HyperNeutrino

#에 대해 "단어 경계"를 정의하십시오. 정규식 구현은 일반적으로 단어를 시작하기 위해 #을 고려하지 않습니다.
tomsmed

1
아, Programming Puzzles and no substitution Code Golf누군가를 잡을 수도 있습니다 (모두가 같은 유효한 정규식을 사용하더라도)
Veskah

1
테스트 케이스를 제안 Code Golf and Programming Puzzles하고 Programming Puzzles and Programming Puzzles and Code Golf. 흠 @Veskah, 그리고 내가 ..> 정규식을 가지고 있지 않기 때문에 마지막으로 제안 된 테스트 케이스, 내 05AB1E 응답 실패라고 생각 <위로 드로잉 보드에 ....
케빈 Cruijssen

답변:


12

루비 -p , 165 (164) 159 바이트

결국 sed 답변과 매우 비슷하지만 Ruby의 문자열 보간을 남용 ([\da-f]{1,2})하여 전체를 다시 반복하지 않고 세 번째 정규 표현식 내에서 16 진수 그룹 일치를 세 번 복제 합니다.

  • @ 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 인 16 진 입력에 break를 사용하지 #aabbc않습니까? 편집 : 그렇지 않습니다 (이 예는 올바른 16 진수 색상이 아니기 때문에 대체해서는 안됩니다).
randomdude999

이 경우 실패합니다 ( -영숫자가 아닌 문자 임).
Outgolfer Erik

예, 잘 잡았습니다. 이에 대한 점검을 추가했습니다.
가치 잉크

@EriktheOutgolfer 네, 맞습니다. (가)와 "단어 경계" #이후 약간 모호 /\b/다른 영숫자가 아닌 옆에 함께 등록하지만 더 바이트 변경 (교체하기위한 어쨌든 변화를하지 않았다 않습니다 \S와 함께 \w)
값 잉크

당신은 당신을 대체 할 수 없습니다 (?<!\w)내로 (^|\W)1 개 문자에 대해?
tomsmed

9

C ++ (GCC) , 270 285 283 바이트

버그를 지적한 Neil 에게 감사합니다 .

ceilingcat 덕분에 -2 바이트

#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.2 , 153 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#만 일치 한다고 가정 #합니다. 편집 : @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는 단어 경계 규칙이 어리 석습니다. 나는에해야 할 일을했을 것 봐 #경우.

예, 시도조차하지 않았습니다. :피

@Value Ink +9


3
플래그는 더 이상 바이트 수에 포함되지 않으므로 추가 바이트를 꺼내서 -E대신 "GNU sed " 라고 부를 수 있습니다.
값 잉크

@ValueInk Whaaaaat? 나는 그 사실을 알지 못하기 위해 너무 오랫동안이 공동체와 심각하게 접촉하지 않은 것 같습니다. 그래도 좋은 규칙이라고 생각합니다. 또한 언급 해 주셔서 감사합니다.
tomsmed

하지 sed의 정규식 일치를 사용하여 허용 \d에 대한 바로 가기로 0-9? 6 바이트 전체를 절약 할 수 있습니다
randomdude999

또한 방금 예상 한 "코드 골프 또는 코딩 챌린지"대신 두 번째 테스트 사례에 대해 "프로그래밍 퍼즐 또는 코딩 챌린지"를 반환했습니다.
가치 잉크

@ randomdude999 내 Mac의 re_format (7) 매뉴얼 페이지는 sed가 \ d를 지원해야한다고 제안하는 것 같지만 그렇지 않습니다. ¯ \ _ (ツ) _ / ¯
탐정

4

Stax , 85 바이트

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

실행 및 디버깅


4

05AB1E , 123 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 에게 감사드립니다 .

대소 문자를 구분합니다. 16 진 값은 소문자입니다 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

자바 스크립트 (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정규 표현식 한정자 {3,6}가 3 또는 6 문자 대신 3 또는 6 문자 사이에서 일치 하기 때문에 테스트 케이스에서 실패 합니다.
가치 잉크

@ValueInk 좋은 캐치. +5 바이트로 고정되었습니다.
tsh

긴 정규식에 대해 교체 기능을 사용하는 것이 더 짧을 수 있습니다.
Downgoat

2

Pyth , 177 (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의 문자열 압축 메커니즘이없는 버전입니다 (일명 복사하여 붙여 넣기하는 것이 안전합니다).

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

온라인으로 사용해보십시오!

내가 정규식으로 가능한 한 pedantic하려고 노력했기 때문에 이것은 정말로 길어졌습니다. 가능한 한 모든 문자열을 압축하려고 시도했지만 대부분 작아지지 않았거나 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
  • Value Ink의 Ruby 답변에서 더 나은 정규식 덕분에 -11
  • 루비와 펄의 답변에서 영감을 얻은 16 진수 교체 모두에 루프를 사용하여 -20 덕분

1

펄 5 -p , 152 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$1Coding2 바이트를 절약합니다. 또한 마지막 정규 표현식은 다음과 같이 \b대신 끝날 수 있습니다(?=\s|$)
Value Ink

그 의견을 입력하는 동안 첫 번째 작업을하고있었습니다. 바이트를 절약하기 위해 다른 변경을했습니다. 감사!
Xcali

\s되어야 \W그렇지 않으면 실패 대신 이 케이스 ( -비 - 영숫자이므로 교체 적용한다).
그리미


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.