Nomor Pertama yang Berisi Setiap Surat

41

Diberikan satu huruf dari A ke Z (kecuali J dan K) sebagai input, menghasilkan bilangan bulat non-negatif terkecil yang mengandung huruf itu dalam bentuk tertulis. Asumsikan angka tidak pernah mengandung kata "dan", demikian 101pula "seratus satu", bukan "seratus satu". Asumsikan penghitungan Amerika (skala pendek), jadi satu juta adalah 10^6dan satu miliar adalah 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 dan K bukan bagian dari spesifikasi input, jadi perilaku Anda tidak ditentukan untuk mereka. Diberikan salah satu huruf di atas, tampilkan angka (desimal) di sebelahnya. Anda dapat mengambil input dalam huruf kecil atau huruf besar, tetapi Anda tidak dapat mengharuskan beberapa input menggunakan huruf kecil dan lainnya.

Ini adalah , jadi jawaban tersingkat dalam byte menang.

Stephen
sumber
11
Saya tidak begitu yakin mengapa tantangan ini banyak diturunkan? Sejauh yang saya bisa lihat, jelas dan sesuai topik. Yakin itu kemungkinan besar hanya akan encoding setiap huruf ke nomor yang sesuai, tapi saya tidak berpikir itu membenarkan 3 downvotes?
caird coinheringaahing
2
@Jonah menambahkan, terima kasih atas umpan baliknya
Stephen
10
Anda mengatakan "satu bajillion" bukan angka sebenarnya?
Jo King
2
@ Mengobrol Apa itu representasi desimal? :)
Stephen
8
Saya rasa pengguna StackExchange yang berpikir bahwa k tidak dapat muncul dalam nama angka agak membingungkan dalam imajinasi.
Andrew Grimm

Jawaban:

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

Cobalah online!

Bagaimana?

Setiap nilai dikodekan dengan satu karakter yang dapat dicetak. Kami menggunakan rentang ASCII untuk menyandikan dan kisaran untuk menyandikan .[32..52]n32[53..80]10n53

Berkomentar

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
sumber
7

Ruby , 65 byte

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

Cobalah online!

Perbaikan terinspirasi oleh komentar GB.

Ruby , 70 byte

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

Cobalah online!

Level River St
sumber
67 byte
GB
@ GB terima kasih, gagasan memiliki nilai negatif untuk iberguna. Sekarang turun ke 65.
Level River St
6

/// , 125 byte

/:/\/\///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/

Cobalah online!

Input ditambahkan ke akhir dari kode, per I / O meta . Footer di tautan TIO di atas menguji semua huruf secara bersamaan, sebagai string yang dibatasi oleh baris baru, tetapi kode juga berfungsi dengan baik saat memasukkan satu karakter .

negatif tujuh
sumber
6

Stax , 33 byte

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

Jalankan dan debug itu

Prosedur:

  1. Ekstrak codepoint dari input.
  2. Indeks ke array konstan [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]menggunakan codepoint. (dengan bungkus)
  3. Jika hasilnya negatif, negasikan dan naikkan 10ke kekuatan itu, jika tidak biarkan apa adanya.
rekursif
sumber
6

Excel, 85 byte

=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 bit Golfy:

  • Menggunakan eksponen (mis 1E15) menyimpan 26 bytes.
  • Default CHOOSEketika tidak ada yang disediakan adalah 0, simpan4 bytes
Wernisch
sumber
4

05AB1E , 36 byte

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

Port of @recursive 's Stax menjawab .
Masukan dalam huruf kecil.

Cobalah secara online atau verifikasi semua kasus uji .

Penjelasan:

•—ß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)

