包含每个字母的第一个数字


41

给定一个从A到Z的单个字母(J和K除外),以书面形式输出包含该字母的最小非负整数。假设数字从不包含单词“和”,那么101“一百一”就不包含“一百一”。假设美国人(小规模)计数,那么一百万就是10^6十亿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和K不是输入规范的一部分,因此您的行为尚未定义。给定上述字母之一,在其旁边输出(十进制)数字。您可以采用小写或大写形式输入,但不能要求某些输入为小写而其他输入为大写。

这是,因此最短的答案以字节为单位。


11
我不太确定为什么这个挑战被否决了吗?据我所知,它很清楚而且很有趣。当然,很可能只是将每个字母编码为相应的数字,但是我认为这不能证明3个否决票的合理性吗?
caird coinheringaahing

2
@Jonah添加,感谢您的反馈
Stephen

10
您是说“十亿”不是实数?
乔·金

2
@JoKing十进制表示是什么?:)
斯蒂芬

8
我认为,StackExchange用户认为k不能出现在数字的名称中,这在想象力方面相当懒惰。
Andrew Grimm

Answers:


16

JavaScript(Node.js) 78 75 74  73字节

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

在线尝试!

怎么样?

每个值都用一个可打印字符编码。我们使用ASCII范围编码,使用范围编码。[32..52]n32[53..80]10n53

已评论

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字节

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

在线尝试!

按照I / O meta将输入追加到代码的末尾。上面的TIO链接中的页脚同时测试所有字母,作为一个以换行符分隔的字符串,但是当输入单个字符时,代码也可以正常工作。



6

Stax,33 个字节

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

运行并调试

程序:

  1. 从输入中提取代码点。
  2. [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]使用代码点索引到常量数组中。(带有环绕式)
  3. 如果结果为负,则求反并提高10该幂,否则保持原样。

6

Excel,85个字节

=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个高尔夫球状位:

  • 使用指数(例如1E15)保存26 bytes
  • CHOOSE不提供任何内容时的默认值为0,保存4 bytes

4

05AB1E,36 个字节

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

@recursive的Stax答案端口。
输入为小写。

在线尝试验证所有测试用例

说明:

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

请参阅我的05AB1E技巧(如何压缩大整数?如何压缩整数列表?以了解为什么•—ßusδtθ}™-5„©‘öæH•is 3133432551338094772548436198140408157771728287•—ßusδtθ}™-5„©‘öæH•57вis [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不应该输给Stax!
Grimmy



3

C#(Visual C#交互式编译器)77 74 68字节

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

a×10bab

已评论

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

在线尝试!


2

Perl 6、67字节

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

在线尝试!

使用查找表,其中负数表示指数的负数,否则为数字本身。


2

05AB1E,32个字节

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

在线尝试!

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

我还是不明白那个'binary'内置的,哈哈。xD但是我想有时候它会很有用。;)
Kevin Cruijssen

2

Bash129100字节

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

在线尝试!

在线尝试!

这个怎么运作:

A=xDVw04835zzbA10SJ0624526k0

$ A:Base64编码的“ a”-“ z”:小于100的数字直接存储。较大的数字被编码为零的数量+30。(例如:1,000 = 33、100 = 32,依此类推)

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

从参数$ 1中指定位置的$ A中提取一个字母(已解码base64,-10表示'a'的偏移量)。Base64对该字符进行解码并存储在c中。

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

如果$ c大于30,则用$ c-30零打印“ 1”。否则,打印$ c。


2

大锤,17字节

从技术上讲,这是133位长,但实际上并没有达到压缩器声称的16.625字节。

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

这可能会解码为

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

(与我的Mathematica答案大致相同),尽管我几乎没有对其进行编码(似乎我的PC上的所有内容都存在兼容性问题),所以请再次幸运地对其进行解码以进行检查。使用编码器时,我可能会犯一些错误,所以要小心。


1

果冻,36字节

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

在线尝试!

以小写字母作为参数并返回整数的单子链接。返回0jk

说明

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

视网膜0.8.2,89字节

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

在线尝试!链接包括测试用例。说明:

^
$'

复制输入。

T`l`111104835__111011062452620`^.

将第一份副本更改为相关结果的(第一位)数字。

T`abcm\pq`139285

如果该数字具有3个尾随零的倍数,请立即获取该倍数。

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

并实际上将其转换为相关的尾随零。(请注意,这将简化为*3*0Retina1。)

d
00

修复d

T`\lyl`10_

修复了ly和移除任何剩余的字母。


1

PHP,104字节

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

在线尝试!

我有一个字符串^FX]0483500GC10UL0624526P0,其中每个输入字母从“ a”到“ z”都包含一个字符。我根据输入提取此字符并将其存储在中$a。如果字符不是数字,则其ASCII代码mod 30将存储在中$b

如果$a是数字,则打印相同的数字,这用于需要0到9之间的输出的任何输入(例如“ e”,“ f”等)。

否则,如果$b打印的是20或11,则将打印相同的数字,用于“ l”和“ y”。

否则,$b将打印填充为“ 0”的数字“ 1” 。例如,对于“ a”的输入,字符是“ ^”,其ASCII码为94。将94 % 30 = 4“ 1”填充为4的“ 0”将是“ 1000”。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.