桁の合計の平等


23

前書き

数字を見てみましょう180。この数字の桁の合計は次と等しいため、これは興味深い数字です。

1 + 8 + 0 = 9

そして、この数の二乗バージョン、または:

180² = 32400 > 3 + 2 + 4 + 0 + 0 = 9

これらは両方とも9です。元の数字と2乗数字の桁の合計は同じです。もちろん、これはOEIS:A058369でも見つかります。

仕事

非負の整数を指定すると、この条件でth番目の正の数をn出力します。n

テストケース(ゼロインデックス付き

Input > Output

0 > 1
1 > 9
2 > 10
3 > 18
4 > 19
5 > 45
6 > 46
7 > 55
8 > 90
9 > 99
10 > 100
11 > 145
12 > 180
13 > 189
14 > 190
15 > 198
16 > 199
17 > 289
18 > 351
19 > 361

より適切な場合は、入力に1インデックスを付けることもできます。

これはであるため、バイト数が最小の提出が勝ちです!


まだ誰も見つけていない場合、0または1(mod 9)に相当する数字のみがリストに表示されます。
ニール

@MamaFunRoll Um ...いいえ。ごめんなさい。デジタルルートが5の数値には、デジタルルートが7の平方があります
ニール

@Neil owait nvm
ママファンロール

私は、入力がこのシーケンスの用語ですが、私はちょうどコメントでそれを残しておきますので、検索-n番目の定型作業を取得できなかったかどうかを判断するためにBrachylog述語を書いた:^₂;?{ẹ+}ᵛ
関係のない文字列の

回答:


5

ゼリー、13バイト

,²DS€=/
1dz#Ṫ

入力は1から始まります。オンラインでお試しください!

使い方

1dz#Ṫ    Main link. Argument: n (index)

1        Set the return value to 1.
   #     Execute ... until ... matches have been found.
 Ç         the helper link
  ³        n
    Ṫ    Extract the last match.


,²DS€=/  Helper link. Argument: k (integer)

,²       Pair k with k².
  D      Convert each to decimal.
   S€    Compute the sum of each list of base 10 digits.
     =/  Reduce by equality.

4

Haskell、54バイト

s=sum.map(read.pure).show
([x|x<-[1..],s x==s(x^2)]!!)

使用例:([x|x<-[1..],s x==s(x^2)]!!) 17-> 289

s calculates the digit sum:

                    show     -- turn number into a string
     map(read.pure)          -- turn every character (the digits) in to a
                             -- one element string and convert back to integer
sum                          -- sum those integers

main function:

[x|x<-[1..]            ]     -- make a list of all x starting from 1
           ,s x==s(x^2)      -- where s x == s (x^2)
                        !!   -- pick nth element from that list

4

JavaScript(ES6)、76 73 72バイト

n=>eval("for(q=s=>eval([...s+''].join`+`),i=1;q(i)!=q(i*i)||n--;i++);i")

間違った変数を出力していることに気付くまで、これを機能させるために30分を費やしました:|

これはゼロインデックスです。


1
私は再帰関数にこれを回すように感じる多くのことをこれを短縮するでしょう...
ママ楽しいロール


4

05AB1E10 9 8 バイト

µNÐn‚1öË

1インデックス付き。

-1バイトのおかげ@Emigna暗黙的除去することにより、½(増加counter_variable終わりにすべての反復の後に)
-1バイトのおかげ@Grimyが重複除去SO使って、‚1ö

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

説明:

µ         # Loop while the counter_variable is not equal to the (implicit) input yet:
 NÐ       #  Push the 0-based loop index three times
   n      #  Take the square of this index
          #   i.e. 180 → 32400
         #  Pair it with the index
          #   i.e. 180 and 32400 → [180,32400]
     1ö   #  Convert both numbers from base-1 to base-10, which basically sums the digits
          #   i.e. [180,32400] → [9,9]
       Ë  #  Check if both sums are equal
          #   i.e. [9,9] → 1 (truthy)
          #  (if they are: implicitly increase the counter_variable by 1)
          # (after the loop: implicitly print the top of the stack, which is the remaining
          #  copy of the index from the triplicate we've used)

2
½暗黙的であるため、ここでは必要ありません
エミグナ

1
-1: µNDn‚1öËに似てSOいますが、ベクトル化するため、コードの重複を回避できます。
グリムミー

@Grimyありがとう。また、Small tips投稿のヒントとして追加しました。:)
ケビンクルーッセン

3

Mathematica、64バイト

