Goodsteinシーケンスを出力する


18

(これはかなり古典的かもしれませんが、これはここでの私の最初の投稿なので、私はまだ派手なものの準備ができていません)

グッドスタイン配列は、以下のように、入力数に対して定義されます。

開始番号を選択N、聞かせてB = 2と繰り返し:

  • 基数bの表記でnを書く
  • nのすべての(b)を(b +1)に置き換え、1を減算します
  • nの新しい小数評価を出力します
  • インクリメントb

遺伝基数表記は、基数が出現するより大きな数である場合の数の分解です。例:

  • 83 HB3で: 3^(3+1)+2
  • 226 HB2で: 2^(2^(2+1))+2^(2+1)+2

グッドスタインシーケンスは常に0になりますが、最初は非常に速く非常に大きくなる傾向があるため、完全なシーケンスを出力する必要はありません。


仕事:

適切な形式の入力番号が与えられた場合、あなたの仕事は、少なくとも10 ^ 25または0に達するまで、この番号のGoodsteinシーケンスを出力することです

例:

Input: 3
Output: 3, 3, 3, 2, 1, 0
Input: 13
Output: 13, 108, 1279, 16092, 280711, 5765998, 134219479, 3486786855, 100000003325, 3138428381103, 106993205384715, 3937376385706415, 155568095557821073, 6568408355712901455, 295147905179352838943, 14063084452067725006646, 708235345355337676376131, 37589973457545958193377292
Input: 38
Output: 38, 22876792454990

詳細:

  • 入力番号は、10進数である限り、配列、文​​字列、整数にすることができます
  • 出力は同じルールに従います
  • 出力内の用語の分離は、スペース、改行、または任意の合理的な分離にすることができます
  • シーケンスが10 ^ 25より大きくなるとすぐに、プログラムは正常に終了するか、エラー/例外をスローするか、続行します(制限なし)
  • これはなので、最短の回答(バイト単位)が勝ちます
  • もちろん、標準的な抜け穴は禁止されています
  • Pythonの未使用の作業例はこちら

2
1つのテストケースのステップバイステップを追加できますか?
ロッド

5
PPCGへようこそ!素敵な最初の挑戦!
FantaC


2
@ØrjanJohansenええ、バグは、浮動小数点エラーを避けるために(または単に)int(q/base.b), q%base.b必要であるということです。q//base.b, q%base.bdivmod(q, base.b)
アンデルスカセオルグ

2
「少なくとも10 ^ 25または0に達するまで」とは、プログラムが0に達した後(おそらく-1、-2、-3、…)にプログラムを続行できることを意味しますか?
アンデルスカセオルグ

回答:


3

Pyth28 26バイト

.V2JbL&bs.e*^hJykb_jbJ=ty

末尾の改行は重要です。

オンラインでお試しください!(このリンクにはQ、現在のバージョンのPythには不要な追加が含まれています。)

使い方

.V2JbL&bs.e*^hJykb_jbJ=ty
.V2                          for b in [2, 3, 4, ...]:
   Jb                          assign J = b
     L                         def y(b):
      &b                         b and
                   jbJ             convert b to base J
                  _                reverse
         .e                        enumerated map for values b and indices k:
             hJ                      J + 1
            ^  yk                    to the power y(k)
           *     b                   times b
(newline)                      print Q (autoinitialized to the input)
                        y      y(Q)
                       t       subtract 1
                      =        assign back to Q

yグローバル変数への変更全体でメモ化を防ぐために、各ループの繰り返しで再定義することが重要ですJ


3

Haskell、77バイト

(&2)は、sのInteger(潜在的に非常に長い)リストを取得して返す匿名関数であり、Integerとして使用し(&2) 13ます。

(&2)
n&b|n<0=[]|let _?0=0;e?n=(e+1)?div n b+mod n b*(b+1)^0?e=n:(0?n-1)&(b+1)

オンラインでお試しください!(で切り取ります10^25。)

使い方

  • (&2)シーケンスをbaseで開始します2
  • n&b数値nとbaseで始まる部分列を計算しbます。
    • ifの場合n<0、空のリストで停止しn==0ます。
    • そうでない場合はn、式によって再帰的に返されるリストの先頭に追加されます(0?n-1)&(b+1)
  • ?ローカル関数演算子です。遺伝ベース0?nに変換nした結果を提供しb、ベースをどこでもインクリメントします。
    • 変換eは、現在の指数を追跡する変数で再帰します。e?n数値を変換しますn*b^e
    • 再帰は0whenで停止しn==0ます。
    • それ以外の場合、nbase で除算しbます。
      • (e+1)?div n b 商と次に高い指数の再帰を処理します。
      • mod n b*(b+1)^0?eは、剰余(現在の指数に対応する数字e)、ベースの増分、およびを使用して現在の指数を遺伝的に変換し0?eます。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.