Inspirado (com a explicação roubada) desta
fundo
Digamos que você tenha duas listas A = [a_1, a_2, ..., a_n]
e B = [b_1, b_2, ..., b_n]
números inteiros. Dizemos que A
é potencialmente divisível por B
se existe uma permutação B
que torna a_i
divisível por b_i
todos i
. O problema é então: é possível reordenar (isto é, permutar) B
para que a_i
seja divisível por b_i
todos i
? Por exemplo, se você tiver
A = [6, 12, 8]
B = [3, 4, 6]
Então a resposta seria True
, como B
podem ser reordenados para ser B = [3, 6, 4]
e então teríamos que a_1 / b_1 = 2
, a_2 / b_2 = 2
e a_3 / b_3 = 2
, todos os quais são inteiros, então A
é potencialmente divisível por B
.
Como um exemplo que deve False
gerar, poderíamos ter:
A = [10, 12, 6, 5, 21, 25]
B = [2, 7, 5, 3, 12, 3]
A razão False
é que não podemos reordenar, B
pois 25 e 5 estão dentro A
, mas o único divisor em B
seria 5, então um seria deixado de fora.
Sua tarefa
Sua tarefa é, obviamente, determinar se duas listas (fornecidas como entrada) são potencialmente divisíveis. Você pode receber informações de qualquer maneira aceita, como na saída.
As duplicatas nas listas são uma possibilidade e as únicas restrições de tamanho nos números inteiros são o seu idioma. Todos os números inteiros nas duas listas serão maiores que 0 e as duas listas terão o mesmo tamanho.
Como em todos os problemas de decisão, os valores de saída devem ser 2 valores distintos que representam verdadeiro e falso.
Este é um código de golfe, então o código mais curto vence!
Casos de teste
Input, input => output
[6, 12, 8], [3, 4, 6] => True
[10, 5, 7], [1, 5, 100] => False
[14, 10053, 6, 9] [1,1,1,1] => True
[12] [7] => False
[0, 6, 19, 1, 3] [2, 3, 4, 5, 6] => undefined
fonte
Respostas:
Gelatina , 5 bytes
Retorna 0 para True , 1 para False .
Experimente online!
Como funciona
fonte
Casca ,
765 bytesGuardado 2 bytes graças a @Zgarb
Toma argents na ordem inversa e retorna
1
paraTrue
e0
paraFalse
.Experimente online!
Explicação
fonte
VΠMz¦P
deve funcionar para 6 bytes.Mz
pode ser‡
.▼▲
vez de▲▼
. Boa idéia em qualquer caso!05AB1E , 7 bytes
Entrada: aceita as listas B e A (ordem inversa)
Saída: 1 quando verdadeiro, 0 caso contrário
Experimente online!
Explicações:
fonte
MATL ,
876 bytes1 byte usando uma ideia da resposta de Dennis 'Jelly
Entradas são
B
, entãoA
. A saída é0
divisível ou1
não.Experimente online!
Explicação
fonte
Mathematica, 52 bytes
obrigado @ngenisis por -5 bytes
fonte
Cases
é geralmente mais curto:Cases[Permutations@#2,p_/;And@@IntegerQ/@(#/p)]!={}&
JavaScript (ES6),
6763 bytesRetorna um booleano.
Casos de teste
Mostrar snippet de código
fonte
Haskell ,
7974686261 bytesExperimente online!
Guardado 1 byte graças a @nimi
fonte
f a=any((<1).sum.zipWith rem a).permutations
.R + combinado ,
696658 bytes-3 bytes graças a Jarko Dubbeldam
mais -8 bytes graças ao Jarko
estranhamente, R não tem um builtin para gerar todas as permutações. Retorna um booleano.
Além disso, com o segundo aprimoramento de Jarko,
any
a lista é forçada a um vetor delogical
com um aviso.Experimente online! (r-violino)
fonte
Mathematica, 42 bytes
fonte
Geléia , 7 bytes
Experimente online!
Complexidade fatorial no comprimento da lista.
fonte
any
builtin? TILPitão - 11 bytes
Conjunto de Teste .
fonte
J, 27 bytes
Experimente online!
Leva a primeira lista como argumento à esquerda e a segunda lista como a direita.
fonte
(|"1~e.~0*[)i.@!@#A.]
CJam,
2017 bytesVersão de teste
Função que usa a matriz B como o primeiro argumento e a matriz A como o segundo argumento. Observe que, na versão de teste, alterno a ordem para A e depois para B.
fonte
JavaScript (ES6), 100 bytes
Um pouco ineficiente; um extra
&
aceleraria.fonte
PHP,
112 180178 bytesEu estava pensando muito curto.
A função anônima recebe duas matrizes, retorna
NULL
por falsidade e1
por verdade.Lança um erro se a segunda matriz contiver
0
.Experimente online .
fonte
$f([6,5],[3,5])
.C (gcc) , 191 bytes
Experimente online!
Uso:
f(int size, int size, int *a, int *b)
retorna
1
se divisível,0
caso contrário. Veja exemplo de uso no TIO.(Preciso fazer permutações da maneira mais difícil em C, então isso não é competitivo)
fonte
Perl 6 , 38 bytes
Na verdade, a resposta do @ nwellnhof parece ser muito legível, então decidi seguir a boa tradição Perl do código somente para gravação :—).
1 byte salvo graças a @nwellnhof.
Experimente online!
O que faz: é uma função anônima que recebe dois argumentos de lista. Quando dizemos
@^a
, queremos dizer o primeiro, quando@^b
, é o segundo.(@^a,)
é uma lista que contém a lista@^a
.@^b.permutations
é a lista de todas as permutações de@^b
. O operador "XZ %%" cria todos os pares possíveis dessa lista à esquerda e todas as permutações à direita e usa o operador "Z %%" neles, que é a operação "zip" padrão usando o operador de divisibilidade %%.O
max
operador fornece o maior elemento da lista (nesse caso, é a lista que contém maisTrue
). Em seguida, reduzimos isso usando o operador AND lógico para ver se todos os elementos dessa lista "mais verdadeira" são verdadeiros, e esse é o resultado. É uma cópia quase exata do que o @nwellnhof escreveu, apenas usando operadores obscuros para cortar bytes.fonte
permutations
que é claramente legível demais;)[&&]
pormin
para salvar outro byte.XZ%%
{all (@^a,)Z%%@^b.permutations.any}
fosse possívelBraquilog , 6 bytes
Experimente online!
O predicado será bem-sucedido se as duas listas forem potencialmente divisíveis e falhará se não forem.
fonte
Python 2 , 92 bytes
Experimente online!
Sua implementação básica.
fonte
Python 2 , 90 bytes
Experimente online!
fonte
Ruby , 56 bytes
Experimente online!
Bastante simples, explora o fato de que
permutation
existe.fonte
Scala, 60 bytes
Golfe:
Ungolfed:
fonte
Japonês ,
1211 bytesSaídas
true
oufalse
.Teste-o
Explicação
Entrada implícita de matrizes
U
&V
(A
&B
, respectivamente)Gere uma matriz de todas as permutações de
V
.Verifique se algum dos elementos (sub-matrizes) retorna verdadeiro.
Verifique se todos os elementos no sub-array atual retornam true quando passados pela função a seguir,
X
sendo o elemento atual eY
o índice atual.Coloque o elemento em
U
indexY
.Verifique se é divisível por
X
.fonte