4つのらせん状の軸


9

数字0, 1, 2, 3, 4, ...を取り、それらを時計回りのらせん状に配置し、下から始めて、各桁を個別の正方形に書き込みます

次に、軸を表す4つの異なる一貫したASCII文字(選択)の1つと、入力整数を指定して、対応する軸に沿って正方形を選択することにより、説明されたシーケンスのn最初のn項を出力します。

たとえば、以下は、の途中まで配置されたスパイラル29です。をu / d / l / r表す4つの文字にを使用するとしますup / down / left / right。次に、u入力として与えられ0, 5, 1, 4 ...n次の項まで(正のy軸)を出力します。代わりにl入力として与えられた場合、それ0, 3, 1, 1 ...nth項までになります。

  2---3---2---4---2---5---2
  |                       |
  2   1---3---1---4---1   6
  |   |               |   |
  2   2   4---5---6   5   2
  |   |   |       |   |   |
  1   1   3   0   7   1   7
  |   |   |   |   |   |   |
  2   1   2---1   8   6   2
  |   |           |   |   |
  0   1---0---1---9   1   8
  |                   |   |
  2---9---1---8---1---7   2

これらはOEISのシーケンスです:

d 19
[0, 1, 1, 8, 3, 7, 6, 2, 1, 5, 1, 1, 6, 2, 2, 1, 3, 4, 0]

r 72
[0, 7, 1, 7, 4, 2, 8, 1, 1, 3, 1, 2, 0, 2, 3, 1, 3, 4, 6, 5, 5, 5, 7, 7, 8, 8, 9, 6, 8, 1, 1, 1, 2, 3, 1, 8, 0, 6, 1, 7, 0, 9, 2, 8, 4, 3, 2, 1, 1, 7, 2, 6, 2, 1, 3, 3, 5, 5, 3, 2, 2, 0, 4, 3, 2, 5, 4, 6, 5, 0, 5, 1]

u 1
[0]

ルール

  • 該当する場合は、入力/出力が言語のネイティブ整数型に適合すると想定できます。
  • 4つの軸を表すために整数を使用している場合は、規則を破ることなく負の整数を使用できます。
  • 入力と出力は、便利な方法で指定できます。
  • 完全なプログラムまたは関数のいずれかを使用できます。関数の場合、出力ではなく出力を返すことができます。
  • 標準の抜け穴は禁止されています。
  • これはので、すべての通常のゴルフ規則が適用され、最短のコード(バイト単位)が優先されます。

いくつかの方向に負の整数を使用できますか?
mbomb007 2018

@ mbomb007もちろん、大丈夫でしょう。
AdmBorkBork 2018

あまり実用的ではないようですが、先行ゼロ(とにかく暗示される)を除いて、必要な桁数の整数を返すことができますか?
Erik the Outgolfer 2018

@AdmBorkBork基本的に私はそのような解決策を考えていません。:)
Erik the Outgolfer 2018

チャレンジは出力によって判断されます。したがって、ゼロが含まれていない場合、ゼロが文字列出力から除外されていると間違って数えるので、それは間違っていると思います。Pythonは先行ゼロ付きの整数を出力できるので、他の言語ではできないのです。
mbomb007

回答:


5

パイソン294の 89 84 83 74 72 70バイト

私はWolframAlphaを使用し、5 n > 4n 2 + 3nの上限で十分であると判断しました。無料で9 nに変更できます。より大きな入力を試す場合は、9*n*n代わりに5**nを使用して、メモリ不足を回避します。

lambda d,n:["".join(map(str,range(5**n)))[x*(4*x+d)]for x in range(n)]

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

ルートの入力は次のとおりです。

  • 3:正しい
  • -3:ダウン
  • -1つ残り
  • 1アップ

Rodのおかげで14バイト
節約Jonathan Allanのおかげで2バイト節約



1

ゼリー 19  18 バイト

mbomb007のPython回答の 5 nトリックを使用します

4,0jḅɗ@€ị5*D€FʋṖ0;

n左側にある2 進リンクdと次の整数:[-3,-1,1,3]:[v,<,^,>]

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

はるかに高速であり、そのような小さなnに対してセグメンテーションフォールトしない20バイトの代替は次のとおりです。

²×5D€ƲFị@4,0jḅɗ@€Ṗ0;

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

どうやって?

4,0jḅɗ@€ị5*D€FʋṖ0; - Link: integer, n; integer, d
     ɗ@€           - last three links as a dyad with sw@pped arguments for €ach (of implicit range [1,n])
4,0                -   literal list [4,0]
   j               -   join with d = [4,d,0]
    ḅ              -   convert from base n = 4*n^2+d*n+0
        ị          - index into...
              ʋ    - last four links as a monad:
         5         -   five
          *        -   exponentiate = 5^n
           D€      -   decimal list of each (in implicit range [1,5^n])
            F      -   flatten into a single list of the digits
               Ṗ   - pop (drop the final element)
                0; - prepend a zero

1

かなりのnで機能します(+1000など)

JavaScript(Node.js)、104バイト

f=(d,n)=>--n?[...f(d,n),C(n*(4*n+d))]:[0]
C=(n,N=i=0)=>n>N?C(n-N,(p=10**i)*9*++i):+((p+--n/i|0)+"")[n%i]

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

説明

  • 3:正しい
  • -3:ダウン(コメントによると-3は合法です)
  • -1つ残り
  • 1:アップ(@ mbomb007など)

Champernowneの定数のC- n桁目

________________________________________________________

効率の悪い方法(1000以上では機能しません)

JavaScript(Node.js)、81バイト

f=(d,n)=>eval(`for(r=[],s=i=I="";I<n;)(s+=i++)[u=I*(4*I+d)]&&r.push(s[I++,u]),r`)

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


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