Задание для бабуши! Выполнить на руби. (Страница 1) / Программирование / Форум StopLinux

Объявление

Kwork.ru - услуги фрилансеров от 500 руб.

#1 24-06-11 16:36:47

Lord_Evil
Master Of Darkness
Из Deepest Pits Of Hell
Зарегистрирован: 06-06-10
Сообщений: 1,887
Сайт
Windows XPInternet Explorer 8.0

Задание для бабуши! Выполнить на руби.

2520 - самое маленькое число, которое делится без остатка на все числа от 1 до 10.
Какое самое маленькое число делится нацело на все числа от 1 до 20?

Все остальные желающие могут присойденится и быдлокодить на своих любимых языках.


Интеллигент боится лишь одного — касаться темы зла и его корней, потому что справедливо полагает, что здесь его могут сразу выeбaть телеграфным столбом.©

Неактивен

#2 24-06-11 16:46:40

SemyonKozakov
Журнашлюшка :)
Из Саратов
Зарегистрирован: 28-11-09
Сообщений: 4,109
Сайт
Windows VistaChrome 12.0.742.100

Re: Задание для бабуши! Выполнить на руби.

Lord_Evil, зачем на руби-то?  yikes Это же чисто математическая задача. Ответ (как я быстренько посчитал): 12 252 240

Добавлено спустя 07 мин 55 с:
Быдлорешение на быдлопетончеге:

i = 0

while True:
    i += 1
    isdel = True
    for j in range(1,21):
        if i % j != 0:
            isdel = False
    if isdel == True:
        print(i)
        break

(Очень) банальный перебор. До сих пор дожидаюсь его результатов. Нормальное решение, возможно, запостю позже.


https://nolinux.w2c.ru - море баттхерта и деаонимизации

Неактивен

#3 24-06-11 17:01:35

ikkunan salvataja
Участник
Зарегистрирован: 30-01-10
Сообщений: 2,688
LinuxFirefox 4.0

Re: Задание для бабуши! Выполнить на руби.

SemyonKozakov пишет:

Ответ (как я быстренько посчитал): 12 252 240

Видимо у меня калькулятор неправильный, выдаёт что 12252240/19 это приблизительно 644854,7368421052631578947368421052631578947368421052631578947368


Yesterday it worked.
Today it is not working.
Windows is like that.

Неактивен

#4 24-06-11 17:05:21

SemyonKozakov
Журнашлюшка :)
Из Саратов
Зарегистрирован: 28-11-09
Сообщений: 4,109
Сайт
Windows VistaChrome 12.0.742.100

Re: Задание для бабуши! Выполнить на руби.

ikkunan salvataja, миль пардон. Торопился посчитать smile В любом случае это чистая математика без программирования.


https://nolinux.w2c.ru - море баттхерта и деаонимизации

Неактивен

#5 24-06-11 17:10:00

Гареев Станислав
Вижуалкибергоп
Из Пятигорск
Зарегистрирован: 24-07-10
Сообщений: 3,103
Сайт
LinuxFirefox 4.0.1

Re: Задание для бабуши! Выполнить на руби.

Lord_Evil пишет:

Все остальные желающие могут присойденится и быдлокодить на своих любимых языках.

Метод перебора. это же очевидно.


Не ламерствуй лукаво.
"А петь мне нельзя - постановление суда" (с) Бендер

Неактивен

#6 24-06-11 17:12:27

SemyonKozakov
Журнашлюшка :)
Из Саратов
Зарегистрирован: 28-11-09
Сообщений: 4,109
Сайт
Windows VistaChrome 12.0.742.100

Re: Задание для бабуши! Выполнить на руби.

В приницпе, если рассматривать программирование и общий случай (самое маленькое число, которое делится на все числа от 1 до n), то путь решения виден такой:

  • Создать пустой массив для делителей числа

  • Поочерёдно разложить все числа от 1 до n на множители

  • После каждого разложения добавлять недостающие и только недостающие множители в список

  • Перемножить делители в итоге big_smile

