Projekt w języku c

0

Witam. Mam wykonać projekt na informatykę w języku c, ale kompletnie nie wiem o co chodz w tym poleceniu, ani nie wiem jak mam zacząć. Znam podstawy c. Proszę o jakąkolwiek pomoc.

http://pl.spoj.com/problems/HILLS2/

0

No to robisz tak, że masz swoją mróweczkę i liczysz pozycję w układzie kartezjańskim w każdym kolejnym kroku. Na sam koniec jedyne co musisz to policzyć odległość z Pitagorasa (bo taką mamy metrykę).

0

Mógłyś podać przykładowe rozwiązanie?

2

A proszę, oczywiście nie gotowiec, bo to byłoby niefair:

defmodule Ant do
  @enforce_keys [:azimuth, :x, :y]
  defstruct [:azimuth, :x, :y]

  @type t :: %__MODULE__{
    azimuth: integer(),
    x: float(),
    y: float(),
  }

  @spec walk(t() | nil, binary()) :: t()
  def walk(_current, "PREPARE"), do: %__MODULE__{azimuth: 0, x: 0, y: 0}

  def walk(%__MODULE__{azimuth: az} = old, "TURN " <> num) do
    {rot, ""} = Integer.parse(num)

    %{old | azimuth: rem(az + rot, 360)}
  end

  def walk(%__MODULE__{azimuth: az, x: x, y: y}, "MOVE " <> num) do
    {steps, ""} = Integer.parse(num)
    a = az / 180.0 * :math.pi()
    dx = :math.sin(a) * steps
    dy = :math.cos(a) * steps

    %__MODULE__{azimuth: az, x: x + dx, y: y + dy}
  end

  @spec length(t()) :: float()
  def length(%__MODULE__{x: x, y: y}), do: :math.sqrt(x * x + y * y)
end

:stdio
|> IO.stream(:line)
|> Stream.map(&String.trim/1)
|> Enum.reduce(nil, &Ant.walk(&2, &1))
|> Ant.length
|> Float.round(2)
|> IO.puts

To liczy dla pojedynczego przykładu. Możesz sobie przełożyć na jaki język chcesz (to jest Elixir jakby co) i dodać opcję parsowania wielu ścieżek, zasada będzie taka sama.

EDIT: Ideone ma starą wersję Elixira, więc daję ASCIIcast
EDIT2: Ok, znalazłem, że wcześniej zamiast Integer.mod/2 trzeba było używać Kernel.rem/2: https://ideone.com/nN7uFp

1 użytkowników online, w tym zalogowanych: 0, gości: 1