การกู้คืนพารามิเตอร์ช่วง


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]

คุณควรต้องการค่าเอาต์พุตอย่างน้อยหนึ่งค่าเป็นทศนิยมมิฉะนั้นเราสามารถส่งคืนอินพุตได้ทุกครั้ง
คนที่แต่งตัวประหลาดสุ่ม

@Therandomguy เมื่อกราฟมันต้องเป็นเส้นตรงอย่างสมบูรณ์
Arnauld

Oooooh ฉันไม่เห็นสิ่งนี้ มันควรจะทำสิ่งต่าง ๆ ขึ้นมา
คนที่แต่งตัวประหลาดสุ่ม

1
การใช้สูตรในคำถามA, B, Cสามารถมีสามลอยได้ อินพุตปูพื้นช่วงสามารถยกตัวอย่างเช่นเริ่มต้นที่56.7ปลายที่และมีขนาดขั้นตอนของ10.2 -2.159สิ่งเดียวที่สำคัญคือคะแนนที่คุณส่งออกเมื่อปูพื้นตรงกับอินพุตนั้น ฉันได้เพิ่มตัวอย่างที่แสดงว่า
Kyle G

2
@ เร็วเท่าที่ฉันเห็นจุดของกรณีทดสอบที่สองเดิมคือการแสดงให้เห็นว่าหลายเอาต์พุตเป็นไปได้สำหรับการป้อนข้อมูลเดียวกัน
Luis Mendo

คำตอบ:


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ฟังก์ชั่นให้ชดเชยสุ่มระหว่าง0และซึ่งจะนำไปใช้ค่าเริ่มต้นและครั้งสุดท้ายของ1x

การวนซ้ำจะทำซ้ำตราบใดanyที่floorผลลัพธ์ ed แตกต่าง ( -) จากรายการที่xเกี่ยวข้อง


78 ไบต์ใช้a!=bแทนany(a-b)
ovs

@ovs แต่น่าเสียดายที่ใช้งานไม่ได้เพราะมันหยุดทันทีที่รายการเอาท์พุทบางรายการเท่ากับว่าในอินพุตไม่ใช่เมื่อทุกคนทำ ดูรายการที่สองของผลลัพธ์ที่สองในลิงค์ของคุณ
Luis Mendo

(เพราะสามารถพิสูจน์ได้ว่าความน่าจะเป็นที่จะเกิดขึ้นสำหรับเส้นที่เลือกแบบสุ่มให้เป็นค่าที่ไม่ใช่ศูนย์)
user202729


3

R , 86 ไบต์

function(n){while(any(n-(x=seq(n[1]+runif(1),tail(n,1)+runif(1),l=sum(n|1)))%/%1))0;x}

ลองออนไลน์!

คำตอบของท่าจอดเรือของLuis Mendo ; มันออกคำเตือนจำนวนมากเนื่องจากการanyบีบบังคับlogicalแต่สิ่งเหล่านี้สามารถละเว้นได้


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และจากนั้นจะสร้างช่วงที่ต่ำที่สุด


0

เยลลี่ 31 ไบต์

ṾṚ”.;V×LḶ$}+©1ị$}IEȧḞ⁼¥ʋ
0ç1#®ḷ

ลองออนไลน์!

คำเตือน : ความไม่ถูกต้องของจุดลอยตัว


1
ไม่ยุติ[1,2,3,4,5,5]ใน 30 วินาทีสำหรับ TIO กรุณาอธิบายหน่อยสิ
user202729

@ user202729 ความไม่ถูกต้องของจำนวนจุดลอยตัว ฉันจะตรวจสอบมันออก
Erik the Outgolfer


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.