Добавлено спустя 01 мин 30 с:

Гареев Станислав пишет:

Метод перебора. это же очевидно.

Флаг в руки перебирать. Я уже выложил скрипт для перебора. На моём двухядерном процессоре он до сих пор ответ ищет.


https://nolinux.w2c.ru - море баттхерта и деаонимизации

Неактивен

#7 24-06-11 17:25:42

ikkunan salvataja
Участник
Зарегистрирован: 30-01-10
Сообщений: 2,688
LinuxFirefox 4.0

Re: Задание для бабуши! Выполнить на руби.

SemyonKozakov пишет:

Создать пустой массив для делителей числа

Поочерёдно разложить все числа от 1 до n на множители

После каждого разложения добавлять недостающие и только недостающие множители в список

Перемножить делители в итоге big_smile

Найти все простые меньшие заданного N методом Sieve of Eratosthenes. При получении первого простого, да и последующих тоже, берём не само простое, а его степень не превышающую N и поочерёдно производим домножение.
UPD: Несколько сумбурно выразился, не показатель степени не должен превышать N, а простое в этой степени, т.е. применительно к данному случаю
2^4⋅3^2⋅5⋅7⋅11⋅13⋅17⋅19

Редактировался ikkunan salvataja (24-06-11 17:32:01)


Yesterday it worked.
Today it is not working.
Windows is like that.

Неактивен

#8 24-06-11 17:30:09

SemyonKozakov
Журнашлюшка :)
Из Саратов
Зарегистрирован: 28-11-09
Сообщений: 4,109
Сайт
Windows VistaChrome 12.0.742.100

Re: Задание для бабуши! Выполнить на руби.

Кстати, полностью правильный ответ задачи: 232792560

ikkunan salvataja пишет:

Найти все простые меньшие заданного N методом Sieve of Eratosthenes.

Можно нескромный вопрос? Это так решето Эрастофена из школьный программы на английском звучит? Я не понимаю, зачем его писать именно на английском.


https://nolinux.w2c.ru - море баттхерта и деаонимизации

Неактивен

#9 24-06-11 17:35:34

ikkunan salvataja
Участник
Зарегистрирован: 30-01-10
Сообщений: 2,688
LinuxFirefox 4.0

Re: Задание для бабуши! Выполнить на руби.

SemyonKozakov пишет:

Я не понимаю, зачем его писать именно на английском.

Ну во всяких учебниках по програманию оно именно так пишется. Привычка.


Yesterday it worked.
Today it is not working.
Windows is like that.

Неактивен

#10 24-06-11 19:33:35

Lord_Evil
Master Of Darkness
Из Deepest Pits Of Hell
Зарегистрирован: 06-06-10
Сообщений: 1,887
Сайт
Windows XPInternet Explorer 8.0

Re: Задание для бабуши! Выполнить на руби.

ikkunan salvataja пишет:

Найти все простые меньшие заданного N методом Sieve of Eratosthenes. При получении первого простого, да и последующих тоже, берём не само простое, а его степень не превышающую N и поочерёдно производим домножение.

Эт понятно. Ждем реализации от бабуши smile Хочу увидеть идею в коде воплощенной.

Майор Очевидность пишет:

дайте-ка что-нибудь из олимпиадного программирования подкину.

Злой ты, этого и я так просто не осилю..


Интеллигент боится лишь одного — касаться темы зла и его корней, потому что справедливо полагает, что здесь его могут сразу выeбaть телеграфным столбом.©

Неактивен

#11 24-06-11 20:55:37

Babusha
Нехристь
Зарегистрирован: 12-03-10
Сообщений: 2,160
Windows 7Firefox 4.0.1

Re: Задание для бабуши! Выполнить на руби.

Я сейчас далек от своего ноута, комп не мой, но решение на Си, методом перебора, через часик будет на руби:

# include <stdio.h>

