Wyzwanie
Podając liczbę całkowitą, Q
w zakresie -(2^100) ≤ Q ≤ 2^100
, wypisz liczbę cyfr w tej liczbie (w podstawie 10).
Zasady
Tak, możesz wziąć liczbę jako ciąg znaków i znaleźć jej długość.
Wszystkie funkcje matematyczne są dozwolone.
Możesz przyjmować dane wejściowe w dowolnej bazie, ale dane wyjściowe muszą mieć długość liczby w bazie 10.
Nie licz znaku minus dla liczb ujemnych. Liczba nigdy nie będzie miała miejsca po przecinku.
Zero może mieć jedną lub zero cyfr.
Załóżmy, że wejście zawsze będzie prawidłową liczbą całkowitą.
Przykłady
Input > Output
-45 > 2
12548026 > 8
33107638153846291829 > 20
-20000 > 5
0 > 1 or 0
Zwycięski
Najkrótszy kod w bajtach wygrywa.
Taxi , 1118 bajtów
Wypróbuj online!
Nie golfowany:
Wyjaśnienie:
źródło
Zoom Zoom
w każdej pętliplan "r"
. Właśnie przetestowałem go do 100 000 cyfr i nigdy nie zabrakło mu gazu. Nie obliczyłem tego, ale przypuszczam, że kosztuje więcej niż wystarczającą opłatę, aby zapłacić za używany gaz, więc napełnia zbiornik w każdej pętli.Mathematica, 13 bajtów
Jest wbudowany ... zwroty
0
dla0
.źródło
There's a built-in
: Kiedy nie ma?dc, 3
Zauważ, że zwykle
dc
wymaga podania liczb ujemnych_
zamiast zamiast zwykłych-
. Jednak w tym przypadku można użyć dowolnego z nich. Jeśli-
podano,dc
traktuje to jako odejmowanie pustego stosu, rzucadc: stack empty
, a następnie kontynuuje z resztą liczby; Zatem wynik nie jest inny.Wypróbuj online .
źródło
Z
przesłanie funkcji?dc
jest językiem konkatenatywnym z operatorami quote + dup + eval, dlatego może ponownie wykorzystywać dowolne ciągi kodu.Siatkówka , 2 bajty
Wypróbuj online!
Siatkówka tak naprawdę nie wie, jakie są liczby, więc dane wejściowe są traktowane jako ciąg znaków i po prostu liczymy cyfry.
źródło
05AB1E , 2 bajty
Wypróbuj online! lub Wypróbuj wszystkie testy!
źródło
Ä
co? Nieþ
? Słusznie.Ä
pierwszym, aleþ
poradziłbym sobie z kropką dziesiętną, więc chyba trochę lepiej.Alice , 16 bajtów
Wypróbuj online!
Wyjaśnienie
Znalezienie na wpół przyzwoitego układu było dość trudne. Nadal nie jestem z tego powodu bardzo zadowolony z powodu przestrzeni,
<
i;
, ale to najlepsze, co mogłem na razie zrobić.Długość łańcucha jest jednym z tych bardzo powszechnych wbudowanych, które nie istnieją w Alice, ponieważ jego wejście jest ciągiem, a wyjściem jest liczbą całkowitą (a wszystkie polecenia Alice są ściśle liczbami całkowitymi lub ciągami znaków). Możemy zmierzyć długość łańcucha zapisując go na taśmie w trybie porządkowym, a następnie znajdując jego koniec w trybie kardynalnym.
Próbowałem również dbać o znak minus w trybie kardynalnym z
H
(wartością bezwzględną), ale dodatkowy przełącznik trybu zawsze był droższy w moich próbach.źródło
PHP, 23 bajty
Wypróbuj online!
log podstawy 10 wartości bezwzględnej plus jeden rzut na int
dla zera jako wejście log10 zwraca,
INF
co jest interpretowane jako fałszLepszym sposobem jest zastąpienie
$argn
go$argn?:1
+3 bajtamiPHP, 27 bajtów
długość łańcucha minus wartość logiczna jest mniejsza niż zero
+2 bajty do porównania ciągów
$argn<"0"
Wypróbuj online!
PHP, 32 bajty
Wypróbuj online!
Regex zlicza wszystkie cyfry
35 bajtów
Wypróbuj online!
długość łańcucha minus liczba
-
strspn
źródło
10
, ponieważ^
ma niższy priorytet. Możesz to naprawić za pomocą-~
.<?=strlen(abs($argn));
?$argn?:1
? Będzie to 26 bajtów zlog10()
iabs()
.-~$x
jest równoważny((int)$x)+1
.<?=-~log10(abs($argn?:1));
wydaje się działać.Fortran 95 (gfortran),
1219695 bajtówObjaśnienie:
Odejmuje indeks długości znaku „-” od długości argumentu.
Tablice zaczynają się od 1 w Fortran, a indeks () zwraca 0, jeśli symbol nie zostanie znaleziony.
Edycja: Przełączono na domyślną liczbę całkowitą „i”, również skonsolidowany moduł pobierania argumentów.
Edycja: -1 bajt dzięki @Tsathoggua
źródło
PowerShell, 24 bajty
rzutuje „ciągłą” wartość argumentów wejściowych na ciąg znaków i otrzymuje jej właściwość „length”.
1 bajt krótszy niż
"".Length
dopóki ktoś nie znajdzie lepszego sposobu na uzyskanie abs liczby w PS, jest to prawdopodobnie tak krótkie, jak to możliwe.
źródło
"$args".trim('-')|% Le*
? :)05AB1E , 2 bajty
Wypróbuj online!
źródło
pieprzenie mózgu , 37 bajtów
Dane wyjściowe są wartością bajtową.
Wypróbuj online!
Wyjaśnienie
źródło
Rubin,
1511 + 1 =1612 bajtówUżywa
-n
flagi.Wypróbuj online!
Wyjaśnienie
źródło
Galaretka , 2 bajty
Wypróbuj online!
Robi to dosłownie o co pytano:
źródło
D
działa na dziesiętne? Czy-1.2
wyjdzie[-1,-0.2]
? Próbowałem sam, nie robi.654.321D
przyniesie[6,5,4.321]
(no faktycznie[6.0,5.0,4.321000000000026]
)[-6.0, -5.0, -4.321000000000026]
tak naprawdę najwyraźniej.CJam , 5 bajtów
Na podstawie ciągu.
Wypróbuj online!
9 bajtów dla rozwiązania opartego wyłącznie na matematyce:
Lub kolejne 5 z konwersją podstawową:
źródło
rizs,
.Japt , 5 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
RProgN 2 , 2 bajty
Wypróbuj online!
Po prostu pobiera bezwzględną wartość wejściową i liczy cyfry.
źródło
JavaScript (ES6),
27262524 bajtówPobiera dane wejściowe jako ciąg.
źródło
s=>`${s>0?s:-s}`.length
!JavaScript (ES6), 23 bajty
Inne podejście do odpowiedzi Kudłaty .
źródło
s=>s.length-(s<0)
oszczędza 6 bajtówJava,
3024 bajtówZakłada, że
i
jestBigInteger
. Ponadto typ jest kontekstualizowany, więc import nie jest wymagany, jak pokazano w kodzie testowym.Test
Oszczędza
źródło
+""
zamiast.toString()
?i
odpowiedzi. Myślę, że powinno to zrobić więcej odpowiedzi lambda.Python 2 ,
3122 bajtów-9 bajtów dzięki Rod.
Wypróbuj online!
źródło
len(`abs(s)`)
z wprowadzoną liczbą jest krótszalen∘repr∘abs
.Brain-Flak , 63 bajty
Wypróbuj online!
Jest to 62 bajty kodu i +1 bajt dla
-a
flagi.Próbowałem dwóch innych podejść, ale niestety oba były dłuższe:
To powinna być bardzo krótka odpowiedź. W rzeczywistości, gdybyśmy nie musieli obsługiwać liczb ujemnych, moglibyśmy po prostu:
Ale najpierw musimy porównać pierwsze wejście z 45 (ASCII
-
), co stanowi większość bajtów tej odpowiedzi.Rozwiązanie arytmetyczne może być krótsze.
źródło
([{}]((((()()()()())){}{})){}{})({(<()>)}{}[]<>)
Ruby, 20 bajtów
źródło
->a{a.abs.to_s.size}[-95]
->a{a.abs.to_s.size}.call(-92)
Pyth, 4 bajty
Wypróbuj online!
Wszystkie przypadki testowe
źródło
R, 18 bajtów
źródło
Alice , 10 bajtów (niekonkurujące)
Wypróbuj online!
Jest to niekonkurencyjne rozwiązanie, ponieważ w momencie opublikowania tego wyzwania polecenie
c
było włożone do oficjalnego (i tylko: D) tłumacza. W międzyczasie Martin Ender naprawił to, więc teraz działa.Wyjaśnienie
Wskaźnik instrukcji przechodzi przez dwa mirrory (
/
) wiele razy, więc może być trochę trudny do naśladowania. Spróbuję wyjaśnić to tak jasno, jak to możliwe, używając kardynalnych wskazówek (np. N jest w górę, SW jest w lewo ...). Zadzwonię/1
skrajne lewe lusterko i/2
na prawo.źródło
Marka GNU , 78 bajtów
Tryb rozkazujący:
Styl funkcjonalny, 113 bajtów:
Pure Make, 83 bajty:
źródło
C ++,
8076 bajtówWyświetla długość argumentu, minus 1, jeśli pierwszy znak jest minusem, ponieważ
bool
gwarantuje konwersję na1
iftrue
lub0
iffalse
<46
zamiast=='-'
, i aby uszanować tablicę zamiast[]
źródło
c[1][0]=='-'
je,*c[1]<46
ponieważ możemy założyć, że wejście zawsze będzie prawidłową liczbą całkowitą. (Chyba że dozwolone są prefiksy inne niż „-” ...)TI-Basic (TI-84 Plus CE, OS 5.2+), 6 bajtów
TI-Basic to tokenizowany język;
length(
itoString(
każdy ma dwa bajty.Ans
jest używany jako domyślny wkład; ostatnia (tylko) wartość wiersza jest domyślnie zwracana.Całkiem proste, przyjmuje wartość bezwzględną, aby pozbyć się znaku minus, konwertuje na ciąg znaków, zwraca długość ciągu.
6-bajtowe podejście matematyczne, które nie działa dla 0:
źródło
toString(
?Pari / GP , 13 bajtów
Wypróbuj online!
źródło