Disclaimer: Este não é o meu desafio, mas ThisGuy disse que eu estava bem em postar.
Ocasionalmente, quero escrever uma palavra sobre o oposto, como happiness
vai para unhappiness
. Infelizmente, quando isso acontece, meu cérebro às vezes fica em branco. Então, um dia, depois de mais um acontecimento, pensei: "É para isso que servem os programas!"
Como o idioma inglês possui muitas exceções, criei uma lista que contém o prefixo da letra inicial
q or h -> dis- (honest -> dishonest)
l -> il- (legal -> illegal)
m or p -> im- (mature -> immature)
r -> ir- (responsible -> irresponsible)
everything else -> un- (worthy -> unworthy)
Tarefa
Dada uma entrada como uma sequência, faça com que a sequência seja negativa e produza o resultado. Você pode assumir que todas as entradas fornecidas se ajustarão às regras acima. Os envios podem ser programas ou funções, não trechos.
Entrada
Uma única sequência, tomada como parâmetro ou em STDIN
Resultado
A forma negada dessa sequência, em conformidade com as regras acima
Como ganhar
Este é um código de golfe, então o código mais curto ganha
q
sem semu
?qadi
,qat
, o já mencionadoqi
,qirsh
eqwerty
. (I jogar um monte de Scrabble)q
seja sempre seguido por au
na string ou não?u
Respostas:
Python, 55 bytes
Experimente online!
Precisamos lidar com 7 letras iniciais diferentes:
g
->dis
,h
->dis
,p
->im
,m
->im
,l
->il
,r
->ir
e tudo mais ->un
Podemos armazenar todas essas negações em uma única sequência e extrair a correta através do corte:
Agora precisamos calcular o índice inicial
i
.'rlmphq'.find
retorna 0 para'r'
, 5 paraq
e -1 para tudo que não está contido na string. Para obter o valor necessário de 0 a 6, ainda precisamos subtrair o valor de retorno de 5, resultando neste código:fonte
ddiiiiuiimmlrnss
erlmphq
eo número5
para, por que é a fatia pular 7?GNU sed , 50 bytes
Inclui +1 para
-r
Nada chique. Usa
&
na substituição para combinar algumas substituições et
pular a última se uma das primeiras substituições ocorrer.Experimente online!
fonte
Gelatina , 30 bytes
Experimente online!
Quão?
Observe que a repetição
r
de entrada“qmlrrhp”
está no 5º índice, que, se referenciado, resultaria em prefixaçãoun
, portanto, poderia igualmente ser algo diferente deh
oup
.fonte
/// ,
5956 bytesExperimente online!
A entrada ocorre depois da última
#
.Como funciona:
Fiz uma otimização que reduziu o tamanho para 56 bytes, mas como isso complica, explicarei a versão original e depois explicarei o golfe.
Intuição: o desafio é bastante simples, basta adicionar o negativo, dependendo do início da palavra. No entanto, em ///, você não pode apenas
concatenate if [...]
, só pode substituir algo seguindo um padrão específico. Portanto, neste programa, as palavras positivas no início são substituídas pelas palavras negativas no início. O#
foi adicionado para se certificar de que uma vez que um novo começo foi adicionado, seria adicionado não mais novos começos. O#
também tornou possível fazer 'tudo o resto: un'.O golf incorpora uma nova substituição no que ele começando:
/^/\/\/#/
. Isso substitui tudo^
por//#
, que era um padrão comum na versão original.fonte
TI-Básico, 104 bytes
Requer todas as letras maiúsculas.
Explicação:
fonte
JavaScript (
716461 bytes)w=>({q:a='dis',h:a,l:'il',m:b='im',p:b,r:'ir'}[w[0]]||'un')+w
Editar% s:
charAt(0)
->[0]
)fonte
w[0]
vez dew.charAt(0)
?w=>...
? A definição da função real incluirialet f=w=>...
? (Provavelmente coberto de um FAQ em algum lugar ...)w=>({q:a='dis',h:a,l:'il',m:b='im',p:b,r:'ir'}[w[0]]||'un')+w
3 bytes menosLote, 114 bytes
Verifica o primeiro caractere da palavra na lista de prefixos personalizados e, se houver, altera o prefixo do padrão de
un
. Caixa especialqu
é possível a um custo de 21 bytes.fonte
Haskell, 71 bytes
Exemplo de uso:
f "legal"
->"illegal"
. Experimente online!Crie uma tabela de consulta de pares de prefixo / substituição para procurar o primeiro caractere da sequência de entrada com um valor padrão
"un"
se não for encontrado.fonte
Retina , 54 bytes
Explicação:
Primeira vez que usei Retina. É uma linguagem bem legal.
Experimente online!
fonte
Javascript,
727166.616059 bytesw=>('dis....il.im...im.dis.ir'.split('.')[w.charCodeAt(0)-104]||'un')+w
w=>'un.dis.dis.il.im.im.ir'.split('.')['qhlmpr'.indexOf(w[0])+1]+w
Sim, ainda é mais do que uma solução existente. :)Caso isso precise de alguma explicação, estou aproveitando os pares q / he m / p combinando seu índice na cadeia de pesquisa com um mod 4 e, em seguida, usando isso como pesquisa na matriz de prefixos.
fonte
search
vez deindexOf
. E um pouco mais, eu acho que, usando&
em vez de%
search
. Não consigo ver como fazer o & truque funcionar - seria perfeito se minha matriz tivesse apenas 4 elementos.C,
109107 bytesExperimente online!
fonte
Mathematica, 107 bytes
Explicação:
StartOfString~~x:#:>#2<>x&
é uma função pura em que o primeiro argumento é um padrão de sequência a ser correspondido no início da sequência e o segundo argumento é uma sequência a ser anexada à correspondência. Retorna uma regra atrasada, adequada para uso internoStringReplace
. Isso é aplicado a cada um dos pares,{{"q"|"h","dis"},{"l","il"},{"m"|"p","im"},{"r","ir"},{_,"un"}}
resultando na lista de regrasFinalmente, esta lista é passada para a
StringReplace
qual fornece um operador em strings.fonte
PHP, 101 bytes
Versão Online
fonte
Excel 78 bytes
Encontrei alguns candidatos próximos usando métodos diferentes que tiveram 81 bytes:
E 84 bytes:
fonte
REXX, 78 bytes
Economiza alguns bytes, respondendo em MAIÚSCULAS, por exemplo, potente -> IMPOTENT.
fonte
Perl, 49 + 1 (
-p
sinalizador) = 50 bytesUsando:
Experimente online .
fonte
Clojure, 65 bytes
Bem, isso é chato ... mas eu não poderia torná-lo mais curto. Pelo menos, há muito pouco espaço em branco.
fonte
OCaml, 85
Função anônima, usa correspondência de padrão em seu primeiro caractere.
fonte