|
Java форум JavaTalks форум программистов
|
|
|
|
| Предыдущая тема :: Следующая тема |
| Автор |
Сообщение |
Stormer : 11 Новичок
|
Дек 16, 2011 14:08 |
|
|
Тут я буду выкладывать свои "чудо"-наработки.
Начнём, пожалуй.
Программа строит поле размером game_size*game_size.
В каждую позицию рандомно заполняет 1, либо -1.
А потом считает, сколько получилось пятерок 1 или -1 (аналог крестиков-ноликов на большом поле) по вертикали/горизонтали/диагонали.
(Прим. 6 подряд идущих единиц засчитаются за 2 пятерки).
Если кто-то мне скажет про "повторяющиеся" куски кода, то пусть либо топает мимо, либо попробует хотя бы одну диагональ загнать в один цикл.
Может быть получится... У одного из 1000.
Итак, вспомогательный класс:
| Код: |
public class wr{
public void wr (long s) {
System.out.println(s);
}
public void wr1 (long s) {
System.out.print(s);
}
public void wr (String s) {
System.out.println(s);
}
public void wr1 (String s) {
System.out.print(s);
}
public void wr (int s) {
System.out.println(s);
}
public void wr1 (int s) {
System.out.print(s);
}
public void wr (boolean s) {
System.out.println(s);
}
public void wr1 (boolean s) {
System.out.print(s);
}
} |
Основной класс:
| Код: |
import java.util.Random;
class GameConstructor {
public int[][] buildField (int n){
int[][] field = new int[n][n];
Random checking = new Random ();
int check_var = 0;
for (int i=0; i<n; i++) {
for (int j=0; j<n; j++) {
check_var=checking.nextInt(2);
if (check_var==0) {
field[i][j]=-1;} else
field[i][j]=1;
if (field[i][j]==-1) {
if (j==n-1) {
new wr().wr(field[i][j]);
} else
new wr().wr1(field[i][j]+" ");
} else
if (j==n-1) {
new wr().wr(" "+field[i][j]);
} else
new wr().wr1(" "+field[i][j]+" ");
}
}
return field;
}
}
class Checker {
int[][] a;
int zeroNumber=0;
int crossNumber=0;
void check_position (int sign_ver, int sign_hor, int ver, int hor) {
byte inner_counter=0;
for (int v=0; v<5; v++) {
if (a[ver+v*(sign_ver)][hor+v*(sign_hor)]==1)
inner_counter++; else
inner_counter--;
}
if (inner_counter==5)
crossNumber++;
if (inner_counter==-5)
zeroNumber++;
}
public void numberOfIntersections (int[][] a){
this.a=a;
//Horizontal:
for (int j=0; j<a.length; j++){
for (int i=0; i<a.length-4; i++) {
check_position(1,0,i,j);
}
}
//Vertical:
for (int i=0; i<a.length; i++){
for (int j=0; j<a.length-4; j++) {
check_position(0,1,i,j);
}
}
// The first diagonal part 1:
for (int j=4; j<a.length; j++) {
for (int k=0; k<j-3; k++) {
check_position(1,-1,k,j-k);
}
}
// The first diagonal part 2:
for (int j=1; j<a.length-4; j++) {
for (int k=a.length-1; k>j+3; k--) {
check_position(-1,1,k,j-1+a.length-k);
}
}
// The second diagonal part 1:
for (int i=4; i<a.length;i++) {
for (int k=a.length-1; k>a.length-i+2;k--) {
check_position(-1,-1,i-a.length+k+1,k);
}
}
// The second diagonal part 2:
for (int i=a.length-5; i>0; i--) {
for (int k=0; k<a.length-i-4; k++) {
check_position(1,1,i+k,k);
}
}
}
public int crossNumber (){
return crossNumber;
}
public int zeroNumber (){
return zeroNumber;
}
}
public class PlayField {
public static void main (String[] args) {
int game_size=6; //размеры поля
GameConstructor game = new GameConstructor();
Checker checker = new Checker();
checker.numberOfIntersections(game.buildField(game_size));
new wr().wr("Количество пятерок крестиков: "+checker.crossNumber);
new wr().wr("Количество пятерок ноликов: "+checker.zeroNumber);
}
} |
P.s. насчёт оформления кода критика принимается. В оформлении я не силён.
Насчёт оптимизации отклоняется, и авторы таких сообщений идут лесом. Ибо тут 95% как минимум мозг сломает, увидев первые же индексы, и даже не поймёт, что происходит в программе, даю гарантию.
Последний раз редактировалось: Stormer (Дек 16, 2011 14:25), всего редактировалось 1 раз |
|
|
|
 |
Evgin : 748 Постоянный посетитель Откуда: (SPB)
|
Дек 16, 2011 14:19 |
|
|
| Stormer писал(а): |
| Тут я буду выкладывать свои "чудо"-наработки. |
Если верить заголовку темы - вам лучше сразу сюда: http://govnokod.ru/ _________________ Велюровый Петон приветствует Вас :-*
----------------------------
Кроме того, я думаю, что Карфаген должен быть разрушен!!!
----------------------------
javax.swing.JDesktopPane <--- Печаль
----------------------------
НЕ ФЛУДИ, КОМРАД! |
|
|
|
 |
Stormer : 11 Новичок
|
Дек 16, 2011 14:27 |
|
|
| Evgin писал(а): |
| Stormer писал(а): |
| Тут я буду выкладывать свои "чудо"-наработки. |
Если верить заголовку темы - вам лучше сразу сюда: http://govnokod.ru/ |
Посылаю Вас туда же или еще дальше - как Вам будет угодно. |
|
|
|
 |
nullvoid : 505 Постоянный посетитель Откуда: Красноярск
|
Дек 16, 2011 14:34 |
|
|
|
|
|
|
 |
Петр : 707 Постоянный посетитель Откуда: Москва
|
Дек 16, 2011 14:50 |
|
|
в любом случае молодец что что то делаешь.
но задача сильно простая.
а можешь сделать вот такую задачу.
есть радномное поле из 1 и 0
нужно определить самое большое множество единиц.
например
0 0 0 1 1 1
1 1 0 1 1 0
1 0 0 0 0 0
1 0 0 0 1 1
1 1 1 1 1 0
0 0 0 0 0 0
наибольшее множество 11.  |
|
|
|
 |
stolzen : 422 Бывалый Откуда: Нижний Новгород
|
Дек 16, 2011 14:53 |
|
|
|
|
|
|
 |
Stormer : 11 Новичок
|
Дек 16, 2011 14:56 |
|
|
| Петр писал(а): |
в любом случае молодец что что то делаешь.
но задача сильно простая.
а можешь сделать вот такую задачу.
есть радномное поле из 1 и 0
нужно определить самое большое множество единиц.
например
0 0 0 1 1 1
1 1 0 1 1 0
1 0 0 0 0 0
1 0 0 0 1 1
1 1 1 1 1 0
0 0 0 0 0 0
наибольшее множество 11.  |
Спасибо.
Прошу прощения, но постановка вопроса не очень корректна.
Что значит "самое большое множество единиц"?
Строка/столбец, сод. наиб. их число? Или что? Надо формализовать.
Да, и Ваша задача слишком простая. |
|
|
|
 |
Петр : 707 Постоянный посетитель Откуда: Москва
|
Дек 16, 2011 14:58 |
|
|
соединение единиц. то есть множесвтво.
если просто то прошу показать решение. |
|
|
|
 |
Stormer : 11 Новичок
|
Дек 16, 2011 15:06 |
|
|
| Петр писал(а): |
соединение единиц. то есть множесвтво.
если просто то прошу показать решение. |
Но в том примере, который Вы привели, наибольшее такое "множество" единиц - явно не 11. Посмотрите внимательнее, сколько максимум идёт подряд единиц.
Второе: т.е. задача уже обретает смысл: найти строку/столбец максимальной длины, состоящий только из единиц.
А если оперировать словами множество, то множество может быть и таким например:
111
11
1111111
11
Как Вы будете сранивать два множества такого рода на предмет того, какое из них больше? То, в котором больше единиц? Или то которое больше в ширину или в высоту?
Поэтому сначала надо определить, какого множество вида, а потом определить его меру. |
|
|
|
 |
Петр : 707 Постоянный посетитель Откуда: Москва
|
Дек 16, 2011 15:11 |
|
|
есть поле
0 0 0 1 1 1
1 1 0 1 1 0
1 0 0 0 0 0
1 0 0 0 1 1
1 1 1 1 1 0
0 0 0 0 0 0
имеем множество 1.
0 0 0 1 1 1
1 1 0 1 1 0
1 0 0 0 0 0
1 0 0 0 1 1
1 1 1 1 1 0
0 0 0 0 0 0
кол-во входящих единиц 5
множество 2.
0 0 0 1 1 1
1 1 0 1 1 0
1 0 0 0 0 0
1 0 0 0 1 1
1 1 1 1 1 0
0 0 0 0 0 0
кол-во входящих единиц 11.
могу привести еще пример если надо. но вроде все понятно. |
|
|
|
 |
Stormer : 11 Новичок
|
Дек 16, 2011 15:16 |
|
|
| Петр писал(а): |
есть поле
0 0 0 1 1 1
1 1 0 1 1 0
1 0 0 0 0 0
1 0 0 0 1 1
1 1 1 1 1 0
0 0 0 0 0 0
имеем множество 1.
1 1 1
1 1
кол-во входящих единиц 5
множество 2.
1 1
1
1 1 1
1 1 1 1 1
кол-во входящих единиц 11.
могу привести еще пример если надо. но вроде все понятно. |
Да, хорошо, согласен. Но не сказано, как соединяются множества.
Только по вертикали и горизонтали или по диагонали еще могут?
А мера множества значит - просто кол-во единиц в нём. Чем больше единиц, тем оно "больше". Так? |
|
|
|
 |
Петр : 707 Постоянный посетитель Откуда: Москва
|
Дек 16, 2011 15:18 |
|
|
| я подредактировал предыдущее сообщение. там понятно как нужно определять множество. |
|
|
|
 |
Stormer : 11 Новичок
|
Дек 16, 2011 15:27 |
|
|
| Петр писал(а): |
| я подредактировал предыдущее сообщение. там понятно как нужно определять множество. |
Я имею в виду, вот так оно например может соединяться?
0 0 0 1 1 1
0 1 0 1 1 0
1 0 0 0 0 0
1 0 0 0 0 1
1 1 1 1 1 0
0 0 0 0 0 0 |
|
|
|
 |
Петр : 707 Постоянный посетитель Откуда: Москва
|
Дек 16, 2011 15:29 |
|
|
| сделайте сначало что не может. то есть только горизонтальное или вертикальне примыкание. а потом уже можите и диагональное. это ж сложнее. |
|
|
|
 |
PolarHare : 182 Новичок Откуда: Saint-Petersburg, Russia
|
Дек 16, 2011 18:45 |
|
|
| А разницы между есть/нету диагоналей? Это же просто поиск в ширину/покраска компонент связности. Ну разве что меньше массивы возможных ходов в два раза, но сам код не меняется. (ну или в два раза меньше копипаста, если массивы dx dy уже не модно) |
|
|
|
 |
|
|
Страница 1 из 3 На страницу 1, 2, 3 След. |
Список форумов
-> Основы языка Java |
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|