a=Tr@*IntegerDigits;Nest[NestWhile[#+1&,#+1,a@#!=a[#^2]&]&,1,#]&

シンプルな匿名関数。ゼロインデックス。


3

Pyth、15

e.fqsjZTsj^Z2TQ

DenkerAffeのおかげで1バイト!

ここで試してみるか、テストスイートを実行してください

1インデックス付きオプションを使用します。

指定された条件に一致する.f最初のn数字を取得するwhich を使用した単純な実装。


h明示的に許可されている1-indexingを使用する場合、削除することで1バイトを節約できます。
デンカー

@DenkerAffeああ、ありがとうございます。もっと詳しく読む必要があります。P
FryAmTheEggman

2

MATL24 23バイト

x`@2:^"@V!Us]=?@]NG<]1$

1ベースの入力を使用します。

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

x        % take inpout and delete it (gets copied into clipboard G)
`        %   do...while
  @      %   push loop iteration index: candidate number, n
  2:^    %   array [n n^2]
  "      %   for each element of that array 
    @    %     push that element 
    V!U  %     get its digits (to string, transpose, to number)
    Xs   %     compute their sum
  ]      %   end for each
  =      %   are the two sums equal?
  ?      %   if so
    @    %     the candidate number is valid: push it
  ]      %   end if
  NG<    %   is number of elements in stack less than input?
]        % if so, proceed with next iteration. End do...while. 
1$       % specify 1 input for implicit display: only top of stack

1
MATLが最終的にそこにある遠方のコンパイラーにリストされていることは非常に素晴らしいことです!
Abr001am

1

ジュリア、79 66バイト

f(n,x=0,i=1,s=c->sum(digits(c)))=x<n?f(n,x+(s(i)==s(i^2)),i+1):i-1

これは、整数を受け入れて整数を返す再帰関数です。1ベースのインデックスを使用します。

関数の引数としていくつかのものを保存します。

  • n :入力
  • x :この条件で見つかった数字の数のカウンター
  • i :状態を確認する番号
  • s :入力の桁の合計を計算する関数

x入力よりも小さい間、再帰し、条件を満たすx場合iは増分し、増分しますi。一度x == n、を返しiますが、1を何度もインクリメントするため、1を減算する必要があります。


1

凸0.2、36の 35バイト

Convexは、CJamとGolfscriptに大きく基づいた、私が開発している新しい言語です。インタープリターとIDEはここにあります。入力は、コマンドライン引数への整数です。インデックスは1ベースです。CP-1252エンコードを使用します。

