No jogo de cartas Magic: the Gathering, existem cinco cores diferentes, que representam afiliações frouxas de cartões: Branco ( W
), Azul ( U
), Preto ( B
), Vermelho ( R
) e Verde ( G
). Eles geralmente são organizados em um pentágono da seguinte maneira:
W
G U
R B
Tanto no folclore do MtG quanto em muitas mecânicas de cartas, as cores adjacentes nesse pentágono são geralmente consideradas aliadas, e as cores não adjacentes (tipo opostas) são consideradas inimigas.
Nesse desafio, você terá duas cores e deve determinar o relacionamento delas.
O desafio
Você recebe dois caracteres distintos do conjunto BGRUW
. Você pode tomá-los como uma cadeia de dois caracteres, uma cadeia com um delimitador entre os caracteres, dois valores de caracteres separados, duas cadeias singleton, dois inteiros representando seus pontos de código ou uma lista ou tipo de conjunto contendo dois caracteres / cadeias / números inteiros.
Sua saída deve ser um dos dois valores distintos e consistentes de sua escolha, um que indica que as duas cores são aliadas e outro que indica que são inimigos. Um desses dois valores pode não ter saída.
Você pode escrever um programa ou uma função e usar qualquer um dos nossos métodos padrão de recebimento de entrada e saída.
Você pode usar qualquer linguagem de programação , mas observe que essas brechas são proibidas por padrão.
Isso é código-golfe , então a resposta mais curta e válida - medida em bytes - vence.
Casos de teste
Existem apenas 20 entradas possíveis, então vou listar todas elas.
Amigos:
WU UB BR RG GW UW BU RB GR WG
Inimigos:
WB UR BG RW GU BW RU GB WR UG
fonte
Respostas:
JavaScript (ES6),
26 23 17 1514 bytesRecebe a entrada como dois códigos ASCII na sintaxe de currying
(a)(b)
. Retorna4
para amigos ou0
inimigos.Experimente online!
Quão?
Nota: apenas o quociente inteiro da divisão por 0,6 é mostrado abaixo.
Abordagem anterior, 15 bytes
Recebe a entrada como dois códigos ASCII na sintaxe de currying
(a)(b)
. Retorna0
para amigos ou1
inimigos.Experimente online!
Quão?
Abordagem inicial, 23 bytes
Recebe a entrada como uma sequência de 2 caracteres. Retorna
true
para amigos oufalse
inimigos.Experimente online!
fonte
a*b%290&8
funcionaria tão bem (produzindo0
para amigos ou8
para inimigos).Gelatina , 6 bytes
Toma dois pontos de código como argumento. Rende 1 para amigos, 0 para inimigos.
Experimente online!
fundo
Seja n e m os pontos de código de dois caracteres de entrada. Tomando | n - m | , precisamos nos preocupar apenas com todas as 2 combinações de caracteres. A tabela a seguir mostra todas as 2 combinações de caracteres correspondentes às diferenças absolutas.
Todos inimigo combinações são divisível por 3 , 5 ou 7 , mas nenhum dos amigos combinações este, assim que os amigos são exatamente aquelas que são co-prime com 3 × 5 × 7 = 105 .
Como funciona
fonte
_
é geléia. Você usou outra coisa?ạ
apenas como valor absoluto, não como diferença absoluta.Python 2 , 19 bytes
Experimente online!
Uma função anônima: retorna
1
para amigos e0
inimigos.fonte
Befunge-98,
1312 bytesExperimente online!
Impressões
0
para amigos e1
inimigosIsso usa a diferença entre os valores ASCII das letras.
Se pegarmos o
(((ASCII difference % 9) % 5) % 3)
, os valores para os inimigos serão 0. Então, não o valor e o imprimiremos.Obrigado a @Martin pelo golfe
fonte
IA%9%5%3¬
Editar Experimente Online!Geléia ,
87 bytesAnda às costas da fabulosa resposta Befunge de Mistah Figgins !
Experimente online!
Quão?
Como Mistah Figgins observou, a decisão pode ser tomada tomando a diferença absoluta entre os valores ASCII mod 9 mod 5 mod 3 - 0s são amigos e 1s e 2s são inimigos.
Se usarmos o mod 9 de diferença (simples), descobrimos que amigos são 1s, 2s, 7s e 8s, enquanto os inimigos são 3s, 4s, 5s e 6s.
O código leva a diferença com
I
e depois indexa a lista de comprimento 9[1,1,0,0,0,0,1,1,0]
, que é 390 em binário390B
,. A indexação é modular (efetivamente, a indexação executa o mod 9 de graça) e baseada em 1 (daí o 1 à esquerda).fonte
Metaprogramação de modelos C ++, 85 bytes
menos golfe:
Como essa é uma linguagem de metaprogramação, uma construção compilada ou não é uma saída possível.
Uma instância de
f<'W','B'>
compila se e somente se'W'
e'B'
são inimigos.Matemática baseada na resposta Befunge .
Exemplo ao vivo .
Como a metaprogramação de modelos C ++ é uma das piores linguagens de golfe, qualquer pessoa pior do que isso deve se sentir envergonhada. ;)
fonte
template
s.Ruby,
2219 bytesEntrada: código ASCII dos 2 caracteres. Saída: 1 para aliados, 0 para inimigos.
Como funciona:
Obtenha a diferença entre os 2 números do módulo 9, use uma máscara de bits (390 é o binário 110000110) e obtenha um único bit usando o
[]
operador.fonte
->x,y{x*y%103%2}
observe que0
e1
estão invertidos.x*y%51>9
como todo mundo. Eu acho que seria injusto com os upvotes mudá-lo tão radicalmente agora.CJam , 8 bytes
Um bloco sem nome que espera dois códigos de caracteres no topo da pilha e os substitui por
0
(amigos) ou1
(inimigos).Experimente online!
Explicação
Bem, já vimos muitas soluções aritméticas divertidas agora, então acho que tudo bem se eu apresentar a minha agora. O mais próximo disso que eu vi até agora é a solução C do Steadybox . Este foi encontrado com a ajuda de um forçador bruto do GolfScript que escrevi há algum tempo para o golfe da anarquia.
Aqui está o que este faz às várias entradas (ignorando a ordem, porque a multiplicação inicial é comutativa):
Podemos ver como a tomada do produto das entradas 51 separa bem as entradas em resultados grandes e pequenos, e podemos usar qualquer um dos valores intermediários para distinguir os dois casos.
fonte
Röda ,
302221 bytesBytes salvos graças a @fergusq usando
_
para obter os valores no fluxo como entradaExperimente online!
A função é executada como
push "WU" | f
após atribuir um nome à funçãoExplicação
fonte
{[(_.._)in"WUBRGWGRBUW"]}
mas a função deve ser chamada como[a, b] | f
.05AB1E , 10 bytes
Retorna 0 para amigo e 1 para inimigo.
Experimente online! ou como um conjunto de testes
Explicação
fonte
C,
3332292422 bytesRetorna 1 se amigos, 0 se inimigos.
fonte
Vim,
2221 bytesEntrada: uma única linha contendo os dois caracteres.
Saída: buffer vazio se amigos, buffer contendo
WUBRGWGRBUW
inimigos.Explicação
fonte
C
vez decw
Japonês , 6 bytes
Inspirado na solução de @Martin Ender .
Toma uma matriz de dois códigos de caracteres como entrada.
Experimente online! | Suíte de teste
Retorna
true
para amigos,false
para inimigos.Solução de 14 bytes:
Toma dois códigos de caracteres como entrada
Experimente online! | Suíte de teste
Explicação:
Solução de 12 bytes:
Experimente online! | Suíte de teste
Explicação:
Retorna
1
para amigos e0
inimigos.Solução de 9 bytes :
Inspirado na solução da @ Arnauld .
Suíte de teste
Retorna
1
para amigos,0
para inimigos.Solução de 11 bytes:
inspirado na solução de @Mistah Figgins .
Suíte de teste
fonte
Brain-Flak ,
155, 147, 135 bytesExperimente online!
São 134 bytes de código mais uma penalidade de byte para o
-a
sinalizador, o que permite a entrada ASCII.Isso funciona encontrando a diferença absoluta entre as entradas e verificando se são iguais a 2, 11, 16 ou 19. Se isso acontecer, a entrada é um amigo e imprime um 1. Caso contrário, não imprime nada. Como nada no cérebro corresponde a uma pilha vazia, que é falsa, nenhuma saída é um valor falso. ( meta )
Uma coisa que eu particularmente gosto nessa resposta é que o snippet "diferença absoluta" (ou seja
(([(({}[{}]))<>])){({}())<>}{}{}<>{}
) não é limpo de pilha, mas ainda pode ser usado nessa resposta, pois não nos importamos com qual pilha vamos terminar antes da codificação as possíveis diferenças.Em uma edição posterior, tirei vantagem disso ainda mais, abusando das sobras da pilha que não acabam com a diferença absoluta. Na primeira revisão, coloquei os dois para mantê-lo um pouco mais são. Não fazer isso dá dois grandes campos de golfe:
Obviamente, ele remove o código para exibi-los:,
{}{}
mas mais importante:Permite-nos comprimir a
2, 11, 16, 19
sequência depara
Felizmente, não há código extra necessário para lidar com essas sobras mais tarde, então elas são deixadas na pilha alternativa.
Como a quebra cerebral é notoriamente difícil de entender, aqui está uma versão legível / comentada:
fonte
Gelatina , 14 bytes
Retorna
1
para inimigos e0
amigos.Conjunto de testes em Experimente online!
Quão?
fonte
05AB1E , 7 bytes
Esta é uma porta da minha resposta Jelly . Leva uma lista de pontos de código como entrada. Imprime 1 para amigos, 0 para inimigos.
Experimente online!
Como funciona
fonte
CJam ,
16121110 bytesGolpeou 4 bytes usando o algoritmo de Mistah Figgins
Guardado 1 byte graças a Lynn
Saídas
1
para cores inimigas,0
cores aliadas.Experimente online! (Ou verifique todos os casos de teste )
Explicação
fonte
l:m9%5%3%!
é um byte mais curto.Retina , 18 bytes
Experimente online!
Bem direto: classifica a entrada e tenta combinar qualquer um dos pares de aliados classificados contra ela. Infelizmente, não acho que a natureza baseada em string de Retina permita que qualquer uma das abordagens mais interessantes seja competitiva.
Como uma prévia da próxima versão do Retina, estou planejando adicionar uma opção que troque regex e sequência de destino (para que a sequência atual seja usada como regex e você dê uma sequência para verificação); nesse caso, isso é mais curto solução funcionará (ou algo nesse sentido):
fonte
Java (OpenJDK 8) ,
2823 bytes-5 bytes graças ao fergusq
Experimente online!
fonte
"WUBRGWGRBUW"::contains
?Braquilog , 10 bytes
Uma solução direta, sem truques envolvidos.
Experimente online!
Explicação
fonte
Gelatina , 6 bytes
Pelo bem da integridade. Toma dois pontos de código como argumento. Rende 0 para amigos, 1 para inimigos.
Experimente online!
fundo
Seja n e m os pontos de código de dois caracteres de entrada. Tomando | n - m | , precisamos nos preocupar apenas com todas as 2 combinações de caracteres. A tabela a seguir mostra todas as 2 combinações de caracteres correspondentes às diferenças absolutas.
Se dividirmos esses números inteiros por 3 , obteremos os seguintes quocientes.
1 , 4 e 7 podem ser mapeados para 1 usando o módulo de resultados 3 .
Agora só temos que olhar para a paridade.
Como funciona
fonte
Cubix, 11 bytes
Uma implementação do Cubix da solução da Arnauld.
Uso
Digite os dois caracteres e será exibido
0
para amigos e1
inimigos. Experimente aqui.Explicação
O código pode ser expandido assim.
Os caracteres são executados nesta ordem (excluindo o fluxo de controle):
fonte
Python 2 , 26 bytes
Experimente online!
fonte
AWK, 23 bytes
Exemplo de uso: awk '{$ 0 = "WUBRGWGRBUW" ~ $ 1} 1' <<< UB
Imprime
1
se o par for um amigo,0
caso contrário. Eu queria fazer algo inteligente, mas tudo que eu pensava seria mais longo.fonte
Gelatina , 12 bytes
Saídas
1
para aliados,0
inimigos.Experimente online!
Explicação
fonte
Ruby, 28 bytes
Saídas true para friend, false para foe:
A versão ungolfed não é muito diferente:
fonte
05AB1E , 7 bytes
Adaptação do mod-trick da resposta de Jonathan's Jelly
Experimente online! ou como um conjunto de testes
Explicação
fonte
GolfScript , 7 bytes
Toma dois pontos de código como entrada.
Experimente online! (Conjunto de testes que converte o formato de entrada por conveniência.)
Uma porta GolfScript da minha resposta CJam (que tecnicamente é uma porta CJam do resultado do meu forçador bruto GolfScript ... uhhh ...).
No entanto, como o GolfScript acerta o módulo com entradas negativas, existe uma solução alternativa divertida na mesma contagem de bytes que usa
4
para inimigos em vez de1
:Experimente online!
fonte
Java 7, 38 bytes
A porta da resposta Befunge-98 do @Mistah Figgins é a mais curta do Java 7 das respostas postadas até agora.
Quanto aos outros:
39 bytes: porta da resposta JavaScript (ES6) de @Arnauld .
39 bytes: Porto de @MartinEnder resposta CJam 's
47 bytes: porta da resposta C do @Steadybox '
52 bytes: porta da resposta Python 2 de @Lynn
NOTA: Respostas ignoradas que usam números primos / palíndromos e similares, porque essas não são nem um pouco curtas em Java. ;)
TODO: Apresentando minha própria resposta. Embora eu duvide que seja mais curto que a maioria delas.Tente tudo aqui.
Edição: Ok, veio com algo que não é tão ruim:
50 bytes:
Explicação:
Todos os inimigos estão entre 4-6 (inclusive) ou 0.
EDIT2: Hmm .. Acabei de notar que é muito semelhante à resposta do @Steadybox .. :(
fonte
PHP, 31 bytes
Corra com
echo AB | php -nR '<code>
, ondeA
eB
são as duas cores.strtr
retorna a string da posição em que a entrada é encontrada;com
WBGURWRUGBW
como palheiro, isso retorna uma sequência verdadeira se as cores são inimigas; cadeia vazia, se não.!
transforma a sequência truthy emfalse
, resultando em saída vaziae a string vazia em
true
, resultando em saída1
.fonte