Erste Zahl, die jeden Buchstaben enthält

41

Geben Sie bei einem einzelnen Buchstaben von A bis Z (außer J und K) als Eingabe die kleinste nicht negative Ganzzahl aus, die diesen Buchstaben in schriftlicher Form enthält. Angenommen, Zahlen enthalten niemals das Wort "und", so 101ist "einhundertein", nicht "einhundertein". Nehmen wir an, die Amerikaner zählen kurz, also ist eine Million 10^6und eine Milliarde 10^9.

a 1000                           one thousand
b 1000000000                     one billion
c 1000000000000000000000000000   one octillion
d 100                            one hundred
e 0                              zero
f 4                              four
g 8                              eight
h 3                              three
i 5                              five
j 
k
l 11                             eleven
m 1000000                        one million
n 1                              one
o 0                              zero
p 1000000000000000000000000      one septillion
q 1000000000000000               one quadrillion
r 0                              zero
s 6                              six
t 2                              two
u 4                              four
v 5                              five
w 2                              two
x 6                              six
y 20                             twenty
z 0                              zero

J und K sind nicht Teil der Eingabespezifikation, daher ist Ihr Verhalten für sie undefiniert. Geben Sie bei einem der obigen Buchstaben die (Dezimal-) Zahl daneben aus. Sie können Eingaben in Klein- oder Großbuchstaben vornehmen, einige Eingaben müssen jedoch nicht in Kleinbuchstaben und andere in Großbuchstaben eingegeben werden.

Das ist , also gewinnt die kürzeste Antwort in Bytes.

Stephen
quelle
11
Ich bin mir nicht ganz sicher, warum diese Herausforderung so oft abgelehnt wurde. Soweit ich sehen kann, ist es klar und thematisch. Sicher, es ist am wahrscheinlichsten, einfach jeden Buchstaben mit der entsprechenden Zahl zu codieren, aber ich denke nicht, dass dies drei Abwertungen rechtfertigt?
Caird Coinheringaahing
2
@Jonah fügte hinzu, danke für das Feedback
Stephen
10
Sie sagen, dass "ein Bajillion" keine echte Zahl ist?
Jo King
2
@JoKing was ist es Dezimalrepräsentation? :)
Stephen
8
Ich bin der Meinung, dass ein StackExchange-Benutzer, der der Meinung ist, dass k nicht im Namen einer Zahl vorkommen kann, ziemlich einfallsreich ist.
Andrew Grimm

Antworten:

16

JavaScript (Node.js) ,  78 75 74  73 Byte

c=>(n=([x]=Buffer(c+'8>P7 $(#%  +;! MD &"$%"&4 '))[x-96]-53)<0?n+21:10**n

Probieren Sie es online!

Wie?

[32..52]n32[53..80]10n53

Kommentiert

c =>                                   // c = input character
  ( n =                                //
    ( [x] =                            // let x be the 1st byte of the
        Buffer(                        // buffer made of:
          c +                          //   c followed by
          '8>P7 $(#%  +;! MD &"$%"&4 ' //   the encoded values
        )                              //
    )[x - 96]                          // let n be the encoded value corresponding to c
    - 53                               // minus 53
  ) < 0 ?                              // if n is negative:
    n + 21                             //   return n + 21
  :                                    // else:
    10 ** n                            //   return 10 ** n
Arnauld
quelle
7

Ruby , 65 Bytes

->n{i="CI[B?;7<:??4F>?XO?9=;:=9+?"[n.ord-65].ord-64;i>0?10**i:~i}

Probieren Sie es online!

Verbesserungen inspiriert von GBs Kommentar.

Ruby , 70 Bytes

->n{i="ci}b@DHCE@@KfA@xo@FBDEBFT@"[n.ord-65].ord;i>96?10**(i-96):i-64}

Probieren Sie es online!

Level River St
quelle
@GB danke, die Idee, negative Werte für zu haben, iwar nützlich. Jetzt runter auf 65.
Level River St
6

/// 125 Bytes

/:/\/\///T/000:d/100:a/d0:m/aT:b/aTT:q/bTT:p/qTTT:c/pT:e/0:f/4:g/8:h/3:i/5:l/11:n/1:o/0:r/0:s/6:t/2:u/4:v/5:w/2:x/6:y/20:z/0/

Probieren Sie es online!

Die Eingabe wird gemäß E / A-Meta an das Ende des Codes angehängt . Die Fußzeile im obigen TIO-Link testet alle Buchstaben gleichzeitig als einzelne durch Zeilenumbrüche getrennte Zeichenfolge. Der Code funktioniert jedoch auch einwandfrei, wenn ein einzelnes Zeichen eingegeben wird .

negative sieben
quelle
6

Stax , 33 Bytes

