각 문자를 포함하는 첫 번째 숫자


41

A에서 Z까지의 단일 문자 (J 및 K 제외)를 입력으로 받으면 해당 문자를 포함하는 가장 작은 음이 아닌 정수를 서면 형식으로 출력하십시오. 숫자에 "and"라는 단어가 포함되어 101있지 않다고 가정하면 "100과 1"이 아니라 "100과 1"도 같습니다. 미국 (단기) 계산이라고 가정하면 백만은 10^610 억입니다 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
당신은 "하나의 bajillion"이 실수가 아니라고 말하고 있습니까?
조 왕

2
@JoKing 십진 표현이란 무엇입니까? :)
Stephen

8
k가 숫자 이름으로 나타날 수 없다고 생각하는 StackExchange 사용자는 상상력이 다소 부족하다고 생각합니다.
Andrew Grimm

답변:


16

자바 스크립트 (Node.js) ,  78 75 74  73 bytes

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

온라인으로 사용해보십시오!

어떻게?

각 값은 인쇄 가능한 단일 문자로 인코딩됩니다. ASCII 범위 [32..52] 를 사용하여 32 를 인코딩 하고 [53..80] 범위 를 10 을 인코딩1053합니다.

댓글

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

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

엑셀, 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•것입니다 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를 잃지 않아야합니다!
그리미



3

C # (Visual C # 대화 형 컴파일러) , 77 74 68 바이트

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

에이×10에이 표시되고 는 그 후 다음 5 비트로 표시됩니다. 대문자를 사용합니다.

댓글

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

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

배쉬 , 129100 바이트

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보다 작은 숫자는 직접 저장됩니다. 큰 숫자는 0의 수 +30으로 인코딩됩니다. (예 : 1,000 = 33, 100 = 32 등)

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

$ 1 인수에 지정된 위치에서 $ A에서 하나의 문자를 추출합니다 (base64 디코딩, -10의 오프셋을 설명하기 위해 -10). Base64는 해당 문자를 디코딩하고 c에 저장합니다.

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

$ c가 30보다 큰 경우 $ c-30의 0으로 채워진 "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

숫자에 후행 0의 배수가 여러 개인 경우 지금 배수를 얻으십시오.

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

실제로이를 적절한 수의 후행 0으로 변환합니다. (이것은 *3*0Retina 1에서 단순화 될 것입니다 .)

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", 등등과 같은).

그렇지 않으면 $b20 또는 11 인 경우 동일한 번호가 인쇄되며 "l"및 "y"에 사용됩니다.

그렇지 않으면 $b"0"으로 채워진 숫자 "1" 이 인쇄됩니다. 예를 들어 "a"입력의 경우 문자는 "^"이며 ASCII 코드는 94입니다.94 % 30 = 4 "1"은 "0"으로 4로 채워져 "1000"입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.