Informática, perguntado por lucas27484, 8 meses atrás

Housain é um terrorista que tentou escapar vindo para o Brasil. Mas Housain não contava com a astúcia de nossa polícia, e acabou sendo preso aqui também. Por ser terrorista, Housain conseguiu contratar advogados muito bons, que através de muitos recursos na justiça, acabaram conseguindo uma liberdade condicional para ele.

Nessa liberdade condicional, Housain deve permanecer a uma certa distância da delegacia de polícia responsável por ele. Para monitorá-lo melhor, eles instalaram nele uma tornozeleira eletrônica inquebrável que, minuto a minuto, envia para uma central as movimentações de Housain naquele momento. A informação da tornozeleira é enviada indicando uma direção e uma distância. Por exemplo, em quatro minutos chegam as quatro linhas de informação abaixo:

N 30
O 44
S 22
L 10

Isso significa que no primeiro minuto Housain deslocou 30 metros para o norte (letra N), no minuto seguinte andou 44 metros para o oeste (letra O), no outro minuto andou 22 metros para o sul (letra S) e no quarto minuto se deslocou 10 metros para o leste (letra L). Para poder dar um castigo ao terrorista, o juiz decidiu que Housain só poderia andar nas quatro direções citadas acima. Ou seja, Housain nunca se movimenta na direção noroeste, por exemplo. Neste problema, você pode supor que todos os movimentos de Housain ocorrem sobre um plano cartesiano.

A polícia precisa estar sempre atenta à movimentação dele, e pede a sua ajuda para verificar se em algum momento o terrorista se desloca a uma distância da delegacia maior do que a permitida. A distância considerada para esta medida é a distância euclidiana.

Sua missão é criar um programa que receba as informações da tornozeleira de Housain e diga se em algum momento ele esteve a uma distância maior do que a permitida. Você deve assumir que no instante 0 (zero) Housain está dentro da delegacia (ou seja, a uma distância zero).


Entrada:

A primeira linha da entrada contém dois inteiros N e M (1 ≤ N ≤ 105,1 ≤ M ≤ 106) representando o número de registros enviados pela tornozeleira de Housain e a distância máxima que ele pode ficar da delegacia, respectivamente. As N linhas seguintes contêm os registros da tornozeleira, em ordem de envio. Cada linha contém um caractere C ( C∈ {"N", "S", "L", "O"} ) e um inteiro D (1 ≤ D ≤ 103) representando a distância percorrida no minuto.

Saída:

Seu programa deve imprimir "sim" (sem aspas duplas) se em algum momento Housain se afastou da delegacia além da distância permitida, ou "nao" (sem aspas duplas) caso contrário.

Observações:

No primeiro exemplo de teste, os movimentos de Housain fazem com que ele esteja localizado nas seguintes coordenadas após cada movimentação: (0,2) → (3,2) → (3,−2) → (−1,−2) → (−4,−2). Em nenhum momento (minuto), durante a sua movimentação, Housain extrapola a distância M = 10 em relação à delegacia.
No segundo exemplo de teste, Housain se move conforme a seguinte ordem, (0,6) → (8,6) → (8,−9) → (3,−9) → (−1,−9). Quando Housain atinge a coordenada (8,−9), ele extrapola a distância M em relação à delegacia.

Anexos:

Soluções para a tarefa

Respondido por enzotmorente
1

'''

obs: não vou fazer a checagem de cada input, pois o enunciado não o coloca como obrigatorio,

é bem tranquilo faze-la, eu já fiz em vários exercícios que te mandei,

qualquer coisa, se o seu professor(a) achar necessário, é só adicionar dps.

'''

import math

primeira_linha = input()

primeira_linha = primeira_linha.split()

#número de registros

N = int(primeira_linha[0])

#distancia maxima

M = float(primeira_linha[1])

#                    X  Y

localizacao_atual = [0, 0]

ultrapassou = False

def ultrapassou_o_limite(localizacao):

   #fazer o calculo

   distancia_euclidiana = math.sqrt(abs((localizacao[1] - localizacao[0]) ** 2))

   if distancia_euclidiana >= M:

       return True

   else:

       return False

for i in range(N):

   input_ = input()

   input_ = input_.split()

   #pegar a direcao

   direcao = input_[0].upper()

   #pegar o quanto foi andado

   distancia = int(input_[1])

   if direcao == "N":

       #somar a distancia para a linha Y

       localizacao_atual[1] += distancia

       if ultrapassou_o_limite(localizacao_atual):

           ultrapassou = True

   elif direcao == "S":

       #subtrair a distancia para a linha Y

       localizacao_atual[1] -= distancia

       if ultrapassou_o_limite(localizacao_atual):

           ultrapassou = True

   elif direcao == "L":

       #somar a distancia para a linha X

       localizacao_atual[0] += distancia

       if ultrapassou_o_limite(localizacao_atual):

           ultrapassou = True

   elif direcao == "O":

       #subtrair a distancia para a linha X

       localizacao_atual[0] -= distancia

       if ultrapassou_o_limite(localizacao_atual):

           ultrapassou = True

if ultrapassou:

   print("sim")

else:

   print("nao")

Anexos:

enzotmorente: distancia_euclidiana = math.sqrt(abs((localizacao[1] - localizacao[0]) ** 2))
enzotmorente: vc esqueceu 1 )
enzotmorente: logo após o [0]
lucas27484: ai depois agora deu errado na linha If ultrapassou_o_limite(localizacao_atual
enzotmorente: qual o erro?
enzotmorente: vc consegue usar o discord? Se n der call, pelo menos usar o chat de la, q é mais facil para vc mandar as prints e etc
lucas27484: deu unidade não corresponde a nenhum nível de indentacao externa
lucas27484: qual seu Discord mano
lucas27484: não vou poder entrar na call, só posso nos comentários
enzotmorente: TheHawcky#6273
Perguntas interessantes