Đếm xung quay số trong một số điện thoại (bao gồm cả chữ cái)


34

Vào thời ông bà của bạn, quay số điện thoại đã được thực hiện với một quay số như thế này:

Để quay số từng chữ số, đặt ngón tay của bạn vào lỗ tương ứng, kéo nó đến điểm dừng ngón tay và thả ra. Một cơ chế sẽ làm cho mặt số quay trở lại vị trí nghỉ và điện thoại sẽ ngắt kết nối và kết nối lại một mạch với số lần chỉ định, thực hiện các lần nhấp có thể nghe được.

Quay số chữ số N yêu cầu N xung xung như vậy, ngoại trừ N = 0 là mười xung.

Điện thoại quay có đặc tính là các chữ số lớn (8, 9, 0) mất nhiều thời gian để quay số hơn các chữ số nhỏ (1, 2, 3). Đây là một cân nhắc quan trọng trong việc vẽ lên các bản đồ mã vùng sớm, và tại sao Thành phố New York với mật độ dân số (và đường dây điện thoại) dày đặc của nó có được 212 (chỉ 5 xung), trong khi 907 (26 xung) đã đến Alaska. Tất nhiên, tất cả điều này trở nên không liên quan khi quay số bằng giọng nói cảm ứng trở nên phổ biến.

Các thách thức

Viết, càng ít byte càng tốt, một chương trình hoặc hàm lấy đầu vào là một chuỗi (hoặc chuỗi ký tự) có chứa số điện thoại và xuất ra số xung quay số của nó. Chúng được tính như sau:

Chữ số

  • Chữ số 1-9 được tính là số xung đó.
  • Chữ số 0 được tính là 10 xung.

Bức thư

Lưu ý rằng các chữ số 2-9 trên mặt số có các chữ cái của bảng chữ cái Latinh được liên kết với chúng. Chúng ban đầu được dự định cho các trao đổi được đặt tên , nhưng sau đó được chiếm lại cho các phonewords và cho các hệ thống nhập tin nhắn văn bản.

Bạn phải hỗ trợ có các chữ cái trong số điện thoại của mình, sử dụng phép gán chữ cái E.161 cho các chữ số:

  • A, B, C = 2
  • D, E, F = 3
  • G, H, I = 4
  • J, K, L = 5
  • M, N, O = 6
  • P, Q, R, S = 7
  • T, U, V = 8
  • W, X, Y, Z = 9

Bạn có thể giả sử rằng đầu vào đã được gấp lại, cho cả chữ hoa hoặc chữ thường.

Nhân vật khác

Bạn phải cho phép sử dụng tùy ý các ký tự ()+-./và khoảng trắng làm dấu phân cách định dạng. Bạn có thể chọn cho phép bất kỳ ký tự không chữ và số nào cho mục đích này, nếu việc này dễ thực hiện hơn.

Những ký tự này không đóng góp vào số xung.

Mã ví dụ

Một bảng tra cứu không có chức năng và chức năng trong Python:

PULSES = {
    '1': 1,
    '2': 2, 'A': 2, 'B': 2, 'C': 2,
    '3': 3, 'D': 3, 'E': 3, 'F': 3,
    '4': 4, 'G': 4, 'H': 4, 'I': 4,
    '5': 5, 'J': 5, 'K': 5, 'L': 5,
    '6': 6, 'M': 6, 'N': 6, 'O': 6,
    '7': 7, 'P': 7, 'Q': 7, 'R': 7, 'S': 7,
    '8': 8, 'T': 8, 'U': 8, 'V': 8,
    '9': 9, 'W': 9, 'X': 9, 'Y': 9, 'Z': 9,
    '0': 10
}

def pulse_count(phone_num):
    return sum(PULSES.get(digit, 0) for digit in phone_num)

Ví dụ đầu vào và đầu ra

  • 911 → 11
  • 867-5309 → 48
  • 713 555 0123 → 42
  • +1 (212) PE6-5000 → 57
  • 1-800-FLOWERS → 69
  • PUZZLES → 48

