レンジ、リバース、サム!


21

入力として正の整数nを指定すると、nの逆の範囲の合計を出力します。

逆の範囲の合計は、1から始まりnを含む最大nの包括的範囲を作成し、内部の各数値を反転し、合計することによって作成されます。

例:

入力が10の場合、次のようになります。

範囲: [1,2,3,4,5,6,7,8,9,10]

反転:([1,2,3,4,5,6,7,8,9,01]反転した1文字の数字はそれ自体であり、反転した10文字は01または1です)

和: 46

3桁以上の数字は、2桁の数字と同じように反転します。たとえば、1234は4321になります。

テストケース:

Input -> Output

10 -> 46
5 -> 15
21 -> 519
58 -> 2350
75 -> 3147
999 -> 454545

999の入力への完全なテキストの場合は、見つけることができるここでは、非常に多くのfireflame241 @のおかげで。


その他のテストケースの結果(番号付けされていない、申し訳ありませんが、必要に応じて解析して行番号を取得できます):オンラインで試してみてください!
スティーブン

@StepHen>:D 炭は高速です
ASCIIのみ



4
-1これは面白くないので。すべてではないにしても、ほとんどの提出物が同じアプローチを使用しているようです。この課題は、明らかな近道なしで一緒にパイプされただけで、すでに尋ねられたたくさんの問題のように思えます。
エソランジングフルーツ

回答:


16

05AB1E、3バイト

コード

LíO

05AB1Eエンコードを使用します。オンラインでお試しください!

説明

L       # Range
 í      # Reverse
  O     # Sum

20
dat説明tho
ETHproductions

@ETHproductionsは十分Reverseである必要がありReverse each、実際に...
エリックOutgolfer

@EriktheOutgolferベクトル化されていませんか?
ASCIIのみ

@ASCIIのみの05AB1Eベクトル化は実際には深さ1レベルであり、∞ではありません。また、単に「逆」はRí「逆」です。
エリックアウトゴルファー


8

JavaScript(ES6)、42バイト

f=n=>n&&+[...n+""].reverse().join``+f(n-1)

私のお気に入りの二重再帰ソリューションは、残念ながら3バイト長くなっています。

f=n=>n&&+(g=x=>x?x%10+g(x/10|0):"")(n)+f(n-1)

8

Perl 6、20バイト

{(1..$_)».flip.sum}

試して

拡張:

{
   ( 1 .. $_ )\  # Range
   ».flip        # flip each value in the Range (possibly in parallel)
   .sum          # sum up the list
}

「おそらく並列」が必要ですか?あなたはそれを省略することで1〜2バイトを取り除くことができるようです。
ファンドモニカの訴訟

@QPaysTaxesいいえ。は、Rangeの各値でメソッドを».flip呼び出します.flip。これを行うための次の最短の方法は、.map(*.flip)さらに5バイトです。
ブラッドギルバートb2gills

ああ、重要な部分は「(おそらく)並列ではなく」「各」です。それから、それらを分割する価値があるかもしれません。
基金モニカの訴訟

@QPaysTaxes ».flipハイパーメソッドコールとはどういう意味かわかりません。私は分割することができますが».flipunspaceを使って、\ 私はその前に行ったように。qqww/ /構文の終わりのように見えるため、理解が難しくなります(« a b "c d" »)。
ブラッドギルバートb2gills

7

網膜41 36 35バイト

.+
$*
1
1$`¶
1+
$.&
%O^$`.

.+
$*
1

オンラインでお試しください!リンクにはテストケースが含まれます。編集:@FryAmTheEggmanのおかげで5バイトを保存しました。@ PunPun1000のおかげで1バイト節約されました。説明:

.+
$*

単項に変換します。

1
1$`¶

から1までの範囲を作成しますn

1+
$.&

10進数に戻します。

%O^$`.

各番号を逆にします。

.+
$*

単項に変換します。

1

合計し、10進数に戻します。


@FryAmTheEggman Bah、私はそれを忘れ続けています。
ニール

あなたは必要としない.+¶ 試合がライン間で一致します
PunPun1000

@ PunPun1000 FryAmTheEggmanの修正前に必要でした!
ニール

