Biorąc pod uwagę dodatkową piramidę , określ, czy można ją rozwiązać. Piramida dodatkowa składa się z warstw , z których każda ma jedną liczbę mniejszą niż ta pod nią. Warstwa jest symbolizowana jako . to warstwa podstawowa, a to warstwa na szczycie . Numer th jest oznaczona jako . to liczba po lewej stronie , a to liczba po prawej stronie . Możesz wizualizować znajdujący się na szczyciei P i P 1 P i + 1 P i j P i P i , j P i , 1 P i P i , j + 1 P i , j P i + 1 , j P i , ji na środku, stąd nazwa „ piramida dodawania ”.
- , czyli każda liczba w piramidzie jest niezerową liczbą całkowitą dodatnią.
- , co oznacza, że każda liczba spoza warstwy podstawowej piramidy jest sumą dwie liczby poniżej.
- Jeśli ma liczb, ma liczb, dlatego jest najbardziej liczbą . Mówiąc prościej, każda warstwa ma jedną liczbę mniejszą niż warstwa pod nią.
Dodanie piramidy logiczna stanowi piramidy dodanie niektórych liczby usuniętych (zastąpione ). Jego rozwiązaniem jest piramida dodawania , w której , czyli liczby, które pierwotnie były obecne w pozostały niezmienione. Taka łamigłówka może mieć więcej niż jedno rozwiązanie.
Twoim zadaniem jest, biorąc pod uwagę piramidę dodania, ustalić, czy ma dokładnie jedno rozwiązanie.
Wejście
Możesz uzyskać dane wejściowe w dowolnej z następujących form, ale zachowaj spójność:
- Tablica warstw.
- Układ warstw, w kształcie piramidy, wykorzystujący stałą wartość całkowitą nie dodatnią jako separator między elementami (używanymi tylko raz za każdym razem), a także lewe i prawe wypełnienie. Separator i wypełnienie muszą być takie same.
- Tablica warstw ze spójną poprawną prawą lub lewą wyściółką (musisz być spójny i nie mieszać prawej i lewej wyściółki).
Należy pamiętać, że do reprezentowania brakującej liczby należy użyć stałej wartości, która nie jest ściśle dodatnią liczbą całkowitą; tej wartości nie można użyć jako dopełnienia. Możesz także wziąć połączone warstwy (nadal możesz je rozdzielić), a kolejność może być od podstawy do góry lub od góry do podstawy.
Wynik
Jedna z dwóch spójnych odrębnych wartości, gdzie jedna reprezentuje obecność unikalnego roztworu, a druga brak roztworu lub obecność więcej niż jednego roztworu.
Zasady
- zawsze będzie prawdziwe, jeśli , to znaczy, że dane wejściowe na pewno nie będą zawierać liczby na dwóch innych liczbach, która nie jest ich sumą, jeśli wszystkie trzy liczby są znane.
- , to znaczy piramida będzie zawierać co najmniej jedną znaną liczbę.
- Nie rób tych rzeczy .
- To jest golf golfowy , więc wygrywa najkrótsza odpowiedź! Nie pozwól jednak, aby zniechęciło Cię to do opublikowania rozwiązania tylko dlatego, że Twój język jest „zbyt gadatliwy”.
Przypadki testowe
W tych przypadkach testowych używana jest tablica z warstwami od góry do podstawy, z 0
reprezentowaniem.
[[10], [0, 0], [0, 2, 0], [0, 0, 0, 1]] -> True
[[32], [0, 0], [0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]] -> True
[[0], [1, 1]] -> True
[[1], [0, 0]] -> False
[[10], [5, 5], [2, 3, 2], [0, 0, 0, 0]] -> False
[[5], [0, 0], [0, 0, 0]] -> False
Sprawdzone przykłady
Przypadki testowe są tutaj obsługiwane.
Unikalne rozwiązanie 1
Krok 1: .
Krok 2: .
Krok 3: .
Krok 4: .
Kroki 5-6 są podobne do 4.
Oto nasze unikalne rozwiązanie.
Unikalne rozwiązanie 2
Krok 1: Nie ma tutaj oczywistego podejścia, więc spróbujmy użyć minimalnych możliwych wartości.
Kroki 2-5: Wygląda na to, że wartości minimalne dają rozwiązanie, dlatego jest to jedyne rozwiązanie i dlatego jest wyjątkowe.
Wskazówka: Istnieje twierdzenie o dodawaniu łamigłówek piramidowych związanych z tą łamigłówką, które możesz udowodnić, jeśli myślisz wystarczająco dużo.
Unikalne rozwiązanie 3
Krok 1: .
Jest to oczywiście unikalne rozwiązanie.
Brak rozwiązania 1
, więc nie ma rozwiązania.
Brak rozwiązania 2
Kroki 1-2: .
Stąd wynika, że , co jest sprzecznością, dlatego nie ma rozwiązania.
Nietypowe rozwiązanie
Dwa rozwiązania:
Ponieważ istnieją co najmniej dwa rozwiązania, nie ma unikalnego rozwiązania.
źródło
Odpowiedzi:
Galaretka ,
1816 bajtówWypróbuj online!
Łącze monadyczne, które bierze piramidę w odwrotnej kolejności i zwraca 1 dla wartości true i 0 dla wartości false. Generuje wszystkie możliwe piramidy o podstawie do maksymalnej liczby w piramidzie i sprawdza, czy istnieje jedno unikalne dopasowanie dla danych wejściowych.
Dzięki @Arnauld za wskazanie, że to się nie udało
[[1,0],[0]]
; teraz poprawione.Dzięki @JonathanAlan za zapisanie 2 bajtów!
Wyjaśnienie
źródło
ṗ
maksymalnej liczby w siatce o długości podstawy. np. gdyby maksymalna liczba wynosiła 10, a długość podstawy 4, to sprawdziłby wszystko od[1,1,1,1]
do[10,10,10,10]
, tj. 10000 możliwości.[[0,0],[0]]
.‘
na»2
co ma również tę zaletę, że odzyskuje wydajność utraconą podczas mojej ostatniej zmiany, aczkolwiek kosztem bajtu....Ƭ€Ṗ€a@ċ⁼1
oszczędza dwa bajty (chyba, że istnieją przypadki brzegowe z AND, które nie są pokrywane przez testy?)C # (interaktywny kompilator Visual C #) ,
303227 bajtówZgłasza wyjątek, jeśli true, działa normalnie, jeśli false.
Wypróbuj online!
źródło
Wolfram Language (Mathematica) ,
8588 bajtówWypróbuj online!
+3 naprawione.
Brute force: dla wszystkich baz z wartościami sprawdź, czy wynikowa piramida pasuje do podanej formy i sprawdź, czy całkowita liczba dopasowań wynosi 1. Pobiera dane wejściowe jako listę poziomów, najpierw podstawową, z reprezentowaniem brakujących liczb.
1..(sum of all numbers)
0
źródło
05AB1E , 25 bajtów
Układa warstwy piramidy w odwrotnej kolejności, od podstawy do końca (tj
[[0,0,0,1],[0,2,0],[0,0],[10]]
.).Wydaje się, że gdzieś w 05AB1E jest błąd, który znajduje się
.Γ
wewnątrz mapy.©...®š
Powinien być tylko...yš
na 1 bajt.Wypróbuj online lub sprawdź kilka innych przypadków testowych .
Mniejszą alternatywą dla bajtów
©.ΓüO}®š
może być[Ðg#üO}\)
: Wypróbuj online.Wyjaśnienie:
źródło
a%b == 0
skrótua == b || a == 0
, ale to nie działa, ponieważ a może być wielokrotnością b.[[0,0],[0]]
, które mają nieskończenie wiele rozwiązań. Myślę, że po prostu zmiana>
na poprawne akcentowanie toI
naprawia..S*
zamiast zamiast%
, więc tylko +2 bajty.Haskell, 106 bajtów
Bierze piramidę do góry nogami, np
[[0,0,0,1],[0,2,0],[0,0],[10]]
.Wypróbuj online!
Podejście brutalnej siły w Haskell:
t
(mapM(\_->[1..sum(sum<$>x)])x
), w których liczby zaczynają się od 1 do sumy wszystkich liczb w piramidzie wejściowejt
(iterate(z(+)=<<tail)t
)z(z(#))x
). Funkcja porównaniaa # b
zwraca,True
jeśli obie liczby są równe luba
wynoszą zero (a*b==a*a
).1
za każdą pasującą piramidę i porównaj wynikową listę z listą singletonów[1]
.źródło