Tôi giả sử rằng dấu chấm và dấu cách ASCII tùy ý bị giới hạn ở những dấu thường được sử dụng cho số điện thoại ( +- ()*#.) giống như các chữ cái được giới hạn ở chữ hoa. Sửa lỗi cho tôi nếu tôi sai.
Adám

1
@ Adám: Tôi đã giới hạn các dấu chấm câu yêu cầu chỉ một vài dấu phân cách phổ biến. Nó cố tình không bao gồm *#, có ý nghĩa đặc biệt trên điện thoại cảm ứng và không thể quay số trên các vòng quay.
dan04

1
Chúng ta có thể sử dụng đầu vào chữ thường thay vì chữ hoa không? Chúng ta có thể lấy một mảng ký tự thay vì một chuỗi không?
Grimmy

1
Tôi là một người du hành thời gian! Tôi là một người du hành thời gian! Tôi là một người du hành thời gian! Vì tôi chắc chắn đã sử dụng những chiếc điện thoại như thế này khi tôi còn là một đứa trẻ, rõ ràng TÔI LÀ NGƯỜI SỞ HỮU CỦA TÔI !!!!!!! Điều này thực sự khá tuyệt vời khi tôi nghĩ về nó. Trời ơi !!!
Bob Jarvis - Tái lập lại

3
Tôi là ông nội Tôi đã sử dụng điện thoại như thế này trong những năm 1950. Và khi tôi chuyển đến một thị trấn ở vùng nông thôn, tôi phát hiện ra rằng công ty điện thoại không cung cấp dịch vụ cảm ứng. Đó là vào năm 1985! Không đua đâu! Bà tôi có một chiếc điện thoại trong phòng khách có một cái móc và một cái quây. Bạn lấy tai nghe ra khỏi móc, và xoay tay quay để có được người điều khiển tổng đài. Cô phải thay thế nó khi quay số khoảng cách trực tiếp được thiết lập.
Walter Mitty

Câu trả lời:


25

05AB1E , 19 18 17 15 byte

AÁ0ªā6+žq÷9š‡þO

Hãy thử trực tuyến!

Đây là câu trả lời đầu tiên để sử dụng π. Tại sao sử dụng π, bạn có thể hỏi? Vâng, các chữ cái được liên kết với 22233344455566677778889999, theo thứ tự. Lưu ý cách hầu hết các chữ số lặp lại 3 lần, nhưng 7 lần lặp lại 4 lần. Bạn có thể nói rằng trung bình mỗi chữ số lặp lại (3 + 1/7) lần. Tôi tự hỏi nếu có bất kỳ số nào xấp xỉ 3 + 1/7 và mất ít byte hơn 22/7 7

Điều này chỉ cung cấp cho 4 7 chứ không phải 4 9, vì vậy chúng ta vẫn cần xử lý Z như một trường hợp đặc biệt.

A               # alphabet (abcdefghijklmnopqrstuvwxyz)
 Á              # rotate right (zabcdefghijklmnopqrstuvwxy)
  0ª            # append 0 (zabcdefghijklmnopqrstuvwxy0)

ā6+             # range [7..33]
   žq÷          # divide by π (22233344455566677778889991010)
      9š        # prepend 9 (922233344455566677778889991010)

‡               # transliterate the implicit input with the two lists above
                # this replaces z → 9, a → 2, … y → 9, 0 → 10
 þ              # remove all non-digits
  O             # sum

Tại sao chữ thường thay vì chữ hoa?
dan04

1
@ dan04 vì 05AB1E có tích hợp để đẩy "abcdefghijklmnopqrstuvwxyz", nhưng không cho "ABCDEFGHIJKLMNOPQRSTUVWXYZ". Tôi có thể chuyển đổi bảng chữ cái thành chữ hoa thay vì chuyển đổi đầu vào thành chữ thường, nhưng đó là cùng một chữ viết tắt.
Grimmy

1
Tôi đã chỉnh sửa câu hỏi để làm cho hai lệnh đầu tiên của bạn không cần thiết.
dan04

3
@Jonah Tôi bắt đầu với ý tưởng chia một phạm vi cho một hằng số để có được chuỗi mong muốn, sau đó trong khi tìm cách tốt nhất để diễn đạt "hơn 3" một chút trong 05AB1E, tôi nhớ rằng pi là tích hợp.
Grimmy

2
+1 để sử dụng pi
Draconis

9

C # (Trình biên dịch tương tác Visual C #) , 51 byte

n=>n.Sum(x=>x>64?(x-59-x/83-x/90)/3:x>47?1-~x%~9:0)

Đã lưu 1 byte nhờ @recursive

Đã lưu 10 byte nhờ quan sát của @ ExpiredData () +-/.sẽ chỉ có trong đầu vào

Hãy thử trực tuyến!

n =>                     // Function taking input as string
  n.Sum(x =>             // Map each value 'x' through the following
    x>64 ?               //   If 'x' is an uppercase letter
      (x-59-x/83-x/90)/3 //     Take each char's ASCII value subtracted by 59, and subtract
                         //     one if the char is 'S' and one if the char is 'Z'
    : x>47 ?             //   Else if the char is a digit
      1-~x%~9            //   Take 1 - (-x - 1) % -10 (Maps 0 to 10, and 1-9 to themselves
    : 0                  //   Else, 0
  )                      // And sum it all up, then return it

4
-10~9, mà nên làm việc trong bối cảnh.
đệ quy

@recursive Thật thông minh, cảm ơn
Hiện thân của sự thiếu hiểu biết

1
Kiểm tra x <91 là dự phòng vì đầu vào sẽ chỉ bao gồm () + -. / khóa không gian và các số đều <64 do đó chúng ta có thể xác định xem ký tự có phải là chữ hoa hay không bằng cách kiểm tra x> 64 (vì vậy -5 byte)
Dữ liệu hết hạn

Điều tương tự cũng xảy ra với kiểm tra x <58, vì không có gì trong phạm vi 58-64 sẽ ở đầu vào
Dữ liệu hết hạn vào


5

APL (Dyalog Unicode) , 27 byte SBCS

Chức năng tiền tố ẩn danh.

+/'@ADGJMPTW'∘⍸+11|(1⌽⎕D)∘⍳

Hãy thử trực tuyến!

(Nhiều người )∘⍳ tìm thấy ɩ ndex * của mỗi ký tự trong chuỗi sau:
  * các phần tử không được tìm thấy, lấy chỉ số 1 + chỉ số tối đa, tức là 11
⎕D  chữ số:"0123456789"

1⌽ xoay vòng một bước trái; "1234567890"

11| phần còn lại phân chia khi chia cho 11 *
  * điều này mang lại 0 cho tất cả phi chữ số
... + thêm rằng những điều sau đây:

'@ADGJMPTW'∘⍸ các ɩ nterval ɩ Ndex * cho mỗi nhân vật
  * Vì vậy [-∞, "@") mang đến cho 0, [ "@", "A") cho 1, [ "A", "D") mang đến cho 2, vv
+/  sum rằng


5

Python 2 , 74 byte

lambda s:sum([(n-59-n/83-n/90)/3,1-~n%~9][n<58]for n in map(ord,s)if n>47)

Hãy thử trực tuyến!

Có một số số học về giá trị ASCII cho mỗi ký tự. Tùy chọn đầu tiên kiểm tra các chữ cái và các tùy chọn thứ hai kiểm tra các số. Việc làm rõ rằng tất cả các ký tự dấu chấm câu được phép trong đầu vào là những ký tự có giá trị ASCII nhỏ hơn 48 cho phép tôi đơn giản hóa logic, nhưng giờ đây một phương thức mới có thể tốt hơn.

Python 2 , 84 byte

lambda s:sum(1+'1xxxx2ABCx3DEFx4GHIx5JKLx6MNOx7PQRS8TUVx9WXYZ0'.find(c)/5for c in s)

Hãy thử trực tuyến!

Sử dụng chuỗi tra cứu được mã hóa cứng, với mỗi khối 5 ký tự tương ứng với các ký tự cho mỗi giá trị bắt đầu bằng 1. Khoảng trắng được điền vào x, không thể có trong đầu vào được viết hoa. Một cách ngẫu nhiên, các ký tự không xuất hiện trong chuỗi tạo ra -1giá .findtrị bằng không.


5

JavaScript (Node.js) , ... 76 69 byte

s=>s.replace(/\w/g,q=>w+=1/q?+q||10:parseInt(q,35)*.32-1|0||9,w=0)&&w

Hãy thử trực tuyến!

-7 cảm ơn @Arnauld!

Giải trình

 q |     1/q     |  +q  | parseInt(q,35)*.32 | parseInt(q,35)*.32-1|0 | Output
---+-------------+------+--------------------+------------------------+--------
 0 | Infinity(T) | 0(F) |         N/A        |           N/A          |   10
 1 |  1.0000(T)  | 1(T) |         N/A        |           N/A          |    1
 2 |  0.5000(T)  | 2(T) |         N/A        |           N/A          |    2
 3 |  0.3333(T)  | 3(T) |         N/A        |           N/A          |    3
 4 |  0.2500(T)  | 4(T) |         N/A        |           N/A          |    4
 5 |  0.2000(T)  | 5(T) |         N/A        |           N/A          |    5
 6 |  0.1666(T)  | 6(T) |         N/A        |           N/A          |    6
 7 |  0.1428(T)  | 7(T) |         N/A        |           N/A          |    7
 8 |  0.1250(T)  | 8(T) |         N/A        |           N/A          |    8
 9 |  0.1111(T)  | 9(T) |         N/A        |           N/A          |    9
 A |    NaN(F)   |  N/A |        3.20        |          2(T)          |    2
 B |    NaN(F)   |  N/A |        3.52        |          2(T)          |    2
 C |    NaN(F)   |  N/A |        3.84        |          2(T)          |    2
 D |    NaN(F)   |  N/A |        4.16        |          3(T)          |    3
 E |    NaN(F)   |  N/A |        4.48        |          3(T)          |    3
 F |    NaN(F)   |  N/A |        4.80        |          3(T)          |    3
 G |    NaN(F)   |  N/A |        5.12        |          4(T)          |    4
 H |    NaN(F)   |  N/A |        5.44        |          4(T)          |    4
 I |    NaN(F)   |  N/A |        5.76        |          4(T)          |    4
 J |    NaN(F)   |  N/A |        6.08        |          5(T)          |    5
 K |    NaN(F)   |  N/A |        6.40        |          5(T)          |    5
 L |    NaN(F)   |  N/A |        6.72        |          5(T)          |    5
 M |    NaN(F)   |  N/A |        7.04        |          6(T)          |    6
 N |    NaN(F)   |  N/A |        7.36        |          6(T)          |    6
 O |    NaN(F)   |  N/A |        7.68        |          6(T)          |    6
 P |    NaN(F)   |  N/A |        8.00        |          7(T)          |    7
 Q |    NaN(F)   |  N/A |        8.32        |          7(T)          |    7
 R |    NaN(F)   |  N/A |        8.64        |          7(T)          |    7
 S |    NaN(F)   |  N/A |        8.96        |          7(T)          |    7
 T |    NaN(F)   |  N/A |        9.28        |          8(T)          |    8
 U |    NaN(F)   |  N/A |        9.60        |          8(T)          |    8
 V |    NaN(F)   |  N/A |        9.92        |          8(T)          |    8
 W |    NaN(F)   |  N/A |       10.24        |          9(T)          |    9
 X |    NaN(F)   |  N/A |       10.56        |          9(T)          |    9
 Y |    NaN(F)   |  N/A |       10.88        |          9(T)          |    9
 Z |    NaN(F)   |  N/A |         NaN        |          0(F)          |    9

Tất cả [space]().+-/không bị bắt bởi /\w/g, vì vậy chúng sẽ không ảnh hưởng đến tổng số.




4

Võng mạc 0.8.2 , 34 byte

T`WTPMJGDA`Rd
}T`L`2L
0
55
\d
$*
1

