powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Алгоритм поиска суммы
117 сообщений из 117, показаны все 5 страниц
Алгоритм поиска суммы
    #36676692
admiral.diver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемые, прошу подсказки в следующем вопросе. Тема жизненная. Есть спутниковая антена, к ней мотор. Хочу запрограммировать алгорит поворота антены к спутнику, но поиски пока не увенчались успехом.

Описание задачи:
Есть к примеру четыре константных шага мотора: 0.2 0.7 1.3 2.6
Есть длинна пути равная: 86

Задача: найти сумму шагов мотора, которая максимально бы приближалась к заданной.

Пример: 2.6 + 2.6 + 2.6 .... + 1.3 = 86

З.Ы.

Комбинация чисел может быть любой.
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36676711
Альмалексия
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
admiral.diver,

в голову приходит только деление на цело.

Попробуй общую сумму разделить на больший. Остаток на более меньший шаг. Тут будут погрешности, но они зависемы от шага.

Более точный ответ, я думаю, только перебором можно определить.

А нельзя найти наименьший шаг прирощения и оперировать им?
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36676752
mikhail_n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это шутко, да? Ну возьми 430 шагов по 0.2 или 43 шага по 0.7 и 43 шага по 1.3.

Вообще задача имеет счётное число решений. Любая комбинация четырёх натуральных чисел n1, n2, n3, n4 такая что

0 < 86 / (sqrt(0.2^2 + 0.7^2 + 1.3^2 + 2.6^2)*sqrt(n1^2 + n2^2 + n3^2 + n4^2)) < 1

должна быть решением.
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36676761
mikhail_n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Жара, моск плавится. Предыдущий мой пассаж - в игнор.
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36676762
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В подобного рода задачах ставят цели несколько отличные от алгоритмических. К примеру - минимизировать износ двигателя.
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36676779
mikhail_n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Воопщем вот те две крайности:

максимальное количество шагов - 430 по 0.2
минимальное количество шагов - 33 по 2.6, 1 по 1.3, 1 по 0.7

между этими двумя вариантами - ещё туева хуча. Тебе все штоль нужны?
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36676802
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

Задача описана - максимизировать точность приближения.

Но кажется, что это развод на зачетную задачу =)
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36676809
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это не инженерная постановка. Ибо несеръёзно всё. Лучше-бы
её описывать в алгоритмических традициях. Типа там.. "Knapsack
problems", "Translocation of masses" e.t.c.
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36676829
Mozok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

не забываем про задачу о ранце :).
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36677752
admiral.diver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mozokmayton,

не забываем про задачу о ранце :).

Очень интересный вариант решения. Посижу после работы над ним. Возможно это то что мне нужно.

Собственно начальные данные представлены образно. В действительности шаг мотора описывается числом с точностью до тысячных (т.е. три знака после запятой). Почему они так сделали - хз. Задача действиетльно реальна. Если кому не вериться, могу предоставить доку по РЕСИВЕРУ. Погрешность перемешения устроит с точностью до сотых или хотя бы до десятых.

Спасибо всем, кто подкинул идей. Может что еще подскажите, буду признателен.
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36677946
Альмалексия
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mozok,

А вот я забыл =) Действительно, это именно то, что нужно.
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36678015
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АльмалексияMozok,

А вот я забыл =) Действительно, это именно то, что нужно.

имхо, деление нацело оптимальней.
ведь тебе не количество способов нужно, а один (и неужели самый оптимальный?)
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36678226
Valer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если можно менять направление движения ( вращения ),
то алгоритм с рюкзком не подходит
например 0.5 = 0.7 - 0.2

+и что понимается под максимальным приближением ?
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36678266
rstudio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
реализовывал такое точь в точь.
Рекурсивно решай, строчек десять кода ...
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36678416
rstudio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
Imports System.Collections.Generic

Public Class Form1

    Dim max As Integer =  10 
    Dim count As Integer
    Dim page_up As Integer =  1 
    Dim page_down As Integer =  2 

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim list As New List(Of Double)
        list.Add( 0 . 1 )
        list.Add( 0 . 9 )
        list.Add( 0 . 3 )
        list.Add( 0 . 5 )
        list.Add( 0 . 8 )
        list.Add( 0 . 5 )
        list.Add( 0 . 6 )

        Dim way As New List(Of Double)
        Me.Find(list, way,  0 ,  1 . 8 )


    End Sub

    Private Function Find(ByRef valueList As List(Of Double), _
                          ByRef wayList As List(Of Double), _
                          ByVal currValue As Double, _
                          ByVal targetValue As Double) As Boolean

        For Each value As Double In valueList
            currValue += value

            'save way list
            wayList.Add(value)

            Dim ret As Boolean
            If (currValue = targetValue) Then
                ret = True
            Else
                'not used values
                Dim newList As New List(Of Double)
                newList.AddRange(valueList)
                newList.Remove(value)

                ret = Me.Find(newList, wayList, currValue, targetValue)
            End If

            If ret Then
                Return True
            Else
                wayList.RemoveAt(wayList.Count -  1 )
            End If
        Next

        Return False
    End Function

