Первый номер, содержащий каждое письмо

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 добавил, спасибо за отзыв
Стивен
10
Вы говорите, что "один баджиллион" не является реальным числом?
Джо Кинг
2
@ JoKing что такое десятичное представление? :)
Стивен
8
Я считаю, что пользователь StackExchange, который думает, что k не может появиться в имени числа, довольно расстраивает воображение.
Эндрю Гримм

Ответы:

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] для кодирования N-32 и диапазон [53..80] для кодирования 10N-53 .

комментарии

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
источник
7

Рубин , 65 байт

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

Попробуйте онлайн!

Улучшения, вдохновленные комментариями ГБ.

Рубин , 70 байт

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

Попробуйте онлайн!

Уровень реки St
источник
@ GB спасибо, идея иметь отрицательные значения iбыла полезна. Сейчас до 65.
Уровень Река St
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/

Попробуйте онлайн!

Ввод добавляется в конец кода согласно методу ввода / вывода . Нижний колонтитул в приведенной выше ссылке 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
Wernisch
источник
4

05AB1E , 36 байт

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

Порт @recursive 's 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•есть 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 не должен проигрывать Stax!
Grimmy
3

C # (интерактивный компилятор Visual C #) , 77 74 68 байт

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

Кодирует вывод каждой буквы как a×10б, где a представлен 4 младшими битами символа, в то время как бпредставлен следующими пятью битами после этого. Использует заглавные буквы.

комментарии

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
Grimmy
источник
Я до сих пор не понимаю 'binary', хаха. xD Но я думаю, иногда это может быть полезно. ;)
Кевин Круйссен
2

Баш , 129 100 байт

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. (например: 1000 = 33, 100 = 32 и т. д.)

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

Извлеките одну букву из $ A в позиции, указанной в аргументе $ 1 (расшифровано base64, -10 для учета смещения 'a'). Base64 декодирует этот символ и сохраняет в c.

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

Если $ c больше 30, выведите «1» с нулями $ c-30. В противном случае выведите $ c.

spuck
источник
2

кувалда , 17 байт

Технически, это длина 133 бита, но на самом деле это не составляет 16,625 байта, как утверждает компрессор.

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

Это, вероятно, декодирует

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

(примерно так же, как мой ответ Mathematica), хотя я едва кодировал его (кажется, что мой компьютер имеет проблемы совместимости со всем), так что удачи, расшифровываю его снова, чтобы проверить. Возможно, я допустил некоторые ошибки при использовании кодера, поэтому будьте осторожны.

мое местоимение monicareinstate
источник
1

Желе , 36 байт

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

Попробуйте онлайн!

Монадическая ссылка, принимающая строчную букву в качестве аргумента и возвращающая целое число. Возвращает 0для jи k.

объяснение

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*0в Retina 1.)

d
00

Исправить d.

T`\lyl`10_

Исправьте lи yи удалите все оставшиеся буквы.

Нил
источник
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. Если символ не является цифрой, его код ASCII мод 30 будет сохранен в $b.

Если $aэто цифра, печатается та же цифра, она используется для любого ввода, который требует вывода от 0 до 9 (например, «e», «f» и т. Д.).

Иначе, если $b20 или 11, то же число напечатано, это используется для "l" и "y".

В противном случае $bпечатается цифра «1» с добавлением «0». Например, для ввода «a» символ представляет собой «^», код ASCII которого равен 94. 94 % 30 = 4и «1», дополненный до 4 с «0», будет «1000».

night2
источник