Zaimplementuj tę relację powtarzalności jako funkcję lub program, który wprowadza i wyprowadza nieujemną liczbę całkowitą:
F (0) = 0
F (N) = najmniejsza liczba całkowita większa niż F (N-1), tak że suma i / lub iloczyn jej 10 cyfr podstawowych to N
N jest wejściem programu, a F (N) wyjściem.
Dla jasności suma cyfr w liczbie takiej jak 913 wynosi 9 + 1 + 3 = 13. Produkt ma wymiary 9 × 1 × 3 = 27. W przypadku liczb jednocyfrowych suma i iloczyn są takie same. Liczby zawierające 0 oczywiście mają iloczyn 0.
Wyniki za pomocą F (70) to:
N F(N)
0 0
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 19
11 29
12 34
13 49
14 59
15 69
16 79
17 89
18 92
19 199
20 225
21 317
22 499
23 599
24 614
25 799
26 899
27 913
28 1147
29 2999
30 3125
31 4999
32 5999
33 6999
34 7999
35 8999
36 9114
37 19999
38 29999
39 39999
40 41125
41 59999
42 61117
43 79999
44 89999
45 91115
46 199999
47 299999
48 311128
49 499999
50 511125
51 699999
52 799999
53 899999
54 911116
55 1999999
56 2111147
57 3999999
58 4999999
59 5999999
60 6111125
61 7999999
62 8999999
63 9111117
64 11111188
65 29999999
66 39999999
67 49999999
68 59999999
69 69999999
70 71111125
Najkrótszy kod w bajtach wygrywa. Uznanie, jeśli potrafisz pokazać, że Twój kod korzysta z pewnej wydajności.
Odpowiedzi:
05AB1E ,
2012 bajtówZaoszczędź 8 bajtów dzięki Osable !
Wykorzystuje kodowanie CP-1252 . Wypróbuj online!
źródło
µNSDOsP‚¾>å½
. Wydaje się, że działa na losowo wybrane liczby.Mathematica, 71 bajtów, 68 znaków
Jeszcze tylko 4 bajty, oto wersja, która przechowuje wartości
±n
:W tej ostatniej wersji, zanim ocenisz
±n
,PlusMinus
będą miały dwie wartości spadkowe:Teraz jeśli ocenimy
±20
:To znacznie przyspiesza przyszłe obliczenia, ponieważ Mathematica nie będzie już obliczać wartości pomiędzy
0
i20
rekurencyjnie. Oszczędność czasu jest bardziej dramatyczna w miaręn
wzrostu:źródło
C #,
155159135 bajtówSuper nieefektywny, zajmuje dużo czasuN>=14
. Spróbuję uzyskać bardziej wydajne, ale dłuższe rozwiązanie.Okej, teraz znacznie lepiej, ale 4 bajty dłużej. No cóż, teraz mogę zrobić
N<=50
dość szybko. Dziękuję @milk za uratowanie 24 bajtów!źródło
for(;;)
i foreach naforeach(var c in++i+"")
. -22 bajtów zastąpieniaint.Parse(c+"")
zc-48
.Pyth -
1817 bajtówJeden bajt zapisany dzięki @Jakube!
Używa redukcji, aby wykonać rekurencyjną czynność.
Pakiet testowy .
źródło
sM*FBjT;
generuje również sumę cyfr i iloczyn i jest o 1 bajt krótszy.R,
124112 bajtówNie działa przy N = 45, ponieważ R nalega na zapisanie 10.000 jako 1e + 05, co nie jest doceniane
as.numeric()
, można to naprawić za pomocąas.integer()
kosztu 12 bajtów:Jako statystyczny język programowania R ma denerwująco trudne sposoby dzielenia liczb na wektor cyfr. Zwłaszcza, że wszystko trzeba jawnie przekonwertować z ciągów znaków na wartości liczbowe.
12 bajtów zapisanych dzięki billywob.
źródło
as.double(el(strsplit(c(x,""),"")))
aby podzielić liczbę całkowitą na wektor jej cyfr. Jednak nadalas.integer()
sprintf()
do sformatowania liczby całkowitej w ciągu bez zer końcowych:as.double(el(strsplit(sprintf("%1.f",x),"")))
i pomiń użycieas.integer()
x=x+1
to gwarantowane, że zostanie ocenione raz, ponieważ na początkuy=F(N-1)
zdecydowanie nie jest równeN
.JavaScript (ES6)
1091071059189 bajtówźródło
JavaScript (ES6), 84
86Edycja: zapisane 2 bajty x @ Arnauld
Uwaga testowa powyżej 50 zużyje zbyt dużo procesora, kliknij „Ukryj wyniki”, aby zatrzymać, zanim będzie za późno
źródło
for(v=n&&f(n-1),p=s=n+1;s&&p-1;)[...++v+''].map(d=>(p/=d,s-=d),p=s=n);v
powinien zaoszczędzić 2 bajty. Podejrzewam, że można to jeszcze trochę skrócić, ale jak dotąd nie mogłem tego rozgryźć.p /= d
uzyskać dokładny wynik, gdyd
faktycznie jest dzielnikiemp
. O ile się nie mylę, dotyczy to każdegod <= p <= Number.MAX_SAFE_INTEGER
. Kiedy wystąpią błędy zaokrąglania zmiennoprzecinkowegop % d != 0
, ale to powinno być bezpieczne.eval`1+1`
) (oto dlaczego codegolf.stackexchange.com/a/52204/21348 : przeczytaj pierwszy komentarz)Mathematica, 67 bajtów
Funkcja o nazwie
a
. Pobiera liczbę jako dane wejściowe i zwraca liczbę jako dane wyjściowe. Zainspirowany poprzednim rozwiązaniem Mathematica, ale wykorzystuje inny mechanizm zapętlania.źródło
C, 240 bajtów
Próba wykorzystania niektórych właściwości matematycznych sekwencji.
źródło
PowerShell v3 +, 114 bajtów
Iteracyjne rozwiązanie, bez łatwego sposobu przekształcenia liczby w sumę / iloczyn jej cyfr, więc jest to nieco dłużej niż odpowiedzi JavaScript.
Pobiera dane wejściowe
$n
, ustawia$i
tablicę za pomocą just0
(jest to zbiórF()
i ustawia wartość$l
równą1
(jest to najnowsza wersjaF
). Następnie zapętlamy w górę od1
do$n
, a każda iteracja wykonujefor
pętlę.Na
for
warunkowym Loop przybiera$l
ATEST numer, w ciągu znaków"$l"
, a następnie rzuca, że jakochar
-array i sklepów, które tablicę do zmiennej temp$b
. Następnie-join
łączymy te cyfry+
i potokujemy toiex
(skrót odInvoke-Expression
i podobne doeval
). Ponadto robimy podobnie z*
. Te dwie liczby są enkapsulowane w pareny i traktowane jako argument tablicowy dla-notin
operatora względem bieżącej liczby$_
zewnętrznej pętli (tj.for
Pętla działa tak długo, jak długo jest inna+
i*
jest inna niż$_
). Ciałofor
pętli powiększa się$l++
.Kiedy wyjdziemy z tej wewnętrznej
for
pętli, dodajemy naszą$l
jako nowy element$i
. Po pełnym zakończeniu pętli zasięgu po prostu umieszczamy$i[$n]
w potoku, a dane wyjściowe są niejawne.NB - Powolne wykonywanie powyżej
20
, po prostu ze względu na strukturę pętli. Na przykładN=40
zajmuje to około dwóch minut na moim komputerze i nawet nie zawracałem sobie głowy testowaniemN>50
.źródło
Pyke, 17 bajtów
Wypróbuj tutaj!
Lub 13 bajtów niekonkurencyjnych
first_n
odkłada teraz liczbę znalezionych przedmiotów plus jeden w,i
jeśli jest używany.Wypróbuj tutaj!
źródło
Python 2 , 77 bajtów
Wypróbuj online!
źródło
Zastanawiam się , 49 bajtów
Dopasowane wzorce ftw! Stosowanie:
Bardziej czytelny:
Jest to w zasadzie tylko implementacja specyfikacji słowo w słowo.
źródło
BASH, 107 bajtów
ze składaniem + wklej + pne
źródło
Befunge, 101 bajtów
Wypróbuj online! Pamiętaj jednak, że po osiągnięciu lat czterdziestych będzie bardzo wolno. Jeśli chcesz przetestować pełny zakres, naprawdę potrzebujesz kompilatora Befunge.
Wyjaśnienie
źródło
PHP , 110 bajtów
Wypróbuj online!
źródło