중요한 인물은 몇 명입니까?


10

숫자가 입력으로 주어지면 얼마나 많은 유효 숫자가 있는지 결정하십시오. 특별한 숫자를 사용해야하기 때문에이 숫자는 문자열로 사용됩니다. 당신은 내가 곧 의미하는 것을 볼 것입니다.

다음 중 하나 이상이 적용되는 경우 숫자는 SIG-FIG입니다.

  • 0이 아닌 숫자는 항상 유효합니다.
  • 두 유효 숫자 사이의 0은 유효합니다.
  • 소수 부분의 마지막 0 또는 후행 0 만 중요합니다.
  • 소수점 이하 자릿수가 없으면 모든 숫자가 유효합니다.
  • 0 만있는 경우 마지막 0을 제외한 모든 값은 선행 0으로 간주됩니다.

입력

숫자의 문자열 또는 문자열 배열입니다. 끝에 숫자가없는 끝에 소수점이있을 수 있습니다. 소수점이 없을 수도 있습니다.

산출

몇 개의 시그 피그가 있습니까?

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) 표현에 대한 답을 계산하는 것에 관한 것입니다.
Daniel


0이있는 경우 마지막 0을 제외한 모든 숫자는 선행 숫자로 간주됩니다 (첫 번째 0을 제외한 모든 숫자는 후행 숫자로 간주 됨).
Martin Ender

왜 0.00-> 1입니까? 소수점 이하 두 개의 0은 중요하지 않습니다 ( "소수점의 마지막 0 또는 후행 0 만 중요"에 따라).
Penguino

@Penguino, Martin Ender가 올바르게 말했듯이 0이있는 경우 마지막 숫자를 제외한 모든 숫자는 선행 0으로 간주됩니다
Daniel

답변:




1

배치, 204202 바이트

@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에서 입력을받습니다. 숫자에을 포함하지 않는 경우 후행 0 .을 제거 한 다음 .0이 없으면 0과 선행 0 을 제거하여 작동 합니다.이 경우 0이됩니다. 마지막으로 나머지 문자열의 길이를 사용합니다.


나는 이렇게 많은 본 적이 없어 %내 평생들 : O
user41805

1
@KritixiLithos 이전에 한 줄로 16을 관리했습니다 : codegolf.stackexchange.com/a/86608/17602
Neil

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

C # 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);

언 골프

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"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.