数字列


17

これは、整数百科事典のオンライン百科事典にないかなり簡単な配列です。

空のシーケンスから開始し、各用語をスペースなしでこれまでのシーケンスのすべての数字を英語で書き出すのに必要な文字数として定義します。*

参考のために、英語のすべての(10進数)桁の文字数は次のとおりです。

zero   one    two    three  four   five   six    seven  eight  nine
4      3      3      5      4      4      3      5      5      4

A52360A5589の両方の始まりです。)

これにより、空のシーケンスにゼロ桁が存在するため、最初のエントリがa(0)=0になります。

これにより、現在存在する唯一の数字である「ゼロ」を書き込むのに4文字かかるため、2番目のエントリはa(1)=4になります。

これにより、3つ目のエントリがa(2)=8になります。これは、「zerofour」を書き込むのに合計8人で「4」を書き込むのにさらに4文字が必要だからです。

これにより、4番目のエントリがa(3)=13になります。これは、「zerofoureight」を書き込むのに合計13人で「8」を書き込むのにさらに5文字が必要だからです。

これにより、5番目のエントリがa(4)=21、「onethree」を書き込むのにさらに8文字が必要になり、「zerofoureightonethree」を書き込むのに合計21が必要になります。

...等々。最初の100エントリは次のとおりです。

0, 4, 8, 13, 21, 27, 35, 44, 52, 59, 67, 75, 84, 93, 102, 112, 121, 130, 142, 152, 162, 171, 182, 193, 205, 216, 225, 235, 247, 259, 270, 282, 293, 305, 318, 331, 344, 357, 371, 384, 398, 412, 422, 432, 444, 456, 467, 479, 492, 503, 516, 526, 536, 548, 561, 571, 583, 597, 610, 620, 630, 642, 652, 662, 671, 682, 693, 705, 718, 731, 744, 757, 771, 784, 798, 812, 823, 836, 849, 862, 873, 888, 903, 916, 926, 936, 948, 961, 971, 983, 997, 1010, 1024, 1038, 1055, 1070, 1086, 1101, 1114, 1127

*他の言語および/または他のベースまたはもちろんスペースで定義できます

チャレンジ

可能な限り少ないバイト数のコードでn出力が与えられた場合、次のいずれか:

  • シーケンスの最初のn項(負でない整数で機能するはずです)
  • a(n)の値 非負の整数で機能するはずです)
  • シーケンスのn番目の項(正の整数で機能するはずです-すなわち、a(n1)値)

これはので、バイト単位の最短回答が各言語で勝ち、バイト単位の最短回答が勝ちます。ゴルフの言語が、あなたの好きな言語の入力を、実用的な言葉であれ難解な言葉であれ、妨げさせないでください!


最初のオプションで、あなたはその1)意味ですか1べき出力を[0]し、0出力すべき[]か、2)0出力する必要があり[0]、私の元の答えのように()?
エリックアウトゴルファー

@EriktheOutgolferつまり、(1)最初のn項を返すはずです。つまり、オプションは「a(n)までのシーケンスを出力します」、「a(n)を出力する」、または「a(n-1)を出力する」です。
ジョナサンアラン

それで、a(x)= a(x-1)+ f(a(x-1))ここで、f(x)はxを書くために必要な文字の量ですか?
FireCubez

@FireCubezはい、(0)= 0とF(x)がある場合は非空白文字は、xの数字を書くために
ジョナサン・アラン

回答:


12

Perl 6、45バイト

{({[+] @_.join.uninames>>.comb X-6}...*)[$_]}

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

数字の名前を直接取得できる場合は、派手なモジュロ化の必要はありません!シーケンスのn番目の値を返す匿名コードブロック、または範囲を渡して値のリストを取得できます

説明:

{(                                     )[$_]}  # Index input into:
  {                               }...*        # An infinite sequence
                                               # Where each element is
   [+]   # The sum of
       @_.join  # All previous elements joined together
              .uninames  # The unicode names for each character
                         # These are names in the form "DIGIT ONE"
                       >>.comb  # Split each to lists of characters
                               X-6  # Subtract 6 from each

@ジョナサンアランああ、私はあなたがリターンとして無限のシーケンスを許可したと思っていました、ごめんなさい。これを修正します
ジョーキング

ニース、それは良いです:)
ジョナサンアラン