º░¡µ?Äz*B╥╪╩ΓoΣ4ù↓|♂5%⌡ÿΩ²┼h{☻4O└

Führen Sie es aus und debuggen Sie es

Verfahren:

  1. Codepunkt aus Eingabe extrahieren.
  2. Indizieren Sie [3, 5, 7, 9, 11, -6, 1, 0, -24, -15, 0, 6, 2, 4, 5, 2, 6, 20, 0, -3, -9, -27, -2, 0, 4, 8]mit codepoint in ein konstantes Array . (mit Umlauf)
  3. Wenn das Ergebnis negativ ist, negiere und erhöhe 10auf diese Potenz, ansonsten lasse es wie es ist.
rekursiv
quelle
6

Excel, 85 Bytes

=CHOOSE(CODE(A1)-96,1E3,1E9,1E27,100,,4,8,3,5,,,11,1E6,1,,1E24,1E15,,6,2,4,5,2,6,20,)

2 Golfbits:

  • Mit Exponenten (zB 1E15) sparen 26 bytes.
  • Verzug , CHOOSEwenn nichts vorgesehen ist 0, spart4 bytes
Wernisch
quelle
4

05AB1E , 36 Bytes

•—ßusδtθ}™-5„©‘öæH•57в₆-sÇ`èD0‹iÄ°

Port von @recursives Stax-Antwort .
Eingabe in Kleinbuchstaben.

Probieren Sie es online aus oder überprüfen Sie alle Testfälle .

Erläuterung:

•—ßusδtθ}™-5„©‘öæH # Push compressed integer 3133432551338094772548436198140408157771728287
 57в                  # Converted to base-57 as list: [39,41,43,45,47,30,37,36,12,21,36,42,38,40,41,38,42,56,36,33,27,9,34,36,40,44]
    ₆-                # Subtract 36 from each: [3,5,7,9,11,-6,1,0,-24,-15,0,6,2,4,5,2,6,20,0,-3,-9,-27,-2,0,4,8]
      sÇ`             # Swap to take the input, and convert it to its unicode value
         è            # Index it into the list (with automatic wraparound)
          D0i        # Create a copy, and if this is negative:
              Ä       #  Take the absolute value
               °      #  And then take 10 the power this value
                      # (implicitly output the top of the stack as result)

Sehen Sie sich meinen Tipp 05AB1E an (Abschnitt Komprimieren großer Ganzzahlen und Komprimieren von Ganzzahllisten ), um zu verstehen, warum dies so •—ßusδtθ}™-5„©‘öæH•ist 3133432551338094772548436198140408157771728287und •—ßusδtθ}™-5„©‘öæH•57вist [39,41,43,45,47,30,37,36,12,21,36,42,38,40,41,38,42,56,36,33,27,9,34,36,40,44].

Kevin Cruijssen
quelle
2
32 . 05AB1E sollte nicht gegen Stax verlieren!
Grimmy
3

Perl 5 -p , 84 Bytes

$_=(1e3,1e9,1e27,100,0,4,8,3,5,1,1,11,1e6,1,0,1e24,1e15,0,6,2,4,5,2,6,20,0)[-65+ord]

Probieren Sie es online!

Xcali
quelle
72 Bytes unter Verwendung einer Nachschlagetabelle aus @ JoKings Perl 6-Lösung
Nahuel Fouilleul,
3

C # (Visual C # Interactive Compiler) , 77 74 68 Byte

x=>((x="1‘Ʊ!  aƁñ"[x-65])&15)*Math.Pow(10,x>>4)

a×10bab

Kommentiert

x=>                                                 //Lambda taking in a char
  (x=                                         )     //Re-assign x to
     "1‘Ʊ!   aƁñ"[x-65]      //The character's value at index x-65
 (                                             &15) //Bitwise AND by 15                                
  * Math.Pow(10,x>>4)                               // Multiplied by 10**(floor(x/16))

Probieren Sie es online!

Verkörperung der Ignoranz
quelle
2

Perl 6 , 67 Bytes

{/\-/??10**-$_!!$_}o{'`ZHacgkfhccn]dcKTciegheiwc'.ords[.ord-97]-99}

Probieren Sie es online!

Verwendet eine Nachschlagetabelle, in der eine negative Zahl das Negative des Exponenten bedeutet, andernfalls die Zahl selbst.

Scherzen
quelle
2

05AB1E , 32 Bytes

•н“вüQ;æ¡ζæÀÛß%aÜ×₃t•56вsCè2‰`i°

Probieren Sie es online!

•н“вüQ;æ¡ζæÀÛß%aÜ×₃t•56в  # compressed list:
# [31, 0, 12, 4, 8, 10, 4, 12, 40, 0, 7, 19, 55, 5, 0, 8, 16, 6, 10, 1, 1, 22, 13, 2, 0, 49]

s                         # swap so the input is at the top
 C                        # parse input as "binary" (a -> 36, b -> 37, ...)
  è                       # index (wraps around)
   2‰                     # divmod 2: [n / 2, n % 2]
     `                    # dump both on the stack
      i                   # if the modulo is 1:
       °                  #  10 ** the quotient
                          # implicit output
Grimmig
quelle
Ich bekomme das immer noch nicht 'binary'eingebaut, haha. xD Aber ich denke, manchmal kann es so nützlich sein. ;)
Kevin Cruijssen
2

Bash , 129 100 Bytes