1\{\__2#¶{s:~:+}%:={\(\)\}{)\}?}h;(

1

Mathematica、63 60 61 59バイト

Select[Range[9^#],Equal@@Tr/@IntegerDigits/@{#,#^2}&][[#]]&

これをしている間、他の答えが現れましたが、私はそれらをシングルバイトで叩いています。1つはインデックス付き。


入力に失敗します>2457。単に増加させるだけでは、収束しないように見えるRangeため、役に立ちA058369[n]/nません。
マーフィー

いい?フィラー+
電卓

10^#は、よりも短くなり2^#*9ます。もちろん、nが約6を超えると遅すぎます
...- feersum

なぜ9^#?FIL
CalculatorFeline

f(n)<= 9 ^ nという証明がありますか?(10 ^ nは常に解決策であるため、10は明らかです)。
feersum

1

網膜、103バイト

\d+
$*1 x
{`x+
$.0$*x¶$.0$*a¶$.0$*b
%`b
$_
a+|b+
$.0
\d
$*
+`1¶1
¶
1(.*)¶¶$|¶[^d]+
$1x
}`^ ?x

x

間違いなくゴルフ可能。

平方に新しいRetina機能%を使用します(したがって、オンラインバージョンではまだ動作していません)。


1

Mathcad、 70 50バイト

Mathcadには、数字を数字列に変換するための組み込み関数がないため、ユーザー関数d(a)がこのジョブを実行します。次に、プログラムは、ベクトルvにn個の数値を累積するまで、正の整数を反復処理し、合計が等しいかどうかをテストします。プログラムは、結果ベクトルを表示する=演算子を使用して評価されます。(プログラム全体は、Mathcadワークシートに以下に表示されているとおりに表示されます

更新されたプログラム:aのデフォルトの初期化をゼロと想定し、Mathcadがプログラムで最後に評価されたステートメントの値を返すという事実を利用します。
式の評価順序を使用して、最初の合計で変数aを増分します(その後、平方和で使用できるようになります)。

ここに画像の説明を入力してください

元のプログラム:nまでのすべての数値のベクトルを返します。

ここに画像の説明を入力してください



0

Java 8、113バイト

n->{int r=0;for(;n>=0;)if((++r+"").chars().map(c->c-48).sum()==(r*r+"").chars().map(c->c-48).sum())n--;return r;}

0インデックス付き

説明:

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

n->{           // Method with integer as both parameter and return-type
  int r=0;     //  Result-integer, starting at 0
  for(;n>=0;)  //  Loop as long as `n` is zero or positive
    if((++r    //   Increase `r` by 1 first
       +"").chars().map(c->c-48).sum()
               //   And if the sum of its digits
       ==(r*r+"").chars().map(c->c-48).sum())
               //   equals the sum of the digit of its square
      n--;     //    Decrease `n` by 1
  return r;}   //  Return the result


0

TI-BASIC 66 62バイト

Ans→N:While X<N:IS>(A,A::A:prgmA:Ans→B:A²:prgmA:If B=Ans:IS>(X,N:End:A
sum(int(10fPart(Ans₁₀^(seq(⁻X-1,X,0,log(Ans

nAns
n

ヘルパー関数は、の値の桁の合計を生成しAnsます。

例:

3:prgmCDGF1E
             10
5:prgmCDGF1E
             19
8:prgmCDGF1E
             55
10:prgmCDGF1E
             99

説明:

Ans→N:While X<N:IS>(A,A::A:prgmA:Ans→B:A²:prgmA:If B=Ans:IS>(X,N:End:A ;prgmCDGF1E

Ans→N            ;store the input in N
While X<N        ;loop until the Nth term has been reached
IS>(A,A:         ;add 1 to A
                 ; (Increment A and skip the next statement if A>A)
A                ;leave A in Ans
prgmA            ;call the helper program below
Ans→B            ;store the result of the helper program in B
A²               ;square A and leave the result in Ans
prgmA            ;call the helper program below
                 ; (result is in Ans)
If B=Ans         ;if the two results are equal
IS>(X,N          ;add 1 to X
                 ; (Increment X and skip the next statement if X>N)
End
A                ;leave A in Ans
                 ;implicit print of Ans

sum(int(10fPart(Ans₁₀^(seq(⁻X-1,X,0,log(Ans   ;prgmA

                      seq(⁻X-1,X,0,log(Ans    ;generate a list...
                                              ; using X as the variable,
                                              ; starting at 0,
                                              ; ending at the log of Ans,
                                              ; and evaluating "⁻X-1" for each element
                                              ; (implicit increment of 1)
                   ₁₀^(                       ;raise 10 to the power of each element
                Ans                           ;multiply each element by the input
          fPart(                              ;remove the integer part from each element
        10                                    ;multiply each element by 10
    int(                                      ;round each element to the nearest integer
sum(                                          ;then sum the resulting list

注: TI-BASICはトークン化された言語です。文字数がバイト数と等しくありませ


0

J、62バイト

[:{:({.@](>:@[,],[#~(=&(1#."."0@":)*:)@[)}.@])^:(#@]<1+[)^:_&1

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

1が索引付けされました。Jは、過剰なブックキーピングメカニズムのために、これらの「n番目」のタスクでもう一度うまく機能しません。


0

APL(NARS)、49文字、98バイト

r←h w;c
c←r←0
→2×⍳∼=/+/¨(⍎¨⍕)¨r,r×r+←1⋄→2×⍳w>c+←1

1インデックス付き、テスト:

  h¨⍳20
1 9 10 18 19 45 46 55 90 99 100 145 180 189 190 198 199 289 351 361 

0

MathGolf、10バイト

♪╒gÆ‼Σ²Σ=§

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

説明

ú10n

♪            push 1000
 ╒           range(1,n+1)
  gÆ         filter list using the next 5 operators
    ‼        apply next two commands to TOS
     Σ       sum(list), digit sum(int)
      ²      pop a : push(a*a) (square)
       Σ     sum(list), digit sum(int) (pushes the digit sum of the square)
        =    pop(a, b), push(a==b) (compares the two)
         §   get from array (returns the <input>th item from the filtered list

おそらく、MathGolfのチャットを作成する必要があります。とにかく、質問があります。文字列の置換、分割などの組み込み機能はありますか?私は圧縮がここでバイトを節約するかもしれないと感じていますが、それを達成するために組み込みが存在するかどうかはわかりません。
ケビンクルイッセン

閉じられたMathGolfチャットがあります。私はそれを生き続けようとしましたが、最近私は仕事に夢中になり、それは閉じられ続けました。毎回modを煩わせたくありません。あなたの質問に答えるために、MathGolfは実際には文字列操作を処理するためのものではありませんでしたが、いくつかの基本的な課題を処理するための文字列処理の機能を実装しました。お気づきのとおり、まだ多くの要望があります。何かを追加すると、おそらく05AB1Eに似たものになりますが、ここ数か月間、MathGolfの開発に余暇はありません。
maxb
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.