いいね!»1バイトですよね?また、[+]2進演算がリデューサーになる方法をよりわかりやすく示唆するだけでなく、sum3バイトであり、最短ではないが最もエレガントなゴルフのイモであるソリューションの残りの部分と調和しています。
レイフ

@raiph »は2バイトなので、交換可能です。
ジョーキング

たぶんこれは不正行為ですが、RakudoはLatin1ソースコードを正しく処理しませんか?その場合、がsay '»'.encode('latin1').bytes 表示されることに注意してください1。:)
レイフ

8

JavaScript(ES6)、69 68 61 58バイト

a(n)

f=(n,s=0)=>n?f(n-1,[...s+''].map(d=>s+=(d+10)%23%3+3)|s):s

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

どうやって?

dn

n=(((d×100+10)mod23)mod3)+3

 d | *100 | +10 | MOD 23 | MOD 3 | +3 | word
---+------+-----+--------+-------+----+-------
 0 |    0 |  10 |   10   |   1   |  4 | zero
 1 |  100 | 110 |   18   |   0   |  3 | one
 2 |  200 | 210 |    3   |   0   |  3 | two
 3 |  300 | 310 |   11   |   2   |  5 | three
 4 |  400 | 410 |   19   |   1   |  4 | four
 5 |  500 | 510 |    4   |   1   |  4 | five
 6 |  600 | 610 |   12   |   0   |  3 | six
 7 |  700 | 710 |   20   |   2   |  5 | seven
 8 |  800 | 810 |    5   |   2   |  5 | eight
 9 |  900 | 910 |   13   |   1   |  4 | nine

数は、数字の文字に分割されているので、我々は処理することができます単に追加することによって、(文字列の連結として)。d×100+1010



5

ピップ、21バイト

Lai+:$+4335443554@^Pi

入力をコマンドライン引数として受け取り、最初の項を出力します。オンラインでお試しください!nn

説明

Lai+:$+4335443554@^Pi
                       a is 1st cmdline arg; i is 0 (implicit)
La                     Loop (a) times:
                   Pi   Print i
                  ^     Split it into a list of characters (i.e. digits)
       4335443554@      Use each digit to index into this number, giving the length of the
                        name of the digit (0 -> 4, 1 -> 3, etc.)
     $+                 Sum the results
  i+:                   Increment i by that amount

2
私はこれを読み、large constant to the power of pi記念碑的に感銘を受けました。(それはまだ印象的ですが、私の最初の解釈はちょうど...もっとだった)
Οurous

4

Wolfram言語(Mathematica)、57バイト

