Prawo Kirchhoffa mówi, że jeśli zsumujesz wszystkie prądy (dodatnie dla prądów zmierzających do skrzyżowania i ujemne dla prądu opuszczającego skrzyżowanie), zawsze otrzymasz wynik 0.
Spójrz na następujący schemat:
Korzystając z prawa Kirchhoffa, możesz zobaczyć, że i1 + i4 - i2 - i3 = 0, więc i1 + i4 = i2 + i3.
Biorąc pod uwagę dwie listy, jedną ze wszystkimi prądami wchodzącymi do skrzyżowania i jedną ze wszystkimi prądami opuszczającymi węzeł oprócz jednej, wysyłamy ostatnią.
Przypadki testowe:
[1, 2, 3], [1, 2] = 3
[4, 5, 6], [7, 8] = 0
[5, 7, 3, 4, 5, 2], [8, 4, 5, 2, 1] = 6
Druga lista zawsze zawiera jeden element mniej niż pierwsza lista. Wynik nie może być ujemny. Najmniejszy program wygrywa.
code-golf
array-manipulation
electrical-engineering
Sześćdziesiąt sześć
źródło
źródło
Odpowiedzi:
Galaretka, 2 bajty
Wypróbuj tutaj!
Bierze prądy wejściowe w pierwszym argumencie, a prądy wyjściowe w drugim argumencie.
_
odejmuje je parami, pozostawiając pojedynczy element z dłuższej listy w niezmienionej postaci iS
sumuje wynik.źródło
Haskell, 14 bajtów
Przykład użycia:
( (.sum).(-).sum ) [5,7,3,4,5,2] [8,4,5,2,1]
->6
.Zsumuj każdą listę i weź różnicę.
źródło
CJam,
86 bajtówWejście wykorzystuje dwie tablice w stylu CJam.
Uruchom wszystkie przypadki testowe. (Odczytuje to jednocześnie wiele przypadków testowych i zawiera strukturę do przetwarzania każdej linii osobno, odrzucając oczekiwany wynik z danych wejściowych.)
Wyjaśnienie
.-
działa niezawodnie, ponieważ mamy gwarancję, że pierwsza lista jest zawsze dłuższa niż druga. (W przeciwnym razie obce elementy drugiej listy zostałyby dołączone do wyniku, który dodałby je do sumy zamiast odejmować.)źródło
MATL , 3
4,0bajtyWejścia to: najpierw pozostawienie prądów, a następnie wprowadzenie prądów.
Wypróbuj online!
źródło
JavaScript, 36 bajtów
Pokaż fragment kodu
źródło
05AB1E , 4 bajty
Kod:
Wyjaśnienie:
Podziękowania dla Luisa Mendo za przypomnienie, że muszę zaimplementować funkcję konkatenacji. Gdybym go wcześniej wdrożył, byłyby to 3 bajty:
Wersja niekonkurencyjna (3 bajty):
Pierwsza lista to pozostawiając bieżącą listę, druga to wejście do bieżącej listy. Kod:
Wyjaśnienie:
Wykorzystuje kodowanie CP-1252.
źródło
Mathematica,
1711 bajtówCałkiem proste.
źródło
Common Lisp, 40
źródło
Perl 6 , 11 bajtów
Stosowanie:
źródło
Python 3, 24 bajty
lub
Python 2, 19 bajtów
w zależności od tego, czy mam wydrukować wynik, czy po prostu utworzyć funkcję, która go zwraca.
źródło
ES6, 39 bajtów
Ponieważ chciałem użyć
reduceRight
.źródło
Python 2, 30 bajtów
źródło
Pyth, 6 bajtów
Wyjaśnienie
Wypróbuj tutaj
źródło
K5, 5 bajtów
Różnica w stosunku do (
-/
) sumy w stosunku do (+/
) każdego ('
).W akcji:
źródło
Pyth, 5 bajtów
Wypróbuj online. Zestaw testowy.
M
aps
na obu listach wejściowych, a następnieF
stare odejmowanie (-
).Można to również napisać jako
-sQsE
, który prowadzi listy w dwóch wierszach.źródło
𝔼𝕊𝕄𝕚𝕟, 5 znaków / 7 bajtów
Try it here (Firefox only).
Wut
Wyjaśnienie
sum(input1) - sum(input2)
źródło
Common Lisp REPL, SBCL
2824 bajtynapisz to do REPL:
następnie napisz takie listy wejściowe:
Mam nadzieję, że można użyć takiego formatu listy (zamiast np.
'(2 3 4)
) Użyłem odpowiedzi Coredumpa jako wzoru dla mojego rozwiązania, a następnie uzyskałem efekt obliczeniowy w inny sposób.Wyjaśnienie
Niech
e_1,...,e_n
będą elementami pierwszej listy if_1,...,f_{n-1}
będą elementami drugiej listy. Chcemy ocenić wyrażenie(-(+ e_1 e_2 ... e_n)f_1 f_2 ...f_{n-1})
Oznaczałoby to odjęcie elementów drugiej listy od sumy elementów pierwszej listy. Potrzebne wyrażenie jest zbudowane w następujący sposób:backqoute zatrzymuje ocenę
#1=
oszczędza trochę pisania, zapamiętywania,@(read)
,@
zatrzymuje efekty cudzysłowu (tak, że (odczyt) zostanie oceniony) i usuwa elementy z listy.(read)
prosi o dane wejściowe#1#
„ładuje” obiekt Lisp zapisany przez#1=
#.
dokonuje oceny wydrukowanej reprezentacji obiektu Lispźródło