<bgdev />free

Вход Регистрация

Инсталирах си "chatGPT" на локалния компютър.
0

0 1 2 3 4 5 6 7
#89711 (ツ) Rabin
Последно редактирано на 28.04.2023 от johnfound, видяно: 329 пъти.

https://technews.bg/article-151601.html

Те тава човъркам в момента, питонецът нещо не тръгна, ще пробвам с докержийницата. Това е и причината да си пусна линукчийницата, и да се обадя на аутистчета като вазе!

https://github.com/xtekky/gpt4free

Docker

Build

docker build -t gpt4free:latest -f Docker/Dockerfile .

Run

docker run -p 8501:8501 gpt4free:latest
#89713 (ツ) johnfound
Създадено на 28.04.2023, видяно: 324 пъти.

И какъв е смисъла? Тая дупка ще я затворят много бързо.

#89714 (ツ) Rabin
Последно редактирано на 28.04.2023 от Rabin, видяно: 320 пъти.
johnfound

И какъв е смисъла? Тая дупка ще я затворят много бързо.

Maй са я затворили, докер репото не го намира. От питонец не разбирам, ама и него не успях да билдна. Имаше портнато готовия резултат в нета, и той не бачка.

Може аз нещо да пропускам, ама отивам да разсаждам марули.

p.s.

docker pull darkzorro/gpt4free

Tуй потече, има и още един имидж на morningtzh

#89715 (ツ) Rabin
Последно редактирано на 28.04.2023 от Rabin, видяно: 310 пъти.

Запалих зоровския имидж, тука тръгна, ама май е директно онлайн. Още не съм наясно кое отде бачка.

https://chat.chatbot.sex/chat/

На Дебиан и Опера. На Изчадие и Мозила не тръгна.

п.с. корекция:

Днес тръгна на изчадие, вчера не работеше. Чат 3 се обажда в момента по дефолт, долу има превключвател, обади се и четворката! Баси кефа, и на български приказва, пълни безсмислици!

#89719 (ツ) Rabin
Създадено на 28.04.2023, видяно: 291 пъти.

Засега по-добре без него. Четворката, дето е платена, дадох му да решава онаа задачка от интервю. Схвана заглавието, или го изрови от нета, щото я има на няколко места. Изсра ми стотина ред код, дава out of bound exception. Посочвам му грешката, извини се, коригира. Дава грешен резултат, ама поне се билдна. Посочвам му резултата, извини се, модифицира метода, и уж даде целия код, ама отрязан отдолу. Викам дай целия код, он заби и спря да се обажда.

Засега не виждам как може да е полезен за работа. Ще пробвам довечера ена друга задачка, даваха ми ена задачка да им разцъкам онлайн склад. Там кодът не е овъртян, да видим кво ще издриска.

Правих си ташак с въпроси за политика, пише на български, ама все едно слушам поредния мазен клоун. Туй нещо няма съзнание.

#89723 (ツ) palavrov
Създадено на 28.04.2023, видяно: 277 пъти.

Ти верно ли пускаш случайни докер файлове на твоята машина? През колко ВПН-а ги прекарваш? Нали знаеш, че Докер доскоро пускаше всички контейнери с руут акаунт да си правят квото искат на машината ти?

#89728 (ツ) Rabin
Създадено на 28.04.2023, видяно: 270 пъти.
palavrov

Ти верно ли пускаш случайни докер файлове на твоята машина? През колко ВПН-а ги прекарваш? Нали знаеш, че Докер доскоро пускаше всички контейнери с руут акаунт да си правят квото искат на машината ти?

Дреме ми на бубата, за линкукската машина. Мисля, без root тръгна имиджа.

По ваше село как процедирате с докержийницата? Имах неудоволствието да подкарвам Докержийница, на Изчадие 11. Няма такава мъка, пак през root на емулирано Убунту се пуска, и за сефте през живота писАх в конзола, без Midnight commander дори!

Дори не са се постарали колегите, да прекомпилират Докер за Изчадие. Линукс е за работа, изчадие е за секретарки и геймъри.

#89734 (ツ) palavrov
Създадено на 28.04.2023, видяно: 257 пъти.