A=xDVw04835zzbA10SJ0624526k0
c=$[64#${A:$[64#$1-10]:1}]
[ $c -gt 30 ]&&printf 1%0$[c-30].0f||echo $c

Probieren Sie es online!

Probieren Sie es online!

Wie es funktioniert:

A=xDVw04835zzbA10SJ0624526k0

$ A: Base64-codiertes "a" - "z": Zahlen unter 100 werden direkt gespeichert. Größere Zahlen werden als Anzahl der Nullen +30 codiert. (Beispiel: 1.000 = 33, 100 = 32 usw.)

c=$[64#${A:$[64#$1-10]:1}]

Extrahieren Sie einen Buchstaben aus $ A an der in Argument $ 1 angegebenen Position (base64 decodiert, -10, um den Versatz von 'a' zu berücksichtigen). Base64 dekodiert dieses Zeichen und speichert es in c.

[ $c -gt 30 ]&&printf 1%0$[c-30].0f||echo $c

Wenn $ c größer als 30 ist, wird "1" mit $ c-30 Nullen aufgefüllt. Ansonsten drucke $ c.

spuckte
quelle
2

Vorschlaghammer , 17 Bytes

Technisch gesehen ist dies 133 Bit lang, aber das macht diese 16,625 Bytes nicht wirklich, wie der Kompressor behauptet.

⣜⢍⢞⢹⡱⡋⣽⡱⡆⢺⢦⡽⡐⡌⢗⠈⣵

Dies entschlüsselt sich wahrscheinlich zu

x1 = Input[]; x2 = 0; While[StringFreeQ[IntegerName[x2], x1], x2++]; Print[x2]

(Ungefähr das Gleiche wie meine Mathematica-Antwort), obwohl ich sie kaum verschlüsselt habe (es sieht so aus, als ob mein PC Kompatibilitätsprobleme mit allem hat), also viel Glück beim erneuten Entschlüsseln. Ich habe möglicherweise einige Fehler bei der Verwendung des Encoders gemacht, seien Sie also vorsichtig.

jemand
quelle
1

Gelee , 36 Bytes

Oị“[@ịẆþĊ`o&÷ḲḞṘḂỊP¥t’b48¤_⁹⁵*ɗ¹>?20

Probieren Sie es online!

Ein monadischer Link, der einen Kleinbuchstaben als Argument verwendet und eine Ganzzahl zurückgibt. Rückgabe 0für jund k.

Erläuterung

O                       | Convert to code point
 ị          ¤           | Index into following as a nilad (wraps around):
  “[...t’               | - Integer 5370441668223940717846370165240010583188867 (stored base 250)
         b48            | - Convert to base 48
                 ɗ >?20 | If >20, following as a dyad using 20 as right argument:
             _⁹         | - Subtract right argument (20)
               ⁵*       | - 10 to the power of this
                  ¹     | Else: leave unchanged (identity function)
Nick Kennedy
quelle
1

Retina 0.8.2 , 89 Bytes

^
$'
T`l`111104835__111011062452620`^.
T`abcm\pq`139285
\d$
$*0$&$*0$&$*0
d
00
T`\lyl`10_

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

^
$'

Duplizieren Sie die Eingabe.

T`l`111104835__111011062452620`^.

Ändern Sie die erste Kopie in die (erste) Ziffer des entsprechenden Ergebnisses.

T`abcm\pq`139285

Wenn die Zahl ein Vielfaches von 3 nachgestellten Nullen hat, erhalten Sie dieses Vielfache jetzt.

\d$
$*0$&$*0$&$*0

Und tatsächlich konvertieren Sie es in die entsprechende Anzahl von nachgestellten Nullen. (Beachten Sie, dass dies *3*0in Retina 1 zu vereinfachen wäre .)

d
00

Repariere es d.

T`\lyl`10_

Fix up lund yund entfernen Sie alle restlichen Buchstaben.

Neil
quelle
1

PHP , 104 Bytes

<?=A<($a='^FX]0483500GC10UL0624526P0'[ord($argn)-97])?20==($b=ord($a)%30)||11==$b?$b:str_pad(1,$b,0):$a;

Probieren Sie es online!

Ich habe eine Zeichenfolge ^FX]0483500GC10UL0624526P0, die ein einzelnes Zeichen für jeden Eingabebuchstaben von "a" bis "z" enthält. Ich extrahiere dieses Zeichen basierend auf der Eingabe und speichere es in $a. Wenn das Zeichen keine Ziffer ist, wird sein ASCII-Code mod 30 in gespeichert $b.

Wenn $aes sich um eine Ziffer handelt, wird dieselbe Ziffer gedruckt. Dies wird für alle Eingaben verwendet, für die eine Ausgabe zwischen 0 und 9 erforderlich ist (z. B. "e", "f" usw.).

Andernfalls, wenn $b20 oder 11, wird dieselbe Nummer gedruckt, dies wird für "l" und "y" verwendet.

Andernfalls wird die $bmit "0" aufgefüllte Ziffer "1" gedruckt. Für die Eingabe von "a" ist das Zeichen beispielsweise "^" mit einem ASCII-Code von 94. Die 94 % 30 = 4mit "0" aufgefüllte "1" ergibt "1000".

Night2
quelle