W wielu czcionkach (szczególnie w czcionce Consolas ) 5 z 10 cyfr dziesiętnych ma w nich „dziury”. Nazwiemy te święte cyfry:
46890
5 bezbożnych cyfr to:
12357
Liczba całkowita może być zatem sklasyfikowana jako „święta”, jeśli zawiera tylko święte cyfry, a w przeciwnym razie „bezbożna”. Ponieważ -
jest bezbożny, żadne ujemne liczby całkowite nie mogą być święte.
Święte liczby całkowite mogą być dalej klasyfikowane na podstawie liczby otworów. Na przykład następujące cyfry mają świętość 1:
469
I te cyfry mają świętość 2:
80
Mówimy, że ogólna świętość liczby całkowitej jest sumą świętości jej cyfr. Dlatego 80
miałby świętość 4 i 99
miałby świętość 2.
Wyzwanie
Biorąc pod uwagę dwie liczby całkowite n > 0
i h > 0
, wyjście n
th święty całkowitą którego świętość jest przynajmniej h
. Możesz założyć, że dane wejściowe i wyjściowe nie będą większe niż maksymalna reprezentowalna liczba całkowita w twoim języku lub 2^64 - 1
, zależnie od tego, która wartość jest mniejsza.
Oto lista pierwszych 25 świętych liczb całkowitych ze świętością h >= 1
, w celach informacyjnych:
0, 4, 6, 8, 9, 40, 44, 46, 48, 49, 60, 64, 66, 68, 69, 80, 84, 86, 88, 89, 90, 94, 96, 98, 99
Pierwszych 25 świętych liczb całkowitych ze świętością h >= 2
to:
0, 8, 40, 44, 46, 48, 49, 60, 64, 66, 68, 69, 80, 84, 86, 88, 89, 90, 94, 96, 98, 99, 400, 404, 406
0
ma świętości dwojga”, zanim w końcu kliknięciu na link Wikipedii ConsolasOdpowiedzi:
Pyth, 32 bajty
Wyjaśnienie
Wypróbuj tutaj
Pobiera dane wejściowe w formularzu
h \n n
źródło
Rubin,
1091059582 bajtówJest to okropne podejście „oblicz od 0 do 99999999999 ...”, które jest o 13 bajtów krótsze niż jego leniwy odpowiednik. Jednak ta wersja prawdopodobnie nie zakończy się przed śmiercią wszechświata przed upałem. W każdym razie wart 13 bajtów ¯ \ _ (ツ) _ / ¯
Można przetestować go dla mniejszych wartości przez zmianę
?9*99
do, powiedzmy'99999'
.Oto stara wersja (95 bajtów, z leniwą oceną, która działa prawie natychmiast, a nie prawie nigdy):
źródło
take
zamiastfirst
?take
Zwraca @NotthatCharlesLazy
, do którego nie można zaindeksować.Python 3, 103
Oto rozwiązanie, które wykorzystuje bardziej wydajne podejście do pamięci, ale w przeciwnym razie używa tego samego algorytmu, jeśli chcesz go przetestować.
Przypadki testowe:
źródło
2**64-1
; patrz stackoverflow.com/questions/34113609/…PowerShell,
1631501411019896 bajtówPobiera dane wejściowe, a następnie zapętla, aż do
$n
zera. Początkowo ustawiamy$i=-1
za pomocą sztuczki wstępnego przetwarzania, która działa, ponieważ$i
nie została wcześniej zadeklarowana$null
. Następnie my--
, co powoduje, że PowerShell ocenia to jako$i = $null - 1
, co jest$i=-1
.Każdą pętlę zwiększamy,
$i
a następnie wykonujemy długąif
instrukcję. Pierwsza część weryfikacji warunkowych,$i
która nie zawiera żadnej z12357
nich, za pomocą-notmatch
operatora w celu odfiltrowania bezbożnych liczb.Druga część warunkowa sprawdza liczbę otworów w
$i
. Wykorzystuje się-replace
operatora w celu zastąpienia każdego8
lub0
z11
, a następnie porównuje czy długość wynosi> =$h
. Nie musimy się martwić o usunięcie bezbożnych liczb, ponieważ jest to pierwsza część warunku, a liczby z jednym otworem mają i tak taką samą długość1
, więc nie musimy ich również zastępować.Jeśli nadal jest to prawdą, zmniejszamy się
$n
(ponieważ oznacza to, że znaleźliśmy inną liczbę, która spełnia wymagania wejściowe). Zatem, kiedyfor
warunek zostanie ponownie obliczony, aby sprawdzić, czy$n
wynosi zero, oznacza to, że znaleźliśmy n-ty , więc wychodzimy zfor
pętli, wysyłamy dane$i
i kończymy .Edit - 13 bajtów zapisany przy użyciu tablicę zamiast sznurka do
$l
i zmieniając sposób$n
jest zmniejszana / sprawdzoneEdit 2 - zapisane dodatkowe 9 bajtów, sprawdzając
$n
wfor
warunkowy i przesuwając wyjście na zewnątrz pętliEdycja 3 - zapisane fest 40 dodatkowych bajtów, radykalnie zmieniając sposób, w jaki obliczamy dziury
Edytuj 4 - zapisałeś dodatkowe 3 bajty, przesuwając tak,
++
aby był wstępnym przyrostem w pierwszej części warunkowejedycji 5 - zapisałeś kolejne 2 bajty dzięki TessellatingHeckler
źródło
for(--$i;$n)
i-replace"8|0"
?$i=-1
doprowadzało mnie do szału. Nadal próbuję znaleźć sposób, aby nie trzeba było inicjalizować$i
, ale rzeczy, które próbowałem do tej pory były dłuższe (a biorąc pod uwagę to, prawdopodobnie będą jeszcze dłuższe).CJam,
3634 bajtówDzięki aditsu za oszczędność 2 bajtów.
Sprawdź to tutaj.
źródło
Narzędzia Bash + GNU, 67
seq
po prostu generuje liczby całkowite, zaczynając od0
górysed -r
:h
skopiuj wiersz wejściowy do miejsca wstrzymania/12357/d
usuń bezbożne liczbys/8|0/&&/g
zamień podwójnie święte cyfry dwukrotnie na siebie. W ten sposób pojedyncze święte cyfry są liczone raz, a podwójnie święte cyfry są liczone dwa razy./^.{$1}/!d
Jeśli nie pasują co najmniej$1
dołki, usuń i przejdź do następnego wierszax
przywróć oryginalny numer do obszaru wzorówsed
$2!d
w dowolnych wierszach przed wierszem$2
usuń i przejdź do następnego wierszaq
musi znajdować się w linii$2
- zakończ (i niejawny wydruk)Ideone.
źródło
sed -r "h;/[12357]/d;s/8|0/&&/g;/^.{$1}/!d;x"
. I kolejna 4:sed $2!d\;q
. A jeśli jesteś zadowolony z górnej granicy wynoszącej zaledwie 4611686018427387904, możesz uciecseq 0 $[1<<62]
seq
przyjmujeNaN
jako wartość: teraz mamseq 0 NaN|sed -r "h;/[12357]/d;s/8|0/&&/g;/^.{$1}/!d;x"|sed $2!d\;q
, zdobywając 67.-sh: !d\: event not found
` before
! `Nie jest potrzebny w skrypcie . Jest to potrzebne tylko podczas uruchamiania tego bezpośrednio z wiersza poleceń, co nie uważam za wymóg.MATL , 39
40bajtówInpunts są
n
ih
w tej kolejności.Wypróbuj online!
Musimy śledzić dwie liczby: aktualny numer kandydata (aby sprawdzić jego świętość) i liczbę znalezionych liczb, które są wystarczająco święte. Pierwszy to górna część stosu, a drugi jest przechowywany jako liczba elementów na stosie. Po zakończeniu programu wyświetlana jest tylko górna część.
źródło
R,
109107 bajtówDzięki nowym wierszom i wcięciom:
Stosowanie:
źródło
JavaScript (ES6), 110 bajtów
Ogonowe rozwiązanie rekurencyjne, które gromadzi święte liczby w tablicy.
Z braku zainteresowania, nie wymaganie, aby liczba była całkowicie (!) Święta, sprawia, że świętość liczy się bardziej niezręcznie, ale wciąż oszczędza 10%:
źródło
i
ir
w jednym momencie i nie edytowałem poprawnie zmiany.JavaScript ES6, 191 bajtów
Jasne, to nie jest najbardziej efektywny sposób. Ale znasz mnie, uwielbiam generatory <3
Nieznacznie nie golfista:
źródło
C # 6, 168 bajtów
To jest wyrażenie Lambda typu Func <int, int, int>. Ten kod jest minimalizowany dla rozmiaru minimalnego (nie wykonanie).
Poniżej upiększony kod w deklaracji metody (z większą wydajnością):
źródło
JavaScript (ES6), 87
Mniej golfa
Test
źródło
Lua, 169 bajtów
Nie golfowany:
źródło
Lua,
155141140 bajtówPobiera oba dane wejściowe za pomocą argumentu wiersza polecenia (pierwszy argument to n, a następnie h)
Edycja: Dzięki @DavisDude, który pomógł mi zgolić 14 bajtów i przypomniał mi, że nie muszę drukować wszystkich świętych liczb do n, ale tylko n-ty.
Bez golfa i wyjaśnienia
źródło
print(a[arg[1]])
n
. W rzeczywistościprint(a[#a])
oszczędza jeszcze więcej bajtów. Dziękuję za komentarz !x=0a={}
zamiastx,a=0,{}
.0a
byłby interpretowany jako liczba szesnastkowa, ale mogę zrobić toa={}x=0while
bez problemu :)Oracle SQL 11.2, 229 bajtów
Bez golfa
źródło
Python 2, 96 bajtów
Włączony stan świętości
k
jest sprawdzany przezsum(map(s.count,`k`))>=h
, która zlicza liczbę dołków, sumując liczbę dla każdej postaci ws="0046889"
, gdzie0
i8
pojawia się dwukrotnie.set(str(k))<=set(s))
, która sprawdza, czy wszystkie liczby są święte.str
służy raczej niż backticksowi, aby uniknąć sufiksuL
przez długi czas.Są one połączone w jedną równość za pomocą faktu, że liczby w Pythonie 2 są mniejsze niż zbiory.
Funkcja jest definiowana rekurencyjnie w celu zliczania liczb
k
, zmniejszając licznik zan
każdym razem świętą liczbę trafień, chyba że trafi0
. Może wtedy zwrócić wartość,k
która to wywołała, ale krótsze jest utrzymywanie liczby rekurencyjnie przez dodawanie za1
każdym razem, chociaż oddzielne wymaga podstawowej liczby-1
poprawek.źródło
Haskell, 94 bajty
c
jest świętością cyfry,v
świętością liczby,n!h
resztą zajmuje się.Uwaga: Myślę, że to jedyna odpowiedź bez postaci
4,6,8
.źródło
Szybki
źródło