* Что такое трансмогрификатор?
В языке программирования C существуют формации, называемые орграфами и триграфами, которые представляют собой последовательности из двух и трех символов, которые оцениваются в менее общие символы. Например, вы можете использовать, ??-
если ваша клавиатура не имеет ~
.
В данном тексте замените все экземпляры следующих орграфов и триграфов (слева) на правильные, более короткие символы гольфа (справа).
??= #
??/ \
??' ^
??( [
??) ]
??! |
??< {
??> }
??- ~
<: [
:> ]
<% {
%> }
%: #
вход
Ввод текста ASCII. Трейлинг новой строки разрешен. Не должен быть действительный код C.
Выход
Вывод - один и тот же текст, все экземпляры вышеприведенных орграфов и триграфов заменены на сокращенную версию, оцениваемую слева направо. Трейлинг новой строки разрешен. Не должен быть действительный код C.
Тестовые случаи
=>
разделяет ввод и вывод.
if (true ??!??! false) { => if (true || false) {
??-arr.indexOf(n) => ~arr.indexOf(n)
function f(??) { console.log('test??'); } => function f(] { console.log('test^); }
/* comment :> :) *??/ => /* comment ] :) *\
%:What am I doing??!!??` => `#What am I doing|!??
??(??)??(??) <:-- not a palindrome => [][] [-- not a palindrome
?????????? => ??????????
int f(int??(??) a) ??< return a??(0??)??'a??(1??) + "??/n"; ??> => int f(int[] a) { return a[0]^a[1] + "\n"; }
??<:>??<% => {]{%
<:> => [>
<::> => []
:>> => ]>
#\^[]|{}~ => #\^[]|{}~
: > => : >
??=%: => ##
"??=%:"
является другим соответствующим тестом: в C, это означает ,"#%:"
где%:
не является особенным, но я думаю , что ваш ожидаемый выход"##"
.Ответы:
Сетчатка , 65 байт
Попробуйте онлайн!
T
немного неудобно в использовании, но все равно экономит 14 байт.источник
\?\?[^:%]
?\?\?[^:%?]
скорее)??a
вa
.%>
вместо>%
.C,
206205 байтов(-1 благодаря потолочной кошке)
Новые строки просто для удобства чтения.
Модифицируется
s
на месте. Протестировано с GCC и clang на Fedora Workstation, x86, в 32-битном и 64-битном режиме.С не совсем лучший язык для игры в гольф.
источник
C is not exactly the best language for golfing here.
без шуток. Выглядит хорошо :) Вспоминая, я должен был заставить все вопросы добавить +1 или +2 байта, если бы они использовали один из символов, которые диграф или триграф делают xDJavaScript (ES6), 106 байт
Как?
Это довольно просто.
Однако следует отметить, что:
Когда i меньше 9 , выражение
'<:<%%'[i-9] + ':>%>:'[i-9]
оценивает,undefined + undefined
чему равенNaN
(ложь, как и ожидалось).Когда i больше или равно 9 , выражение
'??' + "=/'()!<>-"[i]
оценивает,"??" + undefined
какое значение приведено к строке"??undefined"
(правда, когда мы ожидаем ложный результат).Вот почему мы должны обрабатывать тест в таком порядке.
Контрольные примеры
Показать фрагмент кода
источник
Рубин , 104 + 1 = 105 байт
Использует
-p
флаг для +1 байта.Попробуйте онлайн!
источник
Javascript (ES6),
131123 байтаисточник
PHP, 112 байт
Попробуйте онлайн!
PHP, 115 байт
Попробуйте онлайн!
PHP, 124 байта
Regex решение
Попробуйте онлайн!
источник
JavaScript (ES6), 113 байт
Не самое короткое, но я хотел попробовать другой подход.
источник