Перейти к публикации
  • Сейчас на странице   Всего пользователей: 3   (0 пользователей, 3 гостя)

Rooster

Программирование[8]

Рекомендованные сообщения

https://www.humblebundle.com/books/microsoft-and-dot-net-books

 

хамбл  на кучу книг мелкомягких  :hmm:


Торжество разума в том, чтобы уживаться с теми, у кого этого разума нет. Вольтер.
Чтобы хорошо высыпаться, нужно спать 8 часов в день. И еще столько же ночью.

Поделиться сообщением


Ссылка на сообщение

в тинькове промоакция какая то, в конце логическая задача - поле 3х3 с рубильниками (on/off), каждый рубильник переключает соседние и сам себя (соседство только по горизонтали и вертикали, диагональ не считается). нужно переключить все рубильники в одно положение

 

не осилил, написал сниппет который рандомно переключает один рубильник и чекает готово или нет, захуярил в цикле пока все не переключилось :hohol:

зачем думоть над задачей, когда можно забрутфорсить?

такое только 8х8 вроде было в квесте братья пилоты

 

как же я в своих 7 лет горел с этого ебучего холодильника, я так и не смог его открыть, пока  не приехал двоюродный брат и за 3 минуты сделал

:fffuuu: :fffuuu: :fffuuu: :fffuuu: :fffuuu: :fffuuu: :fffuuu:

SKYnv, Matriarch и FeelYourDestiny понравилось это

Торжество разума в том, чтобы уживаться с теми, у кого этого разума нет. Вольтер.
Чтобы хорошо высыпаться, нужно спать 8 часов в день. И еще столько же ночью.

Поделиться сообщением


Ссылка на сообщение

в тинькове промоакция какая то, в конце логическая задача - поле 3х3 с рубильниками (on/off), каждый рубильник переключает соседние и сам себя (соседство только по горизонтали и вертикали, диагональ не считается). нужно переключить все рубильники в одно положение

 

не осилил, написал сниппет который рандомно переключает один рубильник и чекает готово или нет, захуярил в цикле пока все не переключилось :hohol:

зачем думоть над задачей, когда можно забрутфорсить?

А начальные условия какие?

Поделиться сообщением


Ссылка на сообщение

 

в тинькове промоакция какая то, в конце логическая задача - поле 3х3 с рубильниками (on/off), каждый рубильник переключает соседние и сам себя (соседство только по горизонтали и вертикали, диагональ не считается). нужно переключить все рубильники в одно положение

 

не осилил, написал сниппет который рандомно переключает один рубильник и чекает готово или нет, захуярил в цикле пока все не переключилось :hohol:

зачем думоть над задачей, когда можно забрутфорсить?

А начальные условия какие?

 

да просто рубильники в каком нибудь рандомном положении стоят, какая разница? это как кубик рубика, начальное положение не сильно важно (если мы не считаем минимальное количество действий для сборки), все равно в конечную точку можно прийти из любой начальной


Лишь ощутив баттхерт до конца, мы обретаем свободу

bf4ffc239860.png

Поделиться сообщением


Ссылка на сообщение

зачем думоть над задачей, когда можно забрутфорсить?

в адвент оф код регулярно бывает, что первая часть уровня - это поле 3х3, а вторая - 300х300, поэтому брутфорсерам приходится переписывать их халтуру

 

ну и рекрутерам брутфорсеры тоже не нужны ясен хуй. или там только ответ сабмитишь, без кода?

Поделиться сообщением


Ссылка на сообщение

а что ты имеешь ввиду под ответом?

Поделиться сообщением


Ссылка на сообщение
(изменено)

если матрица 
000
000
000

то чтобы перевести в
111
111
111

надо нажать на рычаги
101
010
101

обходя сверху вниз слева направо

пытался развить эту идею для рандомного начала по всячески XORя исходную матрицу с паттерном, чтобы получить паттерн переключений, но что-то ничего толкового не вышло

 

Я даже хуй знает решаема ли задача в один проход по матрице (одно переключение каждого рычага) для некоторых условий например 
100
000
000

 