Hãy thử trực tuyến! Liên kết bao gồm các trường hợp thử nghiệm. Giải trình:

T`WTPMJGDA`Rd

Chuyển đổi các chữ cái WTPMJGDAthành các chữ số 9..0.

}T`L`2L

Xáo trộn tất cả các chữ cái còn lại xuống 1 và lặp lại cho đến khi tất cả các chữ cái đã được chuyển đổi thành chữ số.

0
55

Thay thế 0bằng 55khi chúng có cùng số xung để quay số.

\d
$*
1

Lấy tổng số.


3

K4 , 44 byte

Dung dịch:

+/(1+(1+&(5#3),4 3 4),!10)(.Q.A,1_.Q.n,"0")?

Ví dụ:

q)k)+/(1+(1+&(5#3),4 3 4),!10)(.Q.A,1_.Q.n,"0")?"911"
11
q)k)+/(1+(1+&(5#3),4 3 4),!10)(.Q.A,1_.Q.n,"0")?"867-5309"
48
q)k)+/(1+(1+&(5#3),4 3 4),!10)(.Q.A,1_.Q.n,"0")?"+1 (212) PE6-5000"
57
q)k)+/(1+(1+&(5#3),4 3 4),!10)(.Q.A,1_.Q.n,"0")?"1-800-FLOWERS"
69

Giải trình:

Cách tiếp cận ngây thơ, có khả năng khá golf. Chỉ số tra cứu của nhân vật, điểm tra cứu, tổng.

+/(1+(1+&(5#3),4 3 4),!10)(.Q.A,1_.Q.n,"0")? / the solution
                                           ? / lookup
                          (               )  / do this together
                                       "0"   / string "0"
                                      ,      / join with
                                  .Q.n       / string "0123456789"
                                1_           / drop first
                               ,             / join with
                           .Q.A              / "A..Z"
  (                      )                   / do this together
                      !10                    / range 0..9
                     ,                       / join with
     (              )                        / do this together
               4 3 4                         / list (4;3;4)
              ,                              / join with
         (5#3)                               / list (3;3;3;3;3)
        &                                    / where, creates list 0 0 0 1 1 1 2 2 etc
      1+                                     / add 1
   1+                                        / add 1
+/                                           / sum up


3

C (gcc) , 94 89 86 80 byte

Cảm ơn trần nhà, nwellnhof và Rogem cho các đề xuất.

c;f(char*s){c=*s-48;s=*s?(c<10U?c?c:10:c-17<26U?(c-11-c/35-c/42)/3:0)+f(s+1):0;}

Hãy thử trực tuyến!


80 byte bằng cách sử dụng đệ quy thay vì vòng lặp.

Đề xuất c<43Uthay vìc-17<26U
trần

2

Bash , 256 byte

Bạn có thể thay thế các (( … ))cấu trúc với letsố byte giống hệt nhau. Có thể có một thuật toán tốt để giảm các báo cáo trường hợp nhưng cho đến nay không tìm thấy nó. Với một chút làm lại, bạn cũng có thể biến nó thành một hàm (nhưng không phải trong cùng hoặc ít byte hơn trừ khi bạn có thể giảm giáfunction fname { … } đầu và đuôi).

read p;while ((${#p}>0));do case ${p:0:1} in ([1-9]) ((d+=${p:0:1}));; ([0]) ((d+=10));; ([ABC) ((d+=2));; ([P-S]) ((d+=7));; ([W-Z]) ((d+=9));;([DEF]) ((d+=3));; ([GHI]) ((d+=4));; ([JKL]) ((d+=5));; ([MNO]) ((d+=6));; (?) d=$d; esac;p=${p#?};done;echo $d

Hãy thử trực tuyến!

Một giải pháp tốt hơn bằng cách sử dụng kỹ thuật nhân vật bản đồ sử dụng tr công cụ:

[Bash với tr], 173 byte

read p;p=$(echo $p|tr A-Z 22233344455566677778889999);while ((${#p}>0));do case ${p:0:1} in ([1-9]) ((d+=${p:0:1}));; ([0]) ((d+=10));; (?) d=$d; esac;p=${p#?}; done;echo $d

Hãy thử trực tuyến!


Tất nhiên, một thuật toán tôi đã bỏ lỡ là thực hiện một số thay thế / dịch chuỗi trên AZ. Điều này sẽ tốt Tôi sẽ sửa đổi những điều trên cho phù hợp.
PJF

while((${#p}))hoạt động, tiết kiệm ba byte. c=${p:0:1};case c in ([0-9]) ((d+=c?c:10));;tiết kiệm khác 16. Với việc tr -dc 0-9thêm vào đường ống tr, bạn hoàn toàn không cần một tuyên bố trường hợp và việc bổ sung có thể được gấp lại thành whileđiều kiện với &&.
Ôi trời ơi

Cảm ơn OMG. Tôi không thường xuyên sử dụng phân công ternary vì vậy tôi đã bỏ lỡ điều đó. Việc sử dụng bổ sung xóa cũng thú vị (nhưng giả sử như giải pháp của tôi bỏ qua bất kỳ nhân vật nào khác). Tôi đã quản lý để giảm xuống còn 133 byte như sau: read p;p=$(echo $p|tr A-Z 22233344455566677778889999|tr -dc [0-9]);while ((${#p}));do c=${p:0:1}&&((d+=c?c:10));p=${p#?};done;echo $d
PJF

1
118: p=$(head -1|tr A-Z 22233344455566677778889|tr -dc 0-9);while((${#p}));do((d+=(c=${p:0:1})?c:10));p=${p#?};done;echo $d.. không cần ba số 9 cuối cùng vì tr sẽ sử dụng lại ký tự thay thế cuối cùng nếu đối số thứ hai quá ngắn.
Ôi trời ơi

1
Ví dụ đầu tiên có thể được gỡ xuống từ 256 xuống 236 bằng cách loại bỏ một vài khoảng trắng không cần thiết. read p;while((${#p}>0));do case ${p:0:1} in ([1-9])((d+=${p:0:1}));;([0])((d+=10));;([ABC)((d+=2));;([P-S])((d+=7));;([W-Z])((d+=9));;([DEF])((d+=3));;([GHI])((d+=4));;([JKL])((d+=5));;([MNO])((d+=6));;(?)d=$d;esac;p=${p#?};done;echo $d
steve


2

PowerShell , 109 102 87 byte

$(switch -r($args|% t*y){\d{$_}[A-Y]{("{0}"-f(.313*$_-18))[0]}[Z]{9}0{10}})-join'+'|iex

Hãy thử trực tuyến!

EDIT: Được sử dụng ý tưởng của @ mazzy cho một chuyển đổi regex với một số định dạng chuỗi để truyền char -> int -> chuỗi và chỉ lấy 'chữ số' đầu tiên

Nguyên:

[char[]]"$args"|%{$a+=(48,(('22233344455566677778889999')[$_-65],(58,$_)[$_-ne48])[$_-lt64])[$_-gt47]-=48};$a

Tôi đã hy vọng nhận được <100 byte, vì vậy tôi sẽ tiếp tục nhìn vào nó để xem liệu tôi có thể làm gì khác không. Có lẽ có một cách để loại bỏ chuỗi số

Xin lỗi nếu điều này gây nhầm lẫn khi tôi lồng các mảng với các câu lệnh lập chỉ mục boolean nhưng -

Giải trình:

[char[]]"$args"|%{đọc đầu vào đúc như là một chuỗi và sau đó phát nổ nó vào một mảng char và bắt đầu một for-each vòng lặp với việc kiểm tra ()[$_-gt47]để xem nếu có ()+-./đã được nhập (tất cả đều có giá trị ký tự ascii <48)
Lưu ý: Powershell chấp nhận $true$falsenhư 10tương ứng với chỉ số mảng

Sau đó, chúng tôi nhận được 48cho các biểu tượng, hoặc:
('22233344455566677778889999'[$_-65],(58,$_)[$_-ne48])[$_-lt64]

Việc [$_-lt64]kiểm tra một số hoặc một chữ cái (tất cả vốn giả định ở đây). Nếu đó là một chữ cái, '22233344455566677778889999'[$_-65]thay đổi nó thành 0-25 để lập chỉ mục vào mảng và xuất giá trị xung (dưới dạng char). Nếu ký tự là một số, thay vào đó chúng ta xem xét: (58,$_)[$_-ne48]kiểm tra 0và xuất ra 58hoặc chỉ chính char số.

Xung quanh mọi thứ $a+= ... -=48khởi tạo một biến số $ a tại 0và sau đó thêm đầu ra. Đầu ra là giá trị char ascii của một số, nên trừ đi 48.

Lưu ý: nếu đầu vào là một biểu tượng, chúng tôi nhận được $a+=48-48, bỏ qua nó một cách hiệu quả. Nếu đúng như vậy 0, chúng ta sẽ $a+=58-48có được +10

Cuối cùng, ;$achỉ xuất kết quả bài giá trị cuối cùng của chúng tôi cho mỗi vòng lặp


bạn có thể tiết kiệm một vài byte Hãy thử trực tuyến!
mê mẩn

À, vâng tôi có thêm một số dấu ngoặc đơn và =trong đó, còn lại từ các phương pháp giải quyết trước đây của tôi, cảm ơn vì đã nắm bắt! Mặc dù, tôi chưa từng thấy t*ytrước đây, bạn có thể giải thích lý do tại sao nó hoạt động để làm nổ chuỗi thành một mảng ký tự không?
Sinusoid


để nhận '<100 byte': Hãy thử trực tuyến! :)
mê mẩn

ý tưởng tốt với -f[0].
mê mẩn

2

PowerShell , 95 85 79 byte

lấy cảm hứng từ câu trả lời của nwellnhof .

lấy cảm hứng [0]từ câu trả lời của Sinusoid .

$(switch -r($args|% t*y){\d{$_}0{10}[A-Y]{"$(.313*$_-18)"[0]}Z{9}})-join'+'|iex

Hãy thử trực tuyến!

Phiên bản chưa được kiểm soát:

$(
    switch -r($args|% toCharArray){
        \d    {$_}
        0     {10}
        [A-Y] {"$(.313*$_-18)"[0]}
        Z     {9}
    }
)-join '+'|Invoke-Expression
key .313*$_-18 "$(...)"[0]
--- ---------- -----------
  A      2.345 2
  B      2.658 2
  C      2.971 2
  D      3.284 3
  E      3.597 3
  F      3.910 3
  G      4.223 4
  H      4.536 4
  I      4.849 4
  J      5.162 5
  K      5.475 5
  L      5.788 5
  M      6.101 6
  N      6.414 6
  O      6.727 6
  P      7.040 7
  Q      7.353 7
  R      7.666 7
  S      7.979 7
  T      8.292 8
  U      8.605 8
  V      8.918 8
  W      9.231 9
  X      9.544 9
  Y      9.857 9

1
Nổ lực tập thể! : D
Sinusoid



0

Python 3 , 134 123 byte

f=lambda n:sum(map(int,n.translate(n.maketrans('ADGJMPTWBEHKNQUXCFILORVYSZ','23456789'*3+'79','()+-./ '))))+10*n.count('0')

Hãy thử trực tuyến!

-11 byte nhờ @ dan04


1
Bằng cách sắp xếp lại các chữ cái 'ADGJMPTWBEHKNQUXCFILNRVYSZ', bạn có thể giảm chuỗi số thành '23456789'*3+'79'.
dan04
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.