私はあることに気づくO^$s`.もが作品全体の文字列を逆にします。
ニール







5

ロダ56 41 36バイト

@fergusqのおかげで15バイト節約

{seq 1,_|parseInteger`$_`[::-1]|sum}

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

これは、入力ストリームから整数を受け取り、出力ストリームに整数を出力する匿名関数です。

説明

{seq 1,_|parseInteger`$_`[::-1]|sum} Anonymous function
 seq 1,_                             Create a sequence 1 2 3 .. input and push each value to the stream
        |                            For each value in the stream:
                     `$_`             Cast it into a string
                         [::-1]       And reverse it
         parseInteger                 And parse the resulting string as an integer, while pushing the value to the stream
                               |sum  Sum all the values in the stream

[::-1]リバースの代わりに使用することで、多くのバイトを節約できます。また、 ` $_`はより短く、_..""parseIntegerの後の括弧は必要ありません。
fergusq

@fergusqヒントをありがとう、私のローダは少し錆びてしまった:)
Kritixi Lithos

4

C#(.NET Core)103 97バイト

using System.Linq;r=>new int[r+1].Select((_,n)=>int.Parse(string.Concat((n+"").Reverse()))).Sum()

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

TIOリンクは1から999までのすべての結果を出力しますので、私の仕事をチェックしてください。

私はこれが少し短くなると予想していましたが、別の文字列の代わりにReverse()返されることが判明したIEnumerable<char>ため、余分な文字列を追加して文字列に戻し、intに解析できるようにしました。たぶんIEnumerable<char>、intからintに正しく移行するより短い方法があるかもしれません。

ちょっとした注意点として、これも関数Range() Reverse()Sum()すべてを順番に使用します。

TheLethalCoderのおかげで-6バイト


末尾のセミコロンは必要ありません。私は使用するnew int[r]と思うし、.Select((_,n)=>...)バイトを節約します。
TheLethalCoder

@TheLethalCoder new int[r+1]インデックスは0から始まるため、正しい出力を取得するのに時間がかかりますが、それでも数バイトは節約されます。RIP Range()けれども
カミルDrakari

4

ルビー、 56、52、41、 39バイト

->n{(1..n).sum{|i|i.to_s.reverse.to_i}}

Ruby、34バイト(ラムダパラメーターが文字列の場合)

->n{(1..n).sum{|i|i.reverse.to_i}}

2番目のソリューションを提供してくれた@Unihedronに感謝します。


1
->n{同様に動作します。
バリューインク

1
同じツール(Ruby)で作成した短いプログラム(入力と出力を処理する)が独自の提出になるように作成しました。ここで見つけることができます:codegolf.stackexchange.com/a/150636/21830
Unihedron

@Unihedron、ハハ、Rubyが文字列範囲を許可するほどクレイジーだとは知りませんでした。ありがとう。
akostadinov

はい、ルビーも気の利いた機能を備えていますように?a..?z?a1..?h8(あなたがより良い第二のフォーマットに注意してくださいが:D)
Unihedron

範囲は1(開始値の場合)を実装しsucc、2。(開始値または終了値のいずれかが実装されない場合succ)を数値にする必要int..stringがあるため、「範囲の悪い値」として拒否されます。逆は真です(ただし、(?1..n)
ダウン


3

14 13バイト

カルロス・アレホのおかげで-1バイト

I∕…·⁰N«⁺ιI⮌Iκ

オンラインでお試しください!リンクは詳細バージョンです。

説明

I                  Cast
  ∕     «           Reduce
   …·⁰N            Inclusive range from 0 to input as number
         ⁺          Plus
          ι         i
           I⮌Iκ   Cast(Reverse(Cast(k)))

最後のをドロップして、バイトを保存できます»。ところで、ReduceオペレータはCharcoal wikiのどこに文書化されていますか?
チャーリー

どこにも、それは部門1の過負荷です:| あなたが望むなら、私はあなたに編集アクセス権を与えることができます(申し訳ありませんが、私はそれを自分でやるのが面倒だ)
ASCIIのみの

また、はい、エンディングブレースを除外する理由を忘れましたlol
ASCIIのみ

まだ機能しているが隠された機能がまだあるので、Charcoal wikiをもう少し文書化してほしい。編集アクセスを許可された場合は、できる限り文書化するよう努めます。例:Modulo炭で文字列をフォーマットするために演算子をどのように使用できますか?
チャーリー

1
@CarlosAlejo少し自由な時間を過ごしたので、ドキュメントの作成を始めました。
ニール

3

マグネソン、102バイト

ソース

それはあまり目立たないので、ここにスケールアップされたバージョンがあります(注:実際には実行されず、まだあまりきれいではありません)

表示目的のみ

Magnesonは、画像を解析し、読み取ったピクセルの色からコマンドを評価することで動作します。したがって、この課題のイメージをステップスルーすると、

  • R: 0, G: 1, B: 1整数割り当てコマンドで、変数名と割り当てる値の文字列を受け取ります。これを使用して合計を保存します。
  • R: 0, G: 1, B: 0は値を持つ事前に構築された文字列ですVAR_1(注:これは文字列を要求しているときのみです。他の場所で使用する場合、カラーコードには別の機能があります)。
  • R: 3, G: 0, B: 0生の数字です。マグネソンは、赤のコンポーネントを正確に3にすることで標準の数値を処理し、次に青の値緑の値に256を掛けた値を使用して数値を形成します。この場合、数値0が得られます。
  • R: 0, G: 1, B: 1別の整数割り当てコマンドです。今回は、繰り返し変数を保存して、現在の番号を追跡します
  • R: 0, G: 1, B: 1値を持つ事前に構築された文字列ですVAR_2(さらに、文字列が必要な場合のみ)
  • R: 3, G: 0, B: 0もう一度数字の0です。興味深い部分に移りましょう。
  • R: 1, G: 0, B: 0ループの開始を示します。これは数を取り、次のコードスニペットを何回もループします。
  • R: 2, G: 0, B: 0STDIN関数、または少なくとも数値が必要な場合です。これはコンソールから入力の行を読み取り、数値を要求したため、それを数値に変換します。
  • R: 0, G: 8, B: 0ループコードから始まり、それは追加コマンドです。これにより、整数変数に数値が追加されるため、変数名の文字列と、追加する数値が取得されます。
  • R: 0, G: 1, B: 1は、VAR_2反復変数であるの事前に構築された文字列です。
  • R: 3, G: 0, B: 1 は生の数字ですが、今回は1です。
  • R: 0, G: 8, B: 0 別の追加コマンドです。
  • R: 0, G: 1, B: 0はの文字列でVAR_1、合計です。
  • R: 0, G: 3, B: 0文字列を逆にする関数です。数値を要求するコンテキストでは、逆の文字列を数値に変換します。
  • R: 0, G: 2, B: 1は整数取得コマンドであり、指定された変数に保存されている番号を取得します。文字列を要求するコンテキスト(reverseコマンドなど)では、数値を文字列に変換します。
  • R: 0, G: 1, B: 1は名前VAR_2です。反復変数。
  • R: 1, G: 0, B: 1は、ループを終了するためのマーカーであり、条件が満たされない場合(ループを維持する必要がある場合)ループの開始に戻ります。それ以外の場合は、先に進みます。
  • R: 0, G: 0, B: 1 は非常に単純なprintlnコマンドで、文字列を受け取ります。
  • R: 0, G: 2, B: 1 変数から整数を取得します
  • R: 0, G: 1, B: 0 は合計変数の名前です。 VAR_1

    全体として、プログラム:

  • 値0を割り当てVAR_1VAR_2
  • 0からSTDINで指定された数までループします
    • に1を追加 VAR_2
    • 逆転の整数値追加VAR_2するにVAR_1
  • の内容を印刷します VAR_1


3

CJam、12バイト

ri){sW%i}%:+

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

-1 Business Catに感謝します。

説明:

ri){sW%i}%:+
r            Get token
 i           To integer
  )          Increment
   {sW%i}    Push {sW%i}
    s         To string
     W        Push -1
      %       Step
       i      To integer
         %   Map
          :+ Map/reduce by Add

説明を追加してもらえますか?私はCJam(GolfScriptも)を理解していません。しかし、MYは2つの(ゴルフラングの観点からは古くても)ゴルフ言語を打ち負かしました!
ザカリー


あなたは必要ありません,
ビジネス猫

@BusinessCat Ohhhは明らかにGolfScriptを使いすぎたようです...
エリックアウトゴルファー

3

APL(Dyalog)10 7バイト

@Adámのおかげで、電車からtradfnに変換して3バイトをゴルフ

+/⍎⌽⍕⍳⎕

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

          Input (example input: 10)
          Range; 1 2 3 4 5 6 7 8 9 10
          Stringify; '1 2 3 4 5 6 7 8 9 10'
          Reverse; '01 9 8 7 6 5 4 3 2 1'
          Evaluate; 1 9 8 7 6 5 4 3 2 1
+/         Sum; 46

@Uriel&Cowsにチャットの質問について冗談を言います。まあ、私は数学の部分をやりました。それに加えて、チャットから中断されたので、そこで応答しません。
ザカリー

7バイト:+/⍎⌽⍕⍳⎕
アダム

@Adámヒントをありがとう。削除¨は巧妙だった:)
Kritixi Lithos

3

Java 8、97バイト

IntStream.range(1,n+1).map(i->Integer.valueOf(new StringBuffer(""+i).reverse().toString())).sum()

編集

のコメントに従って Kevin Cruijssen答えを改善したいと思います。

Java 8、103バイト

n->java.util.stream.LongStream.range(1,n+1).map(i->new Long(new StringBuffer(""+i).reverse()+"")).sum()

1
Integer.valueOf〜までゴルフできnew Integer、〜までゴルフ.reverse().toString()できます.reverse()+""。また、必要なインポートとラムダパラメーターを、java.util.stream.IntStreamそのn->前などに含める必要があります。そして、あなたもゴルフIntStreamIntegerトゥLongStreamとすることができますLong。最終回答はn->java.util.stream.LongStream.range(1,n+1).map(i->new Long(new StringBuffer(""+i).reverse()+"")).sum()103バイト -インポートとラムダパラメータを追加した現在の回答は117バイトになります。)それでも+1、いい答えです!
ケビンCruijssen

@KevinCruijssen貴重なご意見ありがとうございます。回答を更新します。ありがとう。:)
CoderCroc

3

Japt7 5バイト

@Shaggyのおかげで-2バイト。

õs xw

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

説明

õs xw  Implicit input of integer U
õs     Create range [1,U] and map to strings
    w  Reverse each string
   x   Sum the array, implicitly converting to numbers.

古いソリューション、7バイト

の非常にクールな使用法なので、これを保持しz2ます。

õs z2 x

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

説明

õs z2 x  Implicit input of integer U
õs       Create range [1,U] and map to strings
   z2    Rotate the array 180°, reversing strings
      x  Sum the array, implicitly converting back to integers

1
あなたが知っているz2平らな配列が同じである上w、RIGH ...オム... ... JAPTでの私の不十分さを言い訳
ETHproductions

6バイト:õ_swÃxの新規追加のおかげN.s(f)
シャギー

またはõs xw、5バイトだけです。
シャギー

@Shaggy今まで誰も5バイトのソリューションについて言及していないとは信じられません...少し編集するでしょう。6バイトの場合は、このチャレンジが投稿された後に追加された場合、競合しないと思います。
ジャスティンマリナー

@JustinMariner、私もできません!:Dしかし、そのz2トリックを捨てることは残念なようです。それはかなり天才だった。競合しないこともはや問題でないことに注意してください。
シャギー

3

C ++、146バイト

#include<string>
using namespace std;int r(int i){int v=0,j=0;for(;j<=i;++j){auto t=to_string(j);reverse(t.begin(),t.end());v+=stoi(t);}return v;}

よくやった!ヘッダーを削除し、「名前空間stdを使用」(tio.run/#cpp-gccをチェックしてください)を置くことで、いくつかのバイトを節約できます。また、「自動t」を「t」だけに置き換えることができると思います(?)
koita_pisw_sou

ええ、koita_pisw_souは最初の部分については正しいです。しかし、あなたが必要autoです。
ザカリー

@koita_pisw_souヘッダーディレクティブをバイトカウントから除外できるということですか?名前空間についても同じですか?autoキーワードが必要です
HatsuPointerKun

はい、送信したリンクを確認してください
-koita_pisw_sou

(うーん、ヘッダーを削除するかどうかわからない!)しかし、私はusing namespace std;バイトの保存について言及していました。
ザカリー







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