End Class
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36678479
rstudio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не вчитался в условия задачи, вот код попроще

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim list As New List(Of Decimal)

        list.Add( 0 . 2 )
        list.Add( 0 . 7 )
        list.Add( 1 . 3 )
        list.Add( 2 . 6 )
        
        Dim way As New List(Of Decimal)
        Me.Find(list, way,  0 ,  10 )


    End Sub

    Private Function Find(ByRef valueList As List(Of Decimal), _
                          ByRef wayList As List(Of Decimal), _
                          ByVal currValue As Decimal, _
                          ByVal targetValue As Decimal) As Boolean

        For Each value As Decimal In valueList
            currValue += value

            'save way list
            wayList.Add(value)

            Dim ret As Boolean
            If (currValue = targetValue) Then
                ret = True
            Else
                ret = Me.Find(valueList, wayList, currValue, targetValue)
            End If

            If ret Then
                Return True
            Else
                wayList.RemoveAt(wayList.Count -  1 )
            End If
        Next

        Return False
    End Function
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36678526
rstudio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И еще немного эвристики.
Отсортировать в обратном порядке. Это гарантия что в первую очередь будут использоваться самые большие шаги и дальше, если не будут найдены подходящие комбинации, меньшие шаги.

list.Add(2.6)
list.Add(1.3)
list.Add(0.7)
list.Add(0.2)
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36678549
rstudio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Окончательный вариант

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim list As New List(Of Decimal)

        list.Add( 2 . 6 )
        list.Add( 1 . 3 )
        list.Add( 0 . 7 )
        list.Add( 0 . 2 )

        Dim way As New List(Of Decimal)
        Me.Find(list, way,  0 ,  86 )


    End Sub

    Private Function Find(ByRef valueList As List(Of Decimal), _
                          ByRef wayList As List(Of Decimal), _
                          ByVal currValue As Decimal, _
                          ByVal targetValue As Decimal) As Boolean

        For Each value As Decimal In valueList
            currValue += value

            'save way list
            wayList.Add(value)

            Dim ret As Boolean
            If (currValue = targetValue) Then
                ret = True
            ElseIf currValue > targetValue Then
                ret = False
            Else
                ret = Me.Find(valueList, wayList, currValue, targetValue)
            End If

            If ret Then
                Return True
            Else
                wayList.RemoveAt(wayList.Count -  1 )
            End If
        Next

        Return False
    End Function
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36678961
Mozok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CL>
(defconstant stepLength (list 0.2 0.7 1.3 2.6 -0.2 -0.7 -1.3 -2.6))

STEPLENGTH

>
(defun dist (x y)
(declare (short-float x y))
(abs (- x y))
)

DIST

>
(defun doStep (curLength)
(declare (short-float curLength))
(loop with maxStep = (find-if #'(lambda (x) (= (dist curLength x) (apply #'min (mapcar #'(lambda (x) (dist curLength x)) stepLength)))) stepLength)
return (if (> (abs (- curLength maxStep)) (abs curLength))
curLength
;else
(doStep (- curLength (print maxStep)))
)
)
)

DOSTEP

>(dostep 46)

2.6000000000000001
2.6000000000000001
2.6000000000000001
2.6000000000000001
2.6000000000000001
2.6000000000000001
2.6000000000000001
2.6000000000000001
2.6000000000000001
2.6000000000000001
2.6000000000000001
2.6000000000000001
2.6000000000000001
2.6000000000000001
2.6000000000000001
2.6000000000000001
2.6000000000000001
1.3
0.69999999999999996
-0.20000000000000001
-1.3933298959045715E-14
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36679059
rstudio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
код пади подлинее чем на визуал васике
так "навищо платыты бильше"(с)
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36679069
Mozok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rstudio,

чем измеряли :)?
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36679091
rstudio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
визуально :)
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36679093
rstudio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если на шарпе переписать можно и побайтно :)
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36679115
Mozok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rstudio,

загони код в Ворд и посчитай символы.
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36679157
Альмалексия
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mozok,

Долго мериться будите?
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36679164
Mozok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Альмалексия,

пока минимум не найдем :).
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36679437
mikhail_n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
рстудио,

а вы сами то свой код тестировали? Если да, то что у вас вышло? У меня с вашим кодом получается 26 шагов по 2.6 и 4 шага по 0.7, что есть 70.4. ???
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36679631
teras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прошу прощения за безыскусное решение конкретно этой задачи - как-то не хотелось применять общие методы без особой нужды. Но зато у него есть большой плюс - оно быстро работает (максимум - один рекурсивный вызов), памяти, соответственно, не жрет и для указанных коэффициентов всегда находит оптимальное решение по кол-ву шагов. Возможно не оптимальное, но близкое - доказывать лениво как-то.

Идея заключается в том, что для четных значений легко вычисляется оптимум используя коэффициенты 2.6; 2 * 0.7 = 14; 0.2. 1.3 не нужен - потому что 2*1.3 = 2.6. А для нечетных чисел производится попытка выбрать оптимальный коэффициент приведения к четному - то есть - оценить, что лучше вычесть 1.3, 0.7 или 1. Последний применяется только для чисел меньших 0,7 (что приведет к потере точности). Для всех остальных чисел (больше или равным 0,7) алгоритм позволяет всегда получить точное значение.

Значения задаются в целых числах, умноженные на 10. то есть 86,5 задается как 865.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
#define odd(x)	(((x) %  2 ) ==  1 )

typedef struct
{
    int s02;
    int s07;
    int s13;
    int s26;
} Steps;

int
step_count(const Steps * steps)
{
    return steps->s02 + steps->s07 + steps->s13 + steps->s26;
}

