prepend、append-Sequence


14

仕事

prepend、append-Sequenceは、このように再帰的に定義されます

  • a(1)= 1
  • nが偶数の場合、a(n)= a(n-1).n
  • nが奇数の場合、a(n)= na(n-1)

どこ 。整数の連結を表します。

最初のいくつかの用語は次のとおりです。1,12,312,3124,53124,531246,7531246,...これはA053064です。

タスクは、整数a> 0が与えられてnを返すため、prepend、append-Sequence のn番目の要素はaに等しく、そのようなnが存在しない場合は0、負の数、エラー出力などを返します。

ルール

  • 入力は、整数、文字列、文字/数字のリストなどとして取得できます。
  • 出力はSTDOUTに出力するか、返すことができます(整数、文字列などは問題ありません)
  • 入力が無効で、そのようなnが存在しない場合、プログラムは正の整数を返す以外の処理を実行できます(例:永久ループ、0を返すなど)。
  • 0インデックスを使用することもできますが、nが存在しない場合の出力は0にできません

テストケース

1 -> 1
12 -> 2
21 -> 0
123 -> 0
312 -> 3
213 -> 0
211917151311975312468101214161820 -> 21
2119171513119753102468101214161820 -> 0
333129272523211917151311975312468101214161820222426283031 -> 0
999795939189878583817977757371696765636159575553514947454341393735333129272523211917151311975312468101214161820222426283032343638404244464850525456586062646668707274767880828486889092949698100 -> 100

より形式的な:a(n-1)*(int(log(n))+1)+nおよびn*(int(log(n))+1)+a(n-1)
Mr Xcoder

1
@ Mr.Xcoder私はそれほど正式ではないことを呼び出します:P
ポストロックガーフハンター

@JonathanAllanそれはすでに〜10分間問題になっています。
Mr Xcoder

2
無効な入力に対してエラーを許可することをお勧めします。
クリチキシリトス

無効な入力に対して未定義の動作を許可することをお勧めします。
ミスターXcoder

回答:


6

JavaScript(ES6)、40バイト

入力を文字列として受け取ります。インデックスが見つからない場合、再帰エラーをスローします。

f=(n,s=k='1')=>n==s?k:f(n,++k&1?k+s:s+k)

デモ


私が考えて:あなたはこれでバイトを保存することができます f=(n,s=k='1')=>n-s?f(n,++k&1?k+s:s+k):k
リック・ヒッチコック

@RickHitchcock残念ながら、これは数値の比較を強制し、精度の低下によって引き起こされる大きな入力で誤検知を引き起こします。
アルノー

わかった。テストケースでは機能しますが、他の状況をどのように処理するかは不明でした。
リックヒッチコック


6

Python 2、63バイト

@EriktheOutgolferのおかげで-1バイト。

f=lambda x,i='1',j=2:i!=`x`and f(x,[i+`j`,`j`+i][j%2],j+1)or~-j

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

Python 2、64バイト

エラーが許可されていることに気づかなかったため、@ officialaimmのおかげで-18バイト!

x,i,j=input(),'1',1
while i!=x:j+=1;i=[i+`j`,`j`+i][j%2]
print j

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

Python 2、82バイト(永久にループしない)

これ0は無効な入力に対して返されます。

def f(n,t="",i=1):
 while len(t)<len(n):t=[t+`i`,`i`+t][i%2];i+=1
 print(n==t)*~-i

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


2
Ninja'd:D 65バイト
公式

@officialaimmどうもありがとう!エラー/ループが永久に許可されていることに気付きませんでした。
ミスターXcoder

:ラムダのバイト保存f=lambda x,i='1',j=2:i!=`x`and f(x,[i+`j`,`j`+i][j%2],j+1)or~-j
エリックOutgolfer

@EriktheOutgolfer待って、私はを設定しますが、すべてに対して再帰エラーをスローしますsys.setrecursionlimit()。TIOを提供できますか?
ミスターXcoder

@ Mr.Xcoderはエラーをスローしますx=1か?またはx=12?少なくともx=151311975312468101214何かのためにそのようなエラーを投げただけだと思った。
エリックアウトゴルファー


