Pytanie:
Otrzymasz początkową i końcową liczbę całkowitą sekwencji i powinieneś zwrócić liczbę liczb całkowitych, które nie zawierają cyfry 5
. Należy podać numery początkowe i końcowe!
Przykłady:
1,9 → 1,2,3,4,6,7,8,9 → Wynik 8
4,17 → 4,6,7,8,9,10,11,12,13,14,16,17 → Wynik 12
50,60 → 60 → Wynik 1
-59, -50 → → Wynik 0
Wynik może zawierać pięć.
Numer początkowy zawsze będzie mniejszy niż numer końcowy. Obie liczby mogą być również ujemne!
Jestem bardzo ciekawy twoich rozwiązań i sposobu ich rozwiązania. Może ktoś z was znajdzie proste rozwiązanie z czystej matematyki.
Edytuj Jest to wyzwanie polegające na grze w golfa, więc wygrywa najkrótszy kod.
50, 59 -> 0
.Odpowiedzi:
JavaScript (ES6),
3633 bajtówPobiera dane wejściowe ze składnią curry
(a)(b)
.Sformatowane i skomentowane
Przypadki testowe
Pokaż fragment kodu
źródło
test
naexec
kiedy trzeba tylko wartość logiczną.)b<a
ma za zadanie zatrzymać rekurencję po zliczeniu wszystkich liczb odb
doa
, więc usunięcie jej spowodowałoby nieskończoną rekurencję.a
jako argument i zwracaF
funkcję, która z kolei przyjmujeb
jako argument i - jak zauważyłeś - jest wywoływana rekurencyjnie w celu iteracji odb
doa
, zwiększając licznik dla wszystkich liczb całkowitych, które nie zawierają5
dziesiętnych reprezentacja.Galaretka ,
87 bajtów-1 bajt dzięki Dennisowi (użyj faktu, że indeksowanie do liczby traktuje tę liczbę jako listę dziesiętną)
TryItOnline!
W jaki sposób?
* Wartość bezwzględna atom
A
jest niezbędna, ponieważ liczba ujemna rzutowana na listę dziesiętną zawiera wpisy ujemne, z których żadna nigdy nie byłaby liczbą5
(podany przykład liczyłby wszystkie osiem zamiast dwóch).źródło
rAw€5¬S
zapisuje bajt.w
rzuca argument liczby całkowitej na swoje cyfry dziesiętne.Bash + grep, 17 bajtów
Wypróbuj online!
źródło
2sable ,
65 bajtówOszczędność bajtu dzięki Adnanowi
Wypróbuj online!
Wyjaśnienie
Uwaga: Działa to z powodu błędu
¢
powodującego, że funkcja stosuje się do każdego elementu zamiast zliczania pasujących elementów na liście.źródło
`
ponieważ zachowuje się tak samo na tablicach: p.Python2,
59555251474342 bajtyRozwiązanie rekurencyjne. Dzięki @xnor za motywację do znalezienia rozwiązania za pomocą operatorów logicznych! Ponadto, dzięki @JonathanAllan i @xnor za prowadzenie mnie i dzielenie bajtu z 43 na 42!
Inne próby przy 43 bajtach
źródło
if!`x`.count('5')
zadziała?not
operatora, który jest!
w językach podobnych do C, ale zajmuje 3 bajty :(and
ior
.not
.Narzędzia Bash / Unix, 21 bajtów
Wypróbuj online!
źródło
05AB1E ,
876 bajtówOszczędność bajtu dzięki Adnanowi
Wypróbuj online!
Wyjaśnienie
źródło
å
, co oznacza.å
, że możesz zrobićŸ5.å_O
dla 6 bajtów.negate
znaczenie-n
lubn==0?1:0
?n==0?1:0
Pyth,
98 bajtówOszczędność bajtu dzięki FryAmTheEggman!
Wyjaśnienie:
Wypróbuj online!
źródło
Perl 6 , 23 bajtów
Wypróbuj online!
Jak to działa
źródło
Haskell , 39 bajtów
Wypróbuj online! Stosowanie:
Wyjaśnienie:
źródło
R, 33 bajty
Stosowanie:
źródło
Oktawa , 36 bajtów
Wypróbuj online!
źródło
Groovy,
47454340 bajtówTo jest nienazwane zamknięcie.
findAll
jest podobny do dodawaniaif
warunku do listy w Pythonie.Wypróbuj online!
źródło
PHP 7.1,
5755 bajtówBiegnij z
php -r '<code>' <a> <b>
źródło
Mathematica,
464442 bajtówDziękujemy alephalpha i DavidC za zaoszczędzenie 2 bajtów każdy!
Funkcja bez nazwy, która przyjmuje dwa argumenty liczb całkowitych i zwraca liczbę całkowitą.
IntegerDigits@Range@##
konwertuje wszystkie liczby między danymi wejściowymi na listy cyfr;FreeQ@5
testuje te listy, aby zdecydować, które nie zawierają żadnych5
. NastępnieBoole
konwertuje booleany na zera i jedynki iTr
sumuje wyniki.Inne rozwiązania (44 i 47 bajtów):
IntegerDigits@x~FreeQ~5
określa, czy lista cyfr liczby jest wolna od 5s, iCount[Range@##,x_/;...]&
zlicza, ile liczb między wejściami przechodzi ten test.1##&@@IntegerDigits@#-5
pobiera listę cyfr liczby, odejmuje 5 od wszystkich i mnoży odpowiedzi razem;Sign[...]^2
następnie konwertuje wszystkie niezerowe liczby na 1.źródło
Count[Range@##,x_/;IntegerDigits@x~FreeQ~5]&
Tr@Boole[FreeQ@5/@IntegerDigits@Range@##]&
Rubin,
3635 bajtówThx IMP1 dla -1 bajtu
źródło
?5
('5'
znaku) zamiast/5
/ w wyszukiwaniu, aby zapisać bajt.Java 7,
8078 bajtówNie golfowany:
Kod testowy:
Wypróbuj tutaj.
Wydajność:
źródło
PowerShell,
4241 bajtówWywoływany z wiersza poleceń jako. \ No5s.ps1 1 20
źródło
-replace3
Lub-split1
lub-notmatch5
).Python 2,
6156 bajtów-5 bajtów dzięki tukkaaX
źródło
not "5" in
:) Ponadto, jeśli używasz Python2, możesz otaczaćx
się cudzysłowami zamiast robićstr(x)
.[]
. Nie potrzebujesz też wcześniej miejscaif
.lambda a,b:sum(not"5"in`n`for n in range(a,b+1))
działa jednak. tio.run/nexus/…Szybkie 52 bajty
źródło
Partia, 95 bajtów
Ręczne zapętlanie oszczędza niektóre bajty, ponieważ i tak potrzebuję licznika pętli w zmiennej.
źródło
PHP, 56 bajtów
Uruchom tak:
Wersja dla PHP 7.1 miałaby 53 bajty (napisy dla Tytusa):
Wyjaśnienie
źródło
trim
znowu zapomniałem o drugim parametrze.CJam „łatwe czyste matematyczne rozwiązanie”, 60
Wypróbuj online
Przybiera liczby w dowolnej kolejności, w tablicy.
Wyjaśnienie:
Jednym z podstawowych problemów jest obliczenie f (n) = liczby innych niż 5 liczb od 1 do n (włącznie) dla dowolnego dodatniego n. Odpowiedź brzmi: weź cyfry dziesiętne n, zamień wszystkie cyfry po pierwszych 5 (jeśli istnieją) na 9, a następnie zamień wszystkie cyfry 5..9 na 4..8 (zmniejszenie) i przekonwertuj z podstawy 9. Np. 1752 → 1759 → 1648 → 1 * 9 ^ 3 + 6 * 9 ^ 2 + 4 * 9 + 8 = 1259. Zasadniczo każda pozycja cyfr ma 9 dopuszczalnych wartości, a 5xxxx odpowiada 49999, ponieważ między nimi nie ma już żadnych poprawnych liczb.
Po rozwiązaniu tego mamy kilka przypadków: jeśli liczby wejściowe (powiedzmy aib, a <b) są (ściśle) dodatnie, to wynikiem jest f (b) -f (a-1). Jeśli są one ujemne, możemy wziąć wartości bezwzględne, zmienić ich kolejność i użyć tych samych obliczeń. A jeśli a <= 0 <= b, to wynikiem jest f (-a) + f (b) +1.
Program najpierw implementuje funkcję F, jak opisano powyżej (ale stosuje się do każdej liczby w tablicy), a następnie odczytuje dane wejściowe, konwertuje liczby na wartość bezwzględną i zmienia ich kolejność, i wykorzystuje jedno z 2 powyższych obliczeń, w oparciu o to, czy * b> 0 początkowo.
źródło
Python 2 , 54 bajty
Wypróbuj online!
Nie najkrótsza odpowiedź w Pythonie Używa tego samego algorytmu, ale inny sposób implementacji z pętlą while i nie jest funkcją lambda.
źródło
Java 7, 77 bajtów
To ulepszenie Kevins Answer , ale ponieważ nie mam jeszcze reputacji, aby komentować, ta nowa odpowiedź będzie musiała wystarczyć.
Więc co zrobiłem to:
indexOf
instrukcje nacontains
(-1 bajt)pętla for ( 77 bajtów ):
rekurencyjny ( 79 bajtów ):
Wydajność:
Sprawdź to tutaj !
źródło
(""+a).contains("5")?0:1
jej zastąpić!(""+a).contains("5")
?(""+a).contains("5")||r++
?C #, 67 bajtów
źródło
for(int c=0;...)
ale potem kompilacja się nie powiedzie, ponieważ zwrot jest poza zakresemc
JavaScript (ES6),
58 5649 bajtówGrał w golfa 7 bajtów dzięki produktom ETH .
źródło
c+=!/5/.test(s++)
aby zaoszczędzić kilka bajtów :-)MATL , 10 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
C #, 77 bajtów
Anonimowe połączenie lambda.
Używa
n
(pierwsza liczba) im
(ostatnia liczba) jako danych wejściowych, a następnie sprawdza poprzez zawarcie ciągu ("".Contains("")
).źródło
5
w jej numerze, więc10
(której odpowiedź by się nie liczyła) należy policzyć.g
trzeba zainicjować, gdy jest podana tak, jak to się nazywa,var
więc potrzebujeszvar g="";
i możesz używaćn=>m=>
Właściwie 13 bajtów
Wypróbuj online!
Wyjaśnienie:
źródło