void
gen( int num, Steps * steps )
{
    if (odd(num)) {
        if (num >=  13 ) {
            /* two ways are possible, check both*/
            Steps s2 = { 0 };
            
            steps->s13 ++;
            s2.s07 ++;
            
            gen(num -  13 , steps);
            gen(num -  7 ,  &s2);
            
            if (step_count(steps) > step_count(&s2))
                *steps = s2;
            return;
        } else {
            if (num >=  7 ) {
                steps->s07++;
                num -=  7 ;
            } else
                num--;
        }
    }
    
    /* num is even */
    if (num >=  26 ) { steps->s26 += num /  26 ; num -=  26  * (num /  26 ); }
    if (num >=  14 ) { steps->s07 +=  2  * (num /  14 ); num -=  7  *  2  * (num /  14 ); }
    steps->s02 += num /  2 ;
}

...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36680141
Alexey Koptenkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Задача о рюкзаке..
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36680306
rstudio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikhail_nрстудио,

а вы сами то свой код тестировали? Если да, то что у вас вышло? У меня с вашим кодом получается 26 шагов по 2.6 и 4 шага по 0.7, что есть 70.4. ???

Лень было посчитать :)

теперь все чики-поки :)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
 Private Function Find(ByRef valueList As List(Of Decimal), _
                          ByRef wayList As List(Of Decimal), _
                          ByVal currValue As Decimal, _
                          ByVal targetValue As Decimal) As Boolean

        For Each value As Decimal In valueList
            currValue += value

            'save way list
            wayList.Add(value)

            Dim ret As Boolean
            If (currValue = targetValue) Then
                ret = True
            ElseIf currValue > targetValue Then
                ret = False
            Else
                ret = Me.Find(valueList, wayList, currValue, targetValue)
            End If

            If ret Then
                Return True
            Else
                wayList.RemoveAt(wayList.Count -  1 )
            End If

            currValue -= value
        Next

        Return False
    End Function
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36680329
rstudio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mozokrstudio,

загони код в Ворд и посчитай символы.

Вы действительно решили мерятся кодом ?
Я давно хотел померять код в процедурном языке с чемто функциональным. Во мне давно теплится мысль что в функциональном программировании программы частенько выходят банально длинее. Я уже не говорю о том что сложнее :)
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36680378
Mozok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rstudio,

"внатуре" решил померяться :).
Прошу ваш пример на шарпе, ибо примеры на бейсике больше в 2 раза.
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36680460
rstudio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
int F(L vl,L wl,L cv,L tv){int r;foreach(decimal v in vl){wl.Add(v);if(cv+v==tv) r = 1;else if(cv+v<tv)r = F(vl, wl, cv+v , tv);if (r) break;else wl.RemoveAt(wl.Count - 1);}return r;}
чтож, поехали версия компакт эдишн намбер ван бай сишарп, 186 byte VS 336 byte в нашу пользу
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36680492
Mozok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rstudio,

а этот код хоть работает :)? Вот, навскидку, уже в объявлении йункции тип переменных L - это что такое?
Да и переменная r ничем не инициализируется. Вы ошибочки поправьте-то.
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36680562
Тыжных Иван
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
admiral.diver,


Ограничения
0.2a + 0.7b + 1.3c + 2.6d=86
a>=0
b>=0
c>=0
d>=0
a,b,c,d - целые

Целевая функция a+b+c+d >= min

Ну а дальше симплекс-метод и его частный случай с условием на целостность переменных.

Так, не?
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36680699
Тыжных Иван
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тыжных Иванadmiral.diver,


Целевая функция a+b+c+d -> min
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36680711
rstudio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mozokrstudio,

а этот код хоть работает :)? Вот, навскидку, уже в объявлении йункции тип переменных L - это что такое?
Да и переменная r ничем не инициализируется. Вы ошибочки поправьте-то.

работает работает :)

Код: plaintext
1.
class L:List<decimal>{}; int F(L a, L b, L c, L d){int r= 0 ;foreach(decimal v in a){b.Add(v);if(c+v==d)r= 1 ;else if(c+v<d)r=F(a,wl,c+v,d);if(r)break;else wl.RemoveAt(b.Count- 1 );}return r;}

186 байт как и было :)
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36680733
Mozok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rstudio
Код: plaintext
1.
class L:List<decimal>{}; int F(L a, L b, L c, L d){...foreach(decimal v in a){...if(c+v==d)...

Это нормально - суммировать число и список ?
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36680798
rstudio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mozokrstudio,

а этот код хоть работает :)? Вот, навскидку, уже в объявлении йункции тип переменных L - это что такое?
Да и переменная r ничем не инициализируется. Вы ошибочки поправьте-то.

работает работает :)

Код: plaintext
1.
class L:List<decimal>{}; int F(L a, L b, L c, L d){int r= 0 ;foreach(decimal v in a){b.Add(v);if(c+v==d)r= 1 ;else if(c+v<d)r=F(a,wl,c+v,d);if(r)break;else wl.RemoveAt(b.Count- 1 );}return r;}

186 байт как и было :)
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36680843
rstudio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mozokrstudio,

а этот код хоть работает :)? Вот, навскидку, уже в объявлении йункции тип переменных L - это что такое?
Да и переменная r ничем не инициализируется. Вы ошибочки поправьте-то.

работает работает :)

Код: plaintext
1.
class L:List<decimal>{}; int F(L a, L b, L c, L d){int r= 0 ;foreach(decimal v in a){b.Add(v);if(c+v==d)r= 1 ;else if(c+v<d)r=F(a,wl,c+v,d);if(r)break;else wl.RemoveAt(b.Count- 1 );}return r;}

