van der Corputシーケンスを出力します


27

Corput配列DERバンの最も簡単な例の一つである低食い違い配列。そのn-番目の用語はjust 0.(n written in base 10 and mirrored)なので、最初の用語は次のとおりです。

0.10.20.30.40.50.60.70.80.90.010.110.210.310.410.510.610.710.810.910.020.120.220.320.420.520.620.720.820.92、...

チャレンジ

van der Corputシーケンスの最初の項nよりも小さい正の整数を入力として取得10^6または出力するプログラミング言語でプログラムまたは関数を記述しますn。出力形式は、浮動小数点数のリスト、の形式の文字列のリスト0.digits、または用語がコンマや空白、改行で区切られている一意の文字列です。

標準的な抜け穴は禁止されています。最短のソースコードが優先されます。

回答:


16

05AB1E、6バイト

コード:

>GNÞR,

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

説明:

>       # Increment, pushes input + 1
 G      # For N in range(1, input + 1):
  N     # Push N
   Þ    # Convert to double, which appends `.0` at the end of an integer
    R   # Reverse top of the stack
     ,  # Pop and print with a newline

CP-1252エンコードを使用します。


つまり、windows-1252?
イスマエルミゲル


私が知っているが、それは通常、名前CP-1252で認識されていません
イスマエルミゲル

この課題のために言語を変更する必要がありましたか?
アンドリューサビニク

@AndrewSavinykhいいえ、不正行為と見なされており、このサイトでは許可されていません。このチャレンジが投稿される前にリリースされたバージョン7.3で動作します。
アドナン

8

OracleのSQL 11.2、64の 62 58バイト

SELECT REVERSE(LEVEL||'.0')FROM DUAL CONNECT BY LEVEL<=:1;

古いバージョン

SELECT '0.'||REVERSE(TRIM(LEVEL))FROM DUAL CONNECT BY LEVEL<=:1;

''を数値に連結すると、文字列にキャストされます。TO_CHAR()よりも短いTRIM()を使用するよりも2バイト短くなります。

文字列をNUMBERに連結すると文字列になるため、その文字列を使用して「0」を管理することができます。結果の一部。



7

Perl 6の、24の 22、20バイト

{"0."X~(^$_)».flip}

Aleks-Daniel Jakimenko-Aに感謝します。さらに2バイト

古いバージョン

{("0."~.flip for ^$_)}
# Alternate below, same byte count
{map ^$_: "0."~*.flip}

編集:余分な2バイトのレイフに感謝

使用法

