デジタルルートの反対!


19

[アナログルート]とも呼ばれます

デジタルルートの反対!);)

数値のデジタルルートは、1桁になるまでその数字を連続的に合計したものです。たとえば、89456のデジタルルートは次のように計算されます。

8 + 9 + 4 + 5 + 6 = 32

3 + 2 = 5

89456のデジタルルートは5です。

STDINを介して入力として数字を指定すると、そのデジタルルートを持つ可能性のあるすべての2桁の数字を出力/返します。あなたがそれを必要とするなら、それはそれ自身を含めることができます、例えば05

これらはすべて可能な入力と出力です。

(数字自体に先行ゼロを含めるかどうかを選択できます)

I / O

0 => 0または00または何もない

1 => 01および/または1、10、19、28、37、46、55、64、73、82、91-1が100を返さないことを確認する

2 => 02および/または2、11、20、29、38、47、56、65、74、83、92

3 => 03および/または3、12、21、30、39、48、57、66、75、84、93

4 => 04および/または4、13、22、31、40、49、58、67、76、85、94

5 => 05および/または5、14、23、32、41、50、59、68、77、86、95

6 => 06および/または6、15、24、33、42、51、60、69、78、87、96

7 => 07および/または7、16、25、34、43、52、61、70、79、88、97

8 => 08および/または8、17、26、35、44、53、62、71、80、89、98

9 => 09および/または9、18、27、36、45、54、63、72、81、90、99

ノー標準抜け穴、それの、バイトの勝利で最短答えそう。

おめでとうHeeby Jeebyマン彼の驚くべき46バイトの脳非難答え!


1
数字自体は2桁の数字としてカウントされますか?(05)?
破壊可能なレモン


5
0の出力はどうあるべきですか?繰り返しますが、入力が10個しかないこのような場合、チャレンジで出力を提供することは非常に有益です。
FryAmTheEggman

1
ゼロの処理方法に関する決定により、投稿された回答の多くが無効になります。あなたが決定したことを参加者に知らせることは思いやりがあります。
FryAmTheEggman

2
デジタルルートの反対はアナログルートですか?
-tuskiomi

回答:



9

JavaScript(ES6)、27 31 30バイト

戻り値0のため0、あるいはソリューションの配列。

n=>n&&[...1e9+''].map(_=>n+=9)

デモ


3
任意のコメントなしdownvoteは...答えを改善するために多くの助けにはならない
アルノー

一部の人にとっては、どの部分が実際のcodegolfされた関数であり、どの部分がデモンストレーションであるかが不明確かもしれません。関数自体をJavaScript行のすぐ下に配置することをお勧めします
デビッドモルダー

@DavidMulder提案をありがとう。それが実際に私がほとんどの場合答える方法です。更新しました。
アーナルド

いい解決策!古いソリューションをドラッグして申し訳ありませんが、ドロップし+て別のバイトを保存できますか?標準の文字列ではそのようには動作しないでしょうが、私はそう思います。
クレイグ・アイレ

@CraigAyreこれ+がどこから来たのかわからない...更新。ありがとう!
アーナルド

8

05AB1E13 12 9バイト

アドナンのおかげで-3バイト

тL<ʒSOSOQ

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

説明

тL<ʒSOSOQ   Main link. Argument n
тL<         List from 1 to 100, then decrement to get 0 to 99
   ʒ        Filter
    SOSO    Sum of all chars, twice
        Q   Compare to input

無限ループはで置き換えることができると思いますSOSO。これは、数値が99より大きくなることはないからです。–
Adnan

@Adnan考えないで、彼ができると保証します。
エリックアウトゴルファー

1
тL<プレーンよりも短くありません99Ý。;)
エリック・ザ・アウトゴルファー

1
@EriktheOutgolferまあ、私はおそらくそこにバイトを保存するのに苦労していた; D
kalsowerus

2
メインの「リンク」?05AB1Eにリンクがあるのはいつですか?ゼリーじゃない。
アンドリューサビニク

7

Haskell、21バイト

f 整数を受け取り、整数のリストを返します。

f d=[d,d+9..99^0^0^d]

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

  • 数字で始まり、のトリッキーな場合を除きd、99の境界まで9番目ごとに範囲を生成します。0
  • 早期のために停止するには0、その電力を使用0^d==1するために0し、==0他のすべての数字のために。このように99^0^0^dなります1ため0しかし99、何のために。


7

Brain-Flak、46バイト

{((()()()()()){}){(({}[()])<(({}{}[]))>)}}{}{}

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

説明

この回答では、Megatomの回答のアイデア、つまりループカウンターと増分の差としてスタックの高さを使用しています。前の回答と同様に、この回答にはすべてのゼロをキャッチするための大きな外側のループがあります。ループ内で10を押してカウンターとして機能し、別のネストされたループを開始します。このループでは、カウンターを1減らします

