W fizyce, jak ładunki elektryczne odpychają, a w przeciwieństwie do ładunków przyciągają.
Energia potencjalna między dwoma ładunkami jednostkowymi oddzielonymi odległością d
jest 1/d
dla podobnych ładunków i -1/d
dla różnych ładunków. Energia potencjalna układu ładunków jest sumą energii potencjalnej między wszystkimi parami ładunków.
Wyzwanie
Określ energię potencjalną układu ładunków jednostkowych reprezentowanych przez ciąg.
To jest golf golfowy , więc wygrywa najkrótsze rozwiązanie w bajtach.
Wkład
To niepusty ciąg wielowierszowego, składający się tylko z +
, -
,
i nowej linii, z każdej linii stałej szerokości. +
I -
stanowią koszty +1 i -1, odpowiednio. Na przykład następujący ciąg:
+ -
+
(biorąc pod uwagę, że lewy górny to początek) reprezentuje układ z dodatnimi ładunkami przy (4,0) i (1, -1) i ujemnym ładunkiem przy (6,0).
Alternatywnie, możesz wziąć dane wejściowe jako listę linii.
Wydajność
Podpisana liczba rzeczywista reprezentująca energię potencjalną układu ładunków. Dane wyjściowe powinny być poprawne do czterech cyfr znaczących lub 10-4 , w zależności od tego, która wartość jest luźniejsza.
Przypadki testowe:
-
Powinien wyjść 0
. Nie ma par ładunków, które mogłyby odpychać lub przyciągać, a białe znaki nic nie zmieniają.
+
-
Są tylko dwa obciążenia; są one oddalone o 1 jednostkę w kierunku pionowym i 2 jednostki w kierunku poziomym, więc ich odległość wynosi sqrt (5). Wyjście powinno wynosić -1 / sqrt (5) = -0.447213595
.
+ -
- +
Powinien dać -2.001930531
.
- -- -+ - - -+-++-+
+-- + +-- + ++-++ -
---++-+-+- -+- - +-
-- - -++-+ --+ +
- + --+ ++-+ +-
-- ++- + + -+--+
+ +++-+--+ +--+++ +
-+- +-+-+-+ -+ +--+
- +-+- + ---+
- - ++ -+- --+--
Powinien dać -22.030557890
.
---+--- ++-+++- -+ +
-+ ---+++-+- +- + +
---+-+ - ---- +-- -
- + +--+ -++- - -
--+ - --- - -+---+ -
+---+----++ - + +
-+ - ++-- ++- -+++
+----+- ++-+-+ -
++- -+ -+---+ -- -+
+-+++ ++-+-+ -+- +-
Powinien dać 26.231088767
.
Odpowiedzi:
Pyth, 34 bajty
Demonstracja
Najpierw konwertujemy każdy znak na +1 dla
+
, -1 dla-
i 0 dla. Następnie każda liczba jest opatrzona adnotacjami z jej pozycją w matrycy. W tym momencie mamy matrycę, która wygląda następująco:
Kod, który osiąga ten punkt to
.e+RkCUBxL" +"b.z
Następnie spłaszczamy tę macierz do listy i bierzemy wszystkie możliwe pary, z
.cs ... 2
.Następnie znajduje odległość między parą
.atMd
i znakiem potencjału z*FhMd
, dziel i sumuj.źródło
CJam, 51 znaków
Zliczanie wszystkich par, odfiltrowywanie
Inf/NaN
i dzielenie przez dwie:Alternatywnie, najpierw filtruj współrzędne, aby policzyć każdą parę raz i nie napotkać
Inf/NaN
:Objaśnienie (stare)
źródło
Haskell,
149144 bajtówPrzykład użycia:
f
to lista wszystkich potrójnych(x-coord, y-coord, unit charge)
.g
oblicza energię potencjalną dla wszystkich kombinacji dwóch takich potrójnych, które nie są równe, sumuje je i dzieli wynik przez2
.źródło
Ruby, 133
Utrzymuje szereg poprzednich opłat w postaci krotek
[charge, location(complex number)]
i porównuje każdą nową opłatę z tą listą, przed dołączeniem jej do listy.Wszystkie spacje na wejściu są zastępowane przecinkami. Umożliwia to następujące przypisanie, odejmując 44 od kodu ascii:
Fakt, że program uważa
+
za -1 i-
za +1, nie ma znaczenia dla końcowego wyniku. Fakt, że program stara się obliczyć wpływ ładunków 0 na przestrzenie, nie ma różnicy, oprócz spowolnienia go :-)Niegolfowany w programie testowym
źródło
MATL , 39
42bajtówDziała w aktualnej wersji (5.1.0) . Kompilator działa na Matlabie lub Octave.
Każda linia jest osobnym wejściem. Koniec jest sygnalizowany przez wprowadzenie pustej linii.
Przykłady
Wyjaśnienie
źródło
Lua,
293255246228 bajtówOjej, 228 bajtów ... Prawdopodobnie mogę znacznie zagrać w golfa, ale na razie opublikuję to tutaj. Prawdopodobnie zaktualizuję go później wieczorem o kilka rozważań i (miejmy nadzieję) pewne poprawki długości.
Nie golfił
Aktualizacja 255 bajtów: Usunięto stare dwie dolne dwie pętle, przetwarzanie jest teraz wykonywane, gdy ciągi są dodawane do tablicy ciągów.
Zaktualizuj 246 bajtów: Zastępuje
c=="+"or"-"==c
sięc>" "
zgodnie z sugestią za Nimi. Świetny pomysł, dzięki!Zaktualizuj 228 bajtów: Jeśli instrukcja mogłaby zostać całkowicie usunięta, wstawiając tabelę po pętli for, oszczędzając sporo bajtów.
źródło
Mathematica 223 bajty
Wciąż gra w golfa.
Ostatni przypadek testowy:
źródło