ออกแบบเว็บไซต์ใหม่!


57

หากคุณไม่มี userscript ที่ปรับเปลี่ยนการออกแบบเว็บไซต์ (หรือแม้ว่าจะเป็นเช่นนั้น) คุณควรสังเกตว่าเรามีการออกแบบเว็บไซต์ของเรา!

(ตอนนี้เป็นเดือนพฤศจิกายน)

ดังนั้นเพื่อเป็นการเฉลิมฉลองลองสร้างโปรแกรมที่ใช้การออกแบบนี้ย้อนยุค (แน่นอนมากเกินไป)!

ดังนั้นการเปลี่ยนแปลงที่สำคัญที่สุดคือ:

  • ชื่อใหม่ของเราคือความท้าทายของ Code Golf และการเข้ารหัส
  • เว็บไซต์ของเราไม่ได้เป็นสีน้ำเงินเริ่มต้นอีกต่อไปและจะเป็นสีเขียวเข้มที่ดีแทน

ดังนั้นรับสายเปลี่ยน:

  • PPCG ไปยัง CGCC
  • 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(เหมือนข้างบน)

โปรดทราบว่าสำหรับแลกเปลี่ยนสีที่คุณควรยอมรับหลักเลขฐานสิบหกใด ๆ จากการ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
ควรใช้การแทนที่เฉพาะในกรณีที่มีขอบเขตของคำรอบ ๆ สตริงย่อยหรือทุกที่
Erik the Outgolfer

1
@EriktheOutgolfer จับได้ดี; ควรมีขอบเขตของคำ ฉันจะระบุว่า; ขอบคุณ
HyperNeutrino

กำหนด "ขอบเขตของคำ" สำหรับ #; การใช้งาน regex โดยทั่วไปจะไม่พิจารณา # เพื่อเริ่มคำ
tomsmeding

1
โอ้ฉันคิดว่าProgramming Puzzles and no substitution Code Golfอาจจับใครบางคน (แม้ว่าทุกคนใช้ regex ที่ถูกต้องเหมือนกัน)
Veskah

1
แนะนำกรณีทดสอบและCode Golf and Programming Puzzles Programming Puzzles and Programming Puzzles and Code Golf@Veskah อืมและฉันคิดว่ากรณีทดสอบที่แนะนำล่าสุดล้มเหลวในการตอบ 05AB1E ของฉันเนื่องจากฉันไม่มี regex .. >. <กลับไปที่กระดานวาดรูป ..
Kevin Cruijssen

คำตอบ:


12

Ruby -p , 165 164 159 ไบต์

ท้ายที่สุดมันก็คล้ายกับคำตอบ sed แต่มันก็เป็นการละเมิดการแก้ไขสตริงของ Ruby เพื่อทำซ้ำการจับคู่กลุ่ม hex ([\da-f]{1,2})ภายใน regex ที่สามสามครั้งแทนที่จะต้องทำซ้ำทั้งหมดอีกครั้ง

  • -1 ไบต์จาก @ randomdude999
  • -5 ไบต์จากการใช้ประโยชน์จากโซลูชัน Perl ของ 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'}

ลองออนไลน์!


ไม่ได้ใช้{1,2}ตัวแบ่งกับอินพุต hex ของความยาว 4 หรือ 5 เช่น#aabbcใช่ไหม แก้ไข: ทำได้ (ไม่ควรเปลี่ยนตัวอย่างนี้เพราะไม่ใช่สีฐานสิบหกที่ถูกต้อง)
randomdude999

ล้มเหลวสำหรับกรณีนี้ ( -เป็นอักขระที่ไม่ใช่ตัวอักษรและตัวเลข)
Erik the Outgolfer

@ randomdude999 ใช่จับได้ดี เพิ่มการตรวจสอบว่า
มูลค่าหมึก

@EriktheOutgolfer ใช่ฉันเดา "ขอบเขตของ Word" ที่#มีความคลุมเครือเล็กน้อยเนื่องจาก/\b/ไม่ได้ลงทะเบียนที่อยู่ถัดจากตัวอักษรและตัวเลขอื่น แต่ฉันทำการเปลี่ยนแปลงต่อไปโดยไม่มีการเปลี่ยนแปลงไบต์ (แทนที่\Sด้วย\w)
Value Ink

คุณไม่สามารถแทนที่ของคุณ(?<!\w)ด้วยของฉัน(^|\W)สำหรับ 1 อักขระ?
tomsmeding

9

C ++ (gcc) , 270 285 283 ไบต์

ขอบคุณNeil ที่ชี้จุดบกพร่อง

-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ที่ไม่ควร
Neil

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

