Yeni Site Tasarımı!


57

Sitenin tasarımını değiştiren bir kullanıcı belgeniz yoksa (veya öyle olsa bile), site tasarımımızın olduğunu farketmiş olmalısınız!

(Şimdi Kasım)

Öyleyse, kutlamak için, bu tasarımı geriye dönük olarak uygulayan bir program yapalım (tabii ki aşırı basitleştirilmiş)!

Yani, en önemli değişiklikler:

  • Yeni ismimiz şimdi Code Golf ve Kod Yazma Zorlukları.
  • sitemiz artık varsayılan mavi renk değil, bunun yerine güzel bir koyu yeşil

Yani, bir dize verilen, değiştirin:

  • PPCG için CGCC
  • Programming Puzzles {non-whitespace} Code Golfiçin Code Golf {same-thing} Coding Challenges(örneğin, Programming Puzzles + Code Golf, and Code Golfve & Code Golfher şekilde değiştirilir Code Golf + Coding Challenges, and Coding Challengesve & Coding Challenges.
  • #abciçin #acb(maviyi yeşile çevirip tersi - sadece yeşilin mantıksal olarak mavi olmaması gerektiği gerçeğini göz ardı edin - ancak renk değiştirmeyi karmaşıklaştırmak istemiyorum)
  • #abcdefiçin #abefcd(yukarıdakiyle aynı)

Renk takası için, içinden herhangi bir onaltılık rakam kabul etmesi gerektiğini unutmayın 0-9için a-f. Hangi onaltılık basamak büyüklüğünü seçeceğinizi seçebilirsiniz, ancak tutarlı olmalı ve girdiden çıktıya aynı olmalıdır.

Yer değiştirmeleriniz büyük / küçük harf duyarlı olabilir ve değilse, lütfen çıktının nasıl çalıştığını belirtin.

Yer değiştirmeler yalnızca, dize kelime sınırlarıyla çevrelenmişse (başlaması da dahil #) yapılmalıdır . Başka bir deyişle, belirtilen ikamelerin her biri yalnızca eşleşme dizenin kenarındaysa veya alfanümerik olmayan karakterlerle (her iki tarafta) sınırlandırılmışsa gerçekleşmelidir.

Standart boşluklar uygulanır. Bu bir kod golf mücadelesidir, bu yüzden en kısa kod kazanır!

Örnekler

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

(son sınama durumu için, çevrilen dizenin tekrar çevrilebileceğini, ancak dönüşümün tam olarak bir kez yapılması gerektiğini not etmek önemlidir )

Önemli Güncelleme

(Teşekkürler @tsh)

Programming Puzzles ... Code Golfİkame kuralı bunun içindeki diğer kurallar (içerebilir Programming Puzzles PPCG Code Golfgeçerlidir). Bu durumda, kuralların uygulanıp uygulanmayacağını seçebilirsiniz, ancak bunun deterministik olması gerekir. Arada tutarlı olmanızı istemiyorum PPCGve #...çünkü cevaplar listemdeki sıralamada uyuşmazlıklara yol açan kuralları uyguluyor gibi görünüyor. Bu sadece bir açıklamadır; Tüm mevcut cevapların geçerli kaldığına inanıyorum.


3
Değiştirme işlemlerini yalnızca alt dizelerin çevresinde veya her yerde sözcük sınırları varsa uygulanmalıdır?
Outgolfer Erik,

1
@EriktheOutgolfer İyi yakalama; kelime sınırlarına sahip olmalı. Bunu belirteceğim; Teşekkürler.
HyperNeutrino

Bir # için "sözcük sınırını" tanımlayın; regex uygulamaları genellikle bir sözcüğü başlatmak için # saymaz.
59'da

1
Oh, sanırım Programming Puzzles and no substitution Code Golfbirileri de yakalanabilir (herkes aynı geçerli regex kullanıyor olsa da)
Veskah

1
Önerilen test durumları Code Golf and Programming Puzzlesve Programming Puzzles and Programming Puzzles and Code Golf. Hmm @Veskah ve ben ..> regex olmadığı için son önerilen test durumu, benim 05AB1E cevap başarısız olduğunu düşünüyorum <Geri çekme kartına ...
Kevin Cruijssen

Yanıtlar:


12

Ruby -p , 165 164 159 bayt

Baştan sona cevabına çok benziyordu, ancak ([\da-f]{1,2})her şeyi tekrar etmek zorunda kalmak yerine, üçüncü regex içinde eşleştiren hex grubunu eşlemek için Ruby'nin string enterpolasyonunu kötüye kullandı.

  • @ Randomdude999'dan -1 bayt.
  • @ Xcali's Perl çözümünden yararlanarak -5 bayt
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'}

Çevrimiçi deneyin!


{1,2}Örn., 4 veya 5 uzunluğundaki altıgen girişlerden kopma kullanmıyor mu #aabbc? Düzenleme: yapar (bu örnek geçerli bir onaltılı renk olmadığından değiştirilmemelidir).
randomdude999

Bu durumda başarısız ( -alfasayısal olmayan bir karakter).
Outgolfer Erik

@ randomdude999 evet, iyi yakala. Bunun için bir çek eklendi.
Değerli Mürekkep

@EriktheOutgolfer evet, sanırım. İle "Word sınırları" #beri biraz belirsiz /\b/olmayan başka alfanümerik yanında onunla kayıt ama hiçbir bayt değişikliği (değiştirilmesi için zaten değişti gelmez \Sile \w)
Değer Mürekkep

İstemiyorsun, mutfakta annene yerini alamaz (?<!\w)sahip oldugumla (^|\W)1 char?
57'de

9

C ++ (gcc) , 270 285 283 bayt

Sayesinde Neil bir hata işaret için.

Ceilingcat sayesinde -2 bayt.

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

Çevrimiçi deneyin!


3
Dolaşmak #fadeve #facedolması gereken gibi görünüyor .
Neil,

6

Retina 0.8.2 , 153 130 bayt

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

Çevrimiçi deneyin! Link, test durumlarını içerir. Tüm ikameler büyük / küçük harf duyarlıdır. Normal regex sözcüğü karakterlerinin kabul edilebilir olduğunu varsayarsak, \B#yalnızca #sözcük karakterini takip etmeyen harflerle eşleşir . Düzenleme: @tsh sayesinde 22 bayt kaydedildi.


Dene \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

Örneğin çalıştırılabilir sed -E 'the above'; newlines tam anlamıyla dahil edilebilir veya istenirse ile değiştirilebilir ;. İkisi de çalışıyor.

@HyperNeutrino hadi bu kelime sınır kuralı aptalca. Bak bu #durumda ne yapmalıydım .

Evet, denemedim bile. : P

+9 @Value Ink tarafından


3
Bayraklar artık bayt sayımlarına dahil edilmez, bu yüzden fazladan baytı alıp -Ebunun yerine "GNU sed " diyebilirsiniz .
Değerli Mürekkep

@ValueInk Whaaaaat? Görünüşe göre bu toplulukla bunun farkında olmamam için çok uzun zamandır iletişimim kopuyor. Bence bu iyi bir kural. Ayrıca, bahsettiğiniz için teşekkürler.
14'te yapılacak

gelmez sed'ın regex eşleştirme kullanarak izin \diçin kısayol olarak 0-9? size bir bütün 6 bayt kurtarabilir
randomdude999

Ayrıca, farkettim ki, beklenen "Code Golf veya Coding Challenges" yerine ikinci test için "Programming Puzzles (Kodlama Zorlukları)" na dönersiniz.
Değerli Mürekkep

@ randomdude999 Mac'imdeki re_format (7) kılavuz sayfası sed'in desteklemesi gerektiğini gösteriyor gibi görünüyor, ama görünüşe göre desteklemiyor. ¯ \ _ (ツ) _ / ¯
saat


4

05AB1E , 123 109 105 110 114 bayt

ž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 bayt Programming Puzzles and no substitution Code Golfve gibi test durumlarını sabitleme Programming Puzzles and Programming Puzzles and Code Golf.
+4 bayt gibi test durumlarını sabitleme color-#00f(etrafını çevreleyen boşlukların / yeni çizgilerin yanı sıra renklerle). Bunu dikkatime sunduğum için @Grimy'e teşekkürler .

Harfe duyarlı. Onaltılık değerler küçük harflerle yazılmıştır abcdef; Programming Puzzles ... Code Golfbaşlıkta bulunur; PPCGtam büyük harfle yazılmış.

Çevrimiçi deneyin.

Kesinlikle iş için doğru dil değil .. Kelime sınırlarını taklit etmek ve değiştirmek Programming Puzzles \S+ Code Golf, ancak herhangi bir regex olmadan Code Golf \S+ Programming Puzzlesya da Programming Puzzles \S+ \S+ Code Golfolmasın oldukça zordur (kısa yapmak için) ..>.>

Açıklama:

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

Bunun neden ”–±ÇÀ”olduğunu anlamak için bu 05AB1E ucuna bakınız ( sözlük nasıl kullanılır? )"Programming Puzzles" ; ”ƒËŠˆ”olduğu "Code Golf"; ve ”Âïªï”olduğu "Coding Challenges".


3

Python 2 , 240 bayt

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

Çevrimiçi deneyin!


3

JavaScript (Node.js) , 174 bayt

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

Çevrimiçi deneyin!


#abcdeRegex niteleyicisi {3,6}, gitmeyi düşündüğüm 3 veya 6 yerine 3 ile 6 karakter arasında eşleştiği için test durumunda başarısız olur .
Değer Mürekkep

@ DeğerInk güzel yakalamak. +5 bayt ile düzeltildi.
tsh

Uzun regex yerine bir değiştirme işlevini kullanmak daha kısa olabilir
Downgoat

2

Pyth , 177 173 162 142 bayt

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'in string sıkıştırma mekanizmasına sahip olmayan bir versiyon (aka kopyala-yapıştır işlemi güvenlidir):

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

Çevrimiçi deneyin!

Bu çok uzun sürdü çünkü regex'lerde mümkün olduğunca bilgiçlik göstermeye çalıştım. Mümkün olan her ipi sıkıştırmaya çalıştım, ancak çoğu ya küçülmedi ya da TIO'ya düzgün bir şekilde yapıştırılamadı.

Açıklama:

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'in Ruby cevabından daha iyi bir regex sayesinde
  • -20 Ruby ve Perl cevaplarından esinlenerek, her iki onaltılık değiştirme için de bir döngü kullanılması sayesinde

1

Perl 5 -p , 152 145 bayt

@ValueInk 7 bayt kaydeder

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}

Çevrimiçi deneyin!


( \S+ )(Code Golf)\b/$2$1Coding2 bayt kaydeder. Ayrıca son regex \byerine sadece bir (?=\s|$)
Value Ink

Bu yorumu siz yazarken ilk üzerinde çalışıyordum. Bazı baytları kurtarmak için diğer değişiklikleri yaptım. Teşekkürler!
Xcali

Bunun \solması gerekir \W, aksi takdirde bu durumda başarısız olur ( -alfanümerik olmayan bir karakterdir, bu nedenle sübstitüsyon uygulanmalıdır).
Grimmy


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.