| 
			| 
					
						| Alder | 
								|  | «  : Сентябрь 24, 2008, 06:04:06  » |  | 
 
 Разомнем немного мозги   Дана таблица вида:     | a | b | c |1 |   |   |   |
 2 |   |   |   |
 . |   |   |   |
 . |   |   |   |
 n |   |   |   |
В ячейках произвольно расставлены галочки, минимум одна галочка в строке, например     | a | b | c |1 |   | v |   |
 2 | v |   | v |
 3 |   |   | v |
 4 | v |   |   |
 5 | v |   |   |
Нужно вычислить все варианты различных комбинаций галочек от первой до последней строки(a, b и c). То есть для примера выше ответ такой: Два варианта. Вариант 1: bacaa Вариант 2: bccaa Побеждает минимальная по объему программа. Языки реализации - любые (у меня есть ответ на Ruby, он меня поразил своей краткостью) |  
						| 
								|  |  
								| « Последнее редактирование: Сентябрь 24, 2008, 06:38:43  от Alder » |  Записан | 
 
 "There are things known and there are things unknown, and in between are the doors..." (Jim Morrison) |  |  | 
	| 
			| 
					
						| Sochin 
								Злой модератор 
								Декан
								       
								Карма: +108/-6
								  Offline 
								Пол:   
								Сообщений: 1518
								
								 | 
								|  | « Ответ #1 : Сентябрь 25, 2008, 06:42:40  » |  | 
 
    static class Program{
 static IEnumerable<string> Combinations(this IEnumerable<string> table)
 {
 foreach (var result in
 from line in table.Count() > 1 ? table.Take(table.Count() - 1).Combinations() : new string[] { string.Empty }
 from character in table.Count() > 0 ? table.Last() : string.Empty
 select line + character)
 yield return result;
 }
 
 static void Main(string[] args)
 {
 foreach (string s in new string[] { "B", "AC", "C", "A", "A" }.Combinations())
 Console.WriteLine(s);
 }
 }
 |  
						| 
								|  |  
								|  |  Записан | 
 
 Говорят, когда компьютер сгорает, перед взором микропроцессора за долю секунды проносятся все операции, которые он когда-либо совершил...壯鎭
 |  |  | 
	| 
			| 
					
						| Alder | 
								|  | « Ответ #2 : Сентябрь 26, 2008, 12:48:02  » |  | 
 
 А кроме Сочина больше никому не интересно? |  
						| 
								|  |  
								|  |  Записан | 
 
 "There are things known and there are things unknown, and in between are the doors..." (Jim Morrison) |  |  | 
	| 
			| 
					
						| LazarusLong 
								Ирландский доброволец 
								Проректор
								       
								Карма: +181/-7
								  Offline 
								Пол:   Награды:  
								Сообщений: 6134
								
								 
								Ukrainian by birth, Irish by the grace of God
								
								
								
								
								
								   | 
								|  | « Ответ #3 : Сентябрь 26, 2008, 08:00:48  » |  | 
 
 А кроме Сочина больше никому не интересно? Я не совсем врублюсь в условие, а так бы поучаствовал. |  
						| 
								|  |  
								|  |  Записан | 
 
 Когда ему нужно - он русский, когда нужно - украинец, а когда ему ни хрена не нужно - он ирландец.
 "...Он любил говорить факин щит
 Когда что-то не так ему
 Принимал он свой самый ирландский вид
 И кидался трубкой в жену..."
 |  |  | 
	| 
			| 
					
						| Sochin 
								Злой модератор 
								Декан
								       
								Карма: +108/-6
								  Offline 
								Пол:   
								Сообщений: 1518
								
								 | 
								|  | « Ответ #4 : Октябрь 15, 2008, 04:00:59  » |  | 
 
 #lightprintf "%A" (["B"; "AС"; "С"; "A"; "A"]
 |> Seq.fold (fun result current -> [for c in current do for s in result -> s + (string)c]) [""])
 
["BAСAA"; "BССAA"] Алдер, давай свой вариант. =) |  
						| 
								|  |  
								|  |  Записан | 
 
 Говорят, когда компьютер сгорает, перед взором микропроцессора за долю секунды проносятся все операции, которые он когда-либо совершил...壯鎭
 |  |  | 
	| 
			| 
					
						| Alder | 
								|  | « Ответ #5 : Октябрь 15, 2008, 04:07:40  » |  | 
 
 # Produces list of permutations of elements according to a set of rules.#
 # Rules determine which elements are acceptable in each position of a single
 # permutation. First rule determines which elements are acceptable in the first
 # position of a permutation, second rule -- to a second position, and so on.
 
 def permutations(rules)
 rules.inject([[]]) { |solution, rule| apply_rule(solution, rule) }
 end
 
 # extends each element of solution with each element of a rule
 def apply_rule(solution, rule)
 rule.inject([]) do |acc, possible_value|
 acc.concat(append(possible_value, solution))
 end
 end
 # returns an array produced by prepending a +value+ to each element of
 # +permutations+.
 def append(value, permutations)
 permutations.map { |p| p.dup.push(value) }
 end
 
 RULES = [[   :x,   2],
 [   :x,    ],
 [1,   :x,  2],
 [   :x,    ]];
 
 puts permutations(RULES).map {|p| p.inspect}.join("\n")
 
Думаю, что код Сочина на F# будет самым коротким   |  
						| 
								|  |  
								|  |  Записан | 
 
 "There are things known and there are things unknown, and in between are the doors..." (Jim Morrison) |  |  | 
	| 
			| 
					
						| Storm 
								Верховный 
								Администратор 
								Аспирант
								       
								Карма: +29/-0
								  Offline 
								Пол:   
								Сообщений: 484
								
								 | 
								|  | « Ответ #6 : Октябрь 21, 2008, 12:25:15  » |  | 
 
 F# не знаю, ничего не скажу, но, ИМХО, подобного плана задачи следует решать с применением лишь условного ветвления и цикла с заданным количеством итераций, как учил Дейкстра, иначе это все будет сведено к мерянью языками программирования.
 можно написать модуль для Perl с реализацией поставленной задачи и программа будет  сведена к вызову функции с возвратом ссылки на список.
 
 да и задачу уточнить не помешает, потому что не въехал какие варианты на выходе должны быть.
 |  
						| 
								|  |  
								|  |  Записан | 
 
 Только две вещи бесконечны: вселенная и тупость, и я еще не уверен по поводу вселенной. (Альберт Эйнштейн)----------------------------------------------------
 "There are two major products that came out of Berkeley: LSD and UNIX. We don't believe this to be a coincidence." (с) Jeremy S. Anderson
 
 Проходит ирландец мимо паба....
 |  |  | 
	| 
			| 
					
						| Sochin 
								Злой модератор 
								Декан
								       
								Карма: +108/-6
								  Offline 
								Пол:   
								Сообщений: 1518
								
								 | 
								|  | « Ответ #7 : Октябрь 21, 2008, 01:43:53  » |  | 
 
 F# не знаю, ничего не скажу, но, ИМХО, подобного плана задачи следует решать с применением лишь условного ветвления и цикла с заданным количеством итераций, как учил Дейкстра, иначе это все будет сведено к мерянью языками программирования.
 Мир не замкнут на одних лишь императивных языках. Так что если и мерянье, то скорее парадигмами. =) |  
						| 
								|  |  
								|  |  Записан | 
 
 Говорят, когда компьютер сгорает, перед взором микропроцессора за долю секунды проносятся все операции, которые он когда-либо совершил...壯鎭
 |  |  | 
	|  |