int main()
{
    int a = 1;
    while(1)
    {
            a++;
            printf("%d\n",a);
            int c = 0;
            int b; 
            for(b = 1; b <= 20; b++)
            {
                    if((a % b) != 0) c = 1;
            }
            if(c == 0)
            {
                 printf("%d",a);
                 int ch = getchar();
                 break;
            }
    }
}

Неактивен

#12 24-06-11 20:57:44

SemyonKozakov
Журнашлюшка :)
Из Саратов
Зарегистрирован: 28-11-09
Сообщений: 4,109
Сайт
Windows VistaChrome 12.0.742.100

Re: Задание для бабуши! Выполнить на руби.

Babusha, судя по коду, через часик ты только цифру дождёшься. Посмотри на ответ (232 792 560) и подумай, сколько раз компьютер будет проверять все числа от 1 до ответа на деление нацело.


https://nolinux.w2c.ru - море баттхерта и деаонимизации

Неактивен

#13 24-06-11 21:06:08

Babusha
Нехристь
Зарегистрирован: 12-03-10
Сообщений: 2,160
Windows 7Firefox 4.0.1

Re: Задание для бабуши! Выполнить на руби.

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

Неактивен

#14 24-06-11 21:15:04

usr_share
Участник
Зарегистрирован: 13-03-10
Сообщений: 1,470
LinuxIceweasel 4.0

Re: Задание для бабуши! Выполнить на руби.

Мдя. Туповатенькое решение. У меня оно за 30 секунд дошло только до одного миллиона.

Неактивен

#15 24-06-11 21:19:18

Гареев Станислав
Вижуалкибергоп
Из Пятигорск
Зарегистрирован: 24-07-10
Сообщений: 3,103
Сайт
LinuxFirefox 4.0.1

Re: Задание для бабуши! Выполнить на руби.

SemyonKozakov пишет:

сколько раз компьютер будет проверять все числа от 1 до ответа на деление нацело.

Интересно, а на асме примеры будут?


Не ламерствуй лукаво.
"А петь мне нельзя - постановление суда" (с) Бендер

Неактивен

#16 24-06-11 22:11:06

Lord_Evil
Master Of Darkness
Из Deepest Pits Of Hell
Зарегистрирован: 06-06-10
Сообщений: 1,887
Сайт
Windows XPInternet Explorer 8.0

Re: Задание для бабуши! Выполнить на руби.

Babusha, я забыл уточнить - смысл решения этих задач в том, чтобы само решение состояло из минимального числа итераций. Икуна очень хорошо выше объяснил, как оформить решение. Иначе если у тебя будет напр. в задании число 100, то можешь представить, сколько оно будет считать. У Семена вообще походу камп сгорит big_smile


Интеллигент боится лишь одного — касаться темы зла и его корней, потому что справедливо полагает, что здесь его могут сразу выeбaть телеграфным столбом.©

Неактивен

#17 24-06-11 22:26:29

ikkunan salvataja
Участник
Зарегистрирован: 30-01-10
Сообщений: 2,688
LinuxFirefox 4.0.1

Re: Задание для бабуши! Выполнить на руби.

Lord_Evil пишет:

смысл решения этих задач в том, чтобы само решение состояло из минимального числа итераций.

Я бы ещё порекомендовал вначале выставить флаг показателя степени, т.е. как только мы выяснили что квадрат очередного простого больше N, мы этот флаг сбрасываем и дальнейшие проверки, а не будет ли N больше квадрата, куба итд этого простого, проводить не будем. В случае ассемблера можно вообще подмахнуть код, т.е. в начало процедуры этой проверки подставить код джампа на процедуру домножения.
Правда в винде или линуксе за это мы сразу получим segmentation fault, но в DOS или OS/2 это покатит и даст ощутимый выигрыш в быстродействии.


Yesterday it worked.
Today it is not working.
Windows is like that.

Неактивен

#18 24-06-11 23:20:43

Lord_Evil
Master Of Darkness
Из Deepest Pits Of Hell
Зарегистрирован: 06-06-10
Сообщений: 1,887
Сайт
Windows XPOpera 9.50

Re: Задание для бабуши! Выполнить на руби.