Колегата му се кефи. Аз не го барам засега. Но ме ядоса, че през него имаш руут достъп до целия хост. Уж го били оправили ама ...

#89780 (ツ) Rabin
Последно редактирано на 30.04.2023 от Rabin, видяно: 216 пъти.

Скоро няма да ни изяде ляба. Ама върши работа като справочник, java.io в моя случай. Сети се да ползва рекурсия, за обхождане на директории. Ама докат му оправя кода то по-лесно да си го напиша аз. Тъй и не успя да ми изгенерира нещо работещо, на няколко задачи, лесна до средно трудна. 4-та версия GPT.

#89781 (ツ) Rabin
Създадено на 30.04.2023, видяно: 213 пъти.
palavrov

Колегата му се кефи. Аз не го барам засега. Но ме ядоса, че през него имаш руут достъп до целия хост. Уж го били оправили ама ...

Царе сте вий, цъкате си на С и ви не дреме за околния свят, че ме питат за 10 фреймворка, 20 други технологии, SQL, патърни и квото още се сетиш. Викам му от облаците само виртуалки съм ползвал, он ме питА за патърните на Единия, дето прави видео. Да си бях седял на embedded, не да уча и фронтенд, на дръти години.

#89786 (ツ) Rabin
Последно редактирано на 30.04.2023 от Rabin, видяно: 200 пъти.

Бе не е зле. Лесните задачки ги решава. Накарах го да ми сканира директория, и да отпечата еднаквите файлове в поддиректориите. Чак на третия път изкара работещ код. Жони ми отряза последните редове, инак кода работи коректно. И текстови задачи решава, докъм линейни уравнения. После почва да ги греши.

public class SemicolonCombinations {

    // Method to generate all valid combinations of N semicolons
    public static void generateSemicolonCombinations(int n) {
        if(n <= 0) {
            return;
        }
        generateSemicolonCombinations(n, "", 0, 0);
    }

    // Helper method to generate all valid combinations of N semicolons recursively
    private static void generateSemicolonCombinations(int n, String prefix, int open, int close) {
        if(close == n) {
            System.out.println(prefix);
            return;
        }
        if(open < n) {
            generateSemicolonCombinations(n, prefix + "(", open+1, close);
        }
        if(close < open) {
            generateSemicolonCombinations(n, prefix + ")", open, close+1);
        }
    }

