AXForum  
Вернуться   AXForum > Прочие обсуждения > Курилка
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 23.09.2008, 17:10   #35  
CDR is offline
CDR
MCTS
MCBMSS
 
236 / 175 (6) ++++++
Регистрация: 27.11.2003
Цитата:
Сообщение от dn Посмотреть сообщение
Задачу можно решить либо быстро, либо красиво... Решение с "бросанием костей" изначально не претендует на минимизацию кол-ва проходов цикла, но зато не надо долго ломать голову над алгоритмом.
Теперь насчет стандартных типов данных. Все правильно, но только для программиста на X++ container и set, являются более стандартными типами, чем массив, ИМХО. Я не припомню что-то практических задач в Axapta, где мне бы потребовалось использовать массив...
А на закуску "красивое" решение, вообще без циклов
***
Эта, однозначно, пять! "Респект и уважуха" (с).
Что бы вы не делали, всегда нужно стремиться сделать это красиво! Ведь "красота спасет мир" (С) .
Позволю себе небольшое исправление вашего "шедевра"
X++:
#define.N(5)
static void job001(Args _args)
{
    str 1   a[#N];
    str     resource = 'abcdefghijklmnopqrstuvwxyz';
    
    Set     validateSet; // Автоматическая проверка
    
    void init(Int _idx)
    {
        if (_idx == 0)
            return;

        a[_idx] = substr(resource, _idx, 1);
        init(_idx - 1);
    }

    str makestr(str 1 b[#N], int level = 1)
    {
        return (level<#N)?b[level]+makestr(b,level+1):b[level];
    }

    void show (str 1 b[#N])
    {
        str result;
        ;

        result = makestr(b);

        if (validateSet.in(result))// Автоматическая проверка
        {
            error('Doubling!');
        }
        else
        {
            info(result);
            validateSet.add(result);
        }
    }
    void f(str 1 b[#N], int level=1, int shift=1)
    {
        str 1   c[#N];
        ;

        if (level < #N-1)
        {
            f(b,level+1,1);
        }
        if(shift <= #N-level)
        {
            c=b;
            c[level] = b[level+shift];
            c[level+shift] = b[level];
            show(c);
            f(c,level,shift+1);
        }
    }
    ;

    validateSet = new Set(Types::String);  // Автоматическая проверка
    
    init(#N);
    show(a);
    f(a);

    info(strfmt('Total: %1 elements.', validateSet.elements()));  // Автоматическая проверка
}
Ну, собственно, на этом можно считать DAX-сообщество подготовленным к собеседованию в Goooogle .
Теги
логические задачи

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
ARIS-задачи itfs Курилка 9 02.11.2006 12:35

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 19:25.