186 байт как и было :)
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36680847
rstudio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пардон, интернет заглючил :)
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36680849
rstudio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mozokrstudio
Код: plaintext
1.
class L:List<decimal>{}; int F(L a, L b, L c, L d){...foreach(decimal v in a){...if(c+v==d)...

Это нормально - суммировать число и список ?

так ну ты уже не придирайся, давай свою версию. Мне после каждого чиха оптимизаций по коду лениво перепроверять, но не волнуйся, опечатки механические, алгоритм эквивалентен с васиковским Если нужно будет, отладим :)
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36680875
Mozok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rstudio,

дык, я и не придираюсь. Просто хочу увидеть рабочую версию.
Мой код вот работает без всякой отладки.
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36681541
rstudio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть такая рабочая версия и все теже <190 байт.
ЗЫ:
Вообщем я бы не тратил время на отладку, отладку можно провести в конце, просто для контроля
что оптимизация не была достигнута в счет утраты работоспособности.

итак счет 190/365 пользу шарпа. Ваш ход

190_байт
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            List<decimal> l = new List<decimal>();
            l.Add( 2 .6m);
            l.Add( 1 .3m);
            l.Add( 0 .7m);
            l.Add( 0 .2m);

            List<decimal> w = new List<decimal>();
            F(l, w,  0 ,  86 );

            //w - тут будет результат
        }



        int F(List<decimal> a, List<decimal> b, decimal c, decimal d) { int r =  0 ; foreach (decimal v in a) { b.Add(v); if (c + v == d)r =  1 ; else if (c + v < d)r = F(a, b, c + v, d); if (r== 1 )break; else b.RemoveAt(b.Count -  1 ); } return r; }
    }
}
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36681594
rstudio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тут еще глянул, два else там не нужны. 185 байт.
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36681609
Mozok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rstudio,

изменил в вашей программе 86 на 85,05. Получил зависание.
Уверяю, что у меня такого не произойдет :).
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36681625
rstudio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mozokrstudio,

изменил в вашей программе 86 на 85,05. Получил зависание.
Уверяю, что у меня такого не произойдет :).

Это шутка наверное такая. Счастливые обладатели компилятора Лиспа или чего то там думают что их корч работает наверное на квантовых процессорах

ЗЫ: Для задачи не имеющей решение программа не зависает, а оставив эвристику уходит в полный перебор комбинаций. Решения для чисел с нормальным десятичным знаком ( как по условию задачи ) решения находятся в доли секунды.

ЗЫЗЫ: Все еще с надеждой увидеть версию в в 185-1 байт :)
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36681653
rstudio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кстате, проревьювил тут ваш код. Что это за рассово неправильные обьявления за пределами функции. Повод для оптимизации моего кода, 153 байта уже :)
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36681772
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rstudio153 байта уже :)размер файла проекта и то что студия нагенерила не учитываем, да? ;-))
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36681783
rstudio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychrstudio153 байта уже :)размер файла проекта и то что студия нагенерила не учитываем, да? ;-))

а зачем его учитывать ?
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36681801
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rstudioа зачем его учитывать ?действительно, зачем? - 153 байта красивее звучит ведь
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36681810
rstudio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychrstudioа зачем его учитывать ?действительно, зачем? - 153 байта красивее звучит ведь

помойму вы просто не в теме.
Если мне ставят задачу написать код, который будет решать определенную задачу, то я скажу что на шарпе это можно оформить функцией размером в 153 байта.

Не понимаю, что вас смущает.

А что я еще должен посчитать ? Ассемблерные комманды нагенерированные компилятором, размер клиентского кода, дизайнер код студии, юнит тесты для тестирования функционала функции ?
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36681841
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rstudioНе понимаю, что вас смущаетменя смущает, что цифра "153 байта" в приложении к шарпу - это ниачём, просто число, ладно бы ещё на С, имела бы хоть какой-то смысл, тоже, довольно сомнительный.
Вы чем меряетесь, собственно, количеством нажатий на клавиатуру, штоле?
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36682056
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Символы - отстой. В современной IDE и слова набирать нетрудно. Нужна другая формула посчёта. Но в этой ветке меряются пиписьками. Экономят даже на нажатиях enter.
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36682069
teras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кстати, это ведь не просто задача о рюкзаке, это - частный случай, который называется рюкзак со сверхрастущими весами (superincreasing knapsack problem). Сверхрастущая последовательность - это такая последовательность, где каждый последующий элемент больше суммы всех предыдущих. Например, известная последовательность (1,2,4,8) - сверхрастущая, что позволяет легко и однозначно решать проблему представления чисел в двоичном виде. Отличается этот случай тем, что имеет линейную сложность, в отличии от общего случая, являющегося NP-полной задачей. Именно поэтому ее можно решить за время O(n).
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36682084
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
terasСверхрастущая последовательность - это такая последовательность, где каждый последующий элемент больше суммы всех предыдущих. Например, известная последовательность (1,2,4,8) - сверхрастущая
Геометрическая прогрессия - сверхрастущая? Или наоборот любая сверхрастущая... и т.д ?
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36682209
rstudio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorych[quot rstudio]
Вы чем меряетесь, собственно, количеством нажатий на клавиатуру, штоле?

