範囲パラメータの回復


11

説明

すべての要素が最も近い整数に切り捨てられた範囲関数の結果が与えられます。あなたの目標は、元のリストを回復することです。

たとえば、次の関数(Python3)は、プログラムの入力を生成します。

from numpy import arange, floor
def floored_range(A, B, C):
    return list(floor(arange(A, B, C)))

プログラムの出力は、元のデータの有効な推測である必要があります。ここで、有効な推測とは、フロア化されたときに入力と正確に一致し、範囲関数の可能な出力でなければならないことを意味します(つまり、グラフ化された場合、完全に直線を形成する必要があります)。

例

Input: [1,2,3,4]  
Output: [1,2,3,4]  

Input: [1,2,3,4]  
Output: [1.9,2.7,3.5,4.3]  

Input: [1,2,3,4,5,5]  
Output: [1.9,2.7,3.5,4.3,5.1,5.9]  

Input: [1,1,2,2,3,3,4,4]  
Output: [1,1.5,2,2.5,3,3.5,4,4.5]  

Input: [1,1,2,3,3,4]  
Output: [1,1.7,2.4,3.1,3.8,4.5]

Input: [56, 54, 52, 50, 48, 45, 43, 41, 39, 37, 35, 32, 30, 28, 26, 24, 22, 19, 17, 15, 13, 11]
Output: [56.7  , 54.541, 52.382, 50.223, 48.064, 45.905, 43.746, 41.587,
   39.428, 37.269, 35.11 , 32.951, 30.792, 28.633, 26.474, 24.315,
   22.156, 19.997, 17.838, 15.679, 13.52 , 11.361]

出力値の少なくとも1つを10進数にする必要があります。そうしないと、毎回入力を返すことができます。
— ランダムな男

@Therandomguyは、グラフ化されたとき、完全に直線を形成する必要があります
— Arnauld

おー 私はこれを見ませんでした。それは物事を盛り上げる必要があります。
— ランダムな男

1
質問で式を使用A, B, Cすると、任意の3つの浮動小数点数になります。入力フロア範囲は、たとえば、で始まり、56.7で終わり10.2、ステップサイズがである場合があり-2.159ます。重要なことは、出力されたポイントがフローリングされたときに入力と正確に一致することです。それを示す例を追加しました。
— カイルG

2
@Rod私が見るように、元の2番目のテストケースのポイントは、同じ入力に対して複数の出力が可能であることを示すことでした
— ルイスメンドー

回答:


3

オクターブ、82バイト

function y=f(x)
while any(floor(y=linspace(x(1)+rand,x(end)+rand,numel(x)))-x),end

実行時間は非決定的ですが、コードは確率1で有限時間で終了します。

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

説明

コードは、定義functionのxその出力をy。この関数はwhileループで構成されています。

各反復で、適切な量(numel(x))の線形間隔の値が生成され(linspace)、で始まり、x(1)+randで終わりx(end)+randます。rand関数へのこれらの2つの呼び出しは、0との間のランダムなオフセットを与え1、これらはの初期値と最終値に適用されますx。

ループは限りに対して繰り返されるanyのfloorED結果が異なる(-の対応するエントリから)x。


バイト78使用a!=bの代わりany(a-b)
— OVS

それは、すぐとして停止するため、仕事をしません残念ながら@ovs 一部の出力項目は、その入力で、いないとき等しいすべて行います。リンクの2番目の出力の2番目のエントリを参照してください
— ルイスメンドー

(ランダムに選択された行が有効である確率がゼロでないことを証明できるため)
— -user202729



1

Python 3、168バイト

def f(l):r=range(len(l));g=lambda n:[(l[b]+n-l[a])/(b-a)for a in r for b in r if b>a]or[0];s=(max(g(-1))+min(g(1)))/2;m=min(a*s-l[a]for a in r);return[a*s-m for a in r]

オンラインでお試しください!説明:gの限界値を算出するCだけのために範囲外の位置をAとB存在します。次に、平均値を使用しての使用可能な値を求めC、次に可能な限り低い範囲を生成します。




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