新しいサイトのデザイン!


57

サイトのデザインを変更するユーザースクリプトがない場合(または変更する場合でも)、サイトのデザインがあることに気付くはずです。

(今11月です)

それで、祝うために、この設計を遡及的に適用するプログラムを作成しましょう(もちろん、単純化しすぎています)!

したがって、最も重要な変更は次のとおりです。

  • 私たちの新しい名前は現在、Code Golf and Coding Challengesです
  • 私たちのサイトはデフォルトの青色ではなくなり、代わりに素敵な濃い緑色になりました

したがって、文字列を指定して、変更します。

  • 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
  • #abcto #acb(青を緑に、またはその逆に入れ替えます-緑が論理的に青にならないという事実を無視しますが、色のシフトを複雑にしたくない)
  • #abcdef#abefcd(上記と同じ)

カラースワップの場合、から0-9までの16進数を受け入れる必要があることに注意してください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

(最後のテストケースのために、変換された文字列を再度変換することができることに注意することが重要であるが、変換が適用されなければならない正確に 1回)

重要な更新

(ありがとう@tsh)

Programming Puzzles ... Code Golf代入ルールは、(その中の他のルールを含むことができ、Programming Puzzles PPCG Code Golf有効です)。この場合、ルールを適用するかどうかを選択できますが、決定論的でなければなりません。私は間、あなたが一貫していることを必要としていないよPPCG#...答えが不一致になり、私のリストの順序でルールを実装するように見えるので。これは単なる説明です。現在の答えはすべて有効だと思います。


3
部分文字列の周囲またはどこかに単語の境界がある場合にのみ、置換を適用する必要がありますか?
アウトゴルファーのエリック

1
@EriktheOutgolfer良いキャッチ。単語の境界が必要です。それを指定します。ありがとう。
ハイパーニュートリノ

#の「単語境界」を定義します。通常、正規表現の実装では、単語を開始するために#は考慮されません。
tomsmeding

1
ああ、Programming Puzzles and no substitution Code Golf誰かを捕まえるかもしれません(誰もが同じ有効な正規表現を使用している場合でも)
Veskah

1
推奨されるテストケースCode Golf and Programming PuzzlesProgramming Puzzles and Programming Puzzles and Code Golf。うーん@Veskah、と私は正規表現を持っていないので、最後の提案テストケースは、私の05AB1E応答に失敗したと思って...> <戻る製図板に..
ケビンCruijssen

回答:


12

ルビー -p165の 164 159バイト

最終的にはsedの回答に非常に似ていますが、Rubyの文字列補間を悪用([\da-f]{1,2})して、3番目の正規表現内で16進グループの一致を3回複製します。

  • @ 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

この場合-は失敗します(英数字以外の文字です)。
エリック・ザ・アウトゴルファー

@ randomdude999ええ、いいキャッチ。そのためのチェックを追加しました。
バリューインク

@EriktheOutgolferええ、そうですね。「単語の境界」#以来、少し曖昧である/\b/次の別の非英数字をそれに登録されませんが、私は(交換なしバイトの変更のためにとにかく変更をしなかった\S\w
バリューインク

あなた(?<!\w)を私(^|\W)の1文字に置き換えることはできませんか?
tomsmeding

9

C ++(gcc)270 285 283バイト

バグを指摘してくれたニールに感謝します。

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

+9 by @Value Ink


3
フラグはバイトカウントに含まれないため、余分なバイトを取り出して、-E代わりに「GNU sed 」と呼ぶことができます。
バリューインク

@ValueInk Whaaaaat?気づかないほど長い間、私はどうやらこのコミュニティとひどく連絡を取っていませんでした。しかし、それは良いルールだと思います。また、言及してくれてありがとう。
tomsmeding

sedの正規表現マッチングで\dは、ショートカットとして使用できません0-9か?全体で6バイト節約できます
randomdude999

また、2番目のテストケースでは、予想される「コードゴルフまたはコーディングチャレンジ」ではなく、「プログラミングパズルまたはコーディングチャレンジ」を返すことに気付きました。
バリューインク

@ randomdude999私のMacのre_format(7)のマニュアルページは、sedが\ dをサポートする必要があることを示唆しているようですが、明らかにそうではありません。¯\ _(ツ)_ /¯
tomsmeding


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«

Programming Puzzles and no substitution Code Golfおよびなどのテストケースを修正する+5バイトProgramming 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

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正規表現修飾子{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の文字列圧縮メカニズムを使用しないバージョンです(コピーアンドペーストしても安全です)。

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の回答に触発されて、両方の16進数の置換にループを使用したおかげです。

1

パール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$1Coding2バイト節約します。また、最後の正規表現は、次の\b代わりに終了することができます(?=\s|$)
Value Ink

あなたがそのコメントをタイプしている間、私はその最初のものに取り組んでいました。いくつかのバイトを節約するために、他の変更を加えました。ありがとう!
Xcali

そうで\s\Wなく、そうでない場合、この場合-は失敗します(英数字以外の文字であるため、置換を適用する必要があります)。
グリムミー


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.