Nest[#+Tr@StringLength@IntegerName@IntegerDigits@#&,0,#]&

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

Tr@StringLength@IntegerName@IntegerDigits@#&の数字をリストし、#それぞれを英語名に変換し、長さを数え、結果を合計します。たくさんのものがリストにスレッド化され、とてもエキサイティングです。次に、定義を繰り返し適用します。

TIOは、インターネットに接続していないと不平を言っていますが、とにかく正しい答えを見つけ出すので、理由はわかりません。たぶん、整数の名前の更新をチェックしているのでしょうか?

出力の値が、我々はリスト全体を与えるためにそれを変更することができ変更してまで。a(n)a(0),a(1),,a(n)NestNestList




4

APL(Dyalog Unicode)29 28バイト

{{⍵++/3+3|⌊3÷⍨4-2×⍎¨⍕⍵}⍣⍵⊢0}

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

Dfn。プリントf(input)

この支援をしてくれた@The APL Orchardに感謝します。

2バイトの@ngn; 3 4バイトの@ H.PWiz 。

@recursiveの式を使用しています。

どうやって:

{{⍵++/3+3|⌊3÷⍨4-2×⍎¨⍕⍵}⍣⍵⊢0}  Main fn

 {                     }⍣⍵⊢0  Starting with 0, repeat (⍣) the inner fn input times
      3+3|⌊3÷⍨4-2×⍎¨⍕⍵       @recursive's formula
  ⍵++/                       ⍝ Sum with the input.

3

Python 2、61バイト

n=0
exec"for c in`n`:n+=(4-2*int(c))/3%3+3\n"*input()
print n

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

再帰の桁数マッピングを使用します。


Python 2、63バイト

f=lambda n:n and f(n-1)+sum((4-2*int(c))/3%3+3for c in`f(n-1)`)

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

再帰関数バージョン。の2つの再帰呼び出しがあるため、実行には指数関数的な時間がかかりますf(n-1)


いいね!前に使用したことを述べた式検索スクリプトがこの式(または、もっと短い式ですか?)
Lynn

@Lynnスクリプトを実行しましたが、より良いスクリプトは見つかりませんでした。13文字は完全な検索には多すぎるため、最大で9文字は見つかりませんでした。を切り捨て+3て算術演算子(ビット単位ではない)と数値<= 4に制限すると、この解決策が見つかりましたが、同等のものを除いてより短い、または同じ長さでさえありませんでした。
-xnor


3

MathGolf、17バイト

0\{_▒♀*♂+L%3%3+Σ+

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

これはArnauldのmethodを使用します。シーケンスのn番目の要素を出力します。空の文字列がで問題ない場合、先頭のをa(0)削除でき0\ます。

説明:

0\                 Setup 0 as the counter
  {                Loop input times
   _▒              Duplicate counter and split to list of digits
     ♀*            Multiply each element by 100
       ♂+          Add 10
         L%        Modulo by 23
           3%      Modulo by 3
             3+    Add 3
               Σ   Sum list
                +  And add to counter

3

Pyth、21バイト

u+Gs@L+L3jC\᯻3jGTQ0

こちらからオンラインでお試しください。

u+Gs@L+L3jC\᯻3jGTQ0   Implicit: Q=eval(input()), T=10

u                Q0   Starting at 0, repeat the following Q times, with current value as G:
          C\᯻           Get character code 7163
         j   3          Convert the above to base 3, yields [1, 0, 0, 2, 1, 1, 0, 2, 2]
      +L3               Add 3 to each to generate digit length dictionary
              jGT       Get digits of G (convert to base 10)
    @L                  Lookup each value in the above in the dictionary, modular indexing
   s                    Take the sum
 +G                     Add G to the above

Pythのコードページの1バイトではない可能性が高いです。(私はそれはそれは3つのバイトだし、その場合には、UTF-8を使用だと思うj7163 3同じ長さを有し、しかしtio.runはPythはSBCSを持っていると言う謎。!)
リン・

@リンあなたは絶対に正しい、私はバイト数を忘れてしまった、私の悪い。私はバイト数であるとして、今のコードを残して、更新します
ソック






1

J、37バイト

(+1#.|(3+3|23|10+100*]),.&.":)@]^:[&0

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

Arnauldの方法を使用

説明:

引数は n

                                 ^:    - apply the verb on the left hand site
                                   [   - n times
                                    &0 - to a starting value 0
 (                             )@]     - calculate for the current value of the argument
                         ,.&.":        - convert to string and then each char to digit
        (3+3|23|10+100*])              - map each digit to its word length
       |                               - a filler for the fork
    1#.                                - sum the lengths 
   +                                   - add them to the current value

1

最初のコメントの後に編集。

すべての用語を印刷します

Scala、76バイト

def^(n:Int)=(1 to n).scanLeft(0)((y,_)=>y+(y+"").map(x=>(x*9+1)%13%3+3).sum)

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

n 番目の用語を出力します

Scala、72バイト

def^(n:Int)=Stream.iterate(0)(x=>x+(x+"").map(x=>(x*9+1)%13%3+3).sum)(n)

Scala、69バイト

def^(n:Int)=(0/:(1 to n))((y,_)=>y+(y+"").map(x=>(x*9+1)%13%3+3).sum)

Scala、67バイト

def s(b:Int):Stream[Int]=b#::s(b+(b+"").map(x=>(x*9+1)%13%3+3).sum)

Scala、67バイト

val s:Stream[Int]=0#::s.map(x=>x+(x+"").map(x=>(x*9+1)%13%3+3).sum)

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


1
私はScalaを知りませんが、これはプログラムでも関数でもなく、スニペット(つまり、一度定義されたREPLで実行される)であると思いますn。Scalaを知っているなら、おそらく簡単に修正できます。また、Scalaでのゴルフの質問には役立つヒントがあります。最後に、それは、オンラインインタプリタへのリンクを投稿するうれしいですTIOは、スカラ座があり、PPCGメンバーの多くが使用しています。
ジョナサンアラン

1
@ジョナサンアラン、ありがとう、とても助かりました。
Dr Y Wit
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.