Każda dodatnia liczba całkowita może być wyrażona jako suma co najwyżej trzech palindromicznych dodatnich liczb całkowitych w dowolnej zasadzie b ≥5. Cilleruelo i in., 2017
Dodatnia liczba całkowita jest palindromiczna w danej bazie, jeśli jej reprezentacja w tej bazie bez zer wiodących odczytuje to samo wstecz. Poniżej rozważana będzie tylko podstawa b = 10.
Rozkład jako suma liczb palindromicznych nie jest unikalny . Na przykład 5
można wyrazić bezpośrednio jako 5
lub jako sumę 2, 3
. Podobnie 132
może być rozkładany jako 44, 44, 44
lub jako 121, 11
.
Wyzwanie
Biorąc pod uwagę dodatnią liczbę całkowitą, uzyskaj jej sumaryczny rozkład na trzy lub mniej dodatnich liczb całkowitych, które są palindromiczne w podstawie 10.
Dodatkowe zasady
Zastosowany algorytm powinien działać dla dowolnie dużych danych wejściowych. Jest jednak dopuszczalne, jeśli program jest ograniczony ograniczeniami pamięci, czasu lub typu danych.
Dane wejściowe i wyjściowe można przyjmować dowolnymi rozsądnymi środkami . Format wejściowy i wyjściowy jest elastyczny jak zwykle.
Możesz wybrać tworzenie jednego lub więcej prawidłowych rozkładów dla każdego wejścia, o ile format wyjściowy jest jednoznaczny.
Programy lub funkcje są dozwolone w dowolnym języku programowania . Standardowe luki są zabronione.
Najkrótszy kod w bajtach wygrywa.
Przykłady
Ponieważ dane wejściowe mogą mieć wiele rozkładów, są to raczej przykłady niż przypadki testowe. Każdy rozkład jest pokazany w innym wierszu.
Input -> Output
5 -> 5
2, 3
15 -> 1, 3, 11
9, 6
21 -> 11, 9, 1
7, 7, 7
42 -> 22, 11, 9
2, 7, 33
132 -> 44, 44, 44
121, 11
345 -> 202, 44, 99
2, 343
1022 -> 989, 33
999, 22, 1
9265 -> 9229, 33, 3
8338, 828, 99
źródło
k=1
ik=3
.)k=1
(tak jak w pierwotnym numerze jest już palindromem), oznacza to, że zakładasz , że pozostałe 2 liczby to 0. Więc jeśli 0 jest dopuszczalne jako jedna z liczb, dowolna liczba, która musi zostać wykonana zk=2
zadziałałoby również,k=3
jeśli jedna z trzech liczb to 0.Odpowiedzi:
Brachylog , 7 bajtów
Wypróbuj online!
Zaskakująco nie tak wolno.
Wyjaśnienie
źródło
.
w wyjaśnieniu i(.)
? Naprawdę nie wiem Brachylog..
jest zmienną wyjściową.~+
,ℕᵐ
i↔ᵐ
są predykatami, które mają zmienną lewą i prawą. Ich duplikacja.
po prostu wskazuje, że dane wyjściowe są zaangażowane bezpośrednio w każde z tych 3 predykatów. Końcowy(.)
jest tutaj, aby pokazać, że zmienna wyjściowa jest domyślnie ostatnią zmienną programu. Dlatego ostatnia podana relacja jest naprawdę,.↔ᵐ.
co oznacza „odwrotne odwzorowanie na wyjściu daje w wyniku” .Python 2 ,
8279 bajtówWypróbuj online!
źródło
Galaretka ,
121098 bajtówWypróbuj online!
Jak to działa
źródło
Python 2 , 117 bajtów
Wypróbuj online!
Drukuje listę list, z których każda jest rozwiązaniem. Rod zaoszczędził 9 bajtów.
źródło
c
odejmowaniem i używafilter
filter(None
uderzyło mnie również podczas przygotowywania obiadu, haha.c → n-a-b
jest super :)JavaScript (ES6),
115...8483 bajtówZawsze zwraca tablicę trzyelementową, w której nieużywane wpisy są uzupełniane zerami.
Przypadki testowe
Pokaż fragment kodu
źródło
R, 126 bajtów
145 bajtówDzięki Giuseppe za grę w golfa z 19 bajtów
Wypróbuj online!
Wyjaśnienie
R nie ma natywnego sposobu odwracania łańcuchów i wiele domyślnych operacji na łańcuchach nie działa na liczbach. Najpierw konwertujemy ciąg dodatnich liczb całkowitych (plus 0) na znaki.
Następnie tworzymy wektor 0 i wszystkie palindromy. Odwrócenie ciągu wymaga podzielenia każdej liczby na znaki, odwrócenia kolejności wektora i wklejenia ich z powrotem bez odstępu.
Następnie chcę sprawdzić wszystkie trzy grupy (tutaj ważne są zera), na szczęście R ma wbudowaną funkcję kombinacji, która zwraca macierz, każda kolumna w kombinacji.
Stosuję tę
colSums
funkcję do macierzy i zachowuję tylko te elementy, które są równe podanemu celowi.Wreszcie, ponieważ istnieją dwa zera, każdy zestaw dwóch dodatnich liczb całkowitych zostanie zduplikowany, więc używam unikalnej funkcji w kolumnach.
Dane wyjściowe to macierz, w której każda kolumna jest zbiorem dodatnich liczb całkowitych pallindromicznych, które sumują się do wartości docelowej. Jest leniwy i zwraca 0, gdy używanych jest mniej niż 3 elementy.
źródło
Map
do generowania palindromów!Galaretka , 14 bajtów
Wypróbuj online!
Bardzo, bardzo nieefektywny.
źródło
Galaretka , 17 bajtów
Wypróbuj online!
-6 bajtów dzięki HyperNeutrino.
Wysyła wszystkie sposoby. Jednak wynik składa się z niektórych duplikatów.
źródło
is palindrome
wbudowany lolRŒḂÐfṗ3R¤YS⁼¥Ðf
Ohm v2 ,
131210 bajtówWypróbuj online!
źródło
Mathematica, 49 bajtów
Wypróbuj online!
zwraca wszystkie rozwiązania
-2 ~ MartinEnder ~ bajtów
źródło
#~IntegerPartitions~3~Select~AllTrue@PalindromeQ&
, Myślę?Haskell ,
908679 bajtów-7 bajtów dzięki Laikoni!
Wypróbuj online!
Zwraca listę wszystkich rozwiązań z pewną duplikacją.
źródło
mapM
zi deklarowanief=filter
: Wypróbuj online!Java (OpenJDK 8) , 185 bajtów
Wypróbuj online!
Usuń 1 bajt z TIO, aby uzyskać prawidłową kwotę, ponieważ przesłanie nie zawiera
;
po lambda.źródło
i++<--j
zamiast++i<=--j
Proton , 117 bajtów
Wypróbuj online!
Wyprowadza rozwiązanie
źródło
Pyt ,
16 1210 bajtówWypróbuj tutaj!
Jak to działa
źródło
05AB1E , 17 bajtów
Wypróbuj online!
Powoduje wyświetlenie wyniku w trzech listach w następujący sposób:
Listy palindromiczne o długości 1 (oryginalny numer IFF to palindromiczny).
Listy palindromiczne o długości 2.
Listy palindromiczne o długości 3.
źródło
Aksjomat, 900 bajtów
kod testowy
Jeśli ten kod musi rozkładać liczbę X na 1,2,3 palindromie, co robi ten kod, próbuje spróbować w pobliżu palindromu N <X i rozkłada XN na 2 palindromie; jeśli ten rozkład XN zakończy się sukcesem, zwróć 3 palindrom; jeśli się nie powiedzie, wypróbuj poprzedni palindrom G <N <X i spróbuj rozłożyć XG na 2 palindrom itp. Kod Ungolfa (ale możliwe, że jest jakiś błąd)
wyniki:
źródło
Java (OpenJDK 8) , 605 bajtów
Drukuje kopie, ale nie są zbanowani afaik
Wypróbuj online!
źródło
APL (Dyalog) , 51 bajtów
Wypróbuj online!
źródło
05AB1E , 8 bajtów
Wypróbuj online!
Wyjaśnienie:
źródło
Perl 6 , 51 bajtów
Wypróbuj online!
grep { $_ eq .flip }, 1 .. $_
tworzy listę wszystkich liczb palindromowych od 1 do liczby wejściowej.3 Rxx
replikuje tę listę trzy razy.[X]
zmniejsza tę listę list za pomocą operatora krzyżowego produktuX
, w wyniku czego powstaje lista wszystkich 3-krotek liczb palindrominc od 1 do liczby wejściowej.first *.sum == $_
znajduje pierwszą taką trójkę, która sumuje się do liczby wejściowej.źródło
xx 3
.Python 3 , 106 bajtów
Wypróbuj online!
W linku TIO użyłem szybszej (ale o 1 bajt dłuższej wersji), która bierze pierwszy poprawny wynik jako generator, zamiast budować całą listę możliwych kombinacji i brać pierwszą.
źródło
Rubinowy , 84 bajtów
Tworzy listę wszystkich możliwych kombinacji 3 palindromów od 0 do n, znajduje pierwszą, której suma pasuje, a następnie przycina zera.
Wypróbuj online!
źródło
Dodaj ++ , 62 bajty
Wypróbuj online!
~ 50 bajtów gry w golfa podczas pisania wyjaśnienia. Definiuje funkcję lambda, która zwraca listę list zawierających rozwiązania.
Jak to działa
g
RÞg
g
Kolejną sekcję można podzielić na trzy dalsze części:
[1 2 3 4 ...]
[[1] [2] [3] [4] ... ]
k
Ta funkcja w zasadzie nic nie robi. Otrzymuje dwa argumenty i zawija je w tablicę. Jednak szybki stół
‽
to magiczna sztuczka. Pobiera dwie listy i generuje każdą parę elementów między tymi dwiema listami. Tak[1 2 3]
i[4 5 6]
generuje[[1 4] [1 5] [1 6] [2 4] [2 5] [2 6] [3 4] [3 5] [3 6]]
. Następnie przyjmuje argument funkcjonalny (w tym przypadkuk
) i uruchamia tę funkcję nad każdą parą, która w tym przypadku po prostu zwraca pary w niezmienionej postaci.€bF
l
źródło