Wählscheibenimpulse in einer Telefonnummer (einschließlich Buchstaben) zählen

34

Zu Ihrer Großelternzeit wurde eine Telefonnummer mit einem Drehknopf wie folgt gewählt:

Um jede Ziffer zu wählen, stecken Sie Ihren Finger in das entsprechende Loch, ziehen Sie ihn bis zum Anschlag und lassen Sie ihn los. Ein Mechanismus bewirkt, dass sich der Drehknopf wieder in seine Ruheposition dreht, und das Telefon trennt einen Stromkreis eine festgelegte Anzahl von Malen und verbindet ihn erneut, wobei hörbare Klicks zu hören sind.

Das Wählen der Ziffer N erfordert N solche "Impulse", mit Ausnahme von N = 0, was zehn Impulse sind.

Rotary-Telefone haben die Eigenschaft, dass große Ziffern (8, 9, 0) länger zum Wählen benötigen als kleine Ziffern (1, 2, 3). Dies war eine wichtige Überlegung bei der Erstellung früher Vorwahlkarten, und warum New York City mit seiner hohen Bevölkerungs- (und Telefonleitungs) dichte 212 (nur 5 Impulse) erhielt, während 907 (26 Impulse) in das dünn besiedelte Alaska gingen. Natürlich wurde dies alles irrelevant, als die Tonwahl populär wurde.

Die Herausforderung

Schreiben Sie in so wenigen Bytes wie möglich ein Programm oder eine Funktion, die eine Zeichenfolge (oder eine Folge von Zeichen) mit einer Telefonnummer als Eingabe verwendet und deren Anzahl von Wählimpulsen ausgibt. Diese sind wie folgt zu zählen:

Ziffern

  • Die Ziffern 1-9 zählen als die Anzahl der Impulse.
  • Ziffer 0 zählt als 10 Impulse.

Briefe

Beachten Sie, dass den Ziffern 2 bis 9 Buchstaben des lateinischen Alphabets zugeordnet sind. Diese waren ursprünglich für benannte Vermittlungsstellen vorgesehen , wurden jedoch für Telefongespräche und SMS-Eingabesysteme neu verwendet.

Sie müssen es unterstützen, Buchstaben in Ihren Telefonnummern zu haben, indem Sie die E.161- Zuordnung von Buchstaben zu Ziffern verwenden:

  • 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

Sie können davon ausgehen, dass die Eingabe bereits in Groß- oder Kleinschreibung geschrieben wurde.

Andere Charaktere

Sie müssen die willkürliche Verwendung der Zeichen ()+-./und Leerzeichen als Formatierungstrennzeichen zulassen . Sie können für diesen Zweck alle nicht-alphanumerischen Zeichen zulassen , wenn dies einfacher zu implementieren ist.

Diese Zeichen tragen nicht zur Impulszahl bei.

Beispielcode

Eine nicht Golf spielende Nachschlagetabelle und Funktion in 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)

Beispiel für Ein- und Ausgabe

  • 911 → 11
  • 867-5309 → 48
  • 713 555 0123 → 42
  • +1 (212) PE6-5000 → 57
  • 1-800-FLOWERS → 69
  • PUZZLES → 48
