Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Шахматная доска - Мир MS Excel

Старая форма входа
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: китин  
Мир MS Excel » Работа и общение » Мозговой штурм » Шахматная доска
Шахматная доска
MCH Дата: Среда, 14.11.2012, 15:03 | Сообщение № 1
Группа: Админы
Ранг: Старожил
Сообщений: 2003
Репутация: 751 ±
Замечаний: ±

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

Выпиленные клетки задаются в ячейках A1:An, записью от a1 до h8 (строчная латинская буква совместно с цифрой), при этом заполнено столько ячеек сколько выпиливается клеток.

Пример 1.
Если в ячейках A1:A3 указаны следующие клетки:
A1: a1
A2: a2
A3: b1
Результат формулы должен быть равен 8

Пример 2.
A1: a1
A2: a2
A3: b1
A4: b2
Результат - 8

Пример 3.
A1: h8
Результат - 4

Пример 4:
в A1:A15:
a1, a2, a3, a4, a5, a6, a7, a8, b1, c1, d1, e1, f1, g1, h1
Результат - 32

Задачу можно решить как макросом, так и формулой,
Для меня формулой интереснее


Сообщение отредактировал MCH - Среда, 14.11.2012, 15:04
 
Ответить
СообщениеИз шахматной доски по границам клеток выпилили связную (не распадающуюся на части) фигуру без дыр. Требуется определить ее периметр.

Выпиленные клетки задаются в ячейках A1:An, записью от a1 до h8 (строчная латинская буква совместно с цифрой), при этом заполнено столько ячеек сколько выпиливается клеток.

Пример 1.
Если в ячейках A1:A3 указаны следующие клетки:
A1: a1
A2: a2
A3: b1
Результат формулы должен быть равен 8

Пример 2.
A1: a1
A2: a2
A3: b1
A4: b2
Результат - 8

Пример 3.
A1: h8
Результат - 4

Пример 4:
в A1:A15:
a1, a2, a3, a4, a5, a6, a7, a8, b1, c1, d1, e1, f1, g1, h1
Результат - 32

Задачу можно решить как макросом, так и формулой,
Для меня формулой интереснее

Автор - MCH
Дата добавления - 14.11.2012 в 15:03
vikttur Дата: Среда, 14.11.2012, 18:11 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2941
Репутация: 526 ±
Замечаний: 0% ±

Что за издевательство над досукой для любимой игры?! smile

Почему "доска" расположена не в A1:H8?
Неправильный ввод (распадающаяся фигура) не рассматриваем. Правильно понял?
 
Ответить
СообщениеЧто за издевательство над досукой для любимой игры?! smile

Почему "доска" расположена не в A1:H8?
Неправильный ввод (распадающаяся фигура) не рассматриваем. Правильно понял?

Автор - vikttur
Дата добавления - 14.11.2012 в 18:11
MCH Дата: Среда, 14.11.2012, 18:39 | Сообщение № 3
Группа: Админы
Ранг: Старожил
Сообщений: 2003
Репутация: 751 ±
Замечаний: ±

Quote (vikttur)
Почему "доска" расположена не в A1:H8?

В столбце A указываются только вырезаемые клетки

Quote (vikttur)
Неправильный ввод (распадающаяся фигура) не рассматриваем. Правильно понял?

Подразумевается, что исходная информация корректна, клетки указаны без повторения.
То что фигура "не разваливается" думаю не имеет значения, т.к. при правильно написанной формуле будет посчитан периметр как единой фигуры, так и нескольки отделно расположенных фигур. Имелось ввиду, что если клетки указаны рядом, то они принадлежат одной фигуре

Задачу попытался изобразить в файле

PS: Виктор, за прогул двух последних задач с тебя задача, а лучше две smile
К сообщению приложен файл: Chess.xls (18.0 Kb)


Сообщение отредактировал MCH - Среда, 14.11.2012, 18:40
 
Ответить
Сообщение
Quote (vikttur)
Почему "доска" расположена не в A1:H8?

В столбце A указываются только вырезаемые клетки

Quote (vikttur)
Неправильный ввод (распадающаяся фигура) не рассматриваем. Правильно понял?

Подразумевается, что исходная информация корректна, клетки указаны без повторения.
То что фигура "не разваливается" думаю не имеет значения, т.к. при правильно написанной формуле будет посчитан периметр как единой фигуры, так и нескольки отделно расположенных фигур. Имелось ввиду, что если клетки указаны рядом, то они принадлежат одной фигуре

Задачу попытался изобразить в файле

