Döner numaradaki darbeleri telefon numarasından sayın


34

Büyükbaba ve Büyükanneler Günü'nüzde, böyle bir çevirmeli kadran ile bir telefon numarasının aranması yapıldı :

Her basamağı çevirmek için parmağınızı karşılık gelen deliğe sokun, parmağınızı sonuna kadar çekin ve bırakın. Bir mekanizma, kadranın dinlenme pozisyonuna geri dönmesine neden olur ve telefon, sesli bir tıklama yaparak bir devreyi belirli sayıda keser ve yeniden bağlar.

N rakamını çevirmek, N = 0 dışında N darbeleri gibi N darbeleri gerektirir .

Döner telefonlar, büyük rakamların (8, 9, 0) küçük rakamlardan (1, 2, 3) arama yapmak için daha uzun sürdüğü özelliğine sahiptir. Bu, erken bölge kodu haritalarının hazırlanmasında ve New York'un yoğun nüfus (ve telefon hattı) yoğunluğu ile neden 212 (sadece 5 atış) elde ederken, 907 (26 atış) seyrek olarak Alaska'ya gitti. Tabii ki, bu tuşlu arama popüler hale geldiğinde, tüm bunlar önemsiz hale geldi.

Meydan okuma

Bir telefon numarası içeren bir dize (ya da karakter dizisi) girişi kadar alan ve döner çevirme darbesi sayısını veren bir program ya da işlevi mümkün olduğu kadar az bayt yazın. Bunlar aşağıdaki gibi sayılmalıdır:

Rakamlar

  • 1-9 arasındaki rakamlar bu darbe sayısı olarak sayılır.
  • Rakam 0, 10 pals olarak sayılır.

harfler

Kadran üzerindeki 2-9 rakamlarının, bunlarla ilişkili Latin alfabesinin harfleri olduğuna dikkat edin. Bunlar başlangıçta adlandırılmış değiş tokuşlar için tasarlanmıştı , ancak sonuncusu ses telleri ve metin mesajı giriş sistemleri için yeniden tahsis edildi .

E.161 rakamlarına harf atamasını kullanarak, telefon numaralarınızda harf bulundurmayı desteklemelisiniz :

  • 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

Girişin, büyük / küçük harf olarak zaten büyük / küçük harf katlandığını varsayabilirsiniz.

Diğer karakterler

Sen gerekir karakterlerin keyfi kullanımına izin ()+-./biçimlendirme Ayırıcı olarak ve uzay. Sen olabilir izin seçti herhangi bunu uygulamak kolay olacaksa, bu amaçla alfanümerik olmayan karakter.

Bu karakterler nabız sayımına katkıda bulunmaz.

Örnek kod

Python'da golf oynamayan bir arama tablosu ve işlevi:

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)

Örnek giriş ve çıkış

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

