Thiết kế trang web mới!


57

Trừ khi bạn có một bản mô tả người dùng sửa đổi thiết kế của trang web (hoặc thậm chí nếu có), bạn sẽ nhận thấy rằng chúng tôi có thiết kế trang web của chúng tôi!

(Bây giờ là tháng 11)

Vì vậy, để ăn mừng, chúng ta hãy tạo ra một chương trình áp dụng hồi tố cho thiết kế này (dĩ nhiên là quá đơn giản)!

Vì vậy, những thay đổi quan trọng nhất là:

  • Tên mới của chúng tôi bây giờ là Code Golf và Thử thách mã hóa
  • trang web của chúng tôi không còn là màu xanh mặc định và thay vào đó là màu xanh đậm đẹp

Vì vậy, đưa ra một chuỗi, thay đổi:

  • PPCG đến CGCC
  • Programming Puzzles {non-whitespace} Code Golfđến Code Golf {same-thing} Coding Challenges(ví dụ Programming Puzzles + Code Golf, and Code Golf& Code Golftất cả sẽ được chuyển sang Code Golf + Coding Challenges, and Coding Challenges& Coding Challenges.
  • #abcthành #acb(hoán đổi màu xanh lam sang màu xanh lá cây và ngược lại - chỉ cần bỏ qua thực tế là màu xanh lá cây không nên hợp lý trở thành màu xanh nhưng tôi không muốn làm phức tạp việc chuyển màu)
  • #abcdefđến #abefcd(giống như trên)

Lưu ý rằng đối với các giao dịch hoán đổi màu, bạn nên chấp nhận bất kỳ chữ số thập lục phân nào từ 0-9đến a-f. Bạn có thể chọn trường hợp chữ số hex cần yêu cầu, nhưng nó phải nhất quán và giống nhau từ đầu vào đến đầu ra.

Sự thay thế của bạn có thể phân biệt chữ hoa chữ thường và nếu không, vui lòng chỉ định cách thức hoạt động của đầu ra.

Việc thay thế chỉ nên xảy ra khi chuỗi được bao quanh bởi các ranh giới từ (bao gồm cả bắt đầu của chuỗi #). Nói cách khác, mỗi thay thế được chỉ định chỉ nên xảy ra nếu khớp nằm ở cạnh của chuỗi hoặc được viền bởi các ký tự không chữ và số (ở cả hai bên).

Tiêu chuẩn áp dụng. Đây là một thử thách chơi gôn, vì vậy mã ngắn nhất sẽ thắng!

Ví dụ

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

(đối với trường hợp thử nghiệm cuối cùng, điều quan trọng cần lưu ý là chuỗi dịch có thể được dịch lại nhưng việc chuyển đổi phải được áp dụng chính xác một lần)

Cập nhật quan trọng

(Cảm ơn @tsh)

Các Programming Puzzles ... Code Golfquy tắc thay có thể bao gồm các quy tắc khác bên trong của nó ( Programming Puzzles PPCG Code Golfcó giá trị). Trong trường hợp này, bạn có thể chọn áp dụng quy tắc hay không, nhưng nó phải mang tính quyết định. Tôi không yêu cầu bạn nhất quán giữa PPCG#...bởi vì các câu trả lời dường như thực hiện các quy tắc trong danh sách của tôi theo thứ tự dẫn đến sự không nhất quán. Đây chỉ là một sự làm rõ; Tôi tin rằng tất cả các câu trả lời hiện tại vẫn còn hiệu lực.


3
Chỉ nên áp dụng thay thế nếu có ranh giới từ xung quanh các chuỗi con hoặc ở mọi nơi?
Erik the Outgolfer

1
@EriktheOutgolfer Bắt tốt; nên có ranh giới từ. Tôi sẽ chỉ định rằng; cảm ơn.
HyperNeutrino

Xác định "ranh giới từ" cho #; triển khai regex thường không xem xét # để bắt đầu một từ.
tomsmeding

1
Ồ, tôi đoán Programming Puzzles and no substitution Code Golfcũng có thể bắt được ai đó (mặc dù mọi người đều sử dụng regex hợp lệ như nhau)
Veskah

1
Đề nghị thử nghiệm trường hợp Code Golf and Programming PuzzlesProgramming Puzzles and Programming Puzzles and Code Golf. @Veskah Hmm, và tôi nghĩ rằng trường hợp thử nghiệm được đề xuất cuối cùng đã thất bại trong câu trả lời 05AB1E của tôi, vì tôi không có regex ..>. <Quay lại bảng vẽ ..
Kevin Cruijssen

Câu trả lời:


12

Ruby -p , 165 164 159 byte

Cuối cùng, nó rất giống với câu trả lời sed, nhưng nó lạm dụng phép nội suy chuỗi của Ruby để nhân đôi nhóm hex khớp ([\da-f]{1,2})trong regex thứ ba ba lần thay vì phải lặp lại toàn bộ.

  • -1 byte từ @ Randomdude999.
  • -5 byte từ việc tận dụng giải pháp Perl của @ 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'}

Hãy thử trực tuyến!


Không sử dụng {1,2}ngắt với đầu vào hex có độ dài 4 hoặc 5, ví dụ #aabbc? Chỉnh sửa: không (ví dụ này không nên thay thế vì đây không phải là màu hex hợp lệ).
Randomdude999

Thất bại cho trường hợp này ( -là một ký tự không chữ và số).
Erik the Outgolfer

@ Randomdude999 yeah, bắt tốt. Đã thêm một kiểm tra cho điều đó.
Mực giá trị

@EriktheOutgolfer vâng, tôi đoán vậy. "Ranh giới từ" với #một chút mơ hồ vì /\b/không đăng ký với nó bên cạnh một chữ số khác, nhưng tôi đã thay đổi dù sao để không thay đổi byte (thay thế \Sbằng \w)
Value Ink

Bạn không thể thay thế của bạn (?<!\w)với của tôi (^|\W)cho 1 char?
tomsmeding

9

C ++ (gcc) , 270 285 283 byte

Cảm ơn Neil đã chỉ ra một lỗi.

-2 byte nhờ trần.

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

Hãy thử trực tuyến!


3
Có vẻ như mangle #fade#facedđiều đó không nên.
Neil

6

Võng mạc 0.8.2 , 153 130 byte

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

Hãy thử trực tuyến! Liên kết bao gồm các trường hợp thử nghiệm. Tất cả các thay thế là trường hợp nhạy cảm. Giả sử các ký tự từ regex bình thường được chấp nhận để \B#chỉ khớp với #các ký tự không theo một ký tự từ. Chỉnh sửa: Đã lưu 22 byte nhờ @tsh.


Thử \B#(?=([\da-f]{3}){1,2}\b)(.+?)(..??)(..??)\bchưa?
tsh

5

GNU sed -E, 198 ký tự

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 sử dụng ví dụ sed -E 'the above'; dòng mới có thể được bao gồm theo nghĩa đen, hoặc thay thế bằng ;nếu bạn muốn. Cả hai đều làm việc.

@HyperNeutrino đi vào quy tắc ranh giới từ đó là ngu ngốc. Hãy nhìn những gì tôi đã phải làm trong #trường hợp.

Có, tôi thậm chí không thử. : P

+9 bởi @Value Ink


3
Cờ không còn được bao gồm trong số byte để thay vào đó bạn có thể lấy thêm byte và gọi nó là "GNU sed -E".
Mực giá trị

@ValueInk Whaaaaat? Tôi rõ ràng đã mất liên lạc với cộng đồng này quá lâu để không nhận thấy điều đó. Tôi nghĩ rằng đó là một quy tắc tốt mặc dù. Ngoài ra, cảm ơn đã đề cập.
tomsmeding

không sedphù hợp với biểu thức chính quy cho phép sử dụng \dlàm lối tắt cho 0-9? có thể giúp bạn tiết kiệm toàn bộ 6 byte
Randomdude999

Ngoài ra tôi chỉ nhận thấy, bạn trả lại "Câu đố lập trình hoặc Thử thách mã hóa" cho trường hợp thử nghiệm thứ hai thay vì "Thử thách mã hóa hoặc mã hóa" dự kiến.
Mực giá trị

@ Randomdude999 Trang man re_format (7) trên máy Mac của tôi dường như gợi ý rằng sed nên hỗ trợ \ d, nhưng rõ ràng là không. ¯ \ _ () _ /
thiệu


4

05AB1E , 123 109 105 110 114 byte

ž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 byte sửa các trường hợp kiểm tra như Programming Puzzles and no substitution Code GolfProgramming Puzzles and Programming Puzzles and Code Golf.
+4 byte sửa các trường hợp kiểm tra như color-#00f(màu sắc với thứ gì đó bên cạnh khoảng trắng / dòng mới bao quanh nó). Cảm ơn @Grimy đã chú ý đến điều này.

Trường hợp nhạy cảm. Giá trị thập lục phân là với chữ thường abcdef; Programming Puzzles ... Code Golflà trong Titlecase; PPCGlà viết hoa đầy đủ.

Hãy thử trực tuyến.

Chắc chắn không phải là ngôn ngữ phù hợp cho công việc .. Bắt chước các ranh giới từ và thay thế Programming Puzzles \S+ Code Golf, nhưng không Code Golf \S+ Programming Puzzleshoặc Programming Puzzles \S+ \S+ Code Golfkhông có bất kỳ biểu thức chính nào là khá khó (để thực hiện ngắn) ..>.>

Giải trình:

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

Xem mẹo 05AB1E này của tôi (phần Làm thế nào để sử dụng từ điển? ) Để hiểu tại sao ”–±ÇÀ”"Programming Puzzles"; ”ƒËŠˆ”"Code Golf"; và ”Âïªï”"Coding Challenges".



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

Hãy thử trực tuyến!


Thất bại trong trường hợp thử nghiệm #abcdevì vòng loại regex {3,6}khớp giữa 3 và 6 ký tự, thay vì 3 hoặc 6 mà tôi cho rằng bạn đang đi.
Mực giá trị

@ValueInk bắt đẹp. cố định với +5 byte.
tsh

Có thể ngắn hơn để sử dụng chức năng thay thế trong regex dài
Downgoat

2

Pyth , 177 173 162 142 byte

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

Đây là phiên bản không có cơ chế nén chuỗi của Pyth (hay còn gọi là sao chép an toàn):

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

Hãy thử trực tuyến!

Điều này đã kết thúc thực sự dài bởi vì tôi đã cố gắng trở nên tầm thường nhất có thể với các biểu thức chính quy. Tôi đã cố gắng nén mọi chuỗi có thể, nhưng hầu hết trong số chúng không trở nên nhỏ hơn hoặc không thể dán vào TIO đúng cách.

Giải trình:

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 nhờ vào một biểu thức chính xác hơn từ câu trả lời Ruby của Value Ink
  • -20 nhờ sử dụng vòng lặp cho cả hai thay thế hex, lấy cảm hứng từ câu trả lời của Ruby và Perl

1

Perl 5 -p , 152 145 byte

@ValueInk tiết kiệm 7 byte

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}

Hãy thử trực tuyến!


( \S+ )(Code Golf)\b/$2$1Codingtiết kiệm 2 byte. Ngoài ra, regex cuối cùng có thể kết thúc chỉ bằng một \bthay vì(?=\s|$)
Ink Ink

Tôi đã làm việc trên cái đầu tiên trong khi bạn đang gõ bình luận đó. Tôi đã thực hiện thay đổi khác để lưu một số byte. Cảm ơn!
Xcali

Điều đó \snên được \Wthay vào đó, nếu không nó không thành công trong trường hợp này ( -là một ký tự không phải là chữ và số, vì vậy nên áp dụng thay thế).
Grimmy


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.