PS: Виктор, за прогул двух последних задач с тебя задача, а лучше две smile

Автор - MCH
Дата добавления - 14.11.2012 в 18:39
ZORRO2005 Дата: Среда, 14.11.2012, 21:16 | Сообщение № 4
Группа: Друзья
Ранг: Обитатель
Сообщений: 382
Репутация: 148 ±
Замечаний: 0% ±

Excel2010
Миша,
мы рассматриваем такие варианты выреза, как D11:F13 (периметр=12)?
Иначе:
Code
=СЧЁТЗ(A:A)*2+2


Сообщение отредактировал ZORRO2005 - Среда, 14.11.2012, 21:33
 
Ответить
СообщениеМиша,
мы рассматриваем такие варианты выреза, как D11:F13 (периметр=12)?
Иначе:
Code
=СЧЁТЗ(A:A)*2+2

Автор - ZORRO2005
Дата добавления - 14.11.2012 в 21:16
MCH Дата: Среда, 14.11.2012, 21:59 | Сообщение № 5
Группа: Админы
Ранг: Старожил
Сообщений: 2003
Репутация: 751 ±
Замечаний: ±

Quote (ZORRO2005)
мы рассматриваем такие варианты выреза, как D11:F13 (периметр=12)?

Если вырез D11:F13, то он должен быть описан в ячейках A1:A9 записью:
A1: b3
A2: c3
A3: d3
A4: b4
A5: c4
A6: d4
A7: b5
A8: c5
A9: d5

Периметр при этом равен 12


Сообщение отредактировал MCH - Среда, 14.11.2012, 22:02
 
Ответить
Сообщение
Quote (ZORRO2005)
мы рассматриваем такие варианты выреза, как D11:F13 (периметр=12)?

Если вырез D11:F13, то он должен быть описан в ячейках A1:A9 записью:
A1: b3
A2: c3
A3: d3
A4: b4
A5: c4
A6: d4
A7: b5
A8: c5
A9: d5

Периметр при этом равен 12

Автор - MCH
Дата добавления - 14.11.2012 в 21:59
MCH Дата: Четверг, 15.11.2012, 00:29 | Сообщение № 6
Группа: Админы
Ранг: Старожил
Сообщений: 2003
Репутация: 751 ±
Замечаний: ±

Прикрутил к файлу небольшой макрос, который раскрашивает фигуру и считает периметр, думаю так будет понятнее
Можно выбрать фигуру из готовых вариантов, либо нарисовать свою задав нужные клетки в столбце A
К сообщению приложен файл: Chess2.xls (42.5 Kb)


Сообщение отредактировал MCH - Четверг, 15.11.2012, 13:25
 
Ответить
СообщениеПрикрутил к файлу небольшой макрос, который раскрашивает фигуру и считает периметр, думаю так будет понятнее
Можно выбрать фигуру из готовых вариантов, либо нарисовать свою задав нужные клетки в столбце A

Автор - MCH
Дата добавления - 15.11.2012 в 00:29
Gustav Дата: Четверг, 15.11.2012, 12:03 | Сообщение № 7
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2748
Репутация: 1138 ±
Замечаний: 0% ±

начинал с Excel 4.0, видел 2.1
На данный момент имею вариант решения формулами с шестью доп.столбцами и одной результирующей ячейкой, выдающей периметр. Общая длина 7 формул - 111 знаков. Попробую всё это втиснуть в одну ячейку. По ощущениям, знаки возрастут в 5-10 раз.


МОИ: Ник, Tip box: 41001663842605
 
Ответить
СообщениеНа данный момент имею вариант решения формулами с шестью доп.столбцами и одной результирующей ячейкой, выдающей периметр. Общая длина 7 формул - 111 знаков. Попробую всё это втиснуть в одну ячейку. По ощущениям, знаки возрастут в 5-10 раз.

Автор - Gustav
Дата добавления - 15.11.2012 в 12:03
ZORRO2005 Дата: Четверг, 15.11.2012, 15:52 | Сообщение № 8
Группа: Друзья
Ранг: Обитатель
Сообщений: 382
Репутация: 148 ±
Замечаний: 0% ±

Excel2010
Есть решение формулой!
Кол-во знаков не выкладываю пока.
 
Ответить
СообщениеЕсть решение формулой!
Кол-во знаков не выкладываю пока.

Автор - ZORRO2005
Дата добавления - 15.11.2012 в 15:52
SM Дата: Четверг, 15.11.2012, 17:39 | Сообщение № 9
Группа: Друзья
Ранг: Участник
Сообщений: 64
Репутация: 59 ±
Замечаний: 0% ±

