Jump to content

Questão sobre programação


escrapela
 Share

Recommended Posts

Boas pessoal venho aqui pedir um pouco de ajuda para tentar fazer uma coisa simples que precisava para o work.

Vou tentar ser o mais explicito e simples possivel.

- tenho um conjunto de valores

      - 2344

      - 345

      - 978

      - ...

- Possuo barras de 6300

Objectivo :  Agregar os valores dentro de cada barra de 6300 fazendo o melhor aproveitamento possível.

Ou seja:

Barra 1 - 2345 + 345 + y + x

Barra 2 - m + d + t +....

Desde já agradeço a vossa ajuda

Cumprimentos

Vitor Pereira

Link to comment
Share on other sites

E qual é mesmo a tua questão sobre programação?

10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Link to comment
Share on other sites

Sorry esqueci-me de especificar a questão:

A questão é se é possível fazer e qual a linguagem para apropriada para uma simples aplicação.

Possível é.

Podes fazer isso em qualquer linguagem. Numa linguagem como o Pascal ou o Ptython isso faz-se rápido.

10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Link to comment
Share on other sites

Já agora, fiquei com curiosidade e comecei a fazer em Prolog.

del(A,[A|L1],L2) :- del(A,L1,L2),!.
del(A,[b|L1],[b|L2]) :- del(A,L1,L2),!.
del(_,L,L).
ss([],_).
ss([A|B],C) :- member(A,C),del(A,C,C1),ss(B,C1).

list_sum([], 0).
list_sum([Head | Tail], TotalSum) :-
    list_sum(Tail, Sum1),
    TotalSum is Head + Sum1.

list_sum_smaller(L, N) :-
    list_sum(L, Sum),
    Sum =< N.

sums(Inputs, Max, Total, Result) :-
    ss(Result, Inputs),
    list_sum_smaller(Result, Max),
    list_sum(Result, Total).
    
best_effort(Inputs, Max, J) :-
    bagof((Total, Result), fd_maximize(sums(Inputs, Max, Total, Result), Total), J).

Uso:

| ?- best_effort([3,6,9], 12, Possibilities).
Possibilities = [(12,[3,9]),(12,[9,3])]

| ?- best_effort([3,6,9], 11, Possibilities).
Possibilities = [(9,[3,6]),(9,[6,3]),(9,[9])]

Só não sei remover os repetidos por outra ordem, como [3,6],e [6,3]  ?

❝The idea that I can be presented with a problem, set out to logically solve it with the tools at hand, and wind up with a program that could not be legally used because someone else followed the same logical steps some years ago and filed for a patent on it is horrifying.❞- John Carmack on software patents

A list  of command line apps

Link to comment
Share on other sites

Se não me engano este é um problema de Knapsack, que é resolvido com Programação Dinâmica, por isso, deve ser postado na secção de Algoritmia e Lógica.

Parcialmente correcto.

Se percebi bem o enunciado, é um problema de multiple knapsack (uma vez que existem várias barras a preencher) e como tal é NP, não existe solução com programação dinâmica.

Ainda assim, vou remover para a secção de algoritmia e lógica.

escrapela: não posso adiantar muito mais sem escrever o código... Multiple Knapsack são as palavras chave.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.