Новий дизайн сайту!


57

Якщо у вас немає сценарію користувача, який змінює дизайн сайту (або навіть якщо так), ви повинні помітити, що у нас є дизайн сайту!

(Зараз листопад)

Отже, для святкування давайте зробимо програму, яка заднім числом застосовує цю конструкцію (звичайно спрощена)!

Отже, найважливішими змінами є:

  • наше нове ім'я - це тепер Code Golf та Coding Challenges
  • наш сайт вже не синій колір за замовчуванням, а натомість приємний темно-зелений

Отже, задавши рядок, змініть:

  • 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
Чи слід застосовувати підстановки, лише якщо навколо підрядків або скрізь є межі слів?
Ерік Аутгольфер

1
@EriktheOutgolfer Хороший улов; повинні мати межі слів. Я уточню це; Дякую.
HyperNeutrino

Визначте "межу слова" для #; реалізація регулярних виразів зазвичай не вважає # для початку слова.
tomsmeding

1
О, я думаю, Programming Puzzles and no substitution Code Golfможе також когось спіймати (хоча всі користуються тим самим дійсним виразом)
Veskah

1
Пропоновані тестові кейси Code Golf and Programming Puzzlesта Programming Puzzles and Programming Puzzles and Code Golf. @Veskah Хм, і я думаю , що останній запропонував тест зазнає невдачі в моєму 05AB1E відповідь, так як у мене немає регулярних виразів ..> <Назад до креслярської дошці ...
Кевін Cruijssen

Відповіді:


12

Рубі -p , 165 164 159 байт

Це виявилося дуже схожим на відповідь sed, але він зловживає рядковою інтерполяцією Рубі, щоб дублювати шістнадцяткову групу, що відповідає групі ([\da-f]{1,2})в третьому регулярному виразі, замість того, що потрібно повторювати це все ще раз.

  • -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}розрив із шістнадцятковими входами довжиною 4 або 5, наприклад #aabbc? Редагувати: так (цей приклад не слід замінювати, оскільки він не є дійсним шістнадцятковим кольором).
randomdude999

Збій у цій справі ( -не буквено-цифровий символ).
Ерік Аутгольфер

@ randomdude999 так, хороший улов. Додано чек на це.
Значення чорнила

@EriktheOutgolfer так, я думаю. «Межі слова» з #трохи неоднозначним , оскільки /\b/не реєструє з ним поруч з іншим не алфавітно-цифровий, але я зробив зміни в будь-якому випадку для яких - або змін байт (замінює \Sз \w)
Value Ink

Ви не можете замінити свій (?<!\w)на мій (^|\W)на 1 char?
tomsmeding

9

C ++ (gcc) , 270 285 283 байт

Дякуємо Нілу за вказівку на помилку.

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

Спробуйте в Інтернеті! Посилання включає тестові випадки. Усі заміни залежать від регістру. Припускає, що звичайні символи слова з регулярним вираженням є прийнятними, так що вони \B#відповідають лише #sм, які не слідують за символом слова. Редагувати: Збережено 22 байти завдяки @tsh.


Спробуйте \B#(?=([\da-f]{3}){1,2}\b)(.+?)(..??)(..??)\b?
tsh

5

GNU sed -E, 198 chars

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збігання регулярних виразів не дозволяє використовувати \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і Programming Puzzles and Programming Puzzles and Code Golf.
+4 байти, що фіксують тестові випадки color-#00f(кольори з чимось, крім пробілів / нових рядків, що оточують його). Дякуємо @Grimy за те, що донесли це до моєї уваги.

Залежно від регістру. Шістнадцяткові значення мають малі літери 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 символами, а не 3 або 6, на які я припускаю, що ви збиралися.
Значення чорнила

@ValueInk приємний вилов. зафіксовано +5 байт.
tsh

Можливо, буде коротше, щоб скористатися функцією заміни довгим регулярним виразом
Пуховик

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

Спробуйте в Інтернеті!

Це закінчилося дуже довго, тому що я намагався бути максимально педантичним з регексами. Я намагався стиснути всі можливі рядки, але більшість з них або не зменшилися, або не вдалося вставити належним чином у 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 завдяки кращому зворотному значенню від відповіді Ruby Value Ink
  • -20 завдяки використанню циклу для обох шестигранних замін, натхнених відповідями 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 байти. Також останній регулярний вираз може закінчитися лише \bзамість(?=\s|$)
Ink Value Ink

Я працював над цим першим, поки ви друкували цей коментар. Я вніс інші зміни, щоб зберегти кілька байт. Дякую!
Xcali

Це \sмає бути \Wзамість цього, інакше це не відповідає цій справі ( -носить не буквено-цифровий символ, тому слід застосовувати заміну).
Grimmy


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.