Várias áreas da ciência da computação usam domínios simples e abstratos para estudos analíticos e empíricos. Por exemplo, algumas das primeiras pesquisas de inteligência
artificial nas áreas de planejamento e robótica usavam o mundo dos blocos, no qual um braço de robô realizava tarefas envolvendo a manipulação de blocos.
Este desafio consiste em modelar um Mundo dos Blocos bem simples, que vai funcionar de acordo com certas regras e restrições.
O problema consiste em analisar uma série de comandos que instruem um braço de robô em como manipular os blocos que estão sobre uma mesa. Inicialmente, existem n blocos sobre a mesa (numerados de 0 a n-1), como mostra a figura a seguir.
------------------------------
|0| |1| |2| |3| |4| ....|n-1|
------------------------------
O problema começa com cada bloco na sua posição inicial sobre a mesa e, depois de uma série de comandos válidos, deve terminar em uma configuração final. Na figura a seguir é apresentado um exemplo para 5 blocos (n=5), sendo ( a ) a configuração inicial e ( b ) a configuração final.
----------------------------|2|---------|1|
|0|-|1|-|2|-|3|-|4|------|0|---------|4|-|5|
------------------------------------------------
----------( a )------------------( b )
Os comandos válidos para o braço de robô manipular os blocos são listados a seguir.
Usa-se a para indicar o bloco em movimento e b como bloco de referência.
*mover a acima b: move o bloco a para cima do bloco b retornando eventuais blocos
que já estiverem sobre a ou b para as suas posições originais.
*mover a topo b: coloca o bloco a no topo do monte onde está o bloco b retornando
eventuais blocos que já estiverem sobre a às suas posições originais.
*empilhar a acima b: coloca o bloco a juntamente com todos os blocos que estiverem
sobre ele em cima do bloco b, retornando eventuais blocos que já estiverem sobre b
as suas posições originais.
*empilhar a topo b: coloca o bloco a juntamente com todos os blocos que estiverem
sobre ele no topo do monte onde está o bloco b.
*encontrar maior: encontra o maior elemento da pilha mais alta e o devolve para a
posição inicial.
*sair: termina a execução.
Qualquer comando no qual a = b ou no qual a e b estejam na mesma pilha de blocos é um comando ilegal e deve ser ignorado, não alterando a configuração dos blocos.
Os arquivos de entrada e saída devem obedecer aos seguintes formatos:
*Arquivo de Entrada: o arquivo começa com um único número inteiro n na primeira linha representando o número de blocos do seu Mundo dos Blocos, sendo
0 < n < 25. Esse número de blocos será seguido por uma sequência de comandos, um por linha. O programa deve processar todos os comandos até encontrar o
comando sair. Assumir que todos os comandos estão no formado definido anteriormente, ou seja, não haverá erros de sintaxe nos comandos.
*Arquivo de Saída: a saída consiste da configuração final do seu Mundo dos Blocos. Em cada linha deve aparecer o número da posição original seguida de dois pontos
( : ). Se existir pelo menos um bloco naquela posição, os dois pontos devem ser seguidos pela lista de blocos que aparecem naquela pilha separados por um espaço
em branco. Deve existir uma linha no arquivo de saída para cada posição, ou seja, n linhas sendo n é o número inteiro na primeira linha do arquivo de entrada.
Para o exemplo mostrado na figura ( b ), os arquivos de entrada e saída são listados a seguir. Ressalta-se que diferentes arquivos de entrada podem levar a uma mesma
configuração final.
Entrada:-------------------Saída:
5----------------------------0: 0 2
mover 3 acima 0---------1:
move 2 topo 4-----------2:
empilhar 4 acima 0------3: 3 1
empilhar 1 topo 3--------4: 4
encontra maior
sair
Dúvidas:
1º Preciso analisar o problema proposto e definir as estruturas de dados estáticas para a sua resolução
2º Preciso definir as funções necessárias para a implementação dos quatro primeiros comandos definidos no desafio e o “sair”, utilizando as estruturas de dados com alocação estática de memória definida na Etapa 1.
3º Preciso fazer um programa que leia um arquivo de entrada, execute todos os comandos presentes nesse arquivo e gere um arquivo de saída, no formato definido anteriormente no desafio.
Pergunta
FabioArgenton
DESAFIO
Várias áreas da ciência da computação usam domínios simples e abstratos para estudos analíticos e empíricos. Por exemplo, algumas das primeiras pesquisas de inteligência
artificial nas áreas de planejamento e robótica usavam o mundo dos blocos, no qual um braço de robô realizava tarefas envolvendo a manipulação de blocos.
Este desafio consiste em modelar um Mundo dos Blocos bem simples, que vai funcionar de acordo com certas regras e restrições.
O problema consiste em analisar uma série de comandos que instruem um braço de robô em como manipular os blocos que estão sobre uma mesa. Inicialmente, existem n blocos sobre a mesa (numerados de 0 a n-1), como mostra a figura a seguir.
------------------------------
|0| |1| |2| |3| |4| ....|n-1|
------------------------------
O problema começa com cada bloco na sua posição inicial sobre a mesa e, depois de uma série de comandos válidos, deve terminar em uma configuração final. Na figura a seguir é apresentado um exemplo para 5 blocos (n=5), sendo ( a ) a configuração inicial e ( b ) a configuração final.
----------------------------|2|---------|1|
|0|-|1|-|2|-|3|-|4|------|0|---------|4|-|5|
------------------------------------------------
----------( a )------------------( b )
Os comandos válidos para o braço de robô manipular os blocos são listados a seguir.
Usa-se a para indicar o bloco em movimento e b como bloco de referência.
*mover a acima b: move o bloco a para cima do bloco b retornando eventuais blocos
que já estiverem sobre a ou b para as suas posições originais.
*mover a topo b: coloca o bloco a no topo do monte onde está o bloco b retornando
eventuais blocos que já estiverem sobre a às suas posições originais.
*empilhar a acima b: coloca o bloco a juntamente com todos os blocos que estiverem
sobre ele em cima do bloco b, retornando eventuais blocos que já estiverem sobre b
as suas posições originais.
*empilhar a topo b: coloca o bloco a juntamente com todos os blocos que estiverem
sobre ele no topo do monte onde está o bloco b.
*encontrar maior: encontra o maior elemento da pilha mais alta e o devolve para a
posição inicial.
*sair: termina a execução.
Qualquer comando no qual a = b ou no qual a e b estejam na mesma pilha de blocos é um comando ilegal e deve ser ignorado, não alterando a configuração dos blocos.
Os arquivos de entrada e saída devem obedecer aos seguintes formatos:
*Arquivo de Entrada: o arquivo começa com um único número inteiro n na primeira linha representando o número de blocos do seu Mundo dos Blocos, sendo
0 < n < 25. Esse número de blocos será seguido por uma sequência de comandos, um por linha. O programa deve processar todos os comandos até encontrar o
comando sair. Assumir que todos os comandos estão no formado definido anteriormente, ou seja, não haverá erros de sintaxe nos comandos.
*Arquivo de Saída: a saída consiste da configuração final do seu Mundo dos Blocos. Em cada linha deve aparecer o número da posição original seguida de dois pontos
( : ). Se existir pelo menos um bloco naquela posição, os dois pontos devem ser seguidos pela lista de blocos que aparecem naquela pilha separados por um espaço
em branco. Deve existir uma linha no arquivo de saída para cada posição, ou seja, n linhas sendo n é o número inteiro na primeira linha do arquivo de entrada.
Para o exemplo mostrado na figura ( b ), os arquivos de entrada e saída são listados a seguir. Ressalta-se que diferentes arquivos de entrada podem levar a uma mesma
configuração final.
Entrada:-------------------Saída:
5----------------------------0: 0 2
mover 3 acima 0---------1:
move 2 topo 4-----------2:
empilhar 4 acima 0------3: 3 1
empilhar 1 topo 3--------4: 4
encontra maior
sair
Dúvidas:
1º Preciso analisar o problema proposto e definir as estruturas de dados estáticas para a sua resolução
2º Preciso definir as funções necessárias para a implementação dos quatro primeiros comandos definidos no desafio e o “sair”, utilizando as estruturas de dados com alocação estática de memória definida na Etapa 1.
3º Preciso fazer um programa que leia um arquivo de entrada, execute todos os comandos presentes nesse arquivo e gere um arquivo de saída, no formato definido anteriormente no desafio.
Obs: Sou iniciante em programação
Link para o comentário
Compartilhar em outros sites
3 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.