> my &f = {"0."X~(^$_)».flip}
-> ;; $_? is raw { #`(Block|333498568) ... }
> f(25)
(0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 0.01 0.11 0.21 0.31 0.41 0.51 0.61 0.71 0.81 0.91 0.02 0.12 0.22 0.32 0.42)

1
{("0."~.flip for ^$_)}2バイト節約
レイフ

6

Mathematica、40バイト

"0."<>StringReverse@ToString@#&~Array~#&

テストケース

%[20]
(* {0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,0.01,0.11,0.21,0.31,0.41,0.51,0.61,0.71,0.81,0.91,0.02} *)




4

JavaScript(ES6)、58

コンマ区切り値の文字列を返す匿名関数

n=>[...[...Array(n)].map(_=>n--+'.0')+''].reverse().join``

テスト

f=n=>[...[...Array(n)].map(_=>n--+'.0')+''].reverse().join``

function test() { R.textContent = f(+I.value) }

test()
N:<input id=I type=number value=20 oninput="test()"><br><pre id=R></pre>




3

Brachylog、23バイト

:0re:""rcr:"0."rcw,@Sw\

これは入力として数値を受け取り、結果をスペースで区切ってSTDOUTに出力します。

かなり簡単です。残念ながら、数値を空の文字列に連結してこの数値を文字列(:""rc)に変換する必要があります。これは、組み込みの変換述語がまだないためです。

文字列への変換が必要です。これは、数字の桁を逆にすると、先行ゼロ(たとえばに10なる01)が失われるためです。


3

PowerShell、52バイト

while($a++-$args[0]){"0."+-join"$a"["$a".Length..0]}

少し長めですが、いくつかの巧妙なトリックを使用しています。

whileループは明白ですが、条件は少しトリッキーです-私たちが持っている$a(と開始する$null最初の参照時)、その後、私たちの入力数を引きます$args[0]。PowerShellでは、数学演算で$nullゼロとして扱われる20ため、たとえば入力の場合、これはになり-20ます。ゼロ以外の数値は$trueであるため、ループ条件は入力数に等しくなる$trueまで$a(その時点で減算はに等しくなる0か、またはになります)すぐになります$false。トリックはポストインクリメントから来る++までは実行されません、後に減算がそうの入力処理し、計算された1意志を正しく出力し0.1た後、次の反復でループを停止します。

ループのたびに、パイプラインに残り、それに応じて出力される文字列リテラルを作成するだけです。これは、文字列を逆方向に取得することで作成されたchar配列に作用"0."する単項演算-join子の結果と連結して構築します"$a"(範囲を介したインデックス付けにより"$a".length..0)。

テスト実行

PS C:\Tools\Scripts\golfing> .\van-der-corput-sequence.ps1 1
0.1

PS C:\Tools\Scripts\golfing> .\van-der-corput-sequence.ps1 20
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
0.01
0.11
0.21
0.31
0.41
0.51
0.61
0.71
0.81
0.91
0.02

3

バッシュ、36バイト

for i in `seq $1`;do rev<<<$i.0;done

コマンドライン引数として数値を受け取り、各用語を個別の行に出力します。例えば:

$ ./vdc.sh 12
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
0.01
0.11
0.21

2
とにかくない場合は、純粋なバッシュ:seq -f%g.0 $1|rev
manatwork

@manatworkかっこいい。seqフォーマットされた出力ができるとは知りませんでした。
squeamish ossifrage


3

蜜蝋57 53バイト

rosettacodeの2進数出力の問題に取り組んでいると、2の代わりに10による除算とモジュロを使用するだけで、van der Corputシーケンスに同じ短い除算アルゴリズムを使用できることに気付きました。どちらの場合も出力は逆になります。

コードをミラーリングすることにより、4バイトずつゴルフを減らしました。

`.0` XfE@~@L#;
 { %X<#dP@T~P9_
   q<#   N
    >:'bg?b

オリエンテーションを容易にするための六角形のプリティプリント:

` . 0 `   X f E @ ~ @ L # ;
 {   % X < # d P @ T ~ P 9 _
    q < #       N
     > : ' b g ? b

元のコードを使用したプログラムの1サイクルの説明:

;#L@~@EfX `0.`
_9P~T@Pb#>X% {
      N   #>p
      d?gd':<


                                                  lstack   gstack
                                _9P              [0,0,10]•         create bee, set top to 10
                                   ~T            [0,10,n]•         flip top and 2nd, enter n
                                     @P          [n,10,1]•         flip top and 3rd, increment top
                                       b                           redirect to upper left
                     [n,10,1]•        E          [n,10,1]•      (2)clone bee in horizontal direction
flip lstack 1st/3rd  [1,10,n]•       @ f         [n,10,1]•  [1]•   push lstack top on gstack       
flip lstack 1st/2nd  [1,n,10]•       ~   X                         clone bee in all directions
flip 1st/3rd         [10,n,1]•      @     `0.`                     print "0." to STDOUT
skip if 1st>2nd      [10,n,1]•     L      >                     (1)redirect 
if 1st<2nd, del. bee              #        X                       clone bee in all directions
(if 1st>2nd, terminate program)  ;          % {  [n,10,1]•         1st=1st%2nd, output lstack 1st to STDOUT
                                            >p                     redirect
                                             <                     redirect
                                            :    [n,10,0]•         1st=1st/2nd
                                           '                       skip next instr. if 1st=0
                                          d                        redirect to upper right, loop back to (1)
                                         g       [n,10,1]   [1]•   push gstack top on lstack 1st
                                       d?                   []•    pop gstack, redirect to upper right
                                       N                           print newline to STDOUT
                                       P         [n,10,2]          increment lstack 1st
                                       E                           looped back to (2)

例:

julia> beeswax("vandercorput.bswx",0,0.0,Int(20000))
i300
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
0.01
0.11
0.21
0.31
0.41
  .
  .
  .
0.492
0.592
0.692
0.792
0.892
0.992
0.003

Program finished!

2

R、59バイト

example(strsplit);cat(strReverse(sprintf('%s.0',1:scan())))

説明

example(strsplit)関数を作成しますstrReverse(それは明らかなはずです)

を使用してIRanges::reverse、これを47バイトまでゴルフできます

cat(IRanges::reverse(sprintf('%s.0',1:scan())))

2

Python 3、47バイト

lambda n:['0.'+str(i+1)[::-1]for i in range(n)]

Python 2を使用した短いソリューション

lambda n:['0.'+`i+1`[::-1]for i in range(n)]

テストケース

>>> f(25)
['0.1', '0.2', '0.3', '0.4', '0.5', '0.6', '0.7', '0.8', '0.9', '0.01', '0.11', '0.21', '0.31', '0.41', '0.51', '0.61', '0.71', '0.81', '0.91', '0.02', '0.12', '0.22', '0.32', '0.42', '0.52']

私のPythonソリューションは同じf=でしたが、これは必須ではないと思うので、長さは47バイトです。
ボブ

@ボブ、私はそれを削除しました
エルワン

これにより、最初のn-1項が出力されます。
seequ

あなたは右の私は解決策を変更している@Seeq、それは変更されませんバイトカウント
エルワン・

lambda n:['0.'+`i+1`[::-1]for i in range(n)]Python 2を使用する場合は短くなります。また、3.5を必要とする場合を除き、「Python 3.5」と言うべきではありません。このバージョンにはPython 2が必要です
。– mbomb007

1

𝔼𝕊𝕄𝕚𝕟、12文字/ 15バイト

⩤⁽1ï⒨ß)Ė⍞.0ᴙ

Try it here (Firefox only).

いいんだよ。

説明

⩤⁽1ï⒨[1,ï]マッピングする範囲を作成し、ß)mapitem(数値)を文字列にĖ⍞.0変換.0し、最後に連結して、文字列全体を逆にします。


1

Python 2、54バイト

def f(i):
    for i in range(1,i):print("."+str(i)[::-1])

説明:

セット[1,input)を反復処理し、逆にiを追加し.ます。

まだもっとゴルフをしてください。


`i`代わりに使用しますstr(i)。また、先行ゼロを印刷する必要があると思います。
mbomb007

1

PHP、45 41バイト

for(;$i++<$argv[1];)echo strrev(",$i.0");

CLIから入力引数を受け取ります。次のように実行します:

php -r 'for(;$i++<$argv[1];)echo strrev(",$i.0");' 100
  • 反転する前に文字列を連結して3バイトを保存しました


1

Gema、45文字

*=@set{i;0}@repeat{*;@incr{i}0.@reverse{$i} }

サンプル実行:

bash-4.3$ gema '*=@set{i;0}@repeat{*;@incr{i}0.@reverse{$i} }' <<< 12
0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 0.01 0.11 0.21 

1

ジュリア50 38 33 31バイト

コードを12バイト短縮するために、別の出力形式を使用しました。関数は文字列の配列を返すようになりました。さらに5バイト短くしました。文字列の補間を思い出させ、匿名関数を使用してくれた(さらに2バイト削除する)Alex A.に感謝します。

n->["0."reverse("$i")for i=1:n]

または代わりに

n->[reverse("$(i/1)")for i=1:n]

テスト

julia> @time f(10000)
  0.002260 seconds (60.01 k allocations: 2.823 MB)
10000-element Array{ASCIIString,1}:
 "0.1"
 "0.2"
 "0.3"
 "0.4"
 "0.5"
 "0.6"
 "0.7"
 "0.8"
 "0.9"
 "0.01"
 "0.11"
 "0.21"
 "0.31"
 "0.41"
 "0.51"
 "0.61"
 "0.71"
 "0.81"
 "0.91"
 "0.02"
 "0.12"
 "0.22"
 "0.32"
 ⋮
 "0.8799"
 "0.9799"
 "0.0899"
 "0.1899"
 "0.2899"
 "0.3899"
 "0.4899"
 "0.5899"
 "0.6899"
 "0.7899"
 "0.8899"
 "0.9899"
 "0.0999"
 "0.1999"
 "0.2999"
 "0.3999"
 "0.4999"
 "0.5999"
 "0.6999"
 "0.7999"
 "0.8999"
 "0.9999"
 "0.00001"

1
31バイト:n->["0."reverse("$i")for i=1:n]
アレックスA.

1
ちなみに、ここでプロファイルを古いプロファイルとマージするようにリクエストできます
アレックスA.

とてもクールで、それを知りませんでした。ありがとう!
ML

@AlexA。無名関数自体は何も出力しません。map(n->["0."reverse("$i")for i=1:n],3)出力を生成するために(n = 3のような)長いバージョンは必要ではないでしょうか?それは私のソリューションである限り(少なくとも)それになります。
ML

1
無名関数の場合、それを呼び出すには変数に割り当てる必要があるという規定を追加するだけです。名前付き関数で2バイトを節約し、規則に準拠しています。
アレックスA.

1

Python 2、40バイト

lambda n:[`i+1.`[::-1]for i in range(n)]

例:

>>> f=lambda n:[`i+1.`[::-1]for i in range(n)]
>>> f(30)
['0.1', '0.2', '0.3', '0.4', '0.5', '0.6', '0.7', '0.8', '0.9', '0.01', '0.11', '0.21', '0.31', '0.41', '0.51', '0.61', '0.71', '0.81', '0.91', '0.02', '0.12', '0.22', '0.32', '0.42', '0.52', '0.62', '0.72', '0.82', '0.92', '0.03']

代数的解法:

corput(x) = reversed(str(float(x+1)))
          = reversed(str(x+1.))
          = str(x+1.)[::-1]
          = `x+1.`[::-1]

1

JQ 1.5、40の 35文字

(34文字のコード+ 1文字のコマンドラインオプション。)

range(.)|"\(.+1).0"/""|reverse|add

サンプル実行:

bash-4.3$ jq -r 'range(.)|"\(.+1).0"/""|reverse|add' <<< 12
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
0.01
0.11
0.21

オンラインテスト-rURLの受け渡しはサポートされていません-自分でRaw出力を確認してください。)

ドキュメントへのリンクでも同じです:

範囲| " \(+ 1  .0" / "" |  | 加える

より読みやすい代替手段として、上記も次のように書くことができます(オンライン):

range(.) | . + 1 | tostring | . + ".0" | split("") | reverse | join("")

jqは本当にクールです。仕組みを説明する心"\(.+1).0"/""
seequ

特別なものはなく、文字列の補間 \(…)分割 だけで、文字列の/場合は分割されます。
マナトワーク

1

BBC BASIC、89 88 87バイト

0T=1:REP.P."0."FNR(STR$T):T=T+1:U.0
1DEFFNR(S$)IFS$="":=""EL.=FNR(MI.S$,2))+LE.S$,1)

略語を使用して、物事をできるだけ短くしました。元のマシンのBrandy BasicとBASIC 2の両方と互換性があります。

最新のBBC BASICでは、行番号を省略してさらに2バイトを節約することもできます。



0

JS、66

T=101; // set T to the number of iterations wanted
for(o=[],i=0;i<T;i++)o[i]="0."+(""+i).split("").reverse().join("") // 66b

出力は「o」という配列です


0

Groovy、36文字

{(1..it).collect{"$it.0".reverse()}}

サンプル実行:

groovy:000> ({(1..it).collect{"$it.0".reverse()}})(12)
===> [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.01, 0.11, 0.21]
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.