* O que é um transmogrificador?
Na linguagem de programação C , há formações chamadas digrafos e trigramas que são sequências de dois e três caracteres que avaliam caracteres menos comuns. Por exemplo, você pode usar ??-
se o teclado não tiver ~
.
Com o texto, substitua todas as instâncias dos seguintes dígrafos e trigramas (lado esquerdo) pelo caractere correto, mais curto e em forma de golf (lado direito).
??= #
??/ \
??' ^
??( [
??) ]
??! |
??< {
??> }
??- ~
<: [
:> ]
<% {
%> }
%: #
Entrada
A entrada é texto ASCII. Nova linha à direita permitida. Não precisa ser um código C válido.
Resultado
A saída é o mesmo texto, com todas as instâncias dos dígrafos e trigramas acima substituídas pela versão reduzida, avaliadas da esquerda para a direita. Nova linha à direita permitida. Não precisa ser um código C válido.
Casos de teste
=>
separa entrada e saída.
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"; }
??<:>??<% => {]{%
<:> => [>
<::> => []
:>> => ]>
#\^[]|{}~ => #\^[]|{}~
: > => : >
??=%: => ##
"??=%:"
é outro caso de teste relevante: em C, isso significa"#%:"
que%:
não é especial, mas acho que é o resultado esperado"##"
.Respostas:
Retina , 65 bytes
Experimente online!
T
é um pouco estranho de usar, mas ainda me salva 14 bytes.fonte
\?\?[^:%]
?\?\?[^:%?]
sim)??a
ema
.%>
vez de>%
.C,
206205 bytes(-1 graças a ceilingcat)
As novas linhas estão aqui apenas para facilitar a leitura.
Modifica
s
no local. Testado com GCC e clang na Estação de Trabalho Fedora, x86, no modo de 32 bits e 64 bits.C não é exatamente o melhor idioma para jogar golfe aqui.
fonte
C is not exactly the best language for golfing here.
sem brincadeiras. Looks good :) volta Pensando, eu deveria ter forçado todas as perguntas para adicionar +1 ou +2 bytes se eles usaram um dos caracteres que um dígrafo ou trigraph faz xDJavaScript (ES6), 106 bytes
Quão?
Isso é bem direto.
No entanto, devemos observar que:
Quando i é menor que 9 , a expressão
'<:<%%'[i-9] + ':>%>:'[i-9]
avalia comoundefined + undefined
igualNaN
(falso conforme o esperado).Quando i é maior ou igual a 9 , a expressão
'??' + "=/'()!<>-"[i]
avalia"??" + undefined
qual é a coerção da string"??undefined"
(na verdade quando esperamos um resultado falso).É por isso que devemos processar o teste nesta ordem.
Casos de teste
Mostrar snippet de código
fonte
Ruby , 104 + 1 = 105 bytes
Usa o
-p
sinalizador para +1 byte.Experimente online!
fonte
Javascript (ES6),
131123 bytesfonte
PHP, 112 bytes
Experimente online!
PHP, 115 bytes
Experimente online!
PHP, 124 bytes
Solução Regex
Experimente online!
fonte
JavaScript (ES6), 113 bytes
Não é o mais curto, mas eu queria tentar uma abordagem diferente.
fonte