Số đầu tiên để chứa mỗi chữ cái


41

Cho một chữ cái duy nhất từ ​​A đến Z (trừ J và K) làm đầu vào, xuất ra số nguyên không âm nhỏ nhất có chứa chữ cái đó ở dạng viết. Giả sử các số không bao giờ chứa từ "và", 101"một trăm một", không phải "một trăm lẻ một". Giả sử người Mỹ (quy mô ngắn) đang đếm, nên một triệu là 10^6và một tỷ là 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 và K không phải là một phần của đặc tả đầu vào, vì vậy hành vi của bạn không được xác định cho chúng. Cho một trong các chữ cái trên, xuất số (thập phân) bên cạnh nó. Bạn có thể lấy đầu vào bằng chữ thường hoặc chữ hoa, nhưng bạn không thể yêu cầu một số đầu vào là chữ thường và một số chữ hoa khác.

Đây là , vì vậy câu trả lời ngắn nhất bằng byte sẽ thắng.


11
Tôi không chắc tại sao thử thách này lại bị hạ thấp quá nhiều? Theo như tôi có thể thấy, nó rõ ràng và theo chủ đề. Chắc chắn rất có thể chỉ đơn giản là mã hóa từng chữ cái thành số tương ứng của nó, nhưng tôi không nghĩ rằng điều đó biện minh cho 3 downvote?
caird coinheringaahing

2
@Jonah đã thêm, cảm ơn vì đã phản hồi
Stephen

10
Bạn đang nói "một bajillion" không phải là một con số thực sự?
Jo King

2
@JoKing đại diện thập phân của nó là gì? :)
Stephen

8
Tôi nghĩ rằng một người dùng StackExchange, người nghĩ rằng k không thể xuất hiện trong tên của một số thì khá là tưởng tượng.
Andrew Grimm

Câu trả lời:


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

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

Làm sao?

Mỗi giá trị được mã hóa với một ký tự có thể in được. Chúng tôi sử dụng phạm vi ASCII để mã hóa và phạm vi để mã hóa .[32..52]n32[53..80]10n53

Đã bình luận

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


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/

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

Đầu vào được nối vào cuối của mã này, theo I / O meta . Chân trang trong liên kết TIO ở trên kiểm tra đồng thời tất cả các chữ cái, dưới dạng một chuỗi được phân tách bằng dòng mới, nhưng mã cũng hoạt động tốt khi nhập một ký tự .



6

Stax , 33 byte

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

Chạy và gỡ lỗi nó

Thủ tục:

  1. Trích xuất codepoint từ đầu vào.
  2. Lập chỉ mục vào mảng không đổi [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]bằng cách sử dụng codepoint. (có bọc xung quanh)
  3. Nếu kết quả là âm tính, phủ định và nâng 10lên sức mạnh đó, nếu không thì để nguyên.

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:

  • Sử dụng số mũ (ví dụ 1E15) tiết kiệm 26 bytes.
  • Mặc định CHOOSEkhi không có gì được cung cấp là 0, lưu4 bytes

4

05AB1E , 36 byte

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

Cổng của câu trả lời Stax của @recursive .
Nhập bằng chữ thường.

Hãy thử trực tuyến hoặc xác minh tất cả các trường hợp thử nghiệm .

Giải trình:

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

Xem 05AB1E mẹo này của tôi (phần Làm thế nào để nén các số nguyên lớn?Làm thế nào để liệt kê số nguyên nén? ) Để hiểu tại sao •—ßusδtθ}™-5„©‘öæH•3133432551338094772548436198140408157771728287•—ßusδtθ}™-5„©‘öæH•57в[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].


2
32 . 05AB1E không nên thua Stax!
Grimmy




2

Perl 6 , 67 byte

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

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

Sử dụng bảng tra cứu trong đó số âm có nghĩa là số âm của số mũ, nếu không, chính nó là số.


2

05AB1E , 32 byte

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

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

•н“вü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

Tôi vẫn không nhận được 'binary'nội dung đó , haha. xD Nhưng tôi đoán đôi khi nó có thể hữu ích như thế này. ;)
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

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

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

Làm thế nào nó hoạt động:

A=xDVw04835zzbA10SJ0624526k0

$ A: Base64 được mã hóa "a" - "z": số nhỏ hơn 100 được lưu trữ trực tiếp. Số lớn hơn được mã hóa thành số không +30. (ví dụ: 1.000 = 33, 100 = 32, v.v.)

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

Trích xuất một chữ cái từ $ A tại vị trí được chỉ định trong đối số $ 1 (giải mã base64, -10 để tính toán cho 'a'). Base64 giải mã ký tự đó và lưu trữ trong c.

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

Nếu $ c lớn hơn 30, hãy in "1" được đệm bằng số 0 $ c-30. Khác, in $ c.


2

Sledgehammer , 17 byte

Về mặt kỹ thuật, nó dài 133 bit, nhưng điều đó không thực sự tạo ra 16.625 byte này, như máy nén tuyên bố.

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

Điều này có lẽ giải mã thành

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

(gần giống như câu trả lời Mathicala của tôi), mặc dù tôi hầu như không mã hóa nó (có vẻ như PC của tôi có vấn đề tương thích với mọi thứ), vì vậy chúc may mắn giải mã lại để kiểm tra. Tôi có thể đã mắc một số lỗi trong khi sử dụng bộ mã hóa, vì vậy hãy cẩn thận.


1

Thạch , 36 byte

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

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

Một liên kết đơn âm lấy một chữ cái viết thường làm đối số của nó và trả về một số nguyên. Trả về 0cho jk.

Giải trình

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)

1

Võng mạc 0.8.2 , 89 byte

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

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:

^
$'

Nhân đôi đầu vào.

T`l`111104835__111011062452620`^.

Thay đổi bản sao đầu tiên thành chữ số (đầu tiên) của kết quả có liên quan.

T`abcm\pq`139285

Nếu số có bội số của 3 số 0, hãy lấy số đó ngay bây giờ.

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

Và thực sự chuyển đổi nó thành số không liên quan. (Lưu ý rằng điều này sẽ đơn giản hóa *3*0trong Retina 1.)

d
00

Sửa chữa lên d.

T`\lyl`10_

Fix lên lyvà loại bỏ bất cứ thư còn lại.


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;

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

Tôi có một chuỗi ^FX]0483500GC10UL0624526P0chứa một ký tự cho mỗi chữ cái đầu vào từ "a" đến "z". Tôi trích xuất ký tự này dựa trên đầu vào và lưu trữ nó $a. Nếu ký tự không phải là một chữ số, mã ASCII mod 30 của nó sẽ được lưu trữ trong $b.

Nếu $alà một chữ số, cùng một chữ số được in, nó được sử dụng cho bất kỳ đầu vào nào cần đầu ra trong khoảng từ 0 đến 9 (như "e", "f", v.v.).

Khác nếu $blà 20 hoặc 11, cùng một số được in, số này được sử dụng cho "l" và "y".

Khác, chữ số "1" được đệm $bbằng "0" được in. Ví dụ: đối với đầu vào của "a", ký tự là "^" có mã ASCII là 94. 94 % 30 = 4và "1" được đệm thành 4 với "0" s sẽ là "1000".

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.