да, именно компактность языка и меряем. Зачем писать на Лиспе, если там могут выходить программы банально в два раза длинее, я уже не говорю сложнее.
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36682216
teras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonterasСверхрастущая последовательность - это такая последовательность, где каждый последующий элемент больше суммы всех предыдущих. Например, известная последовательность (1,2,4,8) - сверхрастущая
Геометрическая прогрессия - сверхрастущая? Или наоборот любая сверхрастущая... и т.д ?геометрическая - в зависимости от множителя. например при 1 - нет, а при 2 - да.
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36682217
rstudio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonСимволы - отстой. В современной IDE и слова набирать нетрудно. Нужна другая формула посчёта. Но в этой ветке меряются пиписьками. Экономят даже на нажатиях enter.

предложите свою формулу подсчета. Если нету, то мимо калитки.
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36682233
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Считайте слова, лексемы, токены, блоки операторов. В противном случае победит язык у которого короче ключевые слова.
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36682252
rstudio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если честно, то я думаю что Сишный синтаксис популярен как раз из-за своей компактности.
На нем можно писать компактные программы. Но всеже шарп это императивная разработка. Все еще задается алгоритм. Если бы это записать скажем в двух трех выражениях\словах и получить программу которая займет скажем не 153 байта, а 20-30 байт, вотето действительно был бы мощный язык. На таком языке эта задача заняла бы не 5-10 минут программиста, а максимум минуту ...
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36682265
rstudio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonСчитайте слова, лексемы, токены, блоки операторов. В противном случае победит язык у которого короче ключевые слова.

Никто не хочет набирать в языке длинные ключевые слова. Поэтому если они есть в языке - это однозначный недостаток. В Лиспе и Си обилие скобок, думаю длину ключевых слов можно здесь упустить. Побайтный замер исходников и лучше и проще и практичней.
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36682316
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rstudioНа нем можно писать компактные программы. Но всеже шарп это императивная разработка. Все еще задается алгоритм. Если бы это записать скажем в двух трех выражениях\словах и получить программу которая займет скажем не 153 байта, а 20-30 байт, вотето действительно был бы мощный язык. На таком языке эта задача заняла бы не 5-10 минут программиста, а максимум минуту ...
Будьте осторожны. В попытках писать компактный код, создали язык "Трахо-мозг" и ему подобные, где каждая директива занимала около одного символа.

На олипиадах и тестах я-бы расмотрел Haskel-решение из-за его компактности и Форт из-за уникальной парадигмы которую я до конца не понимаю, но чувствую определённый интерес. До кучи еще и Caml с Эрлангом.

С-решение, вопреки замыслам создателей получается не слишком компактным. В основном из-за макропроцессора (!) как это ни странно. Посмотрите хедеры любого промышленного кода операционок и прочего сложного софта и сильно удивитесь насколько там много пре-* обработки исходника.
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36682438
rstudio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не путайте. В моем решении на шарпе, один форич, и два-три ифа. Никакого трахомозга. Я просто хочу увидеть более компактное решение на функциональном языке.
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36682489
rstudio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Итак Господа присудствующие,
меня заботит всего одна мысль.
Где Маэстро Mozok ?
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36682523
Mozok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rstudioкстате, проревьювил тут ваш код. Что это за рассово неправильные обьявления за пределами функции. Повод для оптимизации моего кода, 153 байта уже :)
Каюсь, в старой версии определение списка возможных шагов вынесено отдельно.
Исправил на передаваемый параметр. Вот окончательный вариант:
137 байт
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
(defun F (p m l)
    (declare (real p) (list m l))
    (loop for x in l
        collect (if (= p x)
                    (cons x m)
                    (if (> p x)
                         (F (- p x) (cons x m) l)
                    )
            ) into w
        finally (return (car (delete nil w)))
    )
)

Хотелось бы увидеть хоть ваш аналог в 153 байта.
P. S. Предлагаю все-таки не учитівать пробелы, код читать легче :).
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36682535
Mozok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rstudio
Где Маэстро Mozok ?
Да мне, вообще-то, работать еще надо, кроме как с вами тут развлекаться :).
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36682639
rstudio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
137 байт
string F(string s, decimal c, decimal d)
{
string r="";
foreach (decimal v in l)
if (r == "")
{
s += v.ToString();
r = (c + v == d) ? s : (c + v < d) ? F(s, c + v, d) : "";
}

return r;
}


Вообщем нужно подумать.
Мне вотети десимал десимал стринг стринг ... не нравятся ... здесь можно еще будет ужать
Пока что ничья ;)
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36682658
Mozok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rstudio
Пока что ничья ;)
Протестую. 153 > 137. Шарп пока проигрывает.
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36682681
rstudio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Маэстро, плюсик вверху левой кнопкой мыши )
Код на 137 байт уже в студии :)
Вас пока что (!) только спасает что унтипизировано кастрированный Лисп позволяет не песать
ключевых слов вроде string или decimal. В моем же коде таких слов шесть, и как назло шарп не дает пронаследоваться от примитивных типов. Вот тебе и пироги от ООП. Иначе бы от шести неугодных слов в коде удалось бы избавитсья. Но я еще думаю о воркэраунд ;)
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36682730
Mozok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rstudioунтипизировано кастрированный Лисп
"Это не баг, это фича!"
100 байт
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
(defun F (p m l)
    (declare (real p) (list m l))
    (loop for x in l
        thereis (if (= p x)
                    (cons x m)
                    (if (> p x)
                         (F (- p x) (cons x m) l)
                    )
            )
    )
)

