
v
16.10.2016
00:16:51
йеп

Tim
16.10.2016
08:11:18

I
16.10.2016
09:14:36

Alexander
16.10.2016
12:30:45
Задача для тех кому скучно )
Задача состоит в следующем. Есть входящее число, скажем 4 и мы должны перебрать все возможные сочетания чисел от 1 до 4. т.е.
1234, 2341, 3412 и т.п.
Кто смогет?)

Google

ojab
16.10.2016
12:35:06
(1..4).to_a.permutation(4).map(&:join)

trickster
16.10.2016
12:38:13
а руками сможешь написать реализацию метода пермутейшн?

Alex
16.10.2016
13:15:07

Alexander
16.10.2016
13:17:42
в духе [[1, 2], [3, 4], [5, 6]]

Alex
16.10.2016
13:18:12
рандомная сортировка не?
это же массивы, но они элементы одного массива
вот рутовый и мешай.

Alexander
16.10.2016
13:19:07
вот рутовый и мешай.
сложность в том что цифры из одной колонки не могу на выходе быть вместе, например 125

Alex
16.10.2016
13:19:22
Я не понял твою задачу.

Alexander
16.10.2016
13:19:32
Дано N колонок в духе [[1, 2], [3, 4], [5, 6]] нужно перемешать колонки между собой, в духе 135, 145, 235 и тп

Alex
16.10.2016
13:19:33
[[1, 2], [3, 4], [5, 6]] ты тут хочешь местами элементы поменять?
Стоп, колонок в смысле [[1, 2], [3, 4], [5, 6]] или [ [[1, 2], [3, 4], [5, 6]], [[1, 2], [3, 4], [5, 6]] ] ?

Google

Aldar
16.10.2016
13:19:54

Alex
16.10.2016
13:20:43
Дано N колонок в духе [[1, 2], [3, 4], [5, 6]] нужно перемешать колонки между собой, в духе 135, 145, 235 и тп
flatten, random sort, дальше собираешь их обратно в колонки
(либо я все еще не понял задачу)

Alexander
16.10.2016
13:21:07
Стоп, колонок в смысле [[1, 2], [3, 4], [5, 6]] или [ [[1, 2], [3, 4], [5, 6]], [[1, 2], [3, 4], [5, 6]] ] ?
первая [1, 2]
вторая [3, 4]
третья [5, 6]
нужно взять слово из 1, смешать со 2 и 3. И этих колонок N и обьектов в них M
и получить все возможные комбинации

Alex
16.10.2016
13:21:53
что за задача такая странная? ?
зачем из первой колонки пихать одно из слов во вторую и третью?

Alexander
16.10.2016
13:22:32
между собой в различных вариациях

Alex
16.10.2016
13:22:46
кинь задачу, мне чот интересно стало
скинь задачку, хочу посмотреть

Alexander
16.10.2016
13:26:21

Alex
16.10.2016
13:26:31
и тебе надо перемешать все слова?

Alexander
16.10.2016
13:27:39
да, но смысл их перемешивания теперь понимаешь?
сложность в том что кол-во столбцов N

Alex
16.10.2016
13:28:24
Да я кажется уловил суть

Alexander
16.10.2016
13:28:31
так бы можно было просто
words[0].map do |w0|
words[1].map do |w1|
words[2].map do |w2|
w0 + w1 + w2
end
end
end

Alex
16.10.2016
13:28:41
это тот же permutation просто многомерный

Alexander
16.10.2016
13:29:00
да

Alex
16.10.2016
13:29:32
надо подумать.

Google

Alex
16.10.2016
13:31:19
#!/usr/bin/env ruby
p %w(купить, приобрести).product([%w(яблоко банан), %w(дешево быстро)])
[["купить,", ["яблоко", "банан"]], ["купить,", ["дешево", "быстро"]], ["приобрести", ["яблоко", "банан"]], ["приобрести", ["дешево", "быстро"]]]
фигня правда получилась

Alexander
16.10.2016
13:34:49
words = ['купить', 'приобрести'], ['яблоко', 'банан'], ['дешево', 'быстро']
words[0].map do |w0|
words[1].map do |w1|
words[2].map do |w2|
[w0, w1, w2].join ' '
end
end
end
надо как то рекурсией

Alex
16.10.2016
13:35:59
#!/usr/bin/env ruby
arr = %w(купить приобрести).product(%w(яблоко банан)).product(%w(дешево быстро)).flatten.each_slice(3).to_a
arr.each do |e|
puts e.join(" ")
end
купить яблоко дешево
купить яблоко быстро
купить банан дешево
купить банан быстро
приобрести яблоко дешево
приобрести яблоко быстро
приобрести банан дешево
приобрести банан быстро
то что надо?
(кривое решение кстати, можно оптимизировать)

Aldar
16.10.2016
13:36:52

