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


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
Следует ли применять подстановки только в том случае, если есть границы слов вокруг подстрок или везде?
Эрик Outgolfer

1
@EriktheOutgolfer Хороший улов; должны иметь границы слов. Я уточню это; Благодарю.
HyperNeutrino

Определить «границу слова» для #; Реализации regex обычно не рассматривают # для начала слова.
Томсминг

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

1
Предлагаемые тесты Code Golf and Programming Puzzlesи Programming Puzzles and Programming Puzzles and Code Golf. @Veskah Хм, и я думаю, что последний предложенный тестовый пример не удался в моем ответе 05AB1E, так как у меня нет регулярного выражения ..>. <Вернуться к чертежной доске ..
Кевин Круйссен

Ответы:


12

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

В конечном итоге он очень похож на ответ sed, но он использует строковую интерполяцию Ruby для дублирования совпадения гекс-группы ([\da-f]{1,2})в третьем регулярном выражении три раза вместо необходимости повторять все заново.

  • -1 байт из @ randomdude999.
  • -5 байт от использования решения Perl @ Xcali's
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

Сбой для этого случая ( -не алфавитно-цифровой символ).
Эрик Outgolfer

@ randomdude999 да, хороший улов. Добавлена ​​проверка для этого.
Value Ink

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

Разве вы не можете заменить (?<!\w)мой (^|\W)на 1 символ?
Томсминг

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#соответствуют только #те символы, которые не следуют за символом слова. Изменить: Сохранено 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 давай, что правило границы слова глупо. Посмотри, что я должен был сделать в этом #деле.

Да, я даже не пытался. :П

+9 к @Value Ink


3
Флаги больше не включаются в число байтов, поэтому вы можете извлечь дополнительный байт и -Eвместо этого назвать его «GNU sed ».
Value Ink

@ValueInk Whaaaaat? Я, видимо, слишком долго был вне связи с этим сообществом, чтобы не замечать этого. Я думаю, что это хорошее правило. Также спасибо за упоминание.
Томсминг

не sed«s регулярного выражения соответствия позволяет использовать в \dкачестве ярлыка для 0-9? может сэкономить вам целых 6 байтов
randomdude999

Также я только что заметил, что вы возвращаете «Пазлы программирования или проблемы с кодированием» для второго контрольного примера вместо ожидаемых «Проблемы с гольфом или кодированием».
Value Ink

@ randomdude999 Справочная страница 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потому что квалификатор regex {3,6}соответствует от 3 до 6 символов вместо 3 или 6, которые, как я предполагаю, вы использовали.
Чернила стоимости

@ValueInk хороший улов. исправлено с +5 байтами.
TSH

Может быть короче использовать функцию замены над длинным регулярным выражением
Downgoat

2

Пиф , 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|$)
Value Ink

Я работал над первым, пока ты печатал этот комментарий. Я сделал другое изменение, чтобы сохранить несколько байтов. Спасибо!
Xcali

Это \sдолжно быть \Wвместо этого, в противном случае это терпит неудачу в этом случае ( -это не буквенно-цифровой символ, поэтому следует применить подстановку).
Grimmy


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.