2003
UDF (сорри):
К сообщению приложен файл: Chess-123.xls (30.5 Kb)


Excel изощрён, но не злонамерен
 
Ответить
СообщениеUDF (сорри):

Автор - SM
Дата добавления - 15.11.2012 в 17:39
MCH Дата: Четверг, 15.11.2012, 19:48 | Сообщение № 10
Группа: Админы
Ранг: Старожил
Сообщений: 2003
Репутация: 751 ±
Замечаний: ±

Quote (SM)
UDF (сорри):

Александр, приветствуются любые решения, на то он и "Мозговой штурм"

У меня в формуле менее 200 знаков, а UDF на 10 строчек
 
Ответить
Сообщение
Quote (SM)
UDF (сорри):

Александр, приветствуются любые решения, на то он и "Мозговой штурм"

У меня в формуле менее 200 знаков, а UDF на 10 строчек

Автор - MCH
Дата добавления - 15.11.2012 в 19:48
SM Дата: Четверг, 15.11.2012, 20:13 | Сообщение № 11
Группа: Друзья
Ранг: Участник
Сообщений: 64
Репутация: 59 ±
Замечаний: 0% ±

2003
Михаил, спасибо за задачу. Модель "распиловки шахматной доски" может пригодиться
для весьма практичных целей.


Excel изощрён, но не злонамерен
 
Ответить
СообщениеМихаил, спасибо за задачу. Модель "распиловки шахматной доски" может пригодиться
для весьма практичных целей.

Автор - SM
Дата добавления - 15.11.2012 в 20:13
Gustav Дата: Пятница, 16.11.2012, 16:03 | Сообщение № 12
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2748
Репутация: 1138 ±
Замечаний: 0% ±

начинал с Excel 4.0, видел 2.1
Quote (Gustav)
На данный момент имею вариант решения формулами с шестью доп.столбцами и одной результирующей ячейкой, выдающей периметр. Общая длина 7 формул - 111 знаков. Попробую всё это втиснуть в одну ячейку. По ощущениям, знаки возрастут в 5-10 раз.


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


МОИ: Ник, Tip box: 41001663842605
 
Ответить
Сообщение
Quote (Gustav)
На данный момент имею вариант решения формулами с шестью доп.столбцами и одной результирующей ячейкой, выдающей периметр. Общая длина 7 формул - 111 знаков. Попробую всё это втиснуть в одну ячейку. По ощущениям, знаки возрастут в 5-10 раз.


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

Автор - Gustav
Дата добавления - 16.11.2012 в 16:03
Gustav Дата: Воскресенье, 18.11.2012, 00:03 | Сообщение № 13
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2748
Репутация: 1138 ±
Замечаний: 0% ±

начинал с Excel 4.0, видел 2.1
Достиг 219 198 178 174 159 144 138. Попробую еще.

Вскрываемся в понедельник?


МОИ: Ник, Tip box: 41001663842605

Сообщение отредактировал Gustav - Воскресенье, 18.11.2012, 13:42
 
Ответить
СообщениеДостиг 219 198 178 174 159 144 138. Попробую еще.

Вскрываемся в понедельник?

Автор - Gustav
Дата добавления - 18.11.2012 в 00:03
ZORRO2005 Дата: Воскресенье, 18.11.2012, 00:43 | Сообщение № 14
Группа: Друзья
Ранг: Обитатель
Сообщений: 382
Репутация: 148 ±
Замечаний: 0% ±

Excel2010
Quote (Gustav)
Достиг 219. Попробую еще. Вскрываемся в понедельник?

Давайте в воскресенье вечером.
У меня 168. 136.


Сообщение отредактировал ZORRO2005 - Воскресенье, 18.11.2012, 12:08
 
Ответить
Сообщение
Quote (Gustav)
Достиг 219. Попробую еще. Вскрываемся в понедельник?

Давайте в воскресенье вечером.
У меня 168. 136.

Автор - ZORRO2005
Дата добавления - 18.11.2012 в 00:43
MCH Дата: Воскресенье, 18.11.2012, 10:23 | Сообщение № 15
Группа: Админы
Ранг: Старожил
Сообщений: 2003
Репутация: 751 ±
Замечаний: ±

Короткая, но медленная: 158
Быстрая: 164
 
Ответить
СообщениеКороткая, но медленная: 158
Быстрая: 164