Alex
16.10.2016
13:36:54
Спасибо за задачку кстати, сегодня я узнал о руби чуть чуть больше.
#!/usr/bin/env ruby
products = %w(яблоко банан)
arr = %w(купить приобрести).product(products).product(%w(дешево быстро)).flatten.each_slice(3).to_a
arr.each do |e|
puts e.join(" ")
end
Так лучше?

Alexander
16.10.2016
13:37:42

Alex
16.10.2016
13:37:58
вместо того чтобы юзать стандартную библиотеку которая к тому же будет быстрее работать?
У меня сырое решение, его можно допилить и будет конфетка.
обожаю руби ❤️

Alexander
16.10.2016
13:51:07
обожаю руби ❤️
words = [["купить", "приобрести"], ["яблоко", "банан"], ["дешево", "быстро"]]
results = words.shift
words.count.times do |i|
results = requests.product(words[i])
end
results.flatten.each_slice(words.count+1).to_a

Alex
16.10.2016
13:51:20
Зачем?
что не так с функцией product? :)

Alexander
16.10.2016
13:51:35
для N колличества

Google

Alex
16.10.2016
13:51:58
Её тоже в N количество можно перевести
и операций меньше будет. А так, делай как хочешь.

Alexander
16.10.2016
13:52:43

Aldar
16.10.2016
13:53:01
https://mail.haskell.org/pipermail/haskell-cafe/2002-June/003122.html

Alex
16.10.2016
13:53:08
рубишная функция product делает тоже самое что permutation только для многомерных вариаций

Alexander
16.10.2016
14:04:52
a = [1, 2]
b = [3, 4], [5, 6]
r1 = a.product(b)
r2 = [1,2].product([3, 4], [5, 6])
r1 == r2 # false
почему они не равны?

Alex
16.10.2016
14:05:37
ну посмотри что в них находится ?

Alexander
16.10.2016
14:05:58

Alex
16.10.2016
14:06:02
а я нет

Admin
ERROR: S client not available

Aldar
16.10.2016
14:06:16
блин, в хаскеле эта задача просто решается, забыл уже немного

Alex
16.10.2016
14:06:29
в раби тоже

Aldar
16.10.2016
14:06:34
через монаду списка

Alexander
16.10.2016
14:07:17
r1
[[1, [3, 4]], [1, [5, 6]], [2, [3, 4]], [2, [5, 6]]]
r2
[[1, 3, 5], [1, 3, 6], .....]

Alex
16.10.2016
14:07:38
Удивительно, и почему же они казалось бы не ==
наверное потому что они не ==

Alexander
16.10.2016
14:08:58

Alex
16.10.2016
14:09:23
Ты спрашиваешь почему получаются разные хэши при разных аргументах к функции? серьезно?

Andrey ?
16.10.2016
14:09:28
r1
[[1, [3, 4]], [1, [5, 6]], [2, [3, 4]], [2, [5, 6]]]
r2
[[1, 3, 5], [1, 3, 6], .....]
А они тут должны быть равны?

Alexander
16.10.2016
14:09:39

Google

Иван
16.10.2016
14:10:06
посмотри чему b у тебя равно

Alex
16.10.2016
14:10:46

Alexander
16.10.2016
14:14:22
банальные ответы закончились? может теперь кто подскажет почему если передаю переменную получаю другой результат?

Alex
16.10.2016
14:15:30
Потому что там ты передаешь один аргумент
а тут два
очевидно же
переменная это один аргумент, независимо от того что она хранит
а в другом месте ты через запятую передаешь два аргумента.

Andrey ?
16.10.2016
14:15:58
a = [1, 2]
b = [3, 4], [5, 6]
r1 = a.product(b)
r2 = [1,2].product([3, 4], [5, 6])
r1 == r2 # false
почему они не равны?
Я думаю, тут проблема в том, что ты накосячил с объявлением b

Alex
16.10.2016
14:16:15
можно splat оператор заюзать

Иван
16.10.2016
14:16:35
*b передай

Alexander
16.10.2016
14:17:06
наконец то!

Aldar
16.10.2016
14:17:53
в итоге какое решение?

Alexander
16.10.2016
14:19:08
Что бы перемешать N колонок
words.shift.product(*words)

Alex
16.10.2016
14:20:33
words = ['купить', 'приобрести'], ['яблоко', 'банан'], ['дешево', 'быстро']
words[0].map do |w0|
words[1].map do |w1|
words[2].map do |w2|
[w0, w1, w2].join ' '
end
end
end
надо как то рекурсией
сравни с этим ))
Но все же shift это рандом
твое решение неверное (наверное)

Aldar
16.10.2016
14:22:17
если ты про это
про задачу [[1,2], [3,4], [5,6]], где надо взять по одному элементу из каждого массива и всевозможные их перестановки