К списку форумов К списку тем
Регистрация    Правила    Главная форума    Поиск   
Имя: Пароль:
Рекомендовать в новости

ОФФ: v77 Арифметика. Ряды чисел. Написать кратчайшуу ф-цию.

0 - 19.05.2017 - 19:40
Для тех, кому не лень размяться в арифметике - Задача :
Составить наикратчайшую функцию, вычисляющую У от Х.
Имеем Таблицу значений из двух колонок Х, У .
У= f(x); Написать ф-цию на 1Сv77. А можно и на любом языке, важен алгоритм.
Сравнивать длину кода будем по коду в 77.



1 - 19.05.2017 - 19:42
Таблица
Параметр (х) - может принимать целые положительные значения от 0 до бесконечности.
Дополнительные условия задачи, вся функция должна уместиться в одну строку, т.е
использовать ";" для разделения операторов в середине строки нельзя
пример:
в=10;а=в+1;у=а*х; // не зачет. Надо так:
у = х*(а+в) ;
У кого код окажется самый короткий, значит у того самый длинный

Кто решит, тоже не показывает свое решение до поры до времени, просто сообщает сколько символов вся строка
СтрДлина("у = х*(а+в) ;"); ?

p.s. знакомым с решением этой задачи по публикации на другом форуме просьба не выдавать решение.
2 - 19.05.2017 - 19:46
Начнем пожалуй так:
Я угадаю эту формулу со 100 букв :)
3 - 19.05.2017 - 20:07
Ничего не понял, как можно что-то написать не имея конкретных значений пар {x,y**? Про что ваще речь ? Самое короткое это y = x.
4 - 19.05.2017 - 20:10
3-USSR > конкретные значения в Таблица
Там ссылка спрятана. Плоховасто отображаются ссылки.
https://cloud.mail.ru/public/41KG/UkKPLUoLn
5 - 19.05.2017 - 20:21
Оформление не считаем, типа
Функция
Перем .... // и так далее
у=f(x);
КонецФункции

считаем длину (кол-во символов без пробел) самой формулы.
у=f(x);
6 - 19.05.2017 - 20:59
Ты точно уверен в таблице?

У меня вопрос вызывают значения у
при х= 43, 44, 45
а также
при х = 56, 57, 58
так то формула бы получилась несложная, но вот эти две ... "триады".. хм.. выбиваются из ряда...
или это правильно, чтобы не было так уж легко?
7 - 19.05.2017 - 21:06
Цитата:
Сообщение от Блондинка в шок Посмотреть сообщение
выбиваются из ряда...
Ты это товой, "выбиваются", сейчас удалят тему за политику :) Все там цифры правильные, утвержденные Верховным советом и одобренные правительством.
Задача имеет вполне себе прикладное применение.
А вот логику ряда многим бы хотелось понять, но не только лишь все это могут.
8 - 19.05.2017 - 21:11
эх.. а жаль..

ладно, завтра подумаем еще.
9 - 19.05.2017 - 21:17
Исходники, можно сверить цифры
а то мало ли чего Шух с недоперепития напечатал :)
https://cloud.mail.ru/public/2MB5/xzW7mYrbU
10 - 19.05.2017 - 21:22
Я не понял... надо написать функцию именно и только для данной таблички?
11 - 19.05.2017 - 21:26
Я несколько упростил задачу, чтобы не париться с округлением. Округлять-то мы умеем. Или нет?
На самом деле параметр х - не из натурального ряда чисел, и может принимать дробные положительные значения с округлением вверх, те есть х = 30.01 должен округлиться до 31.
12 - 19.05.2017 - 21:30
10-Гена > да, именно для этой
Для тех, кто не понял, написать ф-цию для этой же таблички с округлением вверх :)
Параметр (х) может принимать положительные значения, но до сотых :) например при х = 45.01, вычислить у.
13 - 19.05.2017 - 21:55
Я не одноэсник, поэтому в экселе:
=ЕСЛИ(ОКРУГЛВВЕРХ(A1;0)>61;256;ЕСЛИ(ОКРУГЛВВЕРХ(A1 ;0)>44;ОКРУГЛВНИЗ(3,52*ОКРУГЛВВЕРХ(A1;0)+37,85;0); ЕСЛИ(ОКРУГЛВВЕРХ(A1;0)<29;0;ОКРУГЛВНИЗ(3,5*ОКРУГЛВ ВЕРХ(A1;0)+38;0))))
14 - 19.05.2017 - 22:01
13-Гена >это конечно круто, но даже без "у="
у тебя уже 172 символа получилось :)

