各文字を含む最初の番号


41

入力としてAからZまでの1文字(JおよびKを除く)が与えられた場合、その文字が書かれた形で含まれている負でない最小の整数を出力します。数字に「and」という単語が含まれることはないと想定します。したがって、「101100」は「100」ではありません。アメリカ(短期)のカウントを想定して、100万が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は入力仕様の一部ではないため、これらの動作は未定義です。上記の文字のいずれかが与えられた場合、その隣に(10進数)番号を出力します。入力は小文字でも大文字でも構いませんが、一部の入力が小文字で、他の入力が大文字である必要はありません。

これはであるため、バイト単位の最短回答が優先されます。


11
この挑戦がなぜそんなに落とされたのか、私にはよくわかりません。私が見る限り、それは明確で話題になっています。確かに、各文字を対応する番号に単純にエンコードしている可能性が最も高いのですが、3つのダウン票を正当化するとは思わないでしょうか?
コイアリンガーアーイング

2
@Jonahが追加、フィードバックに感謝
Stephen

10
「1億ドル」は実数ではないと言っているのですか?
ジョーキング

2
@JoKing 10進表現とは何ですか?:)
スティーブン

8
私は、kが数字の名前に表示できないと思っているStackExchangeユーザーは、想像力に欠けていると考えています。
アンドリューグリム

回答:


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

Ruby、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/

オンラインでお試しください!

I / O metaに従って、入力はコードの最後に追加されます。上記の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何も提供されない場合のデフォルトは04 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に負けてはいけません!
グリムミー





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から1文字を抽出します(base64デコード、オフセット 'a'を考慮して-10)。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

オンラインでお試しください!

小文字を引数として受け取り、整数を返すモナドリンク。戻り値0のためにjk

説明

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

Retina 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_

残りの文字を修正し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」の入力の場合、文字は94のASCIIコードを持つ「^」であり、94 % 30 = 4「0」で4にパディングされた「1」は「1000」になります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.