Rasgele ASCII noktalama işaretlerinin ve boşlukların normalde telefon numaraları ( +- ()*#.) gibi kullanılan harflerle, harflerin büyük harflerle sınırlı olmasıyla sınırlı olduğunu kabul ediyorum . Yanlışsam düzelt.
saat

1
@ Adám: Gerekli noktalama işaretlerini yalnızca birkaç ortak ayırıcıyla sınırlandırdım. Bu kasıtlı içermez *ve #tuşlu telefonlarda özel anlamlar ve dönel kavĢaktan üzerinde çevrilebilir bir değil, hangi.
dan04

1
Büyük harf yerine tüm küçük harfleri kullanabilir miyiz? Dize yerine bir dizi karakter alabilir miyiz?
Grimmy

1
Ben zaman yolcuyum! Ben zaman yolcuyum! Ben zaman yolcuyum! Çocukken kesinlikle böyle telefonları kullandığımdan beri, açıkça KENDİ KENDİ KENDİNİZDİRİM !!!!!!! Bunu düşündüğümde aslında oldukça etkileyici. Bleah !!!
Bob Jarvis - Monica'yı

3
Ben büyükbabam 1950'lerde böyle telefonlar kullandım. Ve kırsal bir yerdeki bir şehre taşındığımda, telefon şirketinin dokunma servisi sunmadığını keşfettim. Bu 1985’te oldu! Şaka yapmıyorum! Büyükannemin salonda kancası ve krankı olan bir telefonu vardı. Kulaklığı kancadan çıkardın ve bir anahtarlama operatörü elde etmek için krank düğmesini çevirdin. Direkt mesafe arama yapıldığında değiştirmesi gerekiyordu.
Walter Mitty

Yanıtlar:


25

05AB1E , 19 18 17 15 bayt

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

Çevrimiçi deneyin!

Bu use kullanmak için ilk cevap. Neden π kullanıyorsunuz? Peki, harfler sırasıyla 22233344455566677778889999 ile ilişkilidir. Rakamların çoğunun 3 kez, 7 ise 4 kez tekrarlandığına dikkat edin. Her bir hanenin ortalama olarak (3 + 1/7) kez tekrar ettiğini söyleyebilirsiniz. Acaba yaklaşık 3 + 1/7 olan ve 22 / 7'den daha az bayt alan herhangi bir sayı var mı?

Bu sadece 4 7 değil 4 9 verir, bu yüzden Z'yi özel bir durum olarak ele almamız gerekir.

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

Neden büyük harf yerine küçük harf?
dan04

1
@ dan04, çünkü 05AB1E'nin itmek için yerleşik bir ayağı vardır "abcdefghijklmnopqrstuvwxyz", ancak değil "ABCDEFGHIJKLMNOPQRSTUVWXYZ". Girişi küçük harfe dönüştürmek yerine alfabeyi büyük harfe dönüştürebilirim, ancak bu aynı bytecount'tur.
Grimmy

1
İlk iki komutunuzu gereksiz hale getirmek için soruyu düzelttim.
dan04

3
@Jonah İstenen diziyi elde etmek için bir aralığı sabit ile bölme fikriyle başladım, sonra 05AB1E'de "3'ten biraz fazla" ifade etmenin en iyi yolunu ararken Pi'nin bir yerleşik olduğunu hatırladım.
Grimmy

2
Pi kullanımı için +1
Draconis

9

C # (Visual C # Etkileşimli Derleyici) , 51 bayt

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

@Recursive sayesinde 1 bayt kaydedildi

Kaydedilen 10 sadece o ExpiredData gözlemine @ sayesinde bayt () +-/.girdi olacak

Çevrimiçi deneyin!

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
-10olan ~9bağlamda çalışması gerektiğini.
özyinelemeli

@recursive Bu akıllı, teşekkürler
Ignorance'ın somutlaşması

1
x <91 denetimi gereksizdir, çünkü girdi yalnızca () + -. / boşluk tuşundan ve sayıları <64 olarak içerecektir, bu nedenle karakterin yalnızca büyük harf olup olmadığını sadece x> 64 (yani -5 bayt) kontrol ederek belirleyebiliriz.
Süresi Dolmuş Veriler

Aynısı x <58 kontrolü için de geçerlidir, çünkü 58-64 aralığında hiçbir şey girilmemiştir
Süresi dolmuş veriler


5

APL (Dyalog Unicode) , 27 bayt SBCS

Anonim zımni önek işlevi.

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

Çevrimiçi deneyin!

(… Her karakterin dexndex * ' ini aşağıdaki dizgede )∘⍳ bulun : * bulunmayan elementler, 1 + endeks endeksini, yani 11  rakamı olsun:
  
⎕D"0123456789"

1⌽ döngüsel olarak bir adım sola döndür; "1234567890"

11| bölünme kalan * 11 bölü zaman
  * Bu olmayan tüm basamak için 0 verir
... + aşağıdakilere eklemek:

'@ADGJMPTW'∘⍸ɩ nterval ɩ nDex * her bir karakter için
  * Bu yüzden [-∞, "@") 0 verir, [ "@", "A") 1 elde edilmiştir, [ "A", "D", vs.) 2 elde
+/  toplamı, o


5

Python 2,74 bayt

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

Çevrimiçi deneyin!

Her karakter için ASCII değerinde bazı aritmetik yapar. İlk seçenek harfleri, ikinci seçenek ise numaraları kontrol eder. Girişte izin verilen tüm noktalama işaretlerinin 48'den küçük ASCII değerleri olduğu açıklığı mantığı basitleştirmeme izin veriyor, ancak tamamen yeni bir yöntem artık daha iyi olabilir.

Python 2 , 84 bayt

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

Çevrimiçi deneyin!

Her biri 1 ile başlayan her bir değeri veren karakterlere karşılık gelen 5 karakterlik bir blok içeren sabit kodlu bir arama dizesi kullanır x. Büyük harflerle girilemeyen boşluklar doldurulur . Tesadüfen, karakterler dize üretmek görünmüyor -1için .findsıfır summand verir.


5

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

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

Çevrimiçi deneyin!

-7 Teşekkürler @Arnauld!

açıklama

 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

Hepsi [space]().+-/yakalanmadı /\w/g, bu yüzden toplamı etkilemeyecekler.


5

Perl 5 -p , 52 51 bayt

@Grimy -1 için kredi alır

y/A-Z/22233344455566677778889/;map$\+=$_||10,/./g}{

Çevrimiçi deneyin!


/\d/g/./g-1 için olmalıdır (evet, hala noktalama işaretlerini doğru şekilde işler).
Grimmy


4

Retina 0.8.2 , 34 bayt

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

Çevrimiçi deneyin!Link, test durumlarını içerir. Açıklama:

T`WTPMJGDA`Rd

Harfleri WTPMJGDArakamlara dönüştür9..0 .

}T`L`2L

Kalan tüm harfleri 1 aşağı kaydırın ve tüm harfler rakamlara çevrilinceye kadar tekrarlayın.

0
55

Değiştir 0ile55 onlar çevirmek için aynı sayıda nabız aldıkça.

\d
$*
1

Dijital toplamı al.


3

K4 , 44 bayt

Çözüm:

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

Örnekler:

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

Açıklama:

Naif yaklaşım, muhtemelen oldukça golf tutulabilir. Karakter arama indeksi, arama skoru, toplamı.

+/(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 bayt

Tavana, nwellnhof ve Rogem önerileriniz için teşekkürler.

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

Çevrimiçi deneyin!


Döngü yerine özyineleme kullanarak 80 bayt .

Öner c<43Uyerinec-17<26U
ceilingcat

2

Bash , 256 bayt

(( … ))Yapıları letaynı bayt sayısı için ile değiştirebilirsiniz . Vaka ifadelerini azaltmak için iyi bir algoritma olabilir, ancak bugüne dek bulunamamıştır. Bir parça yeniden işleme ile onu da bir işlev haline getirebilirsiniz ( function fname { … }üst ve kuyruğu indirim yapmazsanız aynı veya daha az baytta değil ).

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

Çevrimiçi deneyin!

Harita karakter tekniğini kullanarak daha iyi bir çözüm traracı kullanır:

[Tr ile bas], 173 bayt

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

Çevrimiçi deneyin!


Tabii ki özlediğim bir algoritma AZ'de bazı string değişimi / çevirileri yapmak. Bu iyi olurdu. Yukarıdakileri düzeltmek için değiştireceğim.
PJF

while((${#p}))çalışır, üç bayt kurtarır. c=${p:0:1};case c in ([0-9]) ((d+=c?c:10));;ile başka 16. kaydeder tr -dc 0-9Eğer hiç bir olgu deyimi gerekmez ve ilave içine katlanabilir tr boru hattına ilave whileile koşulu &&.
Aman Tanrım

Teşekkürler OMG. Sık sık üçlü ödev kullanmıyorum, bu yüzden bunu kaçırdım. Silme tamamlayıcısının da ilginç kullanımı (ancak benim çözümüm gibi varsayan diğer karakterleri yoksayıyor). Bunu şu şekilde olduğu gibi 133 bayta indirmeyi başardım: 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.. son üç 9 gerekli değil çünkü ikinci argüman çok kısa ise, tr son değiştirme karakterini yeniden kullanacak.
Aman Tanrım

1
İlk örnek birkaç gereksiz boşluğu kaldırarak 256'dan 236'ya kadar sıyrılabilir. 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 bayt

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

Çevrimiçi deneyin!

EDIT: @ mazzy'nin, char -> int -> string atmak ve sadece ilk 'basamağı' almak için bazı string formatlarında regex switch için kullandığı fikri

Orijinal:

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

<100 bayt almayı umuyordum, bu yüzden yapabileceğim başka bir şey olup olmadığını görmek için bakmaya devam edeceğim. Sayı dizesini çıkarmanın muhtemelen bir yolu var

Boolean indexing deyimleri ile iç içe geçmiş olarak bu kafa karıştırıcı eğer üzgünüm ama -

Açıklama:

[char[]]"$args"|%{bir dize olarak dökme girişini okur ve daha sonra bir karakter dizisine o patlar ve for-each denetleme ile döngü başlar ()[$_-gt47]herhangi olmadığını görmek için ()+-./girilmiştir (bütün ASCII karakter değerlerine sahip <48)
Not: Powershell kabul $trueve $falseolduğu gibi 1ve0 dizi indeksleri sırasıyla

Sonra 48sembollerden birini alırız veya:
('22233344455566677778889999'[$_-65],(58,$_)[$_-ne48])[$_-lt64]

[$_-lt64]Bir sayı veya harf (burada bütün assumed sermaye) denetler. Eğer bir '22233344455566677778889999'[$_-65]harfse, diziye endekslemek ve darbe değerini (karakter olarak) çıkarmak için 0-25 olarak değiştirir. Karakter bir sayı ise, şuna bakarız: (58,$_)[$_-ne48]kontrol etme 0ve çıktı alma58 veya yalnızca sayısal karakterin kendisi.

Her şey etrafında $a+= ... -=48$ a sayısal değişkenini başlatır 0ve ardından çıktıyı ekler. Çıktı, bir sayının ascii char değeridir;48 .

Not: eğer girdi bir sembol ise $a+=48-48, etkin biçimde görmezden geliriz . Öyleyse 0, anlarız$a+=58-48 +10'umuzu .

Son olarak, ;$asadece her döngü için son değer post'umuzu gösterir.


Birkaç bayt kurtarabilirsin Çevrimiçi deneyin!
mazzy

Ah, evet bazı parantezlerim vardı ve =içeride, bunu daha önceki çözme yöntemlerimde bıraktım, yakalama için teşekkürler! Yine de daha t*yönce görmedim, bunun neden dizgiyi karakter dizisine patlamasının işe yaradığını açıklayabilir misiniz?
Sinusoid


'<100 bayt' almak için: Çevrimiçi deneyin! :)
mazzy

-fve ile iyi fikir [0].
mazzy

2

PowerShell , 95 85 79 bayt

nwellnhof'un cevabından ilham aldı .

Sinusoid'in cevabından ilham [0]aldı .

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

Çevrimiçi deneyin!

Kontrolsüz versiyon:

$(
    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
Takım çabası! : D
Sinusoid



0

Python 3 , 134 123 bayt

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

Çevrimiçi deneyin!

@ Dan04 sayesinde -11 bayt


1
Harfleri yeniden düzenleyerek, 'ADGJMPTWBEHKNQUXCFILNRVYSZ'sayıların sırasını azaltabilirsiniz '23456789'*3+'79'.
dan04
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.