({}[()])

次に、カウンターと計算した最後のアイテムである上位2つのアイテムをポップします。これらをスタックの高さに追加して減分を相殺し、次にこれを2回押します。1回は出力用に、もう1回は次の結果を計算するために消費できるようにします。2回プッシュするということは、実行の最後に削除する必要がある追加の値を誤ってプッシュすることを意味します。

これがMegatomをわずかに上回る理由は、Megatomの答えが、最後の結果がまだスタック上にある間にスタックの高さを取得することを余儀なくされているためです。これは[()]、合計を1つ減らすためにかなり高価なものを使用せざるを得ないことを意味します。複製をループの最後に移動することにより、プログラムの最後で[()]追加のコストをかけて使用する必要を回避でき{}ます。Megatomがこの戦略を使用する場合、彼の答えは次のようになります。

{<>((()()()()()){}){((({}[()])<>{}[]))<>}}<>{}

また、46バイト。

Brain-Flak、52バイト

{((()()()()()){}){({}[()]<(({})((()()())){}{})>)}}{}

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

説明

メインのアウターループは、ゼロの入力に対して特別なケースを作成します。ゼロが入力された場合、ループ全体をジャンプし、ゼロをポップしてから何も出力しません。そうでなければ、ループに入ります。ここでは、古い値を保持しながら、スタックの先頭に9を追加するたびにループを10回プッシュします。9はデジタル合計を保存するため、これは次の価値をもたらします。ループの有効期限が切れると、生成されたゼロを使用してループを終了し、ループが{}終了します。

Brain-Flak、56バイト

{([(((()()())){}{})]){({}()<(({})<(({}{}))>)>)}}{}({}{})

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

説明

このバージョンは最後のバージョンと非常によく似ていますが、元の値を残して10回ではなく9回ループします。これを行うには、メモリの処理方法を少し変更する必要があります。このメソッドを使用して保存した可能性のあるすべてのバイトは、クリーンアップに入れられます。