Lihat tip tambang 05AB1E ini (bagian Bagaimana cara mengompresi bilangan bulat besar? Dan Cara mengompresi daftar bilangan bulat? ) Untuk memahami mengapa •—ßusδtθ}™-5„©‘öæH•ini 3133432551338094772548436198140408157771728287dan •—ßusδtθ}™-5„©‘öæH•57вsekarang [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
sumber
2
32 . 05AB1E seharusnya tidak kalah dari Stax!
Grimmy
3

Perl 5 -p , 84 byte

$_=(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]

Cobalah online!

Xcali
sumber
72 byte menggunakan tabel pencarian dari solusi Perl 6 @ JoKing
Nahuel Fouilleul
3

Python 3 , 103 byte

lambda x:(1000,10**9,10**27,100,0,4,8,3,5,0,0,11,10**6,1,0,10**24,10**15,0,6,2,4,5,2,6,20,0)[ord(x)-97]

Cobalah online!

Jitse
sumber
3

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

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

a×10bab

Berkomentar

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

Cobalah online!

Perwujudan Ketidaktahuan
sumber
2

Perl 6 , 67 byte

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

Cobalah online!

Menggunakan tabel pencarian di mana angka negatif berarti itu adalah negatif dari eksponen, jika tidak itu adalah angka itu sendiri.

Jo King
sumber
2

05AB1E , 32 byte

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

Cobalah 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
Grimmy
sumber
Aku masih belum mengerti itu 'binary', haha. xD Tapi saya kira ini bisa berguna seperti ini kadang-kadang. ;)
Kevin Cruijssen
2

Bash , 129 100 byte

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

Cobalah online!

Cobalah online!

Bagaimana itu bekerja:

A=xDVw04835zzbA10SJ0624526k0

$ A: Base64 disandikan "a" - "z": angka yang kurang dari 100 disimpan secara langsung. Angka yang lebih besar dikodekan sebagai angka nol +30. (mis: 1.000 = 33, 100 = 32, dll.)

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

Ekstrak satu huruf dari $ A pada posisi yang ditentukan dalam argumen $ 1 (base64 diterjemahkan, -10 ke akun untuk offset 'a'). Base64 mendekode karakter itu dan menyimpannya di c.

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

Jika $ c lebih besar dari 30, cetak "1" empuk dengan $ c-30 nol. Lain, cetak $ c.

berdesis
sumber
2

Sledgehammer , 17 byte

Secara teknis, ini adalah 133 bit, tetapi itu tidak benar-benar menghasilkan 16,625 byte, seperti yang dikatakan oleh kompresor.

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

Ini mungkin diterjemahkan ke

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

(kira-kira sama dengan jawaban Mathematica saya), walaupun saya hampir tidak dapat mengkodekannya (sepertinya PC saya memiliki masalah kompatibilitas dengan semuanya), jadi semoga berhasil mendekode lagi untuk memeriksa. Saya mungkin telah membuat beberapa kesalahan saat menggunakan encoder, jadi berhati-hatilah.

some one
sumber
1

Jelly , 36 byte

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

Cobalah online!

Tautan monadik yang menggunakan huruf kecil sebagai argumennya dan mengembalikan bilangan bulat. Pengembalian 0untuk jdan k.

Penjelasan

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
sumber
1

Retina 0.8.2 , 89 byte

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

Cobalah online! Tautan termasuk kasus uji. Penjelasan:

^
$'

Gandakan input.

T`l`111104835__111011062452620`^.

Ubah salinan pertama menjadi digit (pertama) dari hasil yang relevan.

T`abcm\pq`139285

Jika angka memiliki kelipatan 3 angka nol, dapatkan kelipatan itu sekarang.

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

Dan benar-benar mengubahnya menjadi jumlah nol trailing yang relevan. (Perhatikan bahwa ini akan disederhanakan *3*0dalam Retina 1.)

d
00

Perbaiki d.

T`\lyl`10_

Perbaiki ldan ydan hapus semua huruf yang tersisa.

Neil
sumber
1

PHP , 104 byte

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

Cobalah online!

Saya memiliki string ^FX]0483500GC10UL0624526P0yang menampung satu karakter untuk setiap huruf input dari "a" hingga "z". Saya mengekstrak karakter ini berdasarkan input dan menyimpannya di $a. Jika karakter bukan digit, kode ASCII mod 30 akan disimpan $b.

Jika $adigit, digit yang sama dicetak, ini digunakan untuk input apa pun yang membutuhkan output antara 0 dan 9 (seperti "e", "f", dll).

Jika $b20 atau 11, nomor yang sama dicetak, ini digunakan untuk "l" dan "y".

Jika tidak, digit "1" yang diisi $bdengan "0" dicetak. Misalnya untuk input "a", karakternya adalah "^" yang memiliki kode ASCII 94. 94 % 30 = 4dan "1" yang berisi 4 dengan "0" akan "1000".

Night2
sumber