Lua、324 323バイト
他の投稿を見ると、コードに何か問題があるように感じます...しかし、それはLuaであることを覚えています。
とても楽しかったです。実際に時間がかかりました。
編集:使用:簡単なトリックで保存された1バイト::label::
+をgoto label
で行う代わりに、無限ループwhile''
。
function f(l)c=2 y,z=table.remove,os.exit while(l[1]<2)do y(l,1)if(#l<1)then print(1)z()end end ::q:: a={}for i=1,c do a[i]=1 end b={}for i=1,#l do b[i]=l[i]end while(a[#a]<b[1])do x=0 for i=(#a-c+1>0 and #a-c+1 or 1),#a do x=x+a[i]end a[#a+1]=x if a[#a]==b[1]then y(b,1)end if #b<1 then print(c)z()end end c=c+1 goto q end
非ゴルフと説明
Luaには、インデックスやキーを使用せずに、セットやサブセットを定義したり、配列やテーブルに値が含まれているかどうかを確認したりする方法はありません。そのため、パラメーターとして使用する配列から要素を削除することにしました。それはどの要素が既に計算されているか、それが一致したかどうかを記録する方法です。
function f(l)
c=2
y,z=table.remove,os.exit -- Create pointers on table.remove and os.exit
-- saves a total of 9 bytes
while(l[1]<2) -- loop used to remove leading 1
do
y(l,1)
if(#l<1) -- we also check if it was a 1-only array
then
print(1) -- if so, we print 1 and exit
z()
end
end
::q:: -- label q, start of the infinite loop
a={}for i=1,c do a[i]=1 end -- fill an array with c 1s
b={}for i=1,#l do b[i]=l[i]end -- copy the sequence array
while(a[#a]<b[1]) -- while max(a)<min(b)
do
x=0 for i=(#a-c+1>0 -- iterate from index a.length-c to
and #a-c+1 -- to a.length
or 1),#a
do
x=x+a[i] -- summing a's elements
end
a[#a+1]=x -- append x to a
if a[#a]==b[1]then y(b,1)end -- if x is equal ot a member of the sequence
-- remove it
if #b<1 then print(c)z()end -- if b is empty, it means the subset is in a
-- we print c and exit
end -- else we loop again
c=c+1 -- with c+1
goto q -- return to the start of this block
end
Luaをオンラインで試すことができます。また、次のコードサンプルをコピーして貼り付けて、いくつかのテストを実行できます。この関数が答えを見つけると終了する(そうでない場合は無限ループ)ので、test[]
使用済みのインデックスを変更する必要があります(luaが1インデックス付きであることを忘れないでください:))。
function f(l)c=2 y,z=table.remove,os.exit while(l[1]<2)do y(l,1)if(#l<1)then print(1)z()end end ::q:: a={}for i=1,c do a[i]=1 end b={}for i=1,#l do b[i]=l[i]end while(a[#a]<b[1])do x=0 for i=(#a-c+1>0 and #a-c+1 or 1),#a do x=x+a[i]end a[#a+1]=x if a[#a]==b[1]then y(b,1)end if #b<1 then print(c)z()end end c=c+1 goto q end
test={{1,1,1},
{49, 97},
{55, 89, 144},
{1},
{6765},
{12, 23, 45, 89},
{100, 199}}
print(f(test[1]))
create a black hole (as long as this black hole does not produce anything that could be mistaken for valid output).
私、ブラックホールのらせんは黄金比に収束しています!それはしなければならない duoacciシーケンスの有効な出力可能!