46は元の番号を保存しません:(
ジョーキング

@JoKingうん、それはちょうど2桁のケースを行います。私はそれが質問の意図の一種であると思うので、それは私をかなり幸せにします。
小麦ウィザード

良くやった!あなたは賞金を獲得しました。
FantaC



5

バッシュ31 27バイト

seq $1 9 $(($1?99:0))|xargs

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

eval echo {$1..$(($1?99:0))..9}

どのようにしてマニュアルページ/ bash help /を見つけるのですか?「{x..y..z}」について?それは何と呼ばれていますか?
オリビエデュラック

それを見つけた:manページで検索[^。] \。\。[^。]:brace expansion: (...) A sequence expression takes the form {x..y[..incr]}, where x and y are either integers or single characters, and incr, an optional increment, is an integer. (...) When the increment is supplied, it is used as the difference between each term. The default increment is 1 or -1 as appropriate.
オリビエデュラック

5

Dyalog APL、15バイト

{(×⍵)/+\⍵,109}

どうやって?

⍵,10⍴9-入力を10 9秒で連結します(⍵ 9 9 9 9 9 9 9 9 9 9)。

+\ -累積合計。

(×⍵)/ -signumの時間を展開します-signumは1-9に1を、0に0を与えます。

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

Dyalog APL、24バイト

{⍵/⍨⎕=(⍵≠01+9|⍵-1}⍳100

が必要⎕IO←0です。

どうやって?

                      100   0 .. 99
              1+9|⍵-1       digit sum (⍵-1 mod 9 + 1)
        (⍵≠0              edge case for 0
     ⎕=                     equals to the input
 ⍵/⍨                        compress with the range


4

Mathematica、25バイト

If[#==0,0,Range[#,99,9]]&

0で動作します


では機能しません0。これには、合計が9を超える数になる数字も含まれません(たとえば、出力に9は含ま99れません)。
ジョンファンミン

意味がわかります。「私の」コードのみを検査しますか?ここで多くのコードが0のために機能しない原因
...-J42161217

1
ウェルプ、私はMathematicaコードに焦点を当てる傾向があります。それはMathematicaコードが私が最もよく知っている言語だからです。あなたや何かをターゲットにするつもりはありませんでした。それのように思えた場合、私は謝罪します。
ジョンファンミン

すべて修正済みで動作中
-J42161217

何?組み込みなし?
OldBunny2800

4

ゼリー、12バイト

⁵²Ḷµ,³%9EµÐf

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

使い方

⁵²Ḷµ,³%9EµÐf
⁵             - literal 10
 ²            - square
  R           - lowered range: 0 to 99 inclusive.
   µ     µÐf  - filter based on:
    ,³          - element and input
      %9        - mod 9
        E       - are equal

1
引数として1を使用すると、100も出力されます。これは2桁ではありません
-FantaC

これは、0と9のケースを分割しません。
Ørjanヨハンセン


4

実際には、18バイト

╗2╤DR⌠╜-9@%Y⌡░╜;)I

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

説明:

╗2╤DR⌠╜-9@%Y⌡░╜;)I
╗                   save input to register 0
 2╤DR               range(1, 100)
     ⌠╜-9@%Y⌡░      elements in range where function returns truthy:
      ╜-              subtract from input
        9@%           mod 9
           Y          is equal to 0
              ╜;)   push a copy of the input on the top and the bottom of the stack
                 I  if input is truthy, return the filtered range, else return the input (special-cases 0)

@FryAmTheEggman修正済み。
メゴ

4

PHP、41バイト

アンダースコアで区切られた値を出力します

for(;100>$a=&$argn;$a+=$a?9:ERA)echo$a._;

ERAは、値がのPHPで最も短い定数です131116。あなたはそれを退屈な代替品に置き換える100か、プログラムを終了することができますdie

オンライン版


4

Brain-Flak54 52バイト

{<>((((()()())){}{})()){({}<(({})<>({}))><>[()])}}<>

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

Brain-Flakでの最初の進出、そして私はかなりうまくやったと思います。もっと経験がある人はアドバイスがありますか?

使い方:

{ Don't do anything if input is 0
  <>((((()()())){}{})()) Switch to other stack and add 9 and 10
                         10 is the counter, 9 is to add to the current num
  { While counter
     (
       {} Pop the counter
       <(({})<>({}))> Get a copy of the 9, switch to the other stack and add it to a copy of the top of it. Use <...> to make it return 0
       <>[()] Switch to the other stack and decrement the counter
     ) 
  }
}<> Switch to the stack with the values on it

1
よくやった!Brain-Flakへようこそ。
メガトム


3

PHP、35

print_r(range($argn,!!$argn*99,9));

配列の[$argn, 100)ステップで範囲を作成し、9出力します。入力の場合、0範囲[0,0]=> が作成されますarray(0)


3

Python、48 51バイト

@WheatWizardのおかげで3バイト節約

lambda n:[x for x in range(100)if~-n==~-x%9or x==n]

1
~-x代わりに試してください(x-1)
ウィートウィザード

1
まだ@WheatWizardのヒントで、スペースを削除しますif ~-x%9
フェリペナルディバティスタ

これで~-n==~-x%9or x==n、バイトを保存することができます
ウィートウィザード


私は愚かな質問をする必要があります...私はこれを実行したいと思います。このコードを実行するにはどうすればよいですか?ここに私が学んでいるいくつかの構成要素があります(主に〜演算子)
アレンフィッシャー




2

C(gcc)、55バイト

f()実際に引数を指定して呼び出す必要はありません。これnは、バイトを保存するための関数の外側ではなく、ただそこにあります。

f(n){for(scanf("%d",&n);n&&n<100;n+=9)printf("%d ",n);}

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


printfループヘッダーの内側に置くことで2バイトを節約できます。オンラインで試してください!
DLosc

@DLoscええ、しかし、それは遅すぎる1つの番号を開始します。
ガストロプナー

言葉遣いは明確かもしれないが、問題は、(例えば)10の代わりに、1から始まることができない:」...その数字根を持っている可能性2桁の数字のすべてをあなたはそれが必要な場合は、それができる [シングルを含めます-桁数]自体、例えば05。」つまり、出力に1桁の数字を含めることは許可されていますが、必須でありませ
DLosc

2

14 11バイト

I∧N⁺Iθ×⁹…¹¹

オンラインでお試しください!リンクは、コードの詳細バージョンです。編集:@ASCIIのみのおかげで、ゼロ入力の場合は何も印刷せずに2バイト、ベクトル化操作を使用する場合は1バイトを 3バイト保存しました。説明:

         ¹¹ Literal 11
        …   Range
       ⁹    Literal 9
      ×     Vector multiply
     θ      (First) input
    I       Cast to number
   ⁺        Vector add
  N         Input digit as a number
 ∧          Logical AND
I           Cast to string
            Implicitly print on separate lines


私はちょうど、0を出力し、代替見つけたと思うここを
ASCIIのみの

1

ジュリア0.6、18バイト

私は三項を使用して0ケースをキャッチし、範囲n:9:99を使用して数字を作成します。ジュリアでは、範囲があり、ほとんどの場合、AbstractVector実際Vectorの数値の代わりに使用できますが1:9:91、チャレンジを満たさないものとして印刷されるため、私はそれをラップし[_;]て内容をに収集しVectorます。

n->n>0?[n:9:99;]:0

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





0

Perl 5、62バイト

sub x{$f=$_[0];@x=("0$f",$f);push@x,map$f+$_*10,(1..9)if$f;@x}

もっと短い方法があるはずです


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