Nesta tarefa, consideramos matrizes de números inteiros positivos como este:
3 18 321 17 4 4 51 1 293 17
A entrada compreende um par de tais matrizes de comprimento positivo arbitrário, possivelmente distinto. Determinar se uma ordenação total ≤ X ⊂ N × N , onde N representa o conjunto dos números inteiros positivos, existe de modo a que ambas as matrizes de entrada estão em ordem em relação à ≤ X . Observe que (A ≤ X B ∧ B ≤ X A) ↔ A = B deve manter, ou seja, dois números são considerados iguais em ≤ X se e somente se eles tiverem o mesmo número.
Por exemplo, se a entrada fosse o par de matrizes
7 2 1 1 4 12 3
9 8 7 2 5 1
então você deve descobrir se existe uma ordem total ≤ X de tal forma que
7 ≤ X 2 ≤ X 1 ≤ X 1 ≤ X 4 ≤ X 12 ≤ X 3
e
9 ≤ X 8 ≤ X 7 ≤ X 2 ≤ X 5 ≤ X 1.
Seu envio pode ser uma sub-rotina ou programa que recebe duas matrizes (como especificado acima) de entrada de uma maneira definida pela implementação, calcula se existe uma ordem total ≤ X satisfazendo as demandas mencionadas acima e retorna um valor que representa "sim" ou outro valor representando "não". A escolha desses valores é arbitrária, por favor, documente-os.
Você pode supor que as matrizes de entrada não contenham mais que 2 15 - 1 elementos cada e que cada um de seus elementos esteja no intervalo de 1 a 2 15 - 1, inclusive. Você pode exigir que cada matriz seja finalizada por um sentinela constante fora do intervalo acima mencionado, como 0. Por favor, especifique o que o sentinela é necessário. Você pode exigir os comprimentos das matrizes como entrada adicional se o comprimento não puder ser deduzido das próprias matrizes (por exemplo, em idiomas como C). Além da proibição de brechas padrão, você não tem permissão para usar rotinas de classificação topológica.
Esse desafio é o código de golfe. O envio com a menor quantidade de caracteres vence.
fonte
Respostas:
Pyth,
2822Cria uma função
y
que você pode chamar com uma tupla contendo as duas matrizes. Retorna "Verdadeiro" se houver uma ordem total, "Falso", se não.Um programa auxiliar que define e chama a função acima com stdin:
Experimente aqui.
Primeiro lemos as duas matrizes. Em seguida, criaremos todas as combinações de ambas as matrizes. Então, para cada combinação, assumiremos que a primeira matriz é autoritativa e verificaremos se é consistente com a segunda matriz.
fonte
Receives two arrays ... in an implementation-defined way.
Você pode salvar pelo menos 7 caracteres.GolfScript, 25 bytes
Experimente este código online.
Pega uma matriz de duas (ou mais!) Matrizes na pilha; retorna 1 (verdadeiro) se cada par de matrizes de entrada tiver uma ordem total compatível ou 0 (falso) caso contrário.
Ele funciona repetindo todos os pares possíveis de matrizes de entrada (incluindo cada matriz emparelhada), classificando os elementos na primeira matriz de acordo com a posição em que ocorrem pela primeira vez na segunda (ignorando os que não foram encontrados) e verificando que o pedido resultante corresponde ao original.
Embora esse código possa receber um número arbitrário de matrizes de entrada, é importante notar que ele apenas verifica a consistência em pares . Por exemplo, ele retorna true para a entrada
[[1 2] [2 3] [3 1]]
, pois qualquer uma das três matrizes possui um pedido total consistente. Isso é suficiente para o caso de duas entradas, porém, que é tudo o que o desafio exige.Aqui está uma versão sem golfe com comentários:
Ps. Seria possível salvar trivialmente um ou dois bytes, exigindo que a entrada fosse fornecida diretamente na variável nomeada
A
e / ou alterando o formato de saída para uma matriz vazia para "yes" e uma matriz não vazia para "no" . No entanto, isso me pareceria um pouco extravagante.fonte
J,
363026 bytesVamos chamar as duas listas de entrada
a
eb
. A função verifica (com(e.~(-:/:~)@#i.)
) sea
os elementos de s classificados (em relação aa
) emb
a
os elementos de s classificados (em relação aa
) ema
b
os elementos de s classificados (em relação ab
) ema
b
os elementos de s classificados (em relação ab
) emb
Entrada é uma lista de dois vetores inteiros.
O resultado é
1
se uma ordem existir de0
outra forma. (O tempo de execução é O (n * n).)Uso:
Experimente online aqui.
fonte
b
não pode ser classificado em relação ab
?b=1 2 1
ou na minha segundo exemplob=7 2 1 1 4 12 3 1
Ruby, 79
Espera que a entrada seja um arquivo de duas linhas de números separados por espaço. Retorna
true
quando existe um pedido,nil
se não existir .fonte
nil
oufalse
parecer errado demais.nil
oufalse
está absolutamente ok.Haskell, 98 bytes
Retorna
True
ouFalse
. Exemplo de uso:[7,2,1,1,4,12,3] # [9,8,7,2,5,1]
->True
.Como funciona: remova duplicatas consecutivas das listas de entrada (por exemplo:.
[1,2,2,3,2] -> [1,2,3,2]
Existe uma ordem se as duas listas resultantes não contiverem duplicatas e a interseção de list1 e list2 for igual à interseção de list2 e list1.fonte