3

05AB1E、14バイト

$vDNÌNFs}«})Ik

オンラインでお試しください! またはテストスイートとして

説明

0インデックス付き。入力がシーケンスにない場合、-1を
返します。

$                 # push 1 and input
 v                # for each y,N (element, index) in input do:
  D               # duplicate top of stack
   NÌ             # push N+2
     NF }         # N times do:
       s          # swap the top 2 elements on the stack
         «        # concatenate the top 2 elements on the stack
          })      # end loop and wrap in a list
            Ik    # get the index of the input in this list

ハハ、これは基本的に私のソリューションで、g削除され、追加/追加が短縮されています。答えを削除します
Okx

@Okx:ああ、そうです、私の投稿のほんの数分後に、あなたのゴルフがほぼ正確に下がったのを見ます。偉大な心;)
エミグナ

2

R、73バイト

p=paste0;n=scan(,'');l='';while(l!=n){F=F+1;l="if"(F%%2,p(F,l),p(l,F))};F

stdinから読み取り、インデックスの値を返します(暗黙的に出力されます)。値がシーケンスにない場合、無限ループ。FデフォルトFALSEでは0、算術で使用される場合にキャストされます。

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


1

Mathematica、135バイト

s=t={};x=1;While[x<5!,{s~AppendTo~#&,s~PrependTo~#&}[[x~Mod~2+1]]@x;AppendTo[t,FromDigits@Flatten[IntegerDigits/@s]];x++];t~Position~#&

1

ゼリー 19 18  15 バイト

+ḂḶṚm2;RḤ$ṁµ€Vi

整数を取得および返すモナドリンク。

オンラインでお試しください!(非常に遅い-3124インデックスにあることを確認するためだけにTIOで50秒かかります4

より高速なバージョンでは、以前の18バイトを使用します(入力の長さまでチェックするだけで十分です)。

どうやって?

+ḂḶṚm2;RḤ$ṁµ€Vi - Link: number, v
           µ€   - perform the monadic link to the left for €ach k in [1,2,3,...v]
                -                 (v can be big, lots of k values makes it slow!)
 Ḃ              -   modulo k by 2  = 1 if odd 0 if even
+               -   add to k = k+isOdd(k)
  Ḷ             -   lowered range = [0,1,2,...,k+isOdd(k)]
   Ṛ            -   reverse = [k+isOdd(k),...,2,1,0])
    m2          -   modulo slice by 2 = [k+isOdd(k),k+isOdd(k)-2,...,3,1]
         $      - last two links as a monad:
       R        -   range(k) = [1,2,3,...,k]
        Ḥ       -   double = [2,4,6,...,2k]
     ;          - concatenate = [k+isOdd(k),k+isOdd(k)-2,...,3,1,2,4,6,...,2k]
         ṁ      - mould like range(k) = [k+isOdd(k),k+isOdd(k)-2,...,3,1,2,4,6,...,k-isOdd(k)]
                -   (this is a list of the integers to be concatenated for index k)
             V  - evaluate as Jelly code (yields a list of the concatenated integers)
              i - first index of v in that (or 0 if not found)

計算にはどれくらい時間がかかり211917151311975312468101214161820ますか?
Okx

長い、長い時間:p
ジョナサンアラン

はい、しかしどのくらいですか?
Okx

それは 、vが入力整数である順序vの 2乗のように見えます。
ジョナサンアラン

@JonathanAllan技術的には、あなたはそれを呼び出す:P
エリックOutgolfer

1

Swift 4、92バイト

これは無効なケースに対して無限にループするため、テストリンクにそれらを含めませんでした。

func f(x:String){var i="1",j=1;while i != x{j+=1;i=[i+String(j),String(j)+i][j%2]};print(j)}

テストスイート。

おもしろいことに、それはクロージャーでより長くなります:

var f:(String)->Int={var i="1",j=1;while i != $0{j+=1;i=[i+String(j),String(j)+i][j%2]};return j}

テストスイート。




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