Відновлення параметрів діапазону


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, коли він
Арнольд

Ооооо. я цього не бачив. Це повинно приправити речі.
Випадковий хлопець

1
Використовуючи формулу у питанні, A, B, Cможна будь-які три поплавці. Діапазон, що знаходиться на вході, може, наприклад, починатись 56.7, закінчуватись 10.2і мати розмір кроку -2.159. Єдине, що важливо, це те, що точки, які ви виводите під час розміщення, точно збігаються з вхідними. Я додав приклад, що показує це.
Кайл Г

2
@Rod Як я бачу, суть початкового другого тестового випадку полягала в тому, щоб проілюструвати, що на один і той же вхід можливі кілька виходів
Луїс Мендо

Відповіді:


3

Октава , 82 байти

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

Час роботи не детермінований, але код закінчується в кінцевий час з ймовірністю 1.

Спробуйте в Інтернеті!

Пояснення

Код визначає a functionз xцих результатів y. Функція складається з whileциклу.

У кожній ітерації numel(x)генерується потрібна кількість ( ) лінійно розташованих значень ( linspace), починаючи з x(1)+randта закінчуючи на x(end)+rand. Ці два виклики randфункції дають випадкові зсуви між 0і 1, які застосовуються до початкового та кінцевого значень x.

Цикл повторюється до тих пір , поки anyз floorрезультатів изда відрізняється ( -) з відповідного запису в x.


78 байт, використовуючи a!=bзамістьany(a-b)
вт

@ovs На жаль, це не працює, оскільки він зупиняється, як тільки деякий вихідний вихід дорівнює рівню вхідного сигналу, а не коли всі . Дивіться другий запис другого виходу за вашим посиланням
Луїс Мендо

(тому що можна довести, що вірогідність обраного рядка, що вибирається випадковим чином, є ненульовою)
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, а потім генерується найменший можливий діапазон.


0

Желе , 31 байт

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

Спробуйте в Інтернеті!

Попередження : Неточності з плаваючою комою.


1
Не закінчується протягом [1,2,3,4,5,5]30 секунд на TIO. Будь-яке пояснення, будь ласка?
користувач202729

@ user202729 Найвірогідніші неточності з плаваючою комою. Я перевірю це.
Ерік Аутгольфер


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.