Pull to refresh
-1
0
Алексей Изумрудов @elanc

Пользователь

Send message
Ваш способ, вероятно, наиболее быстрый, но я предпочитаю жесткий рандом!
Я изучаю Си и очень люблю судоку, так что написал свой генератор судоку, который можно использовать и для решения при совсем небольшой доработке. В отличии от Вашего генератора я не использую готовую матрицу, а генерирую первую строку и «решаю» остальную часть путем перебора. Конечно, мой вариант очень сильно проигрывает по производительности Вашему, зато всегда оригинальное судоку, а в варианте с перестановкой строк часто при решении замечаешь систему перестановки и судоку уже становится очень простым в решении.

Исходник
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

#define setBit(var, bit)    var |= 1 << bit
#define checkBit(var, bit)  var & (1 << bit)

enum { CLEAN = -1, LINE, ROW, SECTOR };

struct _cell {
  uint8_t  value, line, row, sector;
  uint16_t used;
};

typedef struct _cell t_cell;

t_cell *checkBox[3][9][9];
t_cell  sol[81];

int checkCell(int cell);

int
main(int argc, char **argv)
{
  register int i, j = 0;
  int u = 0;

  memset(checkBox, 0, sizeof(checkBox));
  memset(sol, 0, sizeof(sol));

  /* Initialization */
  for(i = 0; i < 81; i++) {
    sol[i].line   = i / 9;
    sol[i].row    = i % 9;
    sol[i].sector = (((i / 9) / 3) * 3) + ((i % 9) / 3);
    checkBox[LINE][i / 9][i % 9] = &sol[i];
    checkBox[ ROW][i % 9][i / 9] = &sol[i];
    while(checkBox[SECTOR][sol[i].sector][j])
      ++j;
    checkBox[SECTOR][sol[i].sector][j] = &sol[i];
    j = 0;
  }

  srand(time(NULL));

  /* Generate solution */
  for(i = 0; i < 81; i++) {
    do {
      do {
        u = 0;
        if(sol[i].used == 511) {
          setBit(sol[i-1].used, (sol[i-1].value - 1));
          sol[i].used = sol[i].value = 0;
          i -= 2;
          u = 1;
          break;
        }
        sol[i].value = 1 + rand() % 9;
      } while((checkBit(sol[i].used, (sol[i].value - 1))));
      if(u)
        break;
    } while(checkCell(i) != CLEAN);
  }

  /* Display result */
  for(i = 0; i < 9; i++) {
    if(i%3 == 0)
      printf("-------------------------\n");
    printf("| %d %d %d | %d %d %d | %d %d %d |\n",
      sol[i*9].value,   sol[i*9+1].value, sol[i*9+2].value,
      sol[i*9+3].value, sol[i*9+4].value, sol[i*9+5].value,
      sol[i*9+6].value, sol[i*9+7].value, sol[i*9+8].value
    );
  }
  printf("-------------------------\n");

  return 0;
}

int
checkCell(int cell)
{
  register int i;
  int result = CLEAN;

  for(i = 0; i < 9; i++) {
    if(&sol[cell] != checkBox[LINE][sol[cell].line][i]) {
      if(sol[cell].value == checkBox[LINE][sol[cell].line][i]->value)
        result = LINE;
    }
    if(&sol[cell] != checkBox[ROW][sol[cell].row][i]) {
      if(sol[cell].value == checkBox[ROW][sol[cell].row][i]->value)
        result = ROW;
    }
    if(&sol[cell] != checkBox[SECTOR][sol[cell].sector][i]) {
      if(sol[cell].value == checkBox[SECTOR][sol[cell].sector][i]->value)
        result = SECTOR;
    }
  }
  if(result != CLEAN) {
    setBit(sol[cell].used, (sol[cell].value - 1));
  }

  return result;
}



P.S. Сразу хочу извиниться за качество кода, т.к. «я — не волшебник, а только учусь».
Да я его как пример привел. Просто я «ляпы» из предлагаемых ими сериалов не помню.
Газпром-Медиа? Это он о now.ru что ли? О! Я имел несчастье познакомиться с этим сайтом — думал сериалы «легально» смотреть. В результате за деньги ты имеешь говнокачество, причем их сервера еще и не справляются и ты ждешь пока закачает наперед, говноперевод от студий, переводящих за три копейки и которым что-то не позволяет заглянуть в скрипты, прилагаемые к сериалу, а в итоге, как с Babylon 5 — Лондо в застрявшем лифте говорит «Green Two» (мол, зеленый сектор, уровень 2), а переводят «Дежурный!» или в одной серии у нас Центавры, в другой — Центавреане, а в третьей — вообще Кентавры! Ну и конечно кульминация маразма — вылезающие каждые минут десять надписи в пол-экрана о том, что все права защищены и об ответственности за их нарушение.

Ах, чуть не забыл! Еще в нескольких сериалах увидел «супер»-перевод надписей: белым Arial'ом без сглаживания поверх оригинальной надписи! Представьте, например, в «Fringe» трехмерную красивую надпись с названием местоположения событий? Ну а теперь представьте поверх нее надпись в стиле «Мы рисуем в Paint».
В ключе последних новостей об уровне радиационного облучения, которое будет получено первопроходцами Марса во время полета до планеты назначения, выглядит крайне подозрительно…
Русский Иван — он такой! Радиацию водкой выводит и ему ничего нестрашно! =)
Обладатель P4 3ГГц, 2ГБ ОЗУ и HD4650 — тоже нормально смог посмотреть. Вынужден сказать, что culling ваш не очень то и хорошо работает. Если в поле зрения оказывается более половины поселка — fps падает до 0-1, причем неважно, смотрю ли я сверху или передо мной находится какое-то строение и за ним весь остальной поселок. А так — ну уж больше 20 точно. Это я в оконном режиме был.
Задумка, конечно, очень крутая. Такое бы в Яндекс(Гугл).Карты в функционал прокладки маршрута по городу… Все-таки более наглядно, чем панорамы.
Ох! Вот он — подарок мечты для некоторых моих знакомых!
И ещё, чтоб на упаковке был слоган «Дубовым пользователям — дубовая мышь!»!!!
Десяток бы точно взял!

P.S. Да… Увидел цену… Я уж лучше себе такой шедевр куплю! Не стоят эти «прокладки» между клавиатурой и креслом такой красоты и трудов мастера!
Хотел сделать простую проверку на вшивость и посмотреть, когда домены созданы… ingress.com существует аж с 1998 года… Интересно, сколько у Google ещё таких доменов прозапас?
P.S. Домен для Shadow Cities создан в 2010 году.
P.P.S. Посмотрел внимательнее и из технических данных похоже, что Google просто выкупила домен.
Боюсь, что ключевое слово тут именно «вступили»… Прибалтика тоже «вступила»…
Лучше бы кто-нибудь нашел наконец описание фракций! Я уже обгуглился! Кто такие и какие цели преследуют представители каждой фракции? С одной стороны хочется присоединиться к Протестантам, так как их меньше, но рациональная часть мозга говорит, что нужно выяснить кто «плохой», а кто «хороший»…
Да Миром уже давно правят деньги. И Вторая мировая война окончательно подсадила человечество на эту иглу. Ведь любая война требует денег и на восстановление уничтоженного тоже требуются деньги. Все стали должны друг другу и у всех появилась необходимость заработать как можно больше денег. И в конечном счете сейчас у многих людей в голове стамиллиметровым гвоздем прибита «заповедь»: денег мало не бывает — возьми, сколько успеешь.
Человечество пришло к очередному периоду декаденства в своем развитии и, мне кажется, последнему.
Как бы с «выдающимися» правы не оказались…
Кстати, шутки-шутками, но я только благодаря торрентам посмотрел за последние несколько лет немало хороших отечественных фильмов, причем фильмов, о которых я так и не услышал ни одного реклама блока и не увидел ни в одном прокате.
Как по мне, так нужно не с бесплатным распространением бороться, а просто создать возможность людям после этого бесплатного ознакомления с продуктом отблагодарить автора и(ли) купить этот продукт.
Наивные решили, что раз они не могут решить реальные проблемы в стране, то будут решать проблемы виртуальные. Ну-ну…
Хотя может и последнее делается лишь для создания видимости бурной деятельности…
В любом случае — руки прочь от наших интернетов! Мы тут как-нибудь и без вас разберемся!
В таких случаях следует писать «IMHO», а не «уж извините».
А потом окажется, что всё на самом деле так.
P.S. К сожалению не смог найти в более хорошем качестве.
Регуляцию морд лица сотрудников правительства нужно срочно вводить, а то скоро ни в телевизор, ни в газету с такой «харизмой» помещаться не будут!
Хотите безопасный интернет для детей, депутатов, лиц с обостренным «чувством верующего» (в кавычках, потому до сих пор нет точного определения, что же это такое) и других незащищенных групп населения — создавайте БЕЛЫЙ список! И для бюджета это будет полезнее — не органы будут отслеживать контент сайтов (представьте, какой штат создадут для этой цели), а владельцы сайтов сами будут предоставлять все материалы, чтоб их в этот белый список добавили.
И волки сыты и овцы целы!
Мы с тобой одной веры, брат!
Где же литрбол и клавотоптание?
Блин! Как только рисунок к топику увидел — сразу Роджера Вилко вспомнил…
Да при таких, что наши долбо*бы блокируют неугодные им сайты по IP-адресам и в случаи, если это массовый хостинг, то кроме неугодного сайта блокируется еще чертова куча сайтов! И тут на выручку приходит Tor.
Что-то уж слишком яро эти «борцы» борются с пидобиром… Как будто с собственным пороком… Может следует их через психиатра и полиграф прогонять перед допуском к этой «борьбе»? Ну да бы убедиться в чистоте помыслов.
А насчет Tor — только вчера пришлось его качать, т.к. сайт, который нужно было посетить, имел неосторожность разделить один и тот же IP-адрес с каким-то не угодившим «правительству», а Билайн крайне быстро реагирует на такие «угрозы».

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity