Перше число, яке містить кожну букву


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 не може відображатись в імені числа, досить розчулює уяву.
Ендрю Грімм

Відповіді:


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

7

Рубін , 65 байт

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

Спробуйте в Інтернеті!

Покращення, натхнені коментарем GB.

Рубін , 70 байт

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

Спробуйте в Інтернеті!



@GB спасибі, ідея мати негативні значення для iбула корисною. Тепер до 65.
Рівень Рівер Сен

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

Стакс , 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 «S СТАКС відповідь .
Введіть малі літери.

Спробуйте його в Інтернеті або перевірити всі тестові випадки .

Пояснення:

•—ß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 не повинен програти Стаксу!
Grimmy





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 Але я думаю, що іноді може бути корисним. ;)
Кевін Круїссен

2

Bash , 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 (базовий64 розшифровано, -10 для обліку зміщення 'a'). Base64 декодує цього символу та зберігає у c.

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

Якщо $ c більше 30, надрукуйте "1", заповнену нулями $ c-30. Ще, надрукуйте $ c.


2

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

Технічно це довжина 133 біта, але це не дійсно становить 16.625 байт, як стверджує компресор.

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

Це, ймовірно, розшифровується до

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

(приблизно такий же, як у моїй відповіді Mathematica), хоча я ледь не зашифрував це (здається, ніби мій ПК має проблеми із сумісністю з усім), тож удачі розкодувати його ще раз, щоб перевірити. Я, можливо, допустив деякі помилки під час використання кодера, тому будьте обережні.


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*0Retina 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" до "z". Я витягую цей символ на основі вхідних даних і зберігаю його в $a. Якщо символ не є цифрою, його код ASCII mod 30 буде зберігатися в $b.

Якщо $aє цифра, друкується однакова цифра, вона використовується для будь-якого вводу, якому потрібен вихід між 0 і 9 (наприклад, "e", "f" тощо).

В іншому випадку, якщо $b20 або 11, друкується однаковий номер, це використовується для "l" і "y".

В іншому $bвипадку надруковано цифру "1", додану на "0" s. Наприклад, для введення "a", символ "^", який має код ASCII 94. 94 % 30 = 4"1", доданий до 4, з "0" s, буде "1000".

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.