Wie viele bedeutende Figuren?

10

Bestimmen Sie anhand einer Zahl als Eingabe, wie viele signifikante Zahlen sie enthält. Diese Nummer sollte als Zeichenfolge verwendet werden, da Sie eine spezielle Formatierung vornehmen müssen. Du wirst bald sehen, was ich meine (glaube ich).

Eine Ziffer ist ein Zeichen, wenn mindestens eine der folgenden Bedingungen zutrifft:

  • Ziffern ungleich Null sind immer signifikant.
  • Alle Nullen zwischen zwei signifikanten Ziffern sind signifikant.
  • Endgültige Null oder nachfolgende Nullen nur im Dezimalbereich sind signifikant.
  • Alle Ziffern sind signifikant, wenn nichts der Dezimalstelle folgt.
  • Wenn es nur Nullen gibt, werden alle bis auf die letzte Null als führende Nullen betrachtet

Eingang

Ein String oder ein String-Array der Nummer. Möglicherweise wird am Ende ein Dezimalpunkt ohne eine Ziffer angezeigt. Es hat möglicherweise überhaupt keinen Dezimalpunkt.

Ausgabe

Wie viele Sig-Feigen gibt es?

Beispiele

1.240 -> 4
0. -> 1
83900 -> 3
83900.0 -> 6
0.025 -> 2
0.0250 -> 3
2.5 -> 2
970. -> 3
0.00 -> 1
Daniel
quelle
verwandt, aber a) hat keine Antworten und b) geht es darum, die Antwort auf einen Ausdruck zu berechnen
Daniel
Verwandte
Adnan
Vielleicht möchten Sie irgendwo explizit erwähnen, dass, wenn es nur Nullen gibt, alle bis auf die letzte Null als führende Ziffern betrachtet werden (im Gegensatz zu allen bis auf die erste Null als nachfolgende Ziffern).
Martin Ender
Warum ist 0,00 -> 1? Sind die beiden Nullen nach dem Dezimalpunkt nicht signifikant (gemäß "Endnull oder nachfolgende Nullen nur im Dezimalteil sind signifikant").
Penguino
@Penguino, wie Martin Ender richtig sagte, wenn es nur Nullen gibt, werden alle bis auf die letzte Ziffer als führende Nullen betrachtet
Daniel

Antworten:

1

Stapel, 204 202 Bytes

@set/ps=
:t
@if %s:.=%%s:~-1%==%s%0 set s=%s:~,-1%&goto t
@set s=%s:.=%
:l
@if not %s%==0 if %s:~,1%==0 set s=%s:~1%&goto l
@set n=0
:n
@if not "%s%"=="" set/an+=1&set s=%s:~1%&goto n
@echo %n%

Nimmt Eingaben auf STDIN vor. Entfernt nachfolgende Nullen, wenn die Zahl kein a enthält ., und entfernt dann die .führenden Nullen, es sei denn, es gibt nur Nullen. In diesem Fall bleibt eine Null übrig. Schließlich nimmt es die Länge der verbleibenden Zeichenfolge.

Neil
quelle
Ich habe noch nie %in meinem Leben so viele gesehen : O
user41805
1
@KritixiLithos Ich habe 16 in einer Zeile zuvor verwaltet: codegolf.stackexchange.com/a/86608/17602
Neil
0

Scala, 90 Bytes

& =>(if(&contains 46)&filter(46!=)else&.reverse dropWhile(48==)reverse)dropWhile(48==)size

Erläuterung:

& =>               //define an anonymous function with a parameter called &
  (
  if(&contains 46) //if & contains a '.'
    &filter(46!=)    //remove all periods
  else             //else
    &.reverse        //reverse the string
    dropWhile(48==)  //remove leading zeros
    reverse          //and reverse again
  )
  dropWhile(48==) //remove leading zeros
  size            //return the length
corvus_192
quelle
0

C # 6, 163 Bytes

using System.Linq;
int a(string s)=>System.Math.Max(s.Contains('.')?(s[0]<'1'?s.SkipWhile(x=>x<'1').Count():s.Length-1):s.Reverse().SkipWhile(x=>x<'1').Count(),1);

Ungolfed

int a(string s)=>                                  
    System.Math.Max(
        s.Contains('.')                                // Has decimal place?
            ?(                                         // Has decimal place!
                s[0]<'1'                               // Start with '0' or '.'?
                    ?s.SkipWhile(x=>x<'1').Count()     // Yes: Skip leading '0' and '.', then count rest... But gives 0 for "0." and "0.00"
                    :s.Length-1)                       // No: Count length without decimal place
            :s.Reverse().SkipWhile(x=>x<'1').Count()   // No decimal place: Skip trailing '0' and count rest
    ,1);                                               // For "0." and "0.00"
Link Ng
quelle