Цитата:
Сообщение от Шухер Посмотреть сообщение
Начнем пожалуй так: Я угадаю эту формулу со 100 букв :)
15 - 19.05.2017 - 22:04
Гена, ты напиши алгоритм просто. Как физик
16 - 19.05.2017 - 22:12
14-Шухер > можно сначала определить в ячейке B1
=ОКРУГЛВВЕРХ(A1;0)
тогда в С1:
=ЕСЛИ(B1>61;256;ЕСЛИ(B1>44;ОКРУГЛВНИЗ(3,52*B1+37,8 5;0);ЕСЛИ(B1<29;0;ОКРУГЛВНИЗ(3,5*B1+38;0))))
17 - 20.05.2017 - 07:31
16-Гена >Принимается округление вверх в другой ячейке.
Итак, Гена может угадать формулу с 97 букв :)
97 букв раз, 97 букв ...
Кто меньше 97 предложит ?
18 - 20.05.2017 - 09:01
Решение у Гены, переписанное на v77, выглядит покороче, чем в екселе.
При проверке обнаружил, что 1С и Ексель по разному трактует ф-цию округления вниз.
в 1С так посчитает:
окр(3.52*46+37.85,0,0) = 200
ОКРУГЛВНИЗ(3,52*46+37,85;0) =199
Зато замена в 1С ф-ции Окр() на Цел(), которая соответствует ексельской ОКРУГЛВНИЗ, позволила укоротить нашу формулу еще на 4 символа.
19 - 20.05.2017 - 09:34
Алгоритм Гены, переписанный из Ехеля на 1С, уложился в 66 символов. (Переписав её немного по другому, можно еще выиграть несколько символов, но я его оставляю, как у Гены, естественно - в переводе с иностранного )

Итак, Гена угадает слово с 66 букв.
66 букв раз ...
Кто меньше?
20 - 21.05.2017 - 04:22
Цитата:
Сообщение от Гена Посмотреть сообщение
тогда в С1: =ЕСЛИ(B1>61;256;ЕСЛИ
Задача была написать в 1С, пока программисты вникали в тех задание, непрограммист Гена глянул, и с лёту написал функцию в С1.

p.s. Ирли Бёрд, тимбукту, ну типа уже можно смеяться, каламбурчик :)
21 - 21.05.2017 - 04:39
Без использования логических операторов если(), можно описать данный ряд чисел? Так сказать чиста научно, существует математическая модель этого набора цифр? Вот так например,- достали свои логарифмические линейки, поелозили ползунками и высчитали, чему равен У при Х таком-то, без всяких условных переходов.
22 - 21.05.2017 - 11:35
Цитата:
Сообщение от Шухер Посмотреть сообщение
Без использования логических операторов если(), можно описать данный ряд чисел?
Может, и можно, но овчинка явно не стоит выделки.

Очевидно можно избавиться лишь от первого "ЕСЛИ", воспользовавшись тем, что значения в таблице не должны превышать 256:

=МИН(256;ЕСЛИ(B1>44;ОКРУГЛВНИЗ(3,52*B1+37,8 5;0);ЕСЛИ(B1<29;0;ОКРУГЛВНИЗ(3,5*B1+38;0))))

Но это так, косметическая правка, основная заслуга все равно принадлежит Гене.
Гость
23 - 21.05.2017 - 11:49
?(f,F1,F2)
24 - 21.05.2017 - 12:18
Йес, кэп!
25 - 21.05.2017 - 15:14
Цитата:
Сообщение от Ткачик Посмотреть сообщение
=МИН(256;
Этот элегантный трюк позволяет выиграть три символа.
26 - 21.05.2017 - 16:37
110 + x + <некая подфункция (x-29)/2>

7.7 нет под рукой

как-то так подумалось

Отредактировано qweqwe123123; 21.05.2017 в 16:38. Причина: йцуйцуййй
27 - 21.05.2017 - 16:53
что-то в этом роде, проверить не могу

y=?(X>28,?(x>62,256,Окр(2,5*(x-29))+110+29,0);
28 - 21.05.2017 - 16:54
точнее вот

y=?(X>28,?(x>62,256,Окр(2,5*(x-29))+110+X,0);
29 - 21.05.2017 - 17:01
а, не. в конце чегой-то заколбасилось не туда.
30 - 21.05.2017 - 17:06
Цитата:
Сообщение от Зелёный тролль Посмотреть сообщение
7.7 нет под рукой
Пиши, мы переведем :)
Можешь как Гена в С1 писать :)
31 - 21.05.2017 - 17:13
вместо 2.5 подставить 2.5345
32 - 21.05.2017 - 17:24
31-Зелёный тролль > вроде правильно считает, щас проверю
кавычку одну пропустил закрывающую
33 - 21.05.2017 - 17:38
31-Зелёный тролль > Круто! Работает, молодец
Итак, Зеленый может угадать Слово с 50-ти букв!
50 букв Раз! ...
34 - 21.05.2017 - 17:44
Небольшой недочет с Окр()
Надо указывать жестко параметры округления - Окр(ч, 0, 1)
а то можно нарваться на ошибку, из за нестандартных настроек пользователя.
35 - 21.05.2017 - 17:51
Цитата:
Сообщение от Шухер Посмотреть сообщение
Вот так например,- достали свои логарифмические линейки, поелозили ползунками и высчитали, чему равен У при Х таком-то, без всяких условных переходов.
ну...
если ты так настаиваешь
елозь.
у=0,0009х^2+3.4519х+38,307

естественно, результат не забыть округлить.
по обычным правилам математики
36 - 21.05.2017 - 17:58
одно ЕСЛИ все равно остается, тут я пас.
ну в общем как-то так:
Y=ОКР(МИН(256,?(X>28,0.0009*X*X+3.4519*X+38.307,0) ))
37 - 21.05.2017 - 18:06
2.5345 на 2.535
ещё символ сэкономится )))
38 - 21.05.2017 - 18:07
36-Блондинка в шок > да, а то у тебя везде >0 результат и растет без ограничений.
Сейчас проверим, что дает квадратное уравнение
39 - 21.05.2017 - 18:07
36-Блондинка в шок > ого! :-)


К списку вопросов
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск




Copyright ©, Все права защищены