Автор - MCH
Дата добавления - 18.11.2012 в 10:23
ZORRO2005 Дата: Воскресенье, 18.11.2012, 17:06 | Сообщение № 16
Группа: Друзья
Ранг: Обитатель
Сообщений: 382
Репутация: 148 ±
Замечаний: 0% ±

Excel2010
Вечереет...
Предлагаю начать с MCH, как самого длинного.
Надо его срочно вскрывать пока не укоротил до 50.
 
Ответить
СообщениеВечереет...
Предлагаю начать с MCH, как самого длинного.
Надо его срочно вскрывать пока не укоротил до 50.

Автор - ZORRO2005
Дата добавления - 18.11.2012 в 17:06
MCH Дата: Воскресенье, 18.11.2012, 17:41 | Сообщение № 17
Группа: Админы
Ранг: Старожил
Сообщений: 2003
Репутация: 751 ±
Замечаний: ±

Quote (ZORRO2005)
Предлагаю начать с MCH

Ну раз настаиваете

158:
[vba]
Code
=СЧЁТЗ(A:A)*4-СУММ(СЧЁТЕСЛИ(A:A;СИМВОЛ(СТРОКА(8:73)/8+96)&ОСТАТ(СТРОКА(8:73);8)+1)*СЧЁТЕСЛИ(A:A;СИМВОЛ(СТРОКА(8:73)/8+{96;97})&ОСТАТ(СТРОКА(8:73);8)+{2;1}))*2
[/vba]
Более быстрая формула отличается от короткой тем, что в СЧЕТЕСЛИ вместо A:A указан диапазон A1:A64

UDF:
[vba]
Code
Function chess&(r As Range)
     Dim a&(8, 8), i&, j&, x
     For Each x In r.Value
         If x Like "[A-Ha-h][1-8]" Then a(Asc(LCase$(x)) - 96, Val(Right$(x, 1))) = 1
     Next x
     For i = 1 To 8
         For j = 1 To 8
             chess = chess + 2 * a(i, j) * (2 - a(i - 1, j) - a(i, j - 1))
     Next j, i
End Function
[/vba]
К сообщению приложен файл: Chess3.xls (58.5 Kb)
 
Ответить
Сообщение
Quote (ZORRO2005)
Предлагаю начать с MCH

Ну раз настаиваете

158:
[vba]
Code
=СЧЁТЗ(A:A)*4-СУММ(СЧЁТЕСЛИ(A:A;СИМВОЛ(СТРОКА(8:73)/8+96)&ОСТАТ(СТРОКА(8:73);8)+1)*СЧЁТЕСЛИ(A:A;СИМВОЛ(СТРОКА(8:73)/8+{96;97})&ОСТАТ(СТРОКА(8:73);8)+{2;1}))*2
[/vba]
Более быстрая формула отличается от короткой тем, что в СЧЕТЕСЛИ вместо A:A указан диапазон A1:A64

UDF:
[vba]
Code
Function chess&(r As Range)
     Dim a&(8, 8), i&, j&, x
     For Each x In r.Value
         If x Like "[A-Ha-h][1-8]" Then a(Asc(LCase$(x)) - 96, Val(Right$(x, 1))) = 1
     Next x
     For i = 1 To 8
         For j = 1 To 8
             chess = chess + 2 * a(i, j) * (2 - a(i - 1, j) - a(i, j - 1))
     Next j, i
End Function
[/vba]

Автор - MCH
Дата добавления - 18.11.2012 в 17:41
ZORRO2005 Дата: Воскресенье, 18.11.2012, 18:05 | Сообщение № 18
Группа: Друзья
Ранг: Обитатель
Сообщений: 382
Репутация: 148 ±
Замечаний: 0% ±

Excel2010
Gustav, твоя очередь
 
Ответить
СообщениеGustav, твоя очередь

Автор - ZORRO2005
Дата добавления - 18.11.2012 в 18:05
Gustav Дата: Воскресенье, 18.11.2012, 18:09 | Сообщение № 19
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2748
Репутация: 1138 ±
Замечаний: 0% ±

начинал с Excel 4.0, видел 2.1
Да-да, я как раз готовил текст smile

