IPB

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Исходники ПМ, TurboC3 v1.0 Нахождение правильной цепочки
Нэко
сообщение 17.11.2008, 19:09
Сообщение #1


Один из многих
**

Группа: Пользователи
Сообщений: 137
Регистрация: 20.7.2008
Из: Интернет
Пользователь №: 11 333
Знак Зодиака:
Страна:




Когда мне надоело искать цепочки, я для ускорения написал программу:

Код
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>

class card {
  public:
   int v; /* value */
   int r; /* type */
   int is; /* access */

  void clear ()
  {
    v = 0;
    r = 0;
    is = 0;
  }

};

class rasklad {
      private:

    int i, j;

      public:
    card K[36];
    int pointer;

    rasklad () { clear(); }

    void clear ()
    {
      for (i = 0; i < 36; i++) this->K[i].clear();
      this->pointer = 0;
    }

    void init ()
    {
     pointer = 0;
     int crd = 0;
     for (i = 0; i < 9; i++)
     for (j = 0; j < 4; j++)
       {
         K[crd].is = 1;
         K[crd].v = i;
         K[crd++].r = j;
       }
    }

    void swap (int src, int dest)
    {
        card temp;
        temp = K[dest];
        K[dest] = K[src];
        K[src] = temp;
    }

    void shuffle ()
    {
       shuffle (-1, -1);
    }

    void shuffle (int cv, int cr)
    {
       for (i = 0; i < 1024; i++)
       {
        int src, dest;
        do { src = random(36); }
        while (this->K[src].v == cv && this->K[src].r == cr);

        do { dest = random(36); }
        while (this->K[dest].v == cv && this->K[src].r == cr);

        swap (src, dest);
       }
    }

    void show ()
    {
      for (i = 0; i < 36; i++)
      {
        textbackground(0);
        textcolor (((i & 0x1C) >> 2) + 8 );

        if (K[i].is) {

        switch (K[i].v) {
         case 0: cprintf ("6"); break;
         case 1: cprintf ("7"); break;
         case 2: cprintf ("8"); break;
         case 3: cprintf ("9"); break;
         case 4: cprintf ("10"); break;
         case 5: cprintf ("J"); break;
         case 6: cprintf ("Q"); break;
         case 7: cprintf ("K"); break;
         case 8: cprintf ("T"); break;
        }

        switch (K[i].r) {
         case 0: cprintf ("\x03"); break;
         case 1: cprintf ("\x04"); break;
         case 2: cprintf ("\x05"); break;
         case 3: cprintf ("\x06"); break;
        }
       }  else cprintf ("__");
      }

     printf ("\n");
    }

    int add (rasklad *T)
    {
      if (T->K[0].is == 0) return (0);
      this->K[this->pointer++] = T->K[0];
      for (i = 0; i<35; i++) T->K[i] = T->K[i+1];
      T->K[35].is = 0;
      return (1);
    }

    int svertka ()
    {
      int flag = 0;
      for (i = 0; i < 34; i++)
        if ((this->K[i].v == this->K[i+2].v ||
        this->K[i].r == this->K[i+2].r) &&
        (this->K[i].is && this->K[i+2].is))
         {
           for (j = i; j < this->pointer; j++) this->K[j] = this->K[j+1];
           this->pointer--;
           flag = 1;
         }

      return (flag);
    }

    void copy (rasklad T)
    {
       for (i = 0; i < 36; i++) this->K[i] = T.K[i];
    }

};

void welcome_screen()
     {
      textbackground(0); clrscr();
      textcolor (14); textbackground(2);
      cprintf ("  Medichi Pasians");
      cprintf ("                                                (c) neko v1.0  \r\n");
      cprintf ("Searching...\r");
      textcolor(7);
     }

rasklad R; /* source */
rasklad D; /* destination */
rasklad E; /* enumeratic */

void main() {

     int step = 0;
     clock_t start, end;
     welcome_screen();

     start = clock();
     randomize();
     do {
       step++;
       R.init(); D.clear();
       R.shuffle();
       E.copy(R);
       while (D.add(&R)) while (D.svertka()) { }

     } while (D.K[2].is == 1);
     end = clock();

     textbackground(0);
     cprintf ("Successful, is:       \n\r");
     E.show();
     printf("\nsteps: %d", step);
     printf ("\ntime: %fs. ", (end-start)/CLK_TCK);
     getch();

}


--------------------
Хочу осознаться :(
Перейти в начало страницы
 
+Цитировать сообщение
Гость_Astrey_*
сообщение 17.11.2008, 19:33
Сообщение #2





Гости






И как ею воспользоватся? И чем тебе изначальная прога PM, не понравилось?

Перейти в начало страницы
 
+Цитировать сообщение
Абрис
сообщение 17.11.2008, 22:11
Сообщение #3


Свой человек
****

Группа: Пользователи
Сообщений: 356
Регистрация: 22.2.2007
Из: кусь
Пользователь №: 2 163
Знак Зодиака:
Страна:




здесь как минимум 2 такие проги



--------------------
Чтобы стать новатором, нужно сначала забыть о традициях
Перейти в начало страницы
 
+Цитировать сообщение
Нэко
сообщение 18.11.2008, 18:40
Сообщение #4


Один из многих
**

Группа: Пользователи
Сообщений: 137
Регистрация: 20.7.2008
Из: Интернет
Пользователь №: 11 333
Знак Зодиака:
Страна:




Честно говоря, я просто сам решил написать, чтобы все наглядно выглядело. Кстати, спасибо за проги. И что за изначальная прога?

По сути, я думал, что программ, складывающих цепочки ПМ, мало, или вообще нет, поэтому и написал здесь, на форуме, думал, интересно будет. А на деле я просто как-то решил сложить пасьянс, самому складывать было влом, под рукой инета не было, поэтому написал программу, и увидел, что в действительности, всего переборных вариантов от 4 до 1500, не больше.

Сообщение отредактировал Нэко - 18.11.2008, 18:54


--------------------
Хочу осознаться :(
Перейти в начало страницы
 
+Цитировать сообщение
IFeelFree
сообщение 10.2.2009, 16:34
Сообщение #5


Один из многих
**

Группа: Пользователи
Сообщений: 71
Регистрация: 28.5.2008
Из: Татарстан
Пользователь №: 9 884
Знак Зодиака:
Страна:




http://lucidart.ru/cgi-bin/medichi.pl
прога раскладывает ПМ.


--------------------
да пребудет с вами СИЛА!
Перейти в начало страницы
 
+Цитировать сообщение
ФлеГг
сообщение 9.4.2010, 10:37
Сообщение #6


Проходивший мимо
*

Группа: Пользователи
Сообщений: 43
Регистрация: 6.4.2010
Пользователь №: 21 847
Знак Зодиака:
Страна:




.

Сообщение отредактировал ФлеГг - 9.5.2010, 17:24


--------------------
"Повторите-ка свое имя более пятидесяти раз, и вы обнаружите, что вы - никто."
(с) Стивен Кинг ("Бегущий Человек")
Перейти в начало страницы
 
+Цитировать сообщение

Ответить в данную темуНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

Текстовая версия Сейчас: 18.11.2017, 12:02