powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / еще одна задача по прогаммированию
13 сообщений из 63, страница 3 из 3
еще одна задача по прогаммированию
    #35026938
Егорище85
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NotGonnaGetUsХаскелл круче лиспа :)

По красоте кода - да.
Насчет скорости я грешу всё же на интерпретатор, Scheme - упрощенный диалект лиспа и интерпретатор Dr.Scheme предназначен всё же для учебных задач.

Фиг знает, как это будет работать на Common Lisp, я пока ещё не дорос...

Хаскелл - лучшее воплощение функциональной парадигмы, поэтому код такой красивый и изящный. Но Лисп, в свою очередь, лучше реализует возможности метапрограммирования.

У меня есть ощущение, что при умелом обращении из Лиспа можно гораздо больше выжать, чем из Хаскелла.

Кстати, вот статья Пола Грэма, которую Ксеноцефал рекомендовал почитать - http://startupjournal.ru/articles-graham-lisp.php (на русском). Довольно интригующе.
...
Рейтинг: 0 / 0
еще одна задача по прогаммированию
    #35026962
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прикольно всё-таки.

Решение на haskell:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
solve [] n = []
solve xs n = filter ((n==).sum) $ concatMap ((map combineInts). splice) $ permutations xs
    where
        permutations [] = [[]]
        permutations xs = concat [map (x:) (permutations $ filter (x/=) xs) | x <- xs]
         
        splice [] = [[]]
        splice xs = concat [map (first:) (splice rest) | (first, rest) <- map (\n -> splitAt n xs) [1.. length xs]]
                   
        combineInts [] = []
        combineInts xs = foldr (\x r -> foldl (\n r -> n * 10 + r) 0 x : r) [] xs

Занимает количество строк меньшее, чем одна только генерация всех перестановок на java или любом другом мейнстрим языке... :)
...
Рейтинг: 0 / 0
еще одна задача по прогаммированию
    #35027090
:(
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
:(
Гость
NotGonnaGetUsПрикольно всё-таки.

Решение на haskell:

...
Занимает количество строк меньшее, чем одна только генерация всех перестановок на java или любом другом мейнстрим языке... :)
softwarer уже дал решение на Delphi :)
...
Рейтинг: 0 / 0
еще одна задача по прогаммированию
    #35027351
pirovindos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пример того, как нельзя решать задачи по програмированию
Консольное на С++. MS VS 2005.

Код: 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.
#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"
#include "conio.h"
#define N ( 7 )
#define M  100000 
typedef unsigned char BYTE;
BYTE randN() {return BYTE((double)rand()/((double)RAND_MAX+ 1 )*(N+ 1 ));}
int _tmain(int argc, _TCHAR* argv[])
{
	int res =  99 ,i,j,k,a,na,sum;
	BYTE s[N+N];
	for(i= 0 ;i<M;i++)
	{	s[ 0 ]= 0 ;	na =  0 ;	sum =  0 ;
		for(j= 1 ;j<N+N;j++)
		{
			do
			{
				a=randN();
				if(j> 2 &&a!= 0 &&s[j- 1 ]!= 0 &&s[j- 2 ]!= 0 ) a= 0 ;
				if(a!= 0 ) for(k= 1 ;k<j;k++) if(s[k]==a) break;
			}while((a!= 0  && k!=j) || (a== 0 &&s[j- 1 ]== 0 ));
			s[j]=a;
			if(a!= 0 ) na++; else	sum+=s[j- 2 ]* 10 +s[j- 1 ];
			if(na==N)
			{
				sum+=s[j- 1 ]* 10 +s[j];
				break;
			}
		}
		if(na==N && sum==res) break;
	}
	if(i==M) printf("Unsuccess!\n");
	else
	{
		for(k= 1 ;k<=j;k++) s[k- 1 ]=(s[k]?s[k]+ 48 :'+'); s[j]= 0 ;
		printf("%s=%d\n",s,sum);
		printf("Success!\n");
	}
	getch();
	return  0 ;
}
Если изменить 99 на 100, то Success!
...
Рейтинг: 0 / 0
еще одна задача по прогаммированию
    #35027363
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
:(softwarer уже дал решение на Delphi :)

И чего? Где там генерация перестановок и прочии прелести "дубового" алгоритма, готовые к реюзу? Если на дельфи реализовать тот же самый алгоритм будет существенно больше кода.


Эквивалент алгоритма softwarer'a на хаскелл вот:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
solve [] n = []
solve ds n = concatMap (\d -> (solve' d (filter (d/=) ds) n)) ds    
    where
        solve' cur [] n | cur == n  = [show cur]
        solve' cur ds n | cur > n   = [] --optimization 
                        | otherwise = concatMap (\d -> solve' (cur*10+d) (filter (d/=) ds) n) ds
                                      ++ (map ((show cur ++ "+")++) (solve ds (n-cur)))          
 
Computation time: 0.156 sec

Как видно, он эффективнее дубового алгоритма в 10 раз.
...
Рейтинг: 0 / 0
еще одна задача по прогаммированию
    #35027408
:(
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
:(
Гость
NotGonnaGetUs
И чего? Где там генерация перестановок и прочии прелести "дубового" алгоритма, готовые к реюзу?
Зачем нам дубовый алгоритм?
...
Рейтинг: 0 / 0
еще одна задача по прогаммированию
    #35027415
Егорище85
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
:( NotGonnaGetUs
И чего? Где там генерация перестановок и прочии прелести "дубового" алгоритма, готовые к реюзу?
Зачем нам дубовый алгоритм?

Дубовой задаче - дубовый алгоритм

Кстати, а что думают опытные люди, может ли решение подобных задач научить чему-нибудь полезному?
...
Рейтинг: 0 / 0
еще одна задача по прогаммированию
    #35027475
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Егорище85Кстати, а что думают опытные люди, может ли решение подобных задач научить чему-нибудь полезному?Может. Научит внимательно работать с циклами.
...
Рейтинг: 0 / 0
еще одна задача по прогаммированию
    #35027478
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
:(Зачем нам дубовый алгоритм?
Затем:
NGGU
Сделал твой алгоритм на haskell (чтобы сравнить лаконичность кода и время работы одного и того же дубового алгоритма)
...
Рейтинг: 0 / 0
еще одна задача по прогаммированию
    #35037326
pirovindos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-Sergey-
у меня на решение данного примера ушло около 15 минут - это гораздо меньше но не показательно, дело в том что одногруппник весьма далек от программирования

Условиеданы числа 1, 2, 3, 4, 5, 6, 7. Как их сложить, используя все семь, чтобы получилось 99.
Пример сложения: 1+2+3+54+67, 21+34+7+6+5, 1+2+3+4+5+6+7 1+27+3+46 и т.д.

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

и так предлагаю что-то вроде конкурса на самое оптимальное решение:
1. по скорости
2. по количеству строк кода
-


Если строго читать задание, то самое оптимальное решение по обоим критериям такое:
Код: plaintext
void main(){}
Поскольку, можно доказать, что получить 99 нельзя.
...
Рейтинг: 0 / 0
еще одна задача по прогаммированию
    #35037746
Фотография TonY.Soprano
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а 0x99 ?
...
Рейтинг: 0 / 0
еще одна задача по прогаммированию
    #35043315
rm15
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Условиеданы числа 1, 2, 3, 4, 5, 6, 7. Как их сложить, используя все семь, чтобы получилось 99.
Пример сложения: 1+2+3+54+67, 21+34+7+6+5, 1+2+3+4+5+6+7 1+27+3+46 и т.д.

Никак, сумма цифр не делится на 9.
Если использовать можно не все цифры, то при поиске подходящих вариантов нужно использовать это условие, можно еще признак делимости на 11.
...
Рейтинг: 0 / 0
еще одна задача по прогаммированию
    #35043320
rm15
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-Sergey- ИзопропилОптимизированный по памяти - в каких попугаях измерять будем?
на сколько я помню критерием выступало количество переменных и их размерность -
чем больше количество используемых для вычисления переменных тем менее эфективен код по памяти.
sb=bait;
while(bait/=2) sb-=bait;
...
Рейтинг: 0 / 0
13 сообщений из 63, страница 3 из 3
Форумы / Программирование [игнор отключен] [закрыт для гостей] / еще одна задача по прогаммированию
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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