Если что мой говнокод

 

    @[member='test']
    public void test() {
        int[][] matrix = {
                {0, 0, 0},
                {0, 1, 0},
                {0, 0, 0}
        };
        System.out.printf("Before");
        System.out.println(Arrays.deepToString(matrix));
        solve(matrix);
        System.out.printf("After:" + Arrays.deepToString(matrix));

    }

    private final static int[][] XOR_MATRIX = {
            {1, 0, 1},
            {0, 1, 0},
            {1, 0, 1}
    };

    public void solve(int[][] matrix) {
        for (int i = 0; i < matrix.length; i++) {
            for (int j = 0; j < matrix.length; j++) {
                if (XOR_MATRIX[i][j] == 1) {
                    toggleWithNeighbourhoods(matrix, i, j);
                }
            }
        }
    }

    public enum Direction {
        NORTH {
            @Override
            void toggleAtSide(int[][] matrix, int i, int j) {
                _toggle(matrix, i, j - 1);
            }
        },
        EAST {
            @Override
            void toggleAtSide(int[][] matrix, int i, int j) {
                _toggle(matrix, i + 1, j);
            }
        },
        SOUTH {
            @Override
            void toggleAtSide(int[][] matrix, int i, int j) {
                _toggle(matrix, i, j + 1);
            }
        },
        WEST {
            @Override
            void toggleAtSide(int[][] matrix, int i, int j) {
                _toggle(matrix, i - 1, j);
            }
        },
        CENTER {
            @Override
            void toggleAtSide(int[][] matrix, int i, int j) {
                _toggle(matrix, i, j);
            }
        };

        protected final void _toggle(int[][] matrix, int i, int j) {
            if (isInBounds(matrix, i, j)) {
                matrix[i][j] ^= 1;
            }
        }

        abstract void toggleAtSide(int[][] matrix, int i, int j);
    }

    static boolean isInBounds(int[][] matrix, int i, int j) {
        if (i >= 0 && j >= 0) {
            if (i < matrix.length) {
                return j < matrix[0].length;
            }
        }
        return false;
    }

    void toggleWithNeighbourhoods(int[][] matrix, int i, int j) {
        for (Direction direction : Direction.values()) {
            direction.toggleAtSide(matrix, i, j);
        }
    } 

 

 

Вообще переключение в точках

101
010
101

 

Инвертирует все рычаги


а вот решаема ли задача по переводу 

100

000

000

в

111

111

111
или
000

000

000

 

я хз, хз что там брутфорсил аскми


Изменено пользователем Index

Поделиться сообщением


Ссылка на сообщение

Index

бросай эту хуйню и иди во фронтенд (но рофл)

playforfunlol понравилось это

Поделиться сообщением


Ссылка на сообщение
(изменено)

в тинькове промоакция какая то, в конце логическая задача - поле 3х3 с рубильниками (on/off), каждый рубильник переключает соседние и сам себя (соседство только по горизонтали и вертикали, диагональ не считается). нужно переключить все рубильники в одно положение

 

не осилил, написал сниппет который рандомно переключает один рубильник и чекает готово или нет, захуярил в цикле пока все не переключилось :hohol:

зачем думоть над задачей, когда можно забрутфорсить?

я не осилил даже абзац прочесть..


Изменено пользователем JuJeu

Saying that Java is nice because it works on all OS's is like saying that anal sex is nice because it works on all genders.
 

Поделиться сообщением


Ссылка на сообщение
(изменено)

если матрица 

000

000

000

 

то чтобы перевести в

111

111

111

 

надо нажать на рычаги

101

010

101

обходя сверху вниз слева направо

 

пытался развить эту идею для рандомного начала по всячески XORя исходную матрицу с паттерном, чтобы получить паттерн переключений, но что-то ничего толкового не вышло

 

Я даже хуй знает решаема ли задача в один проход по матрице (одно переключение каждого рычага) для некоторых условий например 

100

000

000

 

Если что мой говнокод

 

    @[member='test']
    public void test() {
        int[][] matrix = {
                {0, 0, 0},
                {0, 1, 0},
                {0, 0, 0}
        };
        System.out.printf("Before");
        System.out.println(Arrays.deepToString(matrix));
        solve(matrix);
        System.out.printf("After:" + Arrays.deepToString(matrix));

    }

    private final static int[][] XOR_MATRIX = {
            {1, 0, 1},
            {0, 1, 0},
            {1, 0, 1}
    };

    public void solve(int[][] matrix) {
        for (int i = 0; i < matrix.length; i++) {
            for (int j = 0; j < matrix.length; j++) {
                if (XOR_MATRIX[i][j] == 1) {
                    toggleWithNeighbourhoods(matrix, i, j);
                }
            }
        }
    }

    public enum Direction {
        NORTH {
            @Override
            void toggleAtSide(int[][] matrix, int i, int j) {
                _toggle(matrix, i, j - 1);
            }
        },
        EAST {
            @Override
            void toggleAtSide(int[][] matrix, int i, int j) {
                _toggle(matrix, i + 1, j);
            }
        },
        SOUTH {
            @Override
            void toggleAtSide(int[][] matrix, int i, int j) {
                _toggle(matrix, i, j + 1);
            }
        },
        WEST {
            @Override
            void toggleAtSide(int[][] matrix, int i, int j) {
                _toggle(matrix, i - 1, j);
            }
        },
        CENTER {
            @Override
            void toggleAtSide(int[][] matrix, int i, int j) {
                _toggle(matrix, i, j);
            }
        };

        protected final void _toggle(int[][] matrix, int i, int j) {
            if (isInBounds(matrix, i, j)) {
                matrix[i][j] ^= 1;
            }
        }

        abstract void toggleAtSide(int[][] matrix, int i, int j);
    }

    static boolean isInBounds(int[][] matrix, int i, int j) {
        if (i >= 0 && j >= 0) {
            if (i < matrix.length) {
                return j < matrix[0].length;
            }
        }
        return false;
    }

    void toggleWithNeighbourhoods(int[][] matrix, int i, int j) {
        for (Direction direction : Direction.values()) {
            direction.toggleAtSide(matrix, i, j);
        }
    } 

 

 