    // Driver code to test the generateSemicolonCombinations method
    public static void main(String[] args) {
        int n = 3;
        generateSemicolonCombinations(n);

=======================================OUTPUT====================================
((()))
(()())
(())()
()(())
()()()

Process finished with exit code 0
(((((())))))
((((()()))))
((((())())))
((((()))()))
((((())))())
((((()))))()
(((()(()))))
(((()()())))
(((()())()))
(((()()))())
(((()())))()
(((())(())))
(((())()()))
(((())())())
(((())()))()
(((()))(()))
(((()))()())
(((()))())()
(((())))(())
(((())))()()
((()((()))))
((()(()())))
((()(())()))
((()(()))())
((()(())))()
((()()(())))
((()()()()))
((()()())())
((()()()))()
((()())(()))
((()())()())
((()())())()
((()()))(())
((()()))()()
((())((())))
((())(()()))
((())(())())
((())(()))()
((())()(()))
((())()()())
((())()())()
((())())(())
((())())()()
((()))((()))
((()))(()())
((()))(())()
((()))()(())
((()))()()()
(()(((()))))
(()((()())))
(()((())()))
(()((()))())
(()((())))()
(()(()(())))
(()(()()()))
(()(()())())
(()(()()))()
(()(())(()))
(()(())()())
(()(())())()
(()(()))(())
(()(()))()()
(()()((())))
(()()(()()))
(()()(())())
(()()(()))()
(()()()(()))
(()()()()())
(()()()())()
(()()())(())
(()()())()()
(()())((()))
(()())(()())
(()())(())()
(()())()(())
(()())()()()
(())(((())))
(())((()()))
(())((())())
(())((()))()
(())(()(()))
(())(()()())
(())(()())()
(())(())(())
(())(())()()
(())()((()))
#89787 (ツ) Rabin
Последно редактирано на 30.04.2023 от Rabin, видяно: 195 пъти.

Учете да работите с ИИ, момци! Първия път му исках да разпише дърво, да го напълни с рандом номера, и да изкара път от корен до лист, който има максимална стойност. Нещо подобно са ми давали на интервю. После го накарах да изпринти дървото в конзолата, и си модифицира кода.

Аз вече ще ходя с чата, по такива мероприятия. Интересното е, че в нета само на едно място, в един форум, имаше разписано дърво в толкова лаконичен вид. Все едно, че ИИ копира оттам.

import java.util.*;

public class MaxSumPathTree {

    static class Node {
        int val;
        Node left, right;

        Node(int val) {
            this.val = val;
            this.left = null;
            this.right = null;
        }
    }

    // Method to print the binary tree in text console
    public static void printTree(Node root) {
        int maxLevel = getMaxTreeDepth(root);
        printSubtree(Collections.singletonList(root), 1, maxLevel);
    }

    // Helper method to print each level of the binary tree
    private static void printSubtree(List<Node> nodes, int level, int maxLevel) {
        if (nodes.isEmpty() || isAllElementsNull(nodes))
            return;

        int floor = maxLevel - level;
        int edgeLines = (int) Math.pow(2, Math.max(floor - 1, 0));
        int firstSpaces = (int) Math.pow(2, floor) - 1;
        int betweenSpaces = (int) Math.pow(2, floor + 1) - 1;

        printWhitespaces(firstSpaces);

        List<Node> newNodes = new ArrayList<>();
        for (Node node : nodes) {
            if (node != null) {
                System.out.print(node.val);
                newNodes.add(node.left);
                newNodes.add(node.right);
            } else {
                System.out.print(" ");
                newNodes.add(null);
                newNodes.add(null);
            }

            printWhitespaces(betweenSpaces);
        }
        System.out.println();

        for (int i = 1; i <= edgeLines; i++) {
            for (int j = 0; j < nodes.size(); j++) {
                printWhitespaces(firstSpaces - i);
                if (nodes.get(j) == null) {
                    printWhitespaces(2 * edgeLines + i + 1);
                    continue;
                }
                if (nodes.get(j).left != null)
                    System.out.print("/");
                else
                    printWhitespaces(1);
                printWhitespaces(i * 2 - 1);
                if (nodes.get(j).right != null)
                    System.out.print("\\");
                else
                    printWhitespaces(1);
                printWhitespaces(2 * edgeLines - i);
            }
            System.out.println();
        }
        printSubtree(newNodes, level + 1, maxLevel);
    }

    // Helper method to print whitespaces
    private static void printWhitespaces(int count) {
        for (int i = 0; i < count; i++)
            System.out.print(" ");
    }

    // Helper method to check if all elements in a list are null
    private static boolean isAllElementsNull(List<Node> list) {
        for (Node node : list) {
            if (node != null)
                return false;
        }
        return true;
    }

    // Method to print the maximum sum path in a binary tree
    public static void printMaxSumPath(Node root) {
        List<Integer> path = new ArrayList<>();
        List<List<Integer>> allPaths = new ArrayList<>();
        int maxSum = Integer.MIN_VALUE;
        calculateMaxSumPath(root, path, allPaths, maxSum);

        // Find the path with maximum sum
        List<Integer> maxPath = new ArrayList<>();
        for (List<Integer> p : allPaths) {
            int sum = p.stream().mapToInt(Integer::intValue).sum();
            if (sum > maxSum) {
                maxSum = sum;
                maxPath = p;
            }
        }

        // Print the path with maximum sum
        System.out.print("Maximum Sum Path: ");
        for (int i = 0; i < maxPath.size(); i++) {
            System.out.print(maxPath.get(i));
            if (i != maxPath.size() - 1) {
                System.out.print(" -> ");
            }
        }
        System.out.println("; Max Sum = " + maxSum);
    }

    // Helper method to calculate all possible paths and their sum
    private static void calculateMaxSumPath(Node root, List<Integer> path, List<List<Integer>> allPaths, int maxSum) {
        if (root == null) {
            return;
        }

        path.add(root.val);

        if (root.left == null && root.right == null) {
            allPaths.add(new ArrayList<>(path));
        } else {
            calculateMaxSumPath(root.left, path, allPaths, maxSum);
            calculateMaxSumPath(root.right, path, allPaths, maxSum);
        }

        path.remove(path.size() - 1);
    }

    // Method to get the maximum depth of a binary tree
    private static int getMaxTreeDepth(Node node) {
        if (node == null)
            return 0;
        return 1 + Math.max(getMaxTreeDepth(node.left), getMaxTreeDepth(node.right));
    }

    public static void main(String[] args) {
        // Construct a binary tree with random numbers
        Node root = new Node(10);
        root.left = new Node(-2);
        root.right = new Node(7);
        root.left.left = new Node(8);
        root.left.right = new Node(-4);

        // Print the binary tree and the maximum sum path in the binary tree
        printTree(root);
        printMaxSumPath(root);
    }
}
=====================================================
   10       
  / \   
 /   \  
 -2   7   
/ \     
8 -4     
                
Maximum Sum Path: 10 -> 7; Max Sum = 17

Process finished with exit code 0
#89791 (ツ) Golden Gega
Създадено на 30.04.2023, видяно: 173 пъти.

Бамбич, не ти ли дадоха задача да издОиш козъ или да прекопаш репи да ги шашнеш и да те земат TL? rofl rofl rofl

#89792 (ツ) Rabin
Създадено на 30.04.2023, видяно: 172 пъти.
Golden Gega

Бамбич, не ти ли дадоха задача да издОиш козъ или да прекопаш репи да ги шашнеш и да те земат TL? rofl rofl rofl

Макяти ме дои.

#89793 (ツ) Rabin
Създадено на 30.04.2023, видяно: 163 пъти.

Накарах го да ми нарисува шахматно поле, с графичната библиотека. С първия път отличен резултат.

import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class ChessBoard extends JPanel {

    private static final long serialVersionUID = 1L;
    public static final int WIDTH = 400;
    public static final int HEIGHT = 400;
    public static final int CELLSIZE = 50;

    public ChessBoard() {
        super();
        setSize(WIDTH, HEIGHT);
    }

    public void paintComponent(Graphics g) {
        super.paintComponent(g);

        Color light = new Color(170, 170, 170);
        Color dark = new Color(90, 90, 90);

        for (int i = 0; i < WIDTH; i += CELLSIZE) {
            for (int j = 0; j < HEIGHT; j += CELLSIZE) {

                if ((i / CELLSIZE % 2 == 0 && j / CELLSIZE % 2 == 0)
                        || (i / CELLSIZE % 2 == 1 && j / CELLSIZE % 2 == 1)) {
                    g.setColor(light);
                } else {
                    g.setColor(dark);
                }
                g.fillRect(i, j, CELLSIZE, CELLSIZE);

            }
        }
    }

    public static void main(String[] args) {
        JFrame frame = new JFrame("Chess Board");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        ChessBoard board = new ChessBoard();
        frame.add(board);
        frame.setSize(WIDTH, HEIGHT);
        frame.setVisible(true);
    }
}
#89794 (ツ) Rabin
Последно редактирано на 30.04.2023 от Rabin, видяно: 157 пъти.

Една и съща задача, първия път се омота и заби. Втора сесия, сработи с първия път. 100 произволни точки, и мин. дължина на линиите м/у тях.

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Point;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class MinSpanningTree extends JPanel {

    private static final int POINT_COUNT = 100;
    private static final int WIDTH = 800;
    private static final int HEIGHT = 600;
    private static final Color POINT_COLOR = Color.RED;
    private static final Color LINE_COLOR = Color.BLACK;
    private static final Random RAND = new Random();

    private List<Point> points = new ArrayList<>();
    private List<Edge> edges = new ArrayList<>();

    public MinSpanningTree() {
        generatePoints();
        buildMinSpanningTree();
    }

    private void generatePoints() {
        for (int i = 0; i < POINT_COUNT; i++) {
            points.add(new Point(RAND.nextInt(WIDTH), RAND.nextInt(HEIGHT)));
        }
    }

    private void buildMinSpanningTree() {
        List<Integer> unvisited = new ArrayList<>();
        for (int i = 0; i < POINT_COUNT; i++) {
            unvisited.add(i);
        }

        List<Integer> visited = new ArrayList<>();
        visited.add(0);
        unvisited.remove(Integer.valueOf(0));

        while (!unvisited.isEmpty()) {
            double minDist = Double.MAX_VALUE;
            int minSrc = -1, minDest = -1;
            for (int src : visited) {
                for (int dest : unvisited) {
                    double dist = distance(points.get(src), points.get(dest));
                    if (dist < minDist) {
                        minDist = dist;
                        minSrc = src;
                        minDest = dest;
                    }
                }
            }
            edges.add(new Edge(points.get(minSrc), points.get(minDest)));
            visited.add(minDest);
            unvisited.remove(Integer.valueOf(minDest));
        }
    }

    private double distance(Point p1, Point p2) {
        int dx = p1.x - p2.x;
        int dy = p1.y - p2.y;
        return Math.sqrt(dx * dx + dy * dy);
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.setColor(POINT_COLOR);
        for (Point p : points) {
            g.fillOval(p.x - 3, p.y - 3, 6, 6);
        }
        g.setColor(LINE_COLOR);
        for (Edge e : edges) {
            g.drawLine(e.src.x, e.src.y, e.dest.x, e.dest.y);
        }
    }

    public static void main(String[] args) {
        JFrame frame = new JFrame("Minimum Spanning Tree");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(WIDTH, HEIGHT);
        frame.add(new MinSpanningTree());
        frame.setVisible(true);
    }

    private static class Edge {
        private Point src, dest;

        private Edge(Point src, Point dest) {
            this.src = src;
            this.dest = dest;
        }
    }
}

My picture

#89795 (ツ) Rabin
Създадено на 30.04.2023, видяно: 155 пъти.
GPT4

Тази задача е свързана с графи и минимални покриващи дървета. В задачата трябва да генерираме 100 точки и да ги свържем с линии, така че да получим граф, който се състои от тези точки като върхове и ребра между тях. После, трябва да построим минимално покриващо дърво (МПД) на този граф.

Минималното покриващо дърво е дърво, което включва всичките върхове на графа и е свързано. Дървото трябва да има минимален брой ребра, така че сумата от дължините им да бъде минимална. В случаята на задачата, търсим МПД с минималната сума на дължините на ребрата между всички върхове на графа.

За да построим МПД, можем да използваме алгоритъма на Крускал, който е един от класическите алгоритми за намиране на МПД на граф. Алгоритъмът работи като сортира всички ребра в графа по техните дължини и последователно добавя ребрата, започвайки от най-късите, до тези, които формират МПД. С добавянето на всяко ново ребро проверяваме дали дървото, което сме построили до момента, продължава да бъде свързано и да не образува цикли.

Този алгоритъм може да се приложи и в тази задача, като предварително генерираме 100 случайни точки и изградим графа между тях, където върховете са точките, а ребрата са отсечките между тях. След това можем да приложим алгоритъма на Крускал, за да построим МПД на този граф и да го изобразим графично. В резултат ще получим свързани точки с минимална дължина на линиите между тях.

#89797 (ツ) Дон Реба
Създадено на 30.04.2023, видяно: 148 пъти.

да, тежко бъдеще за нАуката, единствената сигурна крепост остана биячеството и миенето на чинии, обратно на това което предсказваха очЕните

#89798 (ツ) Rabin
Последно редактирано на 30.04.2023 от Rabin, видяно: 148 пъти.
Язе

Оцвети всяко ребро със случаен, различен цвят, моля!

GPT4

За да оцветим всяко ребро от построеното МПД със случаен, различен цвят, можем да използваме класа java.awt.Color за генериране на случаен цвят за всяко ребро.

Ето промененият код на Java, който рисува МПД на графа, където всяко ребро е оцветено със случайен, различен цвят:



import java.awt.Color;
import java.awt.Graphics;
import java.awt.Point;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class MinSpanningTree extends JPanel {

    private static final int POINT_COUNT = 100;
    private static final int WIDTH = 800;
    private static final int HEIGHT = 600;
    private static final Color POINT_COLOR = Color.RED;
    private static final Random RAND = new Random();

    private List<Point> points = new ArrayList<>();
    private List<Edge> edges = new ArrayList<>();

    public MinSpanningTree() {
        generatePoints();
        buildMinSpanningTree();
    }

    private void generatePoints() {
        for (int i = 0; i < POINT_COUNT; i++) {
            points.add(new Point(RAND.nextInt(WIDTH), RAND.nextInt(HEIGHT)));
        }
    }

    private void buildMinSpanningTree() {
        List<Integer> unvisited = new ArrayList<>();
        for (int i = 0; i < POINT_COUNT; i++) {
            unvisited.add(i);
        }

        List<Integer> visited = new ArrayList<>();
        visited.add(0);
        unvisited.remove(Integer.valueOf(0));

        while (!unvisited.isEmpty()) {
            double minDist = Double.MAX_VALUE;
            int minSrc = -1, minDest = -1;
            for (int src : visited) {
                for (int dest : unvisited) {
                    double dist = distance(points.get(src), points.get(dest));
                    if (dist < minDist) {
                        minDist = dist;
                        minSrc = src;
                        minDest = dest;
                    }
                }
            }
            edges.add(new Edge(points.get(minSrc), points.get(minDest), generateRandomColor()));
            visited.add(minDest);
            unvisited.remove(Integer.valueOf(minDest));
        }
    }

    private double distance(Point p1, Point p2) {
        int dx = p1.x - p2.x;
        int dy = p1.y - p2.y;
        return Math.sqrt(dx * dx + dy * dy);
    }

    private Color generateRandomColor() {
        int r = RAND.nextInt(256);
        int g = RAND.nextInt(256);
        int b = RAND.nextInt(256);
        return new Color(r, g, b);
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.setColor(POINT_COLOR);
        for (Point p : points) {
            g.fillOval(p.x - 3, p.y - 3, 6, 6);
        }
        for (Edge e : edges) {
            g.setColor(e.color);
            g.drawLine(e.src.x, e.src.y, e.dest.x, e.dest.y);
        }
    }

    public static void main(String[] args) {
        JFrame frame = new JFrame("Minimum Spanning Tree");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(WIDTH, HEIGHT);
        frame.add(new MinSpanningTree());
        frame.setVisible(true);
    }

    private static class Edge {
        private Point src, dest;
        private Color color;

        private Edge(Point src, Point dest, Color color) {
            this.src = src;
            this.dest = dest;
            this.color = color;
        }
    }
}
GPT4

За да оцветим всяко ребро от построеното МПД със случаен, различен цвят, можем да използваме класа java.awt.Color за генериране на случаен цвят за всяко ребро.

Ето промененият код на Java, който рисува МПД на графа, където всяко ребро е оцветено със случайен, различен цвят:

My picture

#89800 (ツ) Rabin
Създадено на 30.04.2023, видяно: 144 пъти.

Някъв мазаляк станА, казах му да маха линията, след като я видя, да не се претрупва. Не разбра кво искам и ме отсвири.

Можеш ли да изведеш анимация в реално време, как се случва текущото изчисление?

Да, можем да извеждаме анимация, която визуализира текущото изчисление на минималното покриващо дърво, като рисуваме графа в реално време по време на изчисленията в приложението.

За да постигнем това, можем да добавим допълнителен код, който да изтрива и рисува обекти на графа в замислен анимационен цикъл, докато алгоритъмът на Крускал изчислява МПД. Всяко изчисление на ребро в МПД може да бъде изобразено като оцветяване на текущото ребро в друг цвят, след което да се изчака няколко милисекунди, преди да продължим изчислението към следващото ребро.

Ето една възможна реализация на програмата, която да визуализира МПД в реално време по време на изчисленията по алгоритъма на Крускал в приложението:

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Point;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class AnimatedMinSpanningTree extends JPanel {

    private static final int POINT_COUNT = 100;
    private static final int WIDTH = 800;
    private static final int HEIGHT = 600;
    private static final int ANIMATION_DELAY_MS = 20;
    private static final Color POINT_COLOR = Color.RED;
    private static final Color EDGE_COLOR = Color.BLACK;
    private static final Color ANIMATED_EDGE_COLOR = Color.BLUE;
    private static final Random RAND = new Random();

    private List<Point> points = new ArrayList<>();
    private List<Edge> edges = new ArrayList<>();

    private boolean isAnimating = false;
    private int animatedEdgeIndex = -1;

    public AnimatedMinSpanningTree() {
        generatePoints();
    }

    private void generatePoints() {
        for (int i = 0; i < POINT_COUNT; i++) {
            points.add(new Point(RAND.nextInt(WIDTH), RAND.nextInt(HEIGHT)));
        }
    }

    private void buildMinSpanningTree() throws InterruptedException {
        List<Edge> sortedEdges = new ArrayList<>();
        for (int i = 0; i < points.size(); i++) {
            for (int j = i + 1; j < points.size(); j++) {
                sortedEdges.add(new Edge(points.get(i), points.get(j)));
            }
        }
        Collections.shuffle(sortedEdges);

        List<Integer> roots = new ArrayList<>();
        for (int i = 0; i < points.size(); i++) {
            roots.add(i);
        }

        for (int i = 0; i < sortedEdges.size(); i++) {
            Edge edge = sortedEdges.get(i);
            int root1 = findRoot(roots, points.indexOf(edge.src));
            int root2 = findRoot(roots, points.indexOf(edge.dest));
            if (root1 != root2) {
                roots.set(root1, root2);
                edges.add(edge);
                animateEdge(i);
            }
        }
    }

    private int findRoot(List<Integer> roots, int i) {
        if (roots.get(i) != i) {
            roots.set(i, findRoot(roots, roots.get(i)));
        }
        return roots.get(i);
    }

    private void animateEdge(int index) throws InterruptedException {
        isAnimating = true;
        animatedEdgeIndex = index;
        repaint();
        Thread.sleep(ANIMATION_DELAY_MS);
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.setColor(POINT_COLOR);
        for (Point p : points) {
            g.fillOval(p.x - 3, p.y - 3, 6, 6);
        }
        g.setColor(EDGE_COLOR);
        for (int i = 0; i < edges.size(); i++) {
            Edge edge = edges.get(i);
            if (isAnimating && i == animatedEdgeIndex) {
                g.setColor(ANIMATED_EDGE_COLOR);
            }
            g.drawLine(edge.src.x, edge.src.y, edge.dest.x, edge.dest.y);
            g.setColor(EDGE_COLOR);
        }
        if (isAnimating) {
            isAnimating = false;
            animatedEdgeIndex = -1;
        }
    }

    public static void main(String[] args) throws InterruptedException {
        JFrame frame = new JFrame("Animated Minimum Spanning Tree");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(WIDTH, HEIGHT);
        AnimatedMinSpanningTree panel = new AnimatedMinSpanningTree();
        frame.add(panel);
        frame.setVisible(true);
        panel.buildMinSpanningTree();
    }

    private static class Edge {
        private Point src, dest;

        private Edge(Point src, Point dest) {
            this.src = src;
            this.dest = dest;
        }
    }
}

Кода добавя нови полета, за да позволи анимация на изчислението на алгоритъма на Крускал. Полетата са isAnimating, което показва дали програмата в момента извършва анимация, animatedEdgeIndex, което показва индекса на текущото ребро, което се анимира, и ANIMATION_DELAY_MS, което указва колко време да се изчака между кадрите на анимацията.Добавен е нов метод animateEdge, който се извиква вместо edges.add, когато се добавя ново ребро в МПД

0 1 2 3 4 5 6 7

Инсталирах си "chatGPT" на локалния компютър.
0

AsmBB v3.0 (check-in: a316dab8b98d07d9); SQLite v3.42.0 (check-in: 831d0fb2836b71c9);
©2016..2023 John Found; Licensed under EUPL. Powered by Assembly language Created with Fresh IDE