Вот еще задача интересная:
https://euler.jakumo.org/problems/view/4.html

Число-палиндром с обеих сторон (справа и слева) читается одинаково. Самое большое число-палиндром, полученное произведением двух двухзначных чисел – 9009 = 91х99.

Найдите самый большой палиндром, полученный произведением двух трёхзначных чисел.


Интеллигент боится лишь одного — касаться темы зла и его корней, потому что справедливо полагает, что здесь его могут сразу выeбaть телеграфным столбом.©

Неактивен

#19 25-06-11 00:00:04

Tiphon
Участник
Зарегистрирован: 08-07-10
Сообщений: 2,354
Windows 7Chrome 12.0.742.100

Re: Задание для бабуши! Выполнить на руби.

Слегка оптимизированный перебор. Вспоминать руби времени не было)) 0.16 сек на нетбуке.

Вообще, мне кажется (но ужо точно не помню) был у этой задачи другой вариант решения, но он, в отличии от перебора, требует размышлений)

using System;
using System.Diagnostics;
using System.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        static int Brute(int[] numbers )
        {
            int delta = numbers[numbers.Length - 1];
            for (int value = delta; ; value += delta)
            {
                bool result = true;
                foreach (var number in numbers)
                {
                    if (value % number != 0)
                    {
                        result = false;
                        break;
                    }
                }
                if(result) return value;
            }
        }

        static void Main(string[] args)
        {
            var numbers = Enumerable.Range(1, 20).ToList();
            
            //start timer
            Stopwatch timer = new Stopwatch();
            timer.Start();

            //array filtration
            for(int right = 0; right<numbers.Count; right++)
            {
                int rightIndex = numbers.Count - 1 - right;

                for (int left = 0; left < rightIndex; left++)
                {
                    if (numbers[rightIndex] % numbers[left] == 0)
                    {
                        numbers.RemoveAt(left);
                        left--;
                        rightIndex--;
                    }
                }
            }

            int value = Brute(numbers.ToArray());
            
            //stop timer
            timer.Stop();

            //see what we've got after filtration and result
            numbers.ForEach(Console.WriteLine);
            Console.WriteLine("End in {0} ms. Value is {1}", timer.ElapsedMilliseconds, value);
        }
    }
}

Квантовая механика - "малопонятный математический курьёз" (с) msAVA - современный учитель.

Неактивен

#20 25-06-11 00:12:22

Tiphon
Участник
Зарегистрирован: 08-07-10
Сообщений: 2,354
Windows 7Chrome 12.0.742.100

Re: Задание для бабуши! Выполнить на руби.

Майор Очевидность пишет:

Tiphon, ну так обратная факторизация же.
находим наименьшее общее кратное чисел с 1 по 20 — и вуаля.

И?

Мы разве где-то спорим?


Квантовая механика - "малопонятный математический курьёз" (с) msAVA - современный учитель.

Неактивен

#21 25-06-11 00:39:42

Дестер
Капитан
Зарегистрирован: 09-11-10
Сообщений: 705
Сайт
Windows 7Chrome 12.0.742.100

Re: Задание для бабуши! Выполнить на руби.

Lord_Evil пишет:

Вот еще задача интересная:
https://euler.jakumo.org/problems/view/4.html

Ничего интересного, решается в две строчки.
Кажется, так:

Скрытый текст:

993*913=906609

Редактировался Дестер (25-06-11 00:50:26)

Неактивен

Kwork.ru - услуги фрилансеров от 500 руб.
Мой VPS с 2016 года !
✅ Виртуальные от 300 ₽/месяц, RAM 1-10GB, DISK 20-360 GB;
✅ Выделенные от 3000 ₽/месяц. RAM 4-64GB, DISK до 4TB;
✅ Intel Xeon, SSD, XEN, iLO/KVM, Windows/Linux, Администрирование;
✅ Бесплатно Full Backup и Anti-DDoS.





Подвал форума

Под управлением FluxBB
Модифицировал Visman

Яндекс.Метрика