Herausforderung
Geben Sie bei einer bestimmten Ganzzahl Q
im Bereich -(2^100) ≤ Q ≤ 2^100
die Anzahl der Stellen in dieser Zahl (in Basis 10) aus.
Regeln
Ja, Sie können die Zahl als Zeichenfolge verwenden und ihre Länge ermitteln.
Alle mathematischen Funktionen sind erlaubt.
Sie können Eingaben in jede Basis nehmen, aber die Ausgabe muss die Länge der Zahl in Basis 10 sein.
Zählen Sie das Minuszeichen nicht für negative Zahlen. Die Zahl wird niemals einen Dezimalpunkt haben.
Null kann entweder eine oder null Ziffern haben.
Angenommen, die Eingabe ist immer eine gültige Ganzzahl.
Beispiele
Input > Output
-45 > 2
12548026 > 8
33107638153846291829 > 20
-20000 > 5
0 > 1 or 0
Gewinnen
Kürzester Code in Bytes gewinnt.
Taxi , 1118 Bytes
Probieren Sie es online!
Ungolfed:
Erläuterung:
quelle
Zoom Zoom
in jeder Schleife vonplan "r"
. Ich habe es gerade auf 100.000 Stellen getestet und es ging nie das Benzin aus. Ich habe es nicht berechnet, aber ich nehme an, es kostet mehr als genug, um für das Benzin zu bezahlen, das es verbraucht, sodass es den Tank in jeder Schleife auffüllt.Mathematica, 13 Bytes
Es gibt eine eingebaute ... Rückkehr
0
für0
.quelle
There's a built-in
: Wann ist nicht da?dc, 3
Beachten Sie, dass normalerweise
dc
negative Zahlen_
anstelle der üblichen Zahlen angegeben werden müssen-
. In diesem Fall kann jedoch beides verwendet werden. Wenn-
angegeben, wirddc
dies als Subtraktion auf einem leeren Stapel behandelt, geworfendc: stack empty
und dann mit dem Rest der Zahl fortgefahren. Das Ergebnis ist also nicht anders.Probieren Sie es online aus .
quelle
Z
eine Funktionsübermittlung sein?dc
Da es sich um eine verkettete Sprache mit den Operatoren quote + dup + eval handelt, kann sie beliebige Code-Zeichenfolgen wiederverwenden.Retina , 2 Bytes
Probieren Sie es online!
Retina weiß nicht wirklich, was Zahlen sind, daher wird die Eingabe als Zeichenfolge behandelt und wir zählen einfach die Ziffern.
quelle
05AB1E , 2 Bytes
Probieren Sie es online! oder Probieren Sie alle Tests aus!
quelle
Ä
huh? Nichtþ
? Meinetwegen.Ä
zuerst darüber nachgedacht ,þ
würde aber mit einem Dezimalpunkt umgehen, also ist es wohl ein bisschen besser.Alice , 16 Bytes
Probieren Sie es online!
Erläuterung
Ein halbwegs anständiges Layout dafür zu finden, war ziemlich schwierig. Ich bin immer noch nicht sehr zufrieden damit, wegen der Räume, der
<
und der;
, aber das ist das Beste, was ich im Moment tun kann.Die Zeichenfolgenlänge ist eine der sehr gebräuchlichen Funktionen, die in Alice nicht vorhanden sind, da es sich bei der Eingabe um eine Zeichenfolge und bei der Ausgabe um eine Ganzzahl handelt (und alle Alice-Befehle sind ausschließlich Ganzzahlen für Ganzzahlen oder Zeichenfolgen für Zeichenfolgen). Wir können die Länge einer Zeichenkette messen, indem wir sie im Ordinal-Modus auf das Band schreiben und dann im Cardinal-Modus ihr Ende finden.
Ich habe auch versucht, das Minuszeichen im Kardinalmodus mit
H
(Absolutwert) zu korrigieren, aber der zusätzliche Modusschalter war bei meinen Versuchen immer teurer.quelle
PHP, 23 Bytes
Probieren Sie es online!
log zur Basis 10 des Absolutwerts plus eine Umwandlung in int
für null als eingang gibt log10 zurück,
INF
was als falsch interpretiert wirdDer bessere Weg ist zu ersetzen
$argn
mit$argn?:1
3 BytesPHP, 27 Bytes
Stringlänge minus Boolescher Wert ist kleiner als Null
+2 Bytes für den Stringvergleich
$argn<"0"
Probieren Sie es online!
PHP, 32 Bytes
Probieren Sie es online!
Regex zählt alle Ziffern
35 Bytes
Probieren Sie es online!
Stringlänge minus Anzahl
-
strspn
quelle
10
, weil er^
eine niedrigere Priorität hat. Sie können es mit beheben-~
.<?=strlen(abs($argn));
?$argn?:1
? Es wären 26 Bytes mitlog10()
undabs()
.-~$x
entspricht((int)$x)+1
.<?=-~log10(abs($argn?:1));
scheint zu funktionieren.Fortran 95 (Fortran),
1219695 BytesErläuterung:
Subtrahiert den Index des Zeichens '-' von der Länge des Arguments.
Arrays beginnen in Fortran bei 1, und index () gibt 0 zurück, wenn das Symbol nicht gefunden wird.
Bearbeiten: Auf implizite Ganzzahl "i" umgestellt, auch konsolidierter Argument-Getter.
Edit: -1 Byte dank @Tsathoggua
quelle
PowerShell, 24 Byte
wandelt den "absoluten" Wert der Eingabeargs in einen String um und erhält die Eigenschaft "length".
1 Byte kürzer als
"".Length
Bis jemand einen besseren Weg findet, um die Bauchmuskeln einer Zahl in PS zu erhalten, ist dies wahrscheinlich so kurz, wie es nur geht.
quelle
"$args".trim('-')|% Le*
? :)05AB1E , 2 Bytes
Probieren Sie es online!
quelle
Brainfuck , 37 Bytes
Die Ausgabe erfolgt byteweise.
Probieren Sie es online!
Erläuterung
quelle
Ruby,
1511 + 1 =1612 BytesVerwendet die
-n
Flagge.Probieren Sie es online!
Erläuterung
quelle
Gelee , 2 Bytes
Probieren Sie es online!
Dies macht buchstäblich, was gefragt wurde:
quelle
D
arbeitet an Dezimalstellen? Würde-1.2
ausgeben[-1,-0.2]
? Versuchte es selbst, tut es nicht.654.321D
ergeben würde[6,5,4.321]
(auch tatsächlich[6.0,5.0,4.321000000000026]
)[-6.0, -5.0, -4.321000000000026]
eigentlich anscheinend.CJam , 5 Bytes
String basiert.
Probieren Sie es online!
9 Bytes für eine rein mathematische Lösung:
Oder weitere 5 mit Basisumwandlung:
quelle
rizs,
.Japt , 5 Bytes
Probieren Sie es online!
Erläuterung
quelle
RProgN 2 , 2 Bytes
Probieren Sie es online!
Ermittelt einfach den absoluten Wert der Eingabe und zählt die Ziffern.
quelle
JavaScript (ES6),
27262524 ByteÜbernimmt die Eingabe als Zeichenfolge.
quelle
s=>`${s>0?s:-s}`.length
:!JavaScript (ES6), 23 Byte
Andere Herangehensweise an Shaggys Antwort .
quelle
s=>s.length-(s<0)
speichert 6 BytesJava,
3024 BytesAngenommen,
i
ist einBigInteger
. Außerdem ist der Typ kontextualisiert, sodass keine Importe erforderlich sind, wie im Testcode angegeben.Prüfung
Speichert
quelle
+""
statt.toString()
?i
in Ihrer Antwort. Ich denke, mehr Lambda-Antworten sollten dies tun.Python 2 ,
3122 Bytes-9 Bytes dank Rod.
Probieren Sie es online!
quelle
len(`abs(s)`)
mit der Zahl als Eingabe ist kürzerlen∘repr∘abs
.Brain-Flak , 63 Bytes
Probieren Sie es online!
Dies sind 62 Byte Code und +1 Byte für das
-a
Flag.Ich habe zwei andere Ansätze ausprobiert, aber leider waren beide länger:
Dies sollte eine sehr kurze Antwort sein. In der Tat, wenn wir keine negativen Zahlen unterstützen müssten, könnten wir einfach tun:
Aber wir müssen zuerst die erste Eingabe mit 45 (ASCII
-
) vergleichen, was den größten Teil der Byteanzahl dieser Antwort darstellt.Eine arithmetische Lösung könnte kürzer sein.
quelle
([{}]((((()()()()())){}{})){}{})({(<()>)}{}[]<>)
Ruby, 20 Bytes
quelle
->a{a.abs.to_s.size}[-95]
->a{a.abs.to_s.size}.call(-92)
Pyth, 4 Bytes
Probieren Sie es online!
Alle Testfälle
quelle
R, 18 Bytes
quelle
Alice , 10 Bytes (nicht konkurrierend)
Probieren Sie es online!
Dies ist eine nicht konkurrierende Lösung, da zum Zeitpunkt der Veröffentlichung dieser Herausforderung der Befehl ausgegeben wurde
c
Veröffentlichung im offiziellen (und einzigen: D) Interpreter fehlerhaft war. Martin Ender hat es inzwischen behoben, so dass dies nun funktioniert.Erläuterung
Der Anweisungszeiger durchläuft die beiden Spiegel (
/
) mehrmals, daher ist es möglicherweise etwas schwierig, ihm zu folgen. Ich werde versuchen, es so klar wie möglich zu erklären, indem ich die Himmelsrichtungen benutze (zB N ist oben, SW ist unten links ...). Ich werde/1
den ganz linken und/2
den ganz rechten Spiegel nennen .quelle
GNU Make , 78 Bytes
Imperativer Stil:
Funktionsstil, 113 Bytes:
Pure Make, 83 Bytes:
quelle
C ++,
8076 BytesGibt die Länge des Arguments aus, minus 1, wenn das erste Zeichen ein Minus ist, da
bool
die Konvertierung in1
iftrue
oder0
if garantiert wirdfalse
<46
anstelle von verwenden kann=='-'
, und das Array anstelle von zu respektieren[]
quelle
c[1][0]=='-'
mit ,*c[1]<46
da wir den Eingang annehmen kann , wird immer eine gültige ganze Zahl sein. (Es sei denn, andere Präfixe als '-' sind zulässig ...)TI-Basic (TI-84 Plus CE, OS 5.2+), 6 Byte
TI-Basic ist eine Token-Sprache.
length(
undtoString(
sind jeweils zwei Bytes.Ans
wird als implizite Eingabe verwendet; Der Wert der letzten (einzigen) Zeile wird implizit zurückgegeben.Ziemlich einfach: Nimmt den absoluten Wert, um ein Minuszeichen zu entfernen, konvertiert in einen String und gibt die Länge des Strings zurück.
Ein mathematischer 6-Byte-Ansatz, der für 0 nicht funktioniert:
quelle
toString(
?Pari / GP , 13 Bytes
Probieren Sie es online!
quelle