Có bao nhiêu con số đáng kể?


10

Cho một số làm đầu vào, xác định nó có bao nhiêu số liệu quan trọng. Số này sẽ được lấy dưới dạng chuỗi vì bạn phải thực hiện một số định dạng đặc biệt. Bạn sẽ thấy những gì tôi muốn nói sớm (tôi nghĩ).

Một chữ số là một sig-fig nếu ít nhất một trong những điều sau đây được áp dụng:

  • Các chữ số khác không luôn có ý nghĩa.
  • Bất kỳ số không giữa hai chữ số có nghĩa là đáng kể.
  • số 0 cuối cùng hoặc số 0 ở phần thập phân chỉ có ý nghĩa.
  • tất cả các chữ số đều có ý nghĩa nếu không có gì theo vị trí thập phân.
  • khi chỉ có số 0, tất cả trừ số 0 cuối cùng được coi là số 0 đứng đầu

Đầu vào

Một chuỗi hoặc chuỗi chuỗi của số. Nó có thể có một dấu thập phân ở cuối mà không có chữ số sau nó. Nó có thể không có một dấu thập phân nào cả.

Đầu ra

Có bao nhiêu sig-figs có.

Ví dụ

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

có liên quan nhưng a) không có câu trả lời và b) là về việc tính toán câu trả lời cho một biểu thức
Daniel


Bạn có thể muốn đề cập một cách rõ ràng ở đâu đó rằng nếu chỉ có các số 0 thì tất cả trừ số 0 cuối cùng được coi là chữ số hàng đầu (trái ngược với tất cả trừ số 0 đầu tiên được coi là chữ số cuối).
Martin Ender

Tại sao 0,00 -> 1? Không có hai số 0 nào sau dấu thập phân có ý nghĩa (theo "số 0 cuối cùng hoặc số 0 ở phần thập phân chỉ có ý nghĩa").
Penguino

@Penguino, như Martin Ender đã nói chính xác, nếu chỉ có 0, tất cả trừ chữ số cuối cùng được coi là số 0 đứng đầu
Daniel

Câu trả lời:




1

Hàng loạt, 204 202 byte

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

Đưa đầu vào vào STDIN. Hoạt động bằng cách loại bỏ các số 0 ở cuối nếu số không chứa a ., sau đó loại bỏ các .số 0 đứng đầu, trừ khi chỉ có các số không, trong trường hợp đó, nó để lại một số không. Cuối cùng, nó mất độ dài của chuỗi còn lại.


Tôi chưa bao giờ thấy nhiều người %trong suốt cuộc đời mình: O
user41805

1
@KritixiLithos Tôi đã quản lý 16 trên một dòng trước: codegolf.stackexchange.com/a/86608/17602
Neil

0

Scala, 90 byte

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

Giải trình:

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

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

Ung dung

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"
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.