Desain Situs Baru!

57

Kecuali jika Anda memiliki skrip pengguna yang mengubah desain situs (atau bahkan jika demikian), Anda seharusnya memperhatikan bahwa kami memiliki desain situs kami!

(Sekarang November)

Jadi, untuk merayakannya, mari buat program yang surut menerapkan desain ini (terlalu disederhanakan, tentu saja)!

Jadi, perubahan yang paling penting adalah:

  • nama baru kami sekarang Code Golf dan Tantangan Pengkodean
  • situs kami tidak lagi menjadi warna biru default dan sebagai gantinya adalah hijau tua yang bagus

Jadi, diberi string, ubah:

  • PPCG untuk CGCC
  • Programming Puzzles {non-whitespace} Code Golfuntuk Code Golf {same-thing} Coding Challenges(misalnya, Programming Puzzles + Code Golf, and Code Golf, dan & Code Golfsemua akan berubah menjadi Code Golf + Coding Challenges, and Coding Challenges, dan & Coding Challenges.
  • #abcuntuk #acb(menukar biru ke hijau dan sebaliknya - abaikan saja fakta bahwa hijau tidak seharusnya menjadi biru, tetapi saya tidak ingin mempersulit pemindahan warna)
  • #abcdefke #abefcd(sama seperti di atas)

Perhatikan bahwa untuk swap warna, Anda harus menerima digit heksadesimal dari 0-9hingga a-f. Anda dapat memilih case hex digit apa yang diperlukan, tetapi harus konsisten dan sama dari input ke output.

Penggantian Anda dapat peka huruf besar-kecil, dan jika tidak, harap tentukan cara kerja output.

Pergantian hanya terjadi ketika string dikelilingi oleh batas kata (termasuk awal #). Dengan kata lain, masing-masing pengganti yang ditentukan hanya akan terjadi jika kecocokan berada di tepi string atau dibatasi oleh karakter non-alfanumerik (di kedua sisi).

Celah standar berlaku. Ini adalah tantangan kode-golf, jadi kode terpendek menang!

Contohnya

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

(untuk kasus uji terakhir, penting untuk dicatat bahwa string yang diterjemahkan dapat diterjemahkan lagi tetapi transformasi harus diterapkan tepat satu kali)

Pembaruan Penting

(Terima kasih @tsh)

The Programming Puzzles ... Code GolfAturan substitusi dapat mencakup aturan lain di dalamnya ( Programming Puzzles PPCG Code Golfberlaku). Dalam hal ini, Anda dapat memilih apakah aturan diterapkan atau tidak, tetapi harus bersifat deterministik. Saya tidak meminta Anda untuk konsisten di antara PPCGdan #...karena jawaban tampaknya menerapkan aturan dalam daftar pesanan saya yang menghasilkan inkonsistensi. Ini hanya klarifikasi; Saya percaya semua jawaban saat ini tetap valid.

HyperNeutrino
sumber
3
Haruskah penggantian hanya jika ada batasan kata di sekitar substring atau di mana-mana?
Erik the Outgolfer
1
@EriktheOutgolfer Tangkapan bagus; harus memiliki batas kata. Saya akan menentukan itu; Terima kasih.
HyperNeutrino
Tetapkan "batas kata" untuk #; implementasi regex umumnya tidak mempertimbangkan # untuk memulai suatu kata.
tommeding
1
Oh, saya kira Programming Puzzles and no substitution Code Golfmungkin juga menangkap seseorang (meskipun semua orang menggunakan regex valid yang sama)
Veskah
1
Kasus uji yang disarankan Code Golf and Programming Puzzlesdan Programming Puzzles and Programming Puzzles and Code Golf. @ Veska Hmm, dan saya pikir test case yang disarankan terakhir gagal dalam jawaban 05AB1E saya, karena saya tidak punya regex ..>. <Kembali ke papan gambar ..
Kevin Cruijssen

Jawaban:

12

Ruby -p , 165 164 159 byte

Itu akhirnya menjadi sangat mirip dengan jawaban sed, tetapi menyalahgunakan interpolasi string Ruby untuk menduplikasi pencocokan kelompok hex ([\da-f]{1,2})dalam regex ketiga tiga kali alih-alih perlu mengulangi semuanya lagi.

  • -1 byte dari @ randomdude999.
  • -5 byte dari meningkatkan solusi 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'}

Cobalah online!

Nilai Tinta
sumber
Tidak menggunakan {1,2}break dengan input hex panjang 4 atau 5, misalnya #aabbc? Sunting: ya (contoh ini tidak boleh diganti karena ini bukan warna hex yang valid).
randomdude999
Gagal untuk kasus ini ( -adalah karakter non-alfanumerik).
Erik the Outgolfer
@ randomdude999 ya, tangkapan yang bagus. Menambahkan cek untuk itu.
Value Ink
@EriktheOutgolfer ya, saya kira. "Batas kata" dengan #sedikit ambigu karena /\b/tidak mendaftar dengan itu di sebelah non-alfanumerik, tapi saya melakukan perubahan lagian untuk tidak ada perubahan byte (ganti \Sdengan \w)
Value Ink
Tidak bisakah kau ganti (?<!\w)dengan milikku (^|\W)untuk 1 char?
tommeding
9

C ++ (gcc) , 270 285 283 byte

Terima kasih kepada Neil karena menunjukkan bug.

-2 bytes berkat 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;};

Cobalah online!

gastropner
sumber
3
Tampaknya untuk memotong #fade- motong dan #facedyang seharusnya tidak.
Neil
6

Retina 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

Cobalah online! Tautan termasuk kasus uji. Semua penggantian adalah case sensitif. Asumsikan karakter kata regex normal dapat diterima sehingga \B#hanya cocok dengan huruf yang #tidak mengikuti karakter kata. Sunting: Disimpan 22 byte berkat @tsh.

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

GNU sed -E, 198 karakter

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

Dapat dijalankan menggunakan mis sed -E 'the above'; baris baru dapat dimasukkan secara harfiah, atau diganti dengan ;jika diinginkan. Keduanya bekerja.

@HyperNeutrino, ayolah aturan batas kata itu bodoh. Lihat apa yang harus saya lakukan dalam #kasus ini.

Ya, saya bahkan tidak mencoba. : P

+9 oleh @Nilai Tinta

tommeding
sumber
3
Bendera tidak lagi termasuk dalam jumlah byte sehingga Anda dapat mengambil byte tambahan dan menyebutnya "GNU sed -E" sebagai gantinya.
Value Ink
@NilaiInk Whaaaaat? Tampaknya saya sudah terlalu lama tidak berhubungan dengan komunitas ini untuk tidak menyadarinya. Saya pikir itu aturan yang baik. Juga, terima kasih telah menyebutkan.
tommeding
sedpencocokan regex tidak boleh digunakan \dsebagai jalan pintas 0-9? bisa menghemat 6 byte secara keseluruhan
randomdude999
Saya juga baru saja memperhatikan, Anda mengembalikan "Pemrograman Teka-teki atau Tantangan Pengkodean" untuk kasus uji kedua alih-alih "Golf Code atau Tantangan Pengkodean" yang diharapkan.
Value Ink
@ randomdude999 Halaman manual re_format (7) pada Mac saya tampaknya menyarankan bahwa sed harus mendukung \ d, tetapi ternyata tidak. ¯ \ _ (ツ) _ / ¯
tomsmeding
4

Stax , 85 byte

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

Jalankan dan debug itu

rekursif
sumber
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 memperbaiki kasus uji seperti Programming Puzzles and no substitution Code Golfdan Programming Puzzles and Programming Puzzles and Code Golf.
+4 byte memperbaiki kasus uji seperti color-#00f(warna dengan sesuatu selain spasi / baris baru di sekitarnya). Terima kasih kepada @Grimy karena membawa ini menjadi perhatian saya.

Hal - hal sensitif. Nilai heksadesimal adalah dengan huruf kecil abcdef; Programming Puzzles ... Code Golfada di titlecase; PPCGdalam huruf besar penuh.

Cobalah online.

Jelas bukan bahasa yang tepat untuk pekerjaan itu. Meniru batasan kata dan mengganti kata Programming Puzzles \S+ Code Golf, tetapi tidak Code Golf \S+ Programming Puzzlesatau Programming Puzzles \S+ \S+ Code Golftanpa regex cukup sulit (untuk melakukan singkat) ..>.>

Penjelasan:

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

Lihat ini 05AB1E ujung tambang (bagian Cara menggunakan kamus? ) Untuk memahami mengapa ”–±ÇÀ”adalah "Programming Puzzles"; ”ƒËŠˆ”adalah "Code Golf"; dan ”Âïªï”adalah "Coding Challenges".

Kevin Cruijssen
sumber
3

Python 2 , 240 byte

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

Cobalah online!

Erik the Outgolfer
sumber
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')

Cobalah online!

tsh
sumber
Gagal pada kasus uji #abcdekarena kualifikasi regex {3,6}cocok antara 3 dan 6 karakter, alih-alih 3 atau 6 yang saya anggap Anda inginkan.
Nilai Tinta
@ ValueInk tangkapan yang bagus. diperbaiki dengan +5 byte.
tsh
Mungkin lebih pendek untuk menggunakan fungsi ganti selama regex panjang
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

Inilah versi tanpa mekanisme kompresi string Pyth (alias aman untuk disalin-tempel):

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

Cobalah online!

Ini akhirnya menjadi sangat lama karena saya mencoba untuk menjadi setinggi mungkin dengan regex. Saya mencoba mengompres setiap string yang mungkin, tetapi kebanyakan dari mereka tidak menjadi lebih kecil atau tidak dapat ditempelkan ke TIO dengan benar.

Penjelasan:

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 Berkat regex yang lebih baik dari jawaban Ruby Nilai Tinta
  • -20 berkat menggunakan loop untuk kedua penggantian hex, terinspirasi oleh jawaban Ruby dan Perl
randomdude999
sumber
1

Perl 5 -p , 152 145 byte

@ ValueInk menghemat 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}

Cobalah online!

Xcali
sumber
( \S+ )(Code Golf)\b/$2$1Codingmenghemat 2 byte. Juga regex terakhir dapat berakhir hanya dengan \bbukannya(?=\s|$)
Nilai Ink
Saya sedang mengerjakan yang pertama saat Anda mengetik komentar itu. Saya telah membuat perubahan lain untuk menghemat beberapa byte. Terima kasih!
Xcali
Itu \sseharusnya \Wsebaliknya, jika tidak maka akan gagal dalam kasus ini ( -adalah karakter non-alfanumerik, sehingga substitusi harus diterapkan).
Grimmy
137
Grimmy
0

Java 8, 192 byte

s->s.replaceAll("\\bPPCG\\b","CGCC").replaceAll("\\bProgramming Puzzles( \\S+ )(Code Golf)\\b","$2$1Coding Challenges").replaceAll("\\B(#(?=([0-9a-f]{3}){1,2}\\b).+?)(..??)(..??)\\b","$1$4$3")

Port of @Neil 's Retina menjawab , jadi pastikan untuk mengunggah dia!

Cobalah online.

Kevin Cruijssen
sumber