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


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.