Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Рендомные шахматы 
:(
    Опции темы
Lois
Дата 29.5.2013, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 136
Регистрация: 19.5.2013

Репутация: нет
Всего: нет



Цитата(Mirkes @  29.5.2013,  19:40 Найти цитируемый пост)
А есть у вас хоть один пример решенной задачи? Просто хочется глянуть, что является решением. 


решается задача с конями, только наверное при дополнительном условии. А так в принципе её почему-то решают и без дополнительного условия, хотя можно и придраться , наверное, если захотеть.


PM MAIL   Вверх
_Y_
Дата 29.5.2013, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: 8
Всего: 34



Lois, мне кажется, Вам нужно немного вникнуть в начальные принципы. Тогда будет легче формулировать свои мысли и разговаривать на этом форуме.

Алгоритм - формальное (и не допускающее двусмысленного толкования) описание последовательности шагов, необходимых для решения задачи.

Написание любой программы:
  • начинается с формулировки задачи (что мы с Вами делаем посредством дискуссии), 
  • после чего разрабатывается (или выбирается из имеющихся) алгоритм решения. 
  • Дальше можно выбрать язык программирования и, собственно, писать код программы (работа, как правило, чисто техническая).
При написании крупных-сложных программ шагов больше: разработка архитектуры, тестирование по частям и полностью... Но к Вашим задачкам это не относится - они довольно простые.

То, что я написал в посте от 2013.05.27, это алгоритм. Т.е. формальное решение задачи. Причем, расписанно все весьма детально. По этому алгоритму можно писать программу на любом удобном для Вас языке.

Цитата(Mirkes @  29.5.2013,  19:40 Найти цитируемый пост)
Довольно забавная дискуссия. 
 Странная дискуссия, но, по сути, нормальная ИМХО. Залез человек в незнакомую область. Терминологией не владеет, но интересуется и пытается разобраться. Удобнее ему разбираться на простых примерах - ну и прекрасно. smile

ЗЫ: Я бы с удовольствием пошел так же на какой-нибудь форум не слишком злобных экономистов и попробовал разобраться в том, как работает мировая экономика. Да все времени нет smile 


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
Lois
Дата 29.5.2013, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 136
Регистрация: 19.5.2013

Репутация: нет
Всего: нет



Цитата(_Y_ @  29.5.2013,  20:08 Найти цитируемый пост)

То, что я написал в посте от 2013.05.27, это алгоритм. Т.е. формальное решение задачи. Причем, расписанно все весьма детально. По этому алгоритму можно писать программу на любом удобном для Вас языке.


Я думаю это только один из вариантов решения, причём для меня в этом алогритме нет ничего особого нового, так как я его и высказал, сказав, что фигуры движутся рендомно. Остальное может додумать я думаю студент ВУЗа. Меня интересовало именно есть ли какие-нибудь чисто математические методы решения проблемы. Один метод, какой-то человек подсказал, попутно подсчитав число ходов, но когда я задал более конкретный вопрос, он куда-то исчез. 

Цитата

 Странная дискуссия, но, по сути, нормальная ИМХО. Залез человек в незнакомую область. Терминологией не владеет, но интересуется и пытается разобраться. Удобнее ему разбираться на простых примерах - ну и прекрасно


Мне не обязательно чем-то владеть, достаточно знать общее положение дел. С программистами я прекрасно нахожу общий язык при написании ими моих программ и почему-то ни разу никаких проблем не возникало. Всё это прекрасно можно понять на уровне нормальной человеческой логики.

PM MAIL   Вверх
_Y_
Дата 30.5.2013, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: 8
Всего: 34



Цитата(Lois @  29.5.2013,  22:38 Найти цитируемый пост)
Я думаю это только один из вариантов решения

Конечно один из вариантов. Но предлагать все возможные как-то бессмыслено.

Цитата(Lois @  29.5.2013,  22:38 Найти цитируемый пост)
для меня в этом алогритме нет ничего особого нового, так как я его и высказал, сказав, что фигуры движутся рендомно. Остальное может додумать я думаю студент ВУЗа.
 Улыбнуло. Студент ВУЗа конечно может. Вопросы-то Вы, извините, задаете на уровне уроков информатики очень средней школы. 

Цитата(Lois @  29.5.2013,  22:38 Найти цитируемый пост)
Мне не обязательно чем-то владеть, достаточно знать общее положение дел. С программистами я прекрасно нахожу общий язык при написании ими моих программ и почему-то ни разу никаких проблем не возникало. Всё это прекрасно можно понять на уровне нормальной человеческой логики.

Боюсь с человеческой логикой еще надо разобраться. Ну например, как можно говорить моих программ, если Вы, кроме общих фраз типа "рандомное движение фигур" ничего за всю дискуссию не сформулировали? По человеческой логике надо писать программ, написанных для меня. Не одно и то же.

Нет ничего плохого в незнании, плохо незнание поднимать на флаг.

В общем, хотите научиться - всегда подскажем. Хотите поучать - покажите что Вы что-то знаете.



--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
Lois
Дата 30.5.2013, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 136
Регистрация: 19.5.2013

Репутация: нет
Всего: нет



Цитата(_Y_ @  30.5.2013,  19:22 Найти цитируемый пост)

В общем, хотите научиться - всегда подскажем. Хотите поучать - покажите что Вы что-то знаете.


Я обычно не поучаю, только разве своих учеников. Здесь наверное не место показывать что я знаю.
Пока я не увидел реальных советов, кроме желания с вашей стороны меня поучать.

PM MAIL   Вверх
Mirkes
Дата 2.6.2013, 20:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 586
Регистрация: 18.8.2011
Где: Красноярск

Репутация: 4
Всего: 17



Чисто из любопытства решил потратить пару часов и решить предложенныэ мной задачи. Правда по собственной лени решил сразу более общую:
Задача: Король находится на поле а1. Оцените среднее время, за которое король достигнет любого, наперед заданного поля.
Решать аналитически поленился (честно говоря не уверен, что смогу smile, написал программку:
Код

package chess;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GraphicsConfiguration;
import java.awt.HeadlessException;

import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import java.io.BufferedWriter;

import java.io.FileWriter;

import java.io.IOException;

import java.util.Random;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.border.Border;

public class Chess extends JFrame implements ActionListener {
    @SuppressWarnings("compatibility:8418175407791661885")
    private static final long serialVersionUID = -9053290462844492162L;

    private JTextArea protocol = new JTextArea();
    private boolean stop = false;
    private int count = 0;
    private int[][] field = new int[8][8];
    private int[][] steps =
        new int[][] { { -1, -1 }, { -1, 0 }, { -1, 1 }, { 0, -1 }, { 0, 1 }, { 1, -1 }, { 1, 0 }, { 1, 1 } };
    private Random rnd = new Random();

    public Chess() {
        super();
        try {
            jbInit();
        } catch (Exception e) {
            e.printStackTrace();
        }
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        Dimension frameSize = getSize();
        if (frameSize.height > screenSize.height) {
            frameSize.height = screenSize.height;
        }
        if (frameSize.width > screenSize.width) {
            frameSize.width = screenSize.width;
        }
        setLocation((screenSize.width - frameSize.width) / 2, (screenSize.height - frameSize.height) / 2);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
    }

    public static void main(String[] args) {
        try {
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        } catch (Exception e) {
            e.printStackTrace();
        }
        new Chess();
    }

    private void jbInit() throws Exception {
        this.setSize(new Dimension(400, 300));
        this.getContentPane().setLayout(new BorderLayout());
        this.getContentPane().add(new JScrollPane(protocol), BorderLayout.CENTER);
        JPanel pan = new JPanel();
        pan.setLayout(new BorderLayout());
        JButton b = new JButton("Start");
        b.setActionCommand("start");
        b.addActionListener(this);
        pan.add(b, BorderLayout.WEST);
        b = new JButton("Stop");
        b.setActionCommand("stop");
        b.addActionListener(this);
        pan.add(b, BorderLayout.EAST);
        this.getContentPane().add(pan, BorderLayout.NORTH);
    }

    private void oneGame() {
        int x = 0, y = 0, xx, yy,k,n=steps.length;
        //Clear field
        for (int i = 0; i < 8; i++)
            for (int j = 0; j < 8; j++)
                field[i][j] = 0;
        //Number of not visited fields
        int num = 64;
        //Number of done steps
        int done = 0;
        while (num > 0) {
            do {
                k=rnd.nextInt(n);
                xx=x+steps[k][0];
                yy=y+steps[k][1];
            } while (xx < 0 || xx > 7 || yy > 7 || yy < 0);
            x=xx;
            y=yy;
            done++;
            if (field[x][y]==0){
                field[x][y]=done;
                num--;
            }
        }
    }

    private void start() {
        Thread tl = new Thread(new Runnable() {
            public void run() {
                try {
                    BufferedWriter bw = new BufferedWriter(new FileWriter("Chess.txt"));
                    for (char a = 'A'; a < 'I'; a++)
                        for (int i = 1; i < 9; i++)
                            bw.write(a + i + "\t");
                    bw.newLine();
                    stop = false;
                    count = 0;
                    while (!stop) {
                        oneGame();
                        count++;
                        for (int i = 0; i < 8; i++)
                            for (int j = 0; j < 8; j++)
                                bw.write(field[i][j] + "\t");
                        bw.newLine();
                        SwingUtilities.invokeLater(new Runnable() {
                            public void run() {
                                protocol.append("" + count + "\n");
                            }
                        });
                    }
                    bw.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        });
        tl.start();
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getActionCommand().equals("start"))
            start();
        else if (e.getActionCommand().equals("stop"))
            stop = true;
    }
}

Программа очевидно примитивная, но в смысле оптимальности достаточно хороша.
После запуска я подождал около 1 минуты и с ужасом поняв сколько она успела посчитать - завершил эксперимент. Программа успела перелопатить 296046 полных решений. Так что статистика была достаточно представительная.
Я решил считать, что среднее число ходов для двух разных полей различно, если Т-тест дает p-value меньше 1%.
Результаты исследования:
    A    B    C    D    E    F    G    H
1    140.1      55.4      81.6    102.5    121.4    142.7    172.4    251.7
2       55.5     25.9      45.0      61.8      79.2      98.2    123.5    175.8
3       81.9     45.0      46.8      57.8      71.2      87.2    107.5    155.7
4    102.3      61.9      57.7      62.5      72.2      85.0    103.2    149.7
5    121.2      79.1      71.4      72.1      78.7      89.9    106.5    152.8
6    142.3      98.3      87.0      85.3      89.9    100.2    117.7    164.5
7    171.9    123.1    107.3    102.7    106.6    117.7    138.1    188.6
8    252.1    175.7    155.3    149.3    152.7    164.6    189.0    266.2

В каждом поле указано среднее число ходов, которое потребуется королю, стоящему на поле а1, чтобы дойти до этого поля.
Картинка довольно забавная. Например, поля В2, С2, С3 и В3 в среднем достигаются быстрее, чем А2 и В1.
Все поля, симметричные относительно диагонали А1-Н8 имеют статистически неразличимое среднее.
Кроме того, есть несколько более длинных цепочек статистически неразличимых средних:
d1-a4-d7
d7-d1-a4-g4
e2-b5-e5

При внимательном рассмотрении оказалось, что значение д1 (102.5) статистически неотличимо от полей а4(102.3) и д7(102.7), но достоверно отличается от g4(103.2). А вот значение д7 статистически неотличимо от всех трех упомянутых полей.
Очевидно, что это следствие статистического определения совпадения средних значений и выбранного мной уровня существенности 1%.
Довольно забавная задачка на статобработку получилась. Даже засада нашлась smile.

Засим откланиваюсь и выбываю из темы.


--------------------
Mirkes
PM MAIL   Вверх
Lois
Дата 3.7.2013, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 136
Регистрация: 19.5.2013

Репутация: нет
Всего: нет




Можно разыгрывать партии и составлять задачи !
Вот exe для Win32, если есть желание поиграться, только давайте выкладывать интересные результаты:
http://yadi.sk/d/rbZ4G9G_6S94A
randomchess.exe FEN TESTSCOUNT [--print-moves]
FEN - начальная позиция (внимание, конь - S, не N)
TESTSCOUNT - количество партий
--print-moves - распечатывать ходы, опционально

Пуск -- Выполнить -- cmd.exe
cd C:\randomchess\
randomchess.exe rsbqkbsr/pppppppp/8/8/8/8/PPPPPPPP/RSBQKBSR 1 --print-moves

Формат FEN можно скопировать вот здесь
http://www.chessvideos.tv/chess-diagram-generator.php

Я придумал бешеную фишку с этой прогой. Можно в точности оценить ценность каждой фигуры, причём в зависимости не только от её достоинства, но и положения на доске!
Предельная задача
4k3/8/8/1pBp1p1p/1PbP3P/5P2/8/4K3 
PM MAIL   Вверх
Lois
Дата 24.9.2013, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 136
Регистрация: 19.5.2013

Репутация: нет
Всего: нет



оказалось, что правильный ответ к задаче с конями не 55, а 54 коня. Одна пустая клетка в углу доски и 8 пустых клеток вокруг короля.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.1215 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.