Вообще переключение в точках

101

010

101

 

Инвертирует все рычаги

а вот решаема ли задача по переводу 

100

000

000

в

111

111

111

или

000

000

000

 

я хз, хз что там брутфорсил аскми

 

долго думал (гдето час-полтора)

и придумал следующее:

 

допустим размер игрового поля = n

возьмем что aij где i=1..n и j=1..n - матрица воздействий на рычаг (для решения задачи), назовем её A :

a11 a12 .. a1n

a21 a22 .. a2n

....................

an1 an2 .. ann

 

где каждая aij принимает значение 0 или 1 (или можно обозвать true false), где 1 обозначает что мы "трогаем" рычаг в данной позиции ij

(тут можно доказать что значения >2 не имеют смысла тк все четные значения сводятся к 0 а нечетные к 1 (если дернем какой-то рычаг 2 раза то это равноценно тому что мы дернем 0 раз), также можно доказать что последовательность в которой дергаются различные рычаки не имеет значения а значит (+при условии предыдущего) любые сложнейшие комбинации которые вы у себя итеративно выстраивали в голове сводятся к простой матрице А состоящей только из 0 и 1)

 

тогда можем задать матрицу B того как изменится наше поле после применения матрицы A, где bij = 0 если после применения схемы дерганий из матрицы А значение в ij позиции не поменялось, а bij = 1 значит что инвертировалось.

простые рассуждения нам говорят что значение bij зависчит только собственного + соседних значений из А, причем по правилу XOR (заиспользую ^ для обозначения этой операции) :

b11=a11 ^ a21 ^ a12

b21=a21 ^a11 ^ a22 ^ a31,

b22=a22 ^ a21 ^ a23 ^ a32 ^ a12

...

и тд

где 

 

 

если возьмем исходное поле и закодируем 1 ячейки которые стоят в неправильном положении (которые нужно инвертировать) а за 0 те которые стоят в правильном и данную матрицу назовем C и соотв. cij

 

то получается 

bij = cij

и тогда нам нужно найти множество решений для системы уравнений:

с11=a11 ^ a21 ^ a12 , 

с21=a21 ^a11 ^ a22 ^ a31,

с22=a22 ^ a21 ^ a23 ^ a32 ^ a12

...

как это решать аналитически - хуй знает, надо к математикам обращаться, мне в эту сторону впадлу копать. вероятно это будет логические выражения в ДНФ, если просто начать выражать одно из другого

но как минимум можно вычислить индукционно с перебором инвариантов уже по понятному принципу и известной формуле. и в целом возможное количество решений = 2^n

 

PS: завтра мб напишу прогруммульку которая решает по этой моделе. напишу скорее всего функционально


Изменено пользователем Just.Doit

 

очень крутые котейки

RqvSzvr.png


Кому-то пизды дал - нужно сделать скрин обязательно. (с) Solo

Поделиться сообщением


Ссылка на сообщение
(изменено)

парни, пощадите с линейной алгеброй (^ бтв такие задачи полезно хуярить, если в мл метите, там без линейки делать не хуй :buba: ). 


Изменено пользователем JuJeu

Saying that Java is nice because it works on all OS's is like saying that anal sex is nice because it works on all genders.
 

Поделиться сообщением


Ссылка на сообщение

вот дебилы, пишут какие-то цифры на 100 страниц, что б 3 рычага переключить - выйди переключи, мужик ты или кто...........


VyMEtE8XtOI.jpg

  лучшая цитата финта+жизненная

XbkBCDXetHY.jpg

Поделиться сообщением


Ссылка на сообщение
(изменено)

 

а вот решаема ли задача по переводу 

100

000

000

в

111

111

111

или

000

000

000

 

я хз, хз что там брутфорсил аскми

 

запустил пепелац с условием числа ходов не больше 10, через 120 итераций нарандомилось решение в 6 ходов:

(большая буква показывает "текущий" ход, который привел к такому состоянию)

 

 

 

