कितने महत्वपूर्ण आंकड़े?


10

इनपुट के रूप में एक संख्या को देखते हुए, यह निर्धारित करें कि इसमें कितने महत्वपूर्ण आंकड़े हैं। इस संख्या को एक स्ट्रिंग के रूप में लिया जाना चाहिए क्योंकि आपको कुछ विशेष स्वरूपण करना होगा। आप देखेंगे कि मेरा क्या मतलब है (मुझे लगता है) जल्द ही।

एक अंक एक सिग-अंजीर है यदि निम्न में से कम से कम एक लागू होता है:

  • गैर-शून्य अंक हमेशा महत्वपूर्ण होते हैं।
  • दो महत्वपूर्ण अंकों के बीच कोई शून्य महत्वपूर्ण हैं।
  • दशमलव भाग में अंतिम शून्य या अनुगामी शून्य केवल महत्वपूर्ण हैं।
  • सभी अंक महत्वपूर्ण हैं अगर कुछ भी दशमलव स्थान का अनुसरण नहीं करता है।
  • जब केवल शून्य होते हैं, लेकिन अंतिम शून्य को अग्रणी शून्य माना जाता है

इनपुट

संख्या का एक स्ट्रिंग या स्ट्रिंग सरणी। इसके अंत में बिना अंक के दशमलव बिंदु हो सकता है। इसमें दशमलव बिंदु बिल्कुल नहीं हो सकता है।

उत्पादन

कितने सिग-फिग हैं।

उदाहरण

1.240 -> 4
0. -> 1
83900 -> 3
83900.0 -> 6
0.025 -> 2
0.0250 -> 3
2.5 -> 2
970. -> 3
0.00 -> 1

संबंधित लेकिन a) के पास कोई उत्तर नहीं है और b) एक अभिव्यक्ति के उत्तर की गणना करने के बारे में है
डैनियल


आप कहीं स्पष्ट रूप से उल्लेख करना चाहते हैं कि यदि केवल शून्य हैं तो सभी लेकिन अंतिम शून्य को अग्रणी अंक माना जाता है (जैसा कि सभी के विपरीत है लेकिन पहले शून्य को अनुगामी अंक माना जाता है)।
मार्टिन एंडर

0.00 -> 1 क्यों है? दशमलव बिंदु महत्वपूर्ण के बाद दो शून्य नहीं हैं ("शून्य शून्य या दशमलव भाग में अनुगामी शून्य केवल महत्वपूर्ण है) के अनुसार"।
Penguino

@ पेंगुइन, मार्टिन एंडर के रूप में सही ढंग से कहा, अगर केवल 0s हैं, तो सभी लेकिन अंतिम अंकों को अग्रणी शून्य माना जाता है
डैनियल

जवाबों:




1

बैच, 204 202 बाइट्स

@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%

STDIN पर इनपुट लेता है। ट्रेलिंग जीरो को हटाकर काम करता है यदि संख्या में ए नहीं है ., तो .और शून्य को हटा दें , जब तक कि केवल शून्य न हों, जिस स्थिति में यह एक शून्य छोड़ देता है। अंत में यह शेष स्ट्रिंग की लंबाई लेता है।


मैंने %अपने पूरे जीवन में कभी ऐसा नहीं देखा है: O
user41805

1
@KritiiLithos मैंने पहले एक लाइन पर 16 प्रबंधित किए हैं: codegolf.stackexchange.com/a/86608/17602
नील

0

स्काला, 90 बाइट्स

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

स्पष्टीकरण:

& =>               //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

0

सी # 6, 163 बाइट्स

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"
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.