Twoim zadaniem jest zbudowanie liczby naturalnej przy użyciu jak najmniejszej liczby jedynek i tylko operatorów +
lub -
. Na przykład liczbę siedem można zapisać 1+1+1+1+1+1+1=7
, ale można ją również zapisać jako 11-1-1-1-1=7
. Pierwszy korzysta z 7
nich, a drugi tylko 6
. Twoim zadaniem jest, aby zwrócić minimalną liczbę tych, które mogą być wykorzystane podanych wejście jakiejś liczby naturalnej, n
.
To jest kod golfowy, więc wygrywa najkrótszy prawidłowy kod w bajtach.
Przypadki testowe
Dane wejściowe => Dane wyjściowe
0 => 2 (since 1-1=0)
7 => 6
121 => 6
72 => 15
1000 => 7
2016 => 21
code-golf
number-theory
codeputer
źródło
źródło
VALID OUTPUTS
. To twój wybór, ale generalnie ludzie lubią pogrubienie lub kursywę zamiast LITERÓW KAPITAŁOWYCH (sprawiają, że wygląda jak krzyk zamiast podkreślenia). Pogrubienie**bold text**
i kursywa*italics text*
. Możesz także użyć### Text
do pogrubienia tekstu. W każdym razie witamy w PPCG!Odpowiedzi:
JavaScript (ES6),
12712687 bajtówPowinien działać do około 10
1415, w którym momencie zaczynasz napotykać limity liczb całkowitych JavaScript. Wyjaśnienie:To używa
n*9
magii dwa razy; po pierwsze, daje mi długość następnego powtórzenia, po drugie, jeśli pierwsze dwie cyfryn*9
to55
lub więcej, wówczas musimy odjąćn
od następnego powtórzenia, w przeciwnym razie musimy odjąć poprzednie powtórzenie (które jest obliczane przez odjęcie 1 i dzielenie przez 10). Powinno to działać do 10 15 .źródło
Pyth,
1916 bajtówZestaw testowy
Algorytm siły brutalnej. Niezbędne łańcuchy są generowane przez pobranie wszystkich list, których elementy mają
['+', '-', '']
długość równą liczbie testowanych 1, dodanie 1 do każdego i połączenie w pojedynczy łańcuch. Te ciągi są następnie oceniane i porównywane z danymi wejściowymi. Jest to powtarzane do momentu znalezienia pomyślnego ciągu.Niektóre ciągi z wiodącym
+
lub-
testowane, ale to nie jest problem. Byłoby tak, gdyby dane wejściowe były ujemne.Może osiągnąć długość 9, zanim stanie się zbyt wolny.
Wyjaśnienie:
źródło
JavaScript (ES6), 92 bajty
Wyjaśnienie
Funkcja rekurencyjna. Generuje to wszystkie możliwe kombinacje
1
s oddzielone albo+
,-
albo niczym. Robi to, zwiększając liczbę podstawową-3, przekształcając ją w tablicę cyfr, konwertując każdą cyfrę0
na-
,1
do+
i2
na pusty ciąg znaków, a następnie łącząc je razem z1
s. Otrzymany ciąg jesteval
d jako instrukcja JavaScript, która zwraca wynik równania.Ponieważ operatory są połączone za pomocą
1
s pomiędzy (jak+1+1+1+
), istniejąlength - 1
1
s. Pierwszy operator jest ignorowany (ponieważ+1
=1
,<nothing>1
=1
i jest to liczba tak nigdy nie będzie wiodącym0
na-
) i ostatnim operatorem jest również ignorowane (przez dodanie.0
do równania).Wyższa wersja wyjściowa, 96 bajtów
Druga wersja nie może zwrócić wyników wyższych niż ~ 10 z powodu limitu stosu wywołań rekurencyjnych. Ta wersja używa pętli for zamiast rekurencji, więc może zwrócić dane wyjściowe do ~ 33. Ilość wymaganego czasu rośnie wykładniczo, więc nie polecam go testować.
źródło