ลองออนไลน์! ลิงค์มีกรณีทดสอบ การทดแทนทั้งหมดคำนึงถึงขนาดตัวพิมพ์ ถือว่าตัวอักษร regex ปกติเป็นที่ยอมรับเพื่อให้\B#ตรงกับเฉพาะ#ที่ไม่ปฏิบัติตามตัวอักษรคำ แก้ไข: บันทึกแล้ว 22 ไบต์ขอบคุณ @tsh


ลอง\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 โดย @Value Ink


3
ค่าสถานะจะไม่รวมอยู่ในจำนวนไบต์อีกต่อไปดังนั้นคุณสามารถนำไบต์พิเศษออกมาแล้วเรียกมันว่า "GNU sed -E" แทน
หมึกมูลค่า

@ValueInk Whaaaaat? เห็นได้ชัดว่าฉันไม่ได้ติดต่อกับชุมชนนี้นานเกินไปจนไม่สังเกตเห็นว่า ฉันคิดว่ามันเป็นกฎที่ดี นอกจากนี้ขอขอบคุณที่พูดถึง
tomsmeding

การsedจับคู่ regex ไม่อนุญาตให้ใช้\dเป็นทางลัด0-9ใช่หรือไม่ สามารถช่วยคุณทั้ง 6 ไบต์
randomdude999

นอกจากนี้ฉันเพิ่งสังเกตเห็นว่าคุณส่งคืน "การเขียนโปรแกรมปริศนาหรือความท้าทายการเขียนโปรแกรม" สำหรับกรณีทดสอบที่สองแทนการคาดหวัง "รหัสกอล์ฟหรือความท้าทายการเข้ารหัส"
หมึกมูลค่า

@ randomdude999 หน้า man re_format (7) บน Mac ของฉันดูเหมือนจะแนะนำว่า sed ควรสนับสนุน \ d แต่ดูเหมือนจะไม่ ¯ \ _ (ツ) _ / ¯
tomsmeding


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 Golf +4 ไบต์แก้ไขกรณีทดสอบเช่น(สีที่มีบางอย่างนอกเหนือจากช่องว่าง / การขึ้นบรรทัดใหม่รอบ ๆ ) ขอบคุณ@Grimy ที่ทำให้เรื่องนี้เป็นที่สนใจของฉันProgramming Puzzles and Programming Puzzles and Code Golf
color-#00f

กรณีที่สำคัญ. ค่าเลขฐานสิบหกอยู่กับตัวพิมพ์เล็กabcdef; Programming Puzzles ... Code Golfอยู่ในชื่อเรื่อง; PPCGมีตัวพิมพ์ใหญ่เต็ม

ลองออนไลน์

แน่นอนว่าไม่ใช่ภาษาที่เหมาะสมสำหรับงาน .. การเลียนแบบคำและการแทนที่Programming Puzzles \S+ Code Golfแต่การที่regexes ใด ๆ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เนื่องจากตัวระบุ regex {3,6}จับคู่ระหว่าง 3 และ 6 ตัวอักษรแทนที่จะเป็น 3 หรือ 6 ซึ่งฉันถือว่าคุณเป็น
มูลค่าหมึก

@ คุ้มค่าจับดี แก้ไขด้วย +5 ไบต์
tsh

อาจสั้นกว่านี้เพื่อใช้ฟังก์ชันแทนที่ regex ที่ยาว
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

ลองออนไลน์!

เรื่องนี้จบลงได้นานมากเพราะฉันพยายามที่จะอวดความเป็นไปได้ด้วย regexes ฉันพยายามบีบอัดทุกสายที่เป็นไปได้ แต่ส่วนใหญ่ไม่ได้เล็กลงหรือไม่สามารถวางลงใน 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 ขอบคุณ regex ที่ดีขึ้นจากคำตอบ Ruby ของ Value Ink
  • -20 ต้องขอบคุณการใช้ลูปสำหรับทั้งการแทนที่ hex โดยได้แรงบันดาลใจจากคำตอบของ Ruby และ Perl

1

Perl 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$1Codingบันทึก 2 ไบต์ regex สุดท้ายสามารถลงท้ายด้วย\bแทนที่จะเป็น(?=\s|$)
Value Ink Ink

ฉันกำลังทำสิ่งแรกอยู่ขณะที่คุณพิมพ์ความคิดเห็นนั้น ฉันได้ทำการเปลี่ยนแปลงอื่นเพื่อบันทึกบางไบต์ ขอบคุณ!
Xcali

ว่า\sควรจะ\Wแทนมิฉะนั้นจะล้มเหลวในกรณีนี้ ( -เป็นตัวละครที่ไม่ใช่ตัวเลขเพื่อทดแทนควรใช้)
Grimmy


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.