Um dado ocidental tradicional é um cubo, no qual os números inteiros 1 a 6 são marcados nas faces. Pares que somam 7 são colocados em faces opostas.
Como é um cubo, só podemos ver entre 1 e 3 faces (inclusive) 1 a qualquer momento. Rostos opostos nunca podem ser vistos ao mesmo tempo.
Sua tarefa é escrever um programa ou função que, dada uma lista de números inteiros representando os lados de um dado, determine se é possível ver esses rostos ao mesmo tempo.
1 Ok, talvez você possa ver 4 ou 5 rostos com um par de olhos, mas, para o propósito desse desafio, observamos o dado a partir de um único ponto.
Regras:
- Seu envio pode assumir a lista de entrada:
- Não está vazio.
- Contém apenas valores que satisfazem
1 ≤ n ≤ 6
. - Não contém elementos duplicados.
- Você não pode assumir que a entrada está classificada.
- Seu envio deve gerar um valor de verdade / falsidade : verdade é que os rostos podem ser vistos ao mesmo tempo, caso contrário, falso.
- Isso é código-golfe , então a resposta mais curta (em bytes) vence!
- As brechas padrão são proibidas por padrão.
Casos de teste
Verdade:
[6] (One face)
[6, 2] (Share a side)
[1, 3] (Share a side)
[2, 1, 3] (Share a vertex)
[3, 2, 6] (Share a vertex)
Falsy:
[1, 6] (1 and 6 are opposite)
[5, 4, 2] (2 and 5 are opposite)
[3, 1, 4] (3 and 4 are opposite)
[5, 4, 6, 2] (Cannot see 4 faces)
[1, 2, 3, 4, 5, 6] (Cannot see 6 faces)
code-golf
decision-problem
FlipTack
fonte
fonte
Respostas:
Python 2 , 35 bytes
Experimente online!
fonte
JavaScript (ES6),
38 34 30 2928 bytesRecebe a entrada como qualquer número de parâmetros separados. Retorna
0
ou1
.Casos de teste
Mostrar snippet de código
Quão?
Abaixo estão as versões simplificadas da expressão principal de acordo com o número de parâmetros fornecidos, variáveis indefinidas sendo coagidas a 0 ou false :
NB : A ordem de (a, b, c) não importa, porque eles sempre estão juntos no XOR.
O caso mais complicado é o terceiro. Aqui está uma tabela mostrando todas as combinações possíveis:
Alt. versão 1, 32 bytes
Recebe entrada como uma matriz. Retorna um booleano.
Casos de teste
Mostrar snippet de código
Alt. versão 2, Chrome / Firefox, 34 bytes
Este abusa dos métodos de classificação do Chrome e Firefox. Não funciona com o Edge.
Recebe entrada como uma matriz. Retorna
0
ou1
.Casos de teste
Mostrar snippet de código
fonte
Haskell , 24 bytes
-3 bytes graças a H.PWiz.
Experimente online!
Explicação
fonte
APL (Dyalog) , 7 bytes
Experimente online!
∘.+⍨
- tabela de adição (cada elemento com cada elemento)7∊
- 7 existe?~
- negarAPL (Dyalog) , 7 bytes
Experimente online!
7-⊢
- subtraia cada elemento de 7⊢∩
- cruzar com a matriz original⍬≡
vazio?fonte
R , 27 bytes
graças a Gregor por corrigir um erro
Experimente online!
Resposta do porto de Chas Brown . Ter operações vetorizadas ajuda a tornar isso muito mais curto em R.
fonte
(7-d)
, por outro lado ,d%in%d
tem precedência.Mathematica, 20 bytes
O
é\[Function]
-12 bytes de Martin Ender
-7 bytes de Misha Lavrov
Experimente online!
fonte
Haskell , 26 bytes
Experimente online!
fonte
Pitão , 5 bytes
Experimente aqui.
fonte
Na verdade , 8 bytes
Experimente online!(executa todos os casos de teste)
Explicação:
fonte
Casca , 5 bytes
Experimente online!
Explicação
fonte
Retina ,
2120 bytesExperimente online! O link inclui casos de teste. Editar: salvou 1 byte graças a @MartinEnder. Explicação:
Classifique a entrada.
Verifique se há um par de lados opostos (3 e 4 ordenados um ao lado do outro). Isso retorna 1 para um dado inválido ou 0 para um dado válido.
Negue logicamente o resultado.
fonte
Gelatina , 5 bytes
Experimente online!
Resposta do porto de Chas Brown .
Explicação
fonte
Alice , 18 bytes
Experimente online!
Impressões
Jabberwocky
para entradas válidas e nada mais.Explicação
Desdobrando o fluxo de controle em zigue-zague, o programa é realmente apenas:
fonte
Pitão , 5 bytes
Suíte de teste.
isaacg salvou um byte!
fonte
Ruby ,
36 31 2423 bytesExperimente online!
Era tão simples que eu procurava a solução para o problema errado o tempo todo.
fonte
05AB1E , 5 bytes
Experimente online!
Explicação
Uma das várias maneiras de fazer isso em 5 bytes em 05AB1E
fonte
Perl 5 , 51 + 1 (
-a
) = 52 bytesExperimente online!
fonte
3 1 4
dá verdade, que tal #say 1>grep{$x=$_;grep$_+$x==7,@F}@F
Retina , 20 bytes
Experimente online!
Uma alternativa à abordagem de Neil.
Explicação
Vire
6
,5
,4
para1
,2
,3
, respectivamente.Tente encontrar caracteres repetidos e conte o número de correspondências.
Verifique se o resultado foi zero (efetivamente uma negação lógica).
fonte
Java (OpenJDK 8) , 43 bytes
Experimente online!
fonte
GNU sed ,
3722 + 1 = 23 bytes+1 byte para
-r
sinalizador. Recebe a entrada como dígitos; imprime a entrada para verdade e0
falsidade.-10 bytes graças a @MartinEnder.
Experimente online!
Explicação
Semelhante à resposta de Alice do @ MartinEnder .
fonte
Perl 6 , 18 bytes
Experimente online!
1 & 6 | 2 & 5 | 3 & 4
é uma junção que consiste nos números 1 e 6, OU nos números 2 e 5, OU nos números 3 e 4. Essa junção é um elemento da (∈
) lista de entrada*
se ela contiver 1 e 6, ou 2 e 5 ou 3 e 4. Esse resultado é negado (!
) para obter o valor booleano necessário.fonte
Haskell,
46 4137 bytesLeva consigo o produto cartesiano da lista e verifica se todas as listas resultantes não somam 7. (Se alguma delas somava 7, faces opostas seriam visíveis e "nem tudo é" é menor que "não"). any do ".)
fonte
J , 12 bytes
This is pretty much the same as the first APL solution by Uriel
Try it online!
fonte
IBM/Lotus Notes Formula, 7 bytes
Takes input from a multi-value number field i.
Recursively subtracts each value of i from 7 and checks to see if it is in the original list. ! changes the 1 if it is to a 0 (faces cannot all be seen).
Test Cases (no TIO available for Notes Formula)
fonte
Clean, 49 bytes
Try it online!
fonte
Swift, 46 bytes
Takes input as
[Int]
(integer array) and returns aBool
(boolean).Short Explanation (ungolfed)
fonte
Clojure,
898072 bytes-9 bytes because I realized use of
reduced
is unnecessary-8 bytes by changing from using
reduce
to usingsome
I tried writing this without looking at any of the tricks other answers use. I may be able to improve on this later.
Returns
true
for true cases,false
if any sides sum to 7, andnil
if the number of sides is illegal.fonte