dan04
quelle
Ich gehe davon aus, dass die willkürliche ASCII-Interpunktion und die Leerzeichen auf diejenigen beschränkt sind, die normalerweise für Telefonnummern ( +- ()*#.) verwendet werden, genau wie Buchstaben auf Großbuchstaben beschränkt sind. Korrigiere mich, wenn ich falsch liege.
Adám
1
@Adám: Ich habe die erforderlichen Interpunktionszeichen auf wenige gemeinsame Trennzeichen beschränkt. Es enthält absichtlich nicht *und #, die bei Tastentelefonen besondere Bedeutungen haben und bei Drehknöpfen nicht wählbar sind.
dan04
1
Können wir Eingaben in Kleinbuchstaben anstelle von Großbuchstaben verwenden? Können wir eine Reihe von Zeichen anstelle einer Zeichenkette verwenden?
Grimmy
1
Ich bin ein Zeitreisender! Ich bin ein Zeitreisender! Ich bin ein Zeitreisender! Da ich als Kind auf jeden Fall solche Telefone benutzt habe, BIN ICH MEIN EIGENER GROSSVATER !!!!!!! Welches ist eigentlich ziemlich icky, wenn ich darüber nachdenke. Bleah !!!
Bob Jarvis - Wiedereinsetzung von Monica
3
Ich bin der großvater Ich habe in den 1950er Jahren solche Telefone benutzt. Und als ich in eine Stadt in ländlicher Umgebung zog, stellte ich fest, dass die Telefongesellschaft keinen Tonwahldienst anbot. Das war 1985! Im Ernst! Meine Großmutter hatte ein Telefon im Salon, das einen Haken und eine Kurbel hatte. Sie nahmen den Hörer vom Haken und drehten die Kurbel, um einen Telefonist zu finden. Sie musste es ersetzen, als die Direktwahl eingerichtet wurde.
Walter Mitty

Antworten:

25

05AB1E , 19 18 17 15 Bytes

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

Probieren Sie es online!

Dies ist die erste Antwort, die π verwendet. Warum sollte man π verwenden, könnte man fragen? Nun, die Buchstaben sind der Reihe nach mit 22233344455566677778889999 verknüpft. Beachten Sie, wie sich die meisten Ziffern dreimal wiederholen, 7 jedoch viermal. Man könnte sagen, dass sich jede Ziffer durchschnittlich 3 + 1/7 Mal wiederholt. Ich frage mich, ob es eine Zahl gibt, die ungefähr 3 + 1/7 ist und weniger Bytes als 22/7 benötigt.

Dies ergibt nur 4 7s, nicht 4 9s, daher müssen wir Z immer noch als Sonderfall behandeln.

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
Grimmig
quelle
Warum Kleinbuchstaben statt Großbuchstaben?
24.
1
@ dan04 weil 05AB1E einen eingebauten Push hat "abcdefghijklmnopqrstuvwxyz", aber nicht für "ABCDEFGHIJKLMNOPQRSTUVWXYZ". Ich könnte das Alphabet in Großbuchstaben umwandeln, anstatt die Eingabe in Kleinbuchstaben umzuwandeln, aber das ist das gleiche bytecount.
Grimmy
1
Ich habe die Frage bearbeitet, um Ihre ersten beiden Befehle überflüssig zu machen.
24.
3
@Jonah Ich begann mit der Idee, einen Bereich durch eine Konstante zu teilen, um die gewünschte Sequenz zu erhalten, und suchte dann nach der besten Möglichkeit, "etwas mehr als 3" in 05AB1E auszudrücken.
Grimmy
2
+1 für die Verwendung von pi
Draconis
9

C # (Visual C # Interactive Compiler) , 51 Byte

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

1 Byte dank @recursive gespeichert

Dank der Beobachtung von @ ExpiredData, dass nur () +-/.die Eingabe erfolgt, wurden 10 Bytes eingespart

Probieren Sie es online!

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
Verkörperung der Ignoranz
quelle
4
-10ist ~9, was im Kontext funktionieren sollte.
rekursiver
@recursive Das ist klug, danke
Verkörperung der Ignoranz
1
x <91 Prüfung ist redundant, da die Eingabe nur aus () + - / der Leertaste und Zahlen besteht, die alle <64 sind. Daher können wir durch einfaches Prüfen von x> 64 (also -5 Bytes) feststellen, ob das Zeichen in Großbuchstaben geschrieben ist.
Abgelaufene Daten
Gleiches gilt für den x <58-Check, da nichts im Bereich 58-64 in der Eingabe enthalten ist
Abgelaufene Daten
51 Bytes
Abgelaufene Daten
5

APL (Dyalog Unicode) , 27 Byte SBCS

Anonyme implizite Präfixfunktion.

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

Probieren Sie es online!

()∘⍳ Finden Sie den Index * jedes Zeichens in der folgenden Zeichenfolge:
  * Elemente, die nicht gefunden werden, erhalten den Index 1 + den Maximalindex, dh 11
⎕D  die Ziffern:"0123456789"

1⌽ zyklisch einen Schritt nach links drehen; "1234567890"

11| Divisionsrest bei Division durch 11 *
  * ergibt 0 für alle Nicht-Ziffern
+ addieren Sie das zu dem Folgenden:

'@ADGJMPTW'∘⍸ der ɩ nterval ɩ ndex * für jedes Zeichen
  * Also [− [, "@") ergibt 0, ["@", "A") ergibt 1, ["A", "D") ergibt 2 usw.
+/  summieren das

Adam
quelle
5

Python 2 , 74 Bytes

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

Probieren Sie es online!

Berechnet den ASCII-Wert für jedes Zeichen. Die erste Option sucht nach Buchstaben und die zweite nach Zahlen. Die Klarstellung, dass alle in der Eingabe zulässigen Interpunktionszeichen ASCII-Werte kleiner als 48 haben, vereinfacht die Logik, aber eine neue Methode könnte jetzt insgesamt besser sein.

Python 2 , 84 Bytes

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

Probieren Sie es online!

Verwendet eine fest codierte Nachschlagezeichenfolge, wobei jeder Block mit 5 Zeichen den Zeichen entspricht, die jeden Wert ab 1 angeben. Leerzeichen werden mit gefüllt x, die sich nicht in der großgeschriebenen Eingabe befinden können. Zufällig erscheinende Zeichen nicht im String Produkten -1für die , .finddie einen Summanden von Null ergibt.

xnor
quelle
5

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

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

Probieren Sie es online!

-7 danke @Arnauld!

Erläuterung

 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

Alle von [space]().+-/werden nicht von erfasst /\w/g, daher wirken sie sich nicht auf die Gesamtsumme aus.

Shieru Asakoto
quelle
5

Perl 5 -p , 52 51 Bytes

@Grimy bekommt Gutschrift für -1

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

Probieren Sie es online!

Xcali
quelle
/\d/gsollte /./gfür -1 sein (ja, es behandelt die Interpunktion immer noch korrekt).
Grimmy
4

Retina 0.8.2 , 34 Bytes

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

Probieren Sie es online! Link enthält Testfälle. Erläuterung:

T`WTPMJGDA`Rd

Wandle die Buchstaben WTPMJGDAin die Ziffern um 9..0.

}T`L`2L

Mische alle verbleibenden Buchstaben um 1 nach unten und wiederhole, bis alle Buchstaben in Ziffern umgewandelt wurden.

0
55

Ersetzen Sie 0durch, 55da sie die gleiche Anzahl von Impulsen zum Wählen benötigen.

\d
$*
1

Nimm die digitale Summe.

Neil
quelle
3

K4 , 44 Bytes

Lösung:

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

Beispiele:

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

Erläuterung:

Naive Herangehensweise, wahrscheinlich ziemlich golfen. Nachschlageindex des Charakters, Nachschlagepunktzahl, Summe.

+/(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
Streetster
quelle
3

C (gcc) , 94 89 86 80 Bytes

Danke an ceilingcat, nwellnhof und Rogem für die Vorschläge.

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

Probieren Sie es online!

ErikF
quelle
80 Bytes durch Verwendung von Rekursion anstelle einer Schleife.
Schlagen Sie c<43Ustattdessen vorc-17<26U
ceilingcat
2

Bash , 256 Bytes

Sie können die (( … ))Konstrukte durch letfür identische Byteanzahl ersetzen . Möglicherweise gibt es einen guten Algorithmus zum Reduzieren der case-Anweisungen, der jedoch noch nicht gefunden wurde. Mit ein bisschen Überarbeitung könnten Sie es auch zu einer Funktion machen (aber nicht in den gleichen oder weniger Bytes, es sei denn, Sie können das function fname { … }obere und das hintere Ende rabattieren ).

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

Probieren Sie es online!

Eine bessere Lösung mit der Kartenzeichentechnik nutzt das trTool:

[Bash with tr], 173 Bytes

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

Probieren Sie es online!

PJF
quelle
Ein Algorithmus, den ich natürlich vermisst habe, ist das Ersetzen / Übersetzen von Strings auf AZ. Das wäre gut. Ich werde das oben Gesagte entsprechend anpassen.
PJF
while((${#p}))funktioniert und spart drei Bytes. c=${p:0:1};case c in ([0-9]) ((d+=c?c:10));;Speichert weitere 16. tr -dc 0-9Wenn Sie zur tr-Pipeline hinzugefügt haben, brauchen Sie überhaupt keine case-Anweisung, und der Zusatz kann in die whileBedingung mit eingeklappt werden &&.
Oh meine Güte
Danke OMG. Ich benutze nicht oft ternäre Aufgaben, deshalb habe ich das verpasst. Interessante Verwendung des Löschkomplements (aber das setzt voraus, dass meine Lösung jedes andere Zeichen ignoriert). Ich habe es geschafft, es auf 133 Bytes zu 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
reduzieren,
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.. Die letzten drei 9en werden nicht benötigt, da tr das letzte Ersetzungszeichen wiederverwendet, wenn das zweite Argument zu kurz ist.
Oh meine Güte
1
Das erste Beispiel kann von 256 auf 236 reduziert werden, indem einige unnötige Leerzeichen entfernt werden. 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

Probieren Sie es online!

BEARBEITEN: @ mazzys Idee für einen Regex-Schalter mit einer gewissen Formatierung der Zeichenfolge, um char -> int -> string umzuwandeln und nur die erste 'Ziffer' zu erfassen

Original:

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

Ich hatte gehofft, <100 Bytes zu bekommen, also werde ich weiter nachsehen, ob ich noch etwas anderes tun kann. Es gibt wahrscheinlich eine Möglichkeit, die Zahlenfolge zu entfernen

Entschuldigung, wenn dies verwirrend ist, da ich Arrays mit booleschen Indexanweisungen verschachtelt habe, aber -

Erläuterung:

[char[]]"$args"|%{liest die Eingabe als String gegossen und dann in ein char Array explodiert sie und beginnt eine für-jede Schleife mit der Überprüfung , ()[$_-gt47]um zu sehen , ob irgendeine ()+-./(alle ASCII - Zeichenwerte haben <48) eingegeben wurde
Anmerkung: Powershell übernimmt $trueund $falseals 1und 0jeweils für Array - Indizes

Dann bekommen wir entweder 48für die Symbole, oder:
('22233344455566677778889999'[$_-65],(58,$_)[$_-ne48])[$_-lt64]

Die [$_-lt64]Überprüfungen für eine Zahl oder einen Buchstaben (alles angenommenes Kapital hier). Wenn es sich um einen Buchstaben handelt, '22233344455566677778889999'[$_-65]ändern Sie ihn in 0-25, um das Array zu indizieren und den Impulswert (als Zeichen) auszugeben. Wenn das Zeichen eine Zahl ist, schauen wir uns stattdessen Folgendes an: (58,$_)[$_-ne48]Überprüfen 0und Ausgeben 58oder nur das numerische Zeichen selbst.

Alles $a+= ... -=48initialisiert eine numerische Variable $ a at 0und addiert dann die Ausgabe. Die Ausgabe ist der ASCII-Zeichenwert einer Zahl, also subtrahieren 48.

Hinweis: Wenn die Eingabe ein Symbol war, $a+=48-48wird sie ignoriert. Wenn ja 0, bekommen wir $a+=58-48unsere +10

Zuletzt wird ;$anur unser endgültiger Wertbeitrag für jede Schleife ausgegeben

Sinusoid
quelle
Sie könnten ein paar Bytes sparen Versuchen Sie es online!
mazzy
Ah, ja, ich hatte ein paar zusätzliche Klammern und die =darin, die von meinen vorherigen Methoden zur Lösung dieses Problems übrig geblieben sind, danke für den Haken! Kannst t*ydu erklären, warum das funktioniert, um die Zeichenfolge in ein Zeichenarray zu zerlegen?
Sinusoid
um '<100 bytes' zu bekommen: Probieren Sie es online aus! :)
mazzy
Gute Idee mit -fund [0].
mazzy
2

PowerShell , 95 85 79 Byte

inspiriert von nwellnhofs antwort .

inspiriert von der Antwort[0] von Sinusoid .

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

Probieren Sie es online!

Abgerollte Version:

$(
    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
mazzy
quelle
1
Teamarbeit! : D
Sinusoid
0

Python 3 , 134 123 Bytes

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

Probieren Sie es online!

-11 Bytes dank @ dan04

Artemis Fowl
quelle
1
Durch Umstellen der Buchstaben auf 'ADGJMPTWBEHKNQUXCFILNRVYSZ'können Sie die Zahlenfolge auf reduzieren '23456789'*3+'79'.
14.