v x x 
x x x 
x x x 
=========
v v x 
v V v 
x v x 
=========
v v v 
v x X 
x v v 
=========
v x v 
x V v 
x x v 
=========
v v v 
v X x 
x v v 
=========
v v v 
v x v 
x x X 
=========
v v v 
v v v 
v V v 
=========
Best try: 6
Total tries: 120

 
При том что 3й и 4й ход бесполезные (походили - вернули обратно), то само решение выходит вообще в 4 хода:
 

v x x

x x x

x x x

=========

v v x

v V v

x v x

=========

v v v

v x X

x v v

=========

v v v

v x v

x x X

=========

v v v

v v v

v V v

 
или в один проход ты по-другому как то имел в виду? в этом решении по крайней мере ни один рычаг больше одного раза не дергается
 
еще решение:

v x x

x x x

x x x

=========

v x x

x x v

x v V

=========

v x x

x v v

v X x

=========

v v x

v X x

v v x

=========

v v v

v v V

v v v

=========

Best try: 4

Total tries: 344

 
а вот для переключения в 0 за 5 ходов:
 

v x x

x x x

x x x

=========

v x x

v x x

V v x

=========

v x x

v v x

x X v

=========

v x v

v x V

x x x

=========

v v X

v x x

x x x

=========

X x x

x x x

x x x

=========

Best try: 5

Total tries: 1087


Изменено пользователем AskMe-

Лишь ощутив баттхерт до конца, мы обретаем свободу

bf4ffc239860.png

Поделиться сообщением


Ссылка на сообщение

 

в тинькове промоакция какая то, в конце логическая задача - поле 3х3 с рубильниками (on/off), каждый рубильник переключает соседние и сам себя (соседство только по горизонтали и вертикали, диагональ не считается). нужно переключить все рубильники в одно положение

 

не осилил, написал сниппет который рандомно переключает один рубильник и чекает готово или нет, захуярил в цикле пока все не переключилось :hohol:

зачем думоть над задачей, когда можно забрутфорсить?

такое только 8х8 вроде было в квесте братья пилоты

 

как же я в своих 7 лет горел с этого ебучего холодильника, я так и не смог его открыть, пока  не приехал двоюродный брат и за 3 минуты сделал

:fffuuu: :fffuuu: :fffuuu: :fffuuu: :fffuuu: :fffuuu: :fffuuu:

 

пздц жиза

 

я потом в более старшем возросте пытался пройти и тупо забрутфорсил, так и не понял до конца как это осознанно делать)

Kant понравилось это

Поделиться сообщением


Ссылка на сообщение

в тинькове промоакция какая то, в конце логическая задача - поле 3х3 с рубильниками (on/off), каждый рубильник переключает соседние и сам себя (соседство только по горизонтали и вертикали, диагональ не считается). нужно переключить все рубильники в одно положение

 

не осилил, написал сниппет который рандомно переключает один рубильник и чекает готово или нет, захуярил в цикле пока все не переключилось :hohol:

зачем думоть над задачей, когда можно забрутфорсить?

это где у нас такое?


:buba:

ни мало ни много, а много и мало

Поделиться сообщением


Ссылка на сообщение

 

в тинькове промоакция какая то, в конце логическая задача - поле 3х3 с рубильниками (on/off), каждый рубильник переключает соседние и сам себя (соседство только по горизонтали и вертикали, диагональ не считается). нужно переключить все рубильники в одно положение

 

не осилил, написал сниппет который рандомно переключает один рубильник и чекает готово или нет, захуярил в цикле пока все не переключилось :hohol:

зачем думоть над задачей, когда можно забрутфорсить?

это где у нас такое?

 

https://naslabo.project.tinkoff.ru/


Лишь ощутив баттхерт до конца, мы обретаем свободу

bf4ffc239860.png

Поделиться сообщением


Ссылка на сообщение

Я думал надо алгоритм придумать, а так если чисто переключить то просто брутфорс можно применить как ты, а потом по брутфорсу ходы воссоздать минимальные


Там ещё задача с парными карточками решается добавлением к img тегу класса 


Алсо, ох уж этот маркетинг через игру. И ведь лохи ведутся.

Поделиться сообщением


Ссылка на сообщение

брутфорс может никогда к оптимальному решению и не сойтись на больших объемах


Торжество разума в том, чтобы уживаться с теми, у кого этого разума нет. Вольтер.
Чтобы хорошо высыпаться, нужно спать 8 часов в день. И еще столько же ночью.

Поделиться сообщением


Ссылка на сообщение

Ну так а вручную такая головоломка тоже изи вроде как решается от какого-то угла идя.

Поделиться сообщением


Ссылка на сообщение

Вот сразу видно, аскми энтерпрайзный работяга, который пришёл решить задачу наиболее быстрым и оптимальным способом (с точки зрения бизнеса), а индекс небось из тех, кто свой мерджсорт пишет

Поделиться сообщением


Ссылка на сообщение
Гость
Эта тема закрыта для публикации сообщений.

×
×
  • Создать...