И требую доюавить l к списку передаваемых параметров.
У меня-то список возвожных шагов передается.
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36682737
rstudio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
о, лошадка на треть челюсти вперед

136 байт

[SRC с#]
string F(string s, decimal c, decimal d)
{
string r = "";
foreach (decimal v in l)
if (r == "")
{
s += v.ToString();
v += c;
r = (v == d) ? s : (v < d) ? F(s, v, d) : "";
}

return r;
}

[/SRC]
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36682739
rstudio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mozokrstudioунтипизировано кастрированный Лисп
"Это не баг, это фича!"
+
100 байт
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
(defun F (p m l)
    (declare (real p) (list m l))
    (loop for x in l
        thereis (if (= p x)
                    (cons x m)
                    (if (> p x)
                         (F (- p x) (cons x m) l)
                    )
            )
    )
)

И требую доюавить l к списку передаваемых параметров.
У меня-то список возвожных шагов передается.

Эй, ковбой. А где у тебя распечатка пройденого пути :)
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36682756
rstudio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
132 байта
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
 string F(string s, decimal c, decimal d)
        {
            string r = "";
            foreach (decimal v in l)
                if (r == "")
                {
                    s += v.ToString();
                    c += v;
                    r = c == d ? s : c < d ? F(s, c, d) : "";
                }

            return r;
        }
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36682782
Mozok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rstudio,

все еще не вижу передачи списка возможных шагов через параметры. Мне тоже убрать?
rstudioЭй, ковбой. А где у тебя распечатка пройденого пути :)
Для незнакомых с Лиспом объясняю: путь возвращается как результат функции.
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36682807
rstudio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mozokrstudio,

все еще не вижу передачи списка возможных шагов через параметры. Мне тоже убрать?

можно убрать :)
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36682822
rstudio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
120 байт и 6 ключевых слов типизированного языка, пока что не нашел как обойти.
Но на кону больше 30 байт !

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
string F(string s, decimal d)
        {
            string r = "";
            foreach (decimal v in l)
                if (r == "")
                {
                    s += v.ToString();
                    d -= v;
                    r = d ==  0  ? s : d >  0  ? F(s, d) : r;
                }

            return r;
        }

...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36682964
Mozok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rstudio,

давай-давай.
Хотя, конечно, форма представления результата просто аховая - нечитаемая строка из чисел и точек.
То ли дело у меня - красивый(ня!) список из отдельных элементов.
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36683056
rstudio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин, тут на рабочие обязанности нужно к сожалению отвлекаться.
Вообщем пока что есть такой код:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
void F(decimal d)
        {
            if (d >  0 )
                foreach (decimal v in l)
                    F(w, d - v);

            d /= d;
        }


И ты сильно не расстраивайся, но он ковбой занимает не иначе как 58 байт
Но есть у него конечно минус, результат нужно смотреть через стек когда срейсится эксепшин

Вообщем я еще подумаю над этим, чтобы цывильненько отобразить результат. Благо запас еще есть по сравнению с твоими 100 :)
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36683063
rstudio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To be continued ...
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36683199
rstudio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ладно, пускай пока будет этот вариант на 92 байта.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
void F(Queue q, decimal d)
        {
            if (d >  0 )
            {
                q.Enqueue(d);
                foreach (decimal v in l)
                    F(q, d - v);
                q.Dequeue();
            }

            d /= d;
        }
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36683214
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rstudiod /= d;
А это зачем?
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36683223
rstudio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonrstudiod /= d;
А это зачем?

Когда d=0 срейсится эксепшин, деление на ноль, и мы развернем стек вызовов.
В стеке Queue будет лежать ископая цепочка элементов.
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36683259
Mozok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rstudio,

в таком случае требую учитывать весь код дебаггера как производящий результат.
Или же пишите try catch для нормальной обработки исключений.
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36683266
rstudio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mozokrstudio,

в таком случае требую учитывать весь код дебаггера как производящий результат.
Или же пишите try catch для нормальной обработки исключений.

Причем здесь код дебагера и причем здесь как снимать код решения с функции ?
Я использую только стандартные средства языка :)
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36683341
Mozok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rstudio
Причем здесь код дебагера и причем здесь как снимать код решения с функции ?
Я использую только стандартные средства языка :)
То есть, на компе без JIT дебаггера в релизной сборке вы тоже сможете получить результат :)?
Не смешите мои тапочки. Раз уж такая пьянка, предлагаю вообще убрать деление на d.
Юзер сам в пошаговке смотрит, какое значение в Queue и жмет на брейк, если результат достигнут.

P.S. У Лиспа тоже есть дебаггер.
85 байт
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
(defun E (p m)
    (declare (real p) (list m))
    (loop for x in l and y = (/ p p)
        do (if (> p x)
            (E (- p x) (cons x m))
        )
    )
)
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36683348
Mozok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rstudio
Причем здесь код дебагера и причем здесь как снимать код решения с функции ?
Я использую только стандартные средства языка :)
Вы используете стандартные средства среды разработки. Без студии и дебаггера ваш код просто вылетит.
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36683363
rstudio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЮзер сам в пошаговке смотрит, какое значение в Queue и жмет на брейк, если результат достигнут.

У меня для версии в 92 байта дебагер не нужен.
А там где нужен дебагер, версия занимает 58 байт

Значение снимается очень просто, и хоть с коммандной строки.
Код: plaintext
1.
2.
3.
Queue q = new Queue();
try {F(q, 86m);}catch{}
//q - тут будет результат


Так что там, Лисп сливает на своем же поле, в решении логически-рекурсионных задач ? :)
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36683366
rstudio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лисп это как Ламборджини в деревне, немного подрочил и пошел работать на тракторе (с)
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36683393
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дык... Пора вылезать из деревень...
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36683401
Mozok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rstudio
Так что там, Лисп сливает на своем же поле, в решении логически-рекурсионных задач ? :)
Вы невнимательно читаете мои посты. P.S.
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36683405
rstudio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну дык плюшки где, где плюшки ...
Зачем себе сношать мозг функциональным программированием если тоже на шарпе можно записать и понятней и короче :)
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36683411
rstudio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mozokrstudio
Так что там, Лисп сливает на своем же поле, в решении логически-рекурсионных задач ? :)
Вы невнимательно читаете мои посты. P.S.

Пример относится к контексту сообщения ?
Эта версия нормально возвращает результат или уже только с дебагером ?
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36683415
Mozok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rstudio,

да, совсем забыл убрать объявления переменных.
63 байта
Код: plaintext
1.
2.
3.
4.
5.
6.
(defun E (p m)
    (loop for x in l and y = (/ p p)
        do (if (>= p x)
            (E (- p x) (cons x m))
        )
    )
)
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36683435
rstudio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так что там с версией ?
у меня нет возможности не запустить не проверить, к сожалению
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36683464
Mozok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rstudio,

ну, надо только навесить при вызове *break-on-signals* и ві сможете увидеть результат.
Причем без всякого дебаггера :).
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36683476
rstudio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mozokrstudio,

ну, надо только навесить при вызове *break-on-signals* и ві сможете увидеть результат.
Причем без всякого дебаггера :).

так это не самодостаточная функция, если зависит от настроек среды.
Функция должна быть такой, что ее можно запаковать в библиотеку и распространять.
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36683493
Mozok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rstudio,

а это не настройка среды, это оператор :).
Хотя я с ним я промахнулся, он как раз вызывает дебаггер.
Нужный нам оператор - это handler-case (аналог try/catch)
Код: plaintext
1.
2.
(handler-case (E  86  q)
    (division-by-zero );здесь делаем, что хотим.
)
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36683499
rstudio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скажи хоть где Лисп то учил ? )
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36683504
Mozok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rstudio,

на работе. Периодически приходится писать на нем штуки-дрюки.
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36683508
rstudio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Короче опять все уперлось в парочку деклараций. Шарп типизированный язык и это ему плюс. Лисп чтото вроде васика ранних версий в типизации :)

Короче есть некоторые соображения на 50 байт, но попозже. Пока эксперименты токо :)
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36683524
rstudio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mozokrstudio,

на работе. Периодически приходится писать на нем штуки-дрюки.

Не на Теремках случаем ? :)
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36683539
Mozok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rstudio,

нет, я ближе к центру работаю, на Жилянской..

P.S.
54 байта
Код: plaintext
1.
2.
3.
4.
5.
6.
(defun E (p m)
    (dolist (x l) (if (> p  0 )
                    (E (- p x) (cons x m))
                    (/ p p)
                )
    )
)
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36683553
rstudio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
стырил ты у меня алгоритм полностью, и убрал декларации, ну да ладно :)
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36683565
Mozok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rstudio,

не стырил, а повторил для чистоты эксперимента :)..
Хочешь - можешь попробовать реализовать мой первоначальный алгоритм с минимизацией отклонения,
работающий не только "для чисел с нормальным десятичным знаком" (С) rstudio.
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36683668
rstudio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вообщем тебе нет смысла присылать новый, более компактный алгоритм, ты его просто императивно "передрешь" и уберешь типизацию :)
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36683819
пролетевший
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
admiral.diverЗадача действиетльно реальна.
Нереальна. Сам много програмировал тарие штуки для разных оптических девайсов, главное плавно разогнать и остановить. То есть вначале разгонять от малых шагов к большим, стараясь чтобы момент инерции нарастал одинаковыми шагами, потом также тормозить. Антена дура большая, если менять скорость от 0 до максимума сразу, может и не повернуться куда надо.
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36683979
mikhail_n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ломовой процедурный код, находит решение для 85.05 (вариант с минимальным отклонением) с той же скоростью что и для 86 (точное решение) за счёт того что не лопатит многократно одни и теже тупиковые ветви. Типа более грамотный полный перебор...

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
#include<iostream.h>

bool abc(int, int[], int[], int, int&);

void main()
{

	int valueList[ 4 ];
	int stepList[ 4 ];
	int targetValue =  8505 ;
	int Miss =  8505 ;
	int N =  4 ;
	
	valueList[ 0 ] =  20 ;
	valueList[ 1 ] =  70 ;
	valueList[ 2 ] =  130 ;
	valueList[ 3 ] =  260 ;

	for(int i =  0 ; i < N; i++)
		stepList[i] =  0 ;

	abc( 3 , valueList, stepList, targetValue, Miss);

	for(i =  0 ; i < N; i++)
		cout << "stepList[" << i << "] = " << stepList[i] << endl;
}

bool abc(int level, int valueList[], int stepList[], int distance, int& miss)
{
	int nSteps = static_cast<int>(distance / valueList[level]);

	if(nSteps * valueList[level] == distance)
	{
		//hit
		stepList[level] = nSteps;
		miss =  0 ;
		return true;
	}
	else
	{
		//miss
		bool underflow_gt_overflow = distance - nSteps * valueList[level] > (nSteps +  1 ) * valueList[level] - distance;
		int delta = underflow_gt_overflow ? (nSteps +  1 ) * valueList[level] - distance : distance - nSteps * valueList[level];
		if(delta < miss)
		{
			miss = delta;
			stepList[level] = underflow_gt_overflow ? nSteps +  1  : nSteps;
		}
		
		if(level ==  0 )
			return false;
		else
		{
			bool retVal;
			int distance_left;
			for(int i = nSteps; i >=  0 ; i--)
			{
				delta = miss;
				distance_left = distance - i * valueList[level]; 
				retVal = abc(level -  1 , valueList, stepList, distance_left, miss);
				
				if(delta > miss)
					stepList[level] = i;

				if(retVal)
					return true;
			}

			return false;
		}
	}
}
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36683994
Mozok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rstudio,

в общем, шарп слил.
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36684139
rstudio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mozokrstudio,

в общем, шарп слил.

давай Лисп не будет под кальку копировать конструкции шарпа, а чтото из модного списка пускай использует. Вроде списков лямда выражений или чего там еще. Так спор довольно безсмысленен. Ты копируешь чужой код и просто удаляешь декларации в унтипизированом языке.
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36687183
Valer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
предлагаю всем разработчикам
выложить результаты работы их алгоритмов
для следующего интервала значений
15.5
15.6
15.7
...
18.1
18.2
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36688570
mikhail_n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
15.5 = 5x2.6 + 1x1.3 + 6x0.2
15.6 = 6x2.6
15.7 = 5x2.6 + 1x1.3 + 2x0.7
15.8 = 6x2.6 + 1x0.2
15.9 = 5x2.6 + 1x1.3 + 2x0.7 + 1x0.2
16.0 = 6x2.6 + 2x0.2
16.1 = 5x2.6 + 1x1.3 + 2x0.7 + 2x0.2
16.2 = 6x2.6 + 3x0.2
16.3 = 6x2.6 + 1x0.7
16.4 = 6x2.6 + 4x0.2
16.5 = 6x2.6 + 1x0.7 + 1x0.2
.............
16.9 = 6x2.6 + 1x1.3
.............
17.5 = 6x2.6 + 1x1.3 + 3x0.2
.............
18.0 = 6x2.6 + 1x1.3 + 1x0.7 + 2x0.2
18.1 = 6x2.6 + 1x1.3 + 6x0.2
18.2 = 7x2.6

вообщем у меня чуство что для всех длин путей из этого диапазона существует точное решение и посему сравнивать результат не очень интересно.
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36689981
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 All

Ветка засохла?

Предлагаю сообществу обратить внимание на одну, интересную и похожую на сабж, на мой взгляд проблему, а именно на
Бинарную Проблему Гольбаха и подумать над различными мыслями, идеями и реализациями.

Своей мысли у меня пока нет, кроме prime-генераторов.
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36690091
Valer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikhail_n

в интервале 16.6 ... 16.8
найдены решения ?

с моей точки зрения в этой задаче надо найти
все решения от 0.1 до 18.1 с шагом 0.1
решения ищутся один раз

после этого расчет любого расстояния L

L1 = 18.2 * int ( L / 18.2 ) ' расчитываем сколько влезает полных 18.2

заменяем их на 2.6 * 7

остаток = L - L1 < 18.2 уже расчитан

18.2 = 2.6 * 7

хотя может нужно считать не до 18.2

+ правильнее все считать в целых

на вопрос возможен ли ход назад 0.5 = 0.7 - 0.2
автор топика не ответил
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36691058
mikhail_n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну молдешшш... Сырцы то выложены, могли бы сами скомпилить и проверить.

16.6 = 6x2.6 + 5x0.2
16.7 = 6x2.6 + 1x0.7 + 2x0.2
16.8 = 6x2.6 + 6x0.2


L1 = 18.2 * int ( L / 18.2 ) ' расчитываем сколько влезает полных 18.2

заменяем их на 2.6 * 7

остаток = L - L1 < 18.2 уже расчитан

18.2 = 2.6 * 7

хотя может нужно считать не до 18.2

А почему до 18.2? Потому что 18.2 = 7x2.6 а 7 у нас магическое число?
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36691654
Valer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
компилировать не начем да и не к чему

18.2 минимальный размер на котором отрезки 2.6 и 0.7
укладываются целое число раз
( 0.2 и 1.3 тем более )
...
Рейтинг: 0 / 0
Алгоритм поиска суммы
    #36714284
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
admiral.diver,
Почти наверное все возможные шаги двигла кратны некоторому наибольшему общему делителю (либо шагу серво, либо, что вероятнее для больших тарелок и быстрых поворотов, шагу угломера). Соответственно возьмите этот делитель за единицу измерения и шагов мотора и целевого угла. Задача станет целочисленной, о сумме и монетках, которыми её надо набрать. Линейное диофантово уравнение . Получаете список монеток, и складываете их следующим образом: возьмите половину монет каждого номинала и складываете в порядке возрастания, потом оставшиеся складываете в порядке убывания. Т.е. если решение нашлось 25+25+25+7+7+3+3+3, то лучше двигетель включать как 3+3+7+25+25+25+7+3.
...
Рейтинг: 0 / 0
117 сообщений из 117, показаны все 5 страниц
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Алгоритм поиска суммы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]