138:
[vba]
Code
=2*СУММ(1-ЕНД(ПОИСКПОЗ(СТРОКА(9:162);НАИМЕНЬШИЙ({0;9;81;82}+9*ПСТР(A1:A64&"00";2;1)+КОДСИМВ(A1:A64&"
")-96;СТРОКА(1:256));)))-4*СЧЁТЗ(A:A)
[/vba]

Обращаю внимание, что перенос строки (символ с кодом 10, вводимый при помощи Alt+Enter) после КОДСИМВ(A1:A64&" участвует в вычислениях! Для большей ясности см. в файле предыдущий вариант на 144 знака.

У меня подход был такой. Он хорошо просматривается на втором листе (Лист1). Каждая ячейка (клетка доски), упомянутая в колонке A, вносит свои 4 границы в общий список всех границ. Из этого общего списка надо было исключить те границы, которые встречаются два раза, или, что то же самое, оставить только те, которые встречаются один раз, и пересчитать их.

Оставалось только разработать систему генерирования уникальных кодов границ в зависимости от адреса ячейки. Я разместил горизонтальные границы ячеек, грубо говоря, в одной сотне, а вертикальные - в другой. Позже сотни (10 х 10) ужались до "восьмидесяти одноек" (9 х 9) - для экономии знаков. Строки адресов записывались в десятки (позже в "девятки"), а столбцы - в единицы. Число "9" - потому что 8 ячеек ("клеток доски"), расположенные в ряд в одном направлении, имеют 9 перпендикулярных границ в этом направлении. Т.е. ячейки в схеме (и это очевидно) располагаются между границами.

Функция НАИМЕНЬШИЙ используется для превращения двухмерного массива (4 столбца границ х строк по кол-ву клеток в колонке A) в одномерный массив (с тем же общим кол-вом элементов), отсортированный по возрастанию. 256 это = 64 клетки (всего возможные на шахматной доске) x 4 границы.
К сообщению приложен файл: Chess_G.xls (42.0 Kb)


МОИ: Ник, Tip box: 41001663842605

Сообщение отредактировал Gustav - Воскресенье, 18.11.2012, 22:26
 
Ответить
СообщениеДа-да, я как раз готовил текст smile

138:
[vba]
Code
=2*СУММ(1-ЕНД(ПОИСКПОЗ(СТРОКА(9:162);НАИМЕНЬШИЙ({0;9;81;82}+9*ПСТР(A1:A64&"00";2;1)+КОДСИМВ(A1:A64&"
")-96;СТРОКА(1:256));)))-4*СЧЁТЗ(A:A)
[/vba]

Обращаю внимание, что перенос строки (символ с кодом 10, вводимый при помощи Alt+Enter) после КОДСИМВ(A1:A64&" участвует в вычислениях! Для большей ясности см. в файле предыдущий вариант на 144 знака.

У меня подход был такой. Он хорошо просматривается на втором листе (Лист1). Каждая ячейка (клетка доски), упомянутая в колонке A, вносит свои 4 границы в общий список всех границ. Из этого общего списка надо было исключить те границы, которые встречаются два раза, или, что то же самое, оставить только те, которые встречаются один раз, и пересчитать их.

Оставалось только разработать систему генерирования уникальных кодов границ в зависимости от адреса ячейки. Я разместил горизонтальные границы ячеек, грубо говоря, в одной сотне, а вертикальные - в другой. Позже сотни (10 х 10) ужались до "восьмидесяти одноек" (9 х 9) - для экономии знаков. Строки адресов записывались в десятки (позже в "девятки"), а столбцы - в единицы. Число "9" - потому что 8 ячеек ("клеток доски"), расположенные в ряд в одном направлении, имеют 9 перпендикулярных границ в этом направлении. Т.е. ячейки в схеме (и это очевидно) располагаются между границами.

Функция НАИМЕНЬШИЙ используется для превращения двухмерного массива (4 столбца границ х строк по кол-ву клеток в колонке A) в одномерный массив (с тем же общим кол-вом элементов), отсортированный по возрастанию. 256 это = 64 клетки (всего возможные на шахматной доске) x 4 границы.

Автор - Gustav
Дата добавления - 18.11.2012 в 18:09
MCH Дата: Воскресенье, 18.11.2012, 18:13 | Сообщение № 20
Группа: Админы
Ранг: Старожил
Сообщений: 2003
Репутация: 751 ±
Замечаний: ±

Блин, а я даже не видел, что Вы мене 140 сделали sad
тогда бы не вскрывался бы, а думал дальше

Серег, притормози, я еще помозгую


Сообщение отредактировал MCH - Воскресенье, 18.11.2012, 18:14
 
Ответить
СообщениеБлин, а я даже не видел, что Вы мене 140 сделали sad
тогда бы не вскрывался бы, а думал дальше

Серег, притормози, я еще помозгую

Автор - MCH
Дата добавления - 18.11.2012 в 18:13
Мир MS Excel » Работа и общение » Мозговой штурм » Шахматная доска
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!