Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/13: Рейтинг темы: голосов - 13, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 02.10.2019
Сообщений: 2

Выведите все возможные различные корректные IP-адреса, которые могут быть сложены из заданных кусочков.

12.10.2019, 12:39. Показов 2726. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вася решил заняться администрированием компьютерных сетей. Он узнал IP-адресс сервера школьной сети и записал его на бумажке. Бумажку он убрал в карман своей куртки. Но придя домой он конечно же забыл о своем решении изучать компьютерные сети. Между тем, младшая сестра Васи залезла в его краман и разорвала бумажку на четыре кусочка. Когда на следующий день Вася решил все же воспользоваться этим IP-адрессом, в кармане были обнаружены четыре обрывка бумаги на которых записаны фрагменты IP-адреса. Помогите Васе восстановить его.
Формат ввода

Задано четыре непустые строки, разделенные пробелом, которые могут содержать точки и цифры.
Формат вывода

Выведите все возможные различные корректные IP-адреса, которые могут быть сложены из кусочков. Каждый адрес выводится с новой строки. Гарантируется, что хотя бы один IP-адрес может быть сложен. Адреса можно выводить в произвольном порядке.

Пример

Ввод

.75 5.106 21 1.24

Вывод

211.245.106.75
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.10.2019, 12:39
Ответы с готовыми решениями:

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

Найти все возможные треугольники, которые могут существовать. Результат вывести на экран.
Функция которая по 3 десятичным числам проверяет, могут ли числа быть сторонами треугольника. C помощью массива (где строчка это стороны...

Выведите все возможные значения для количества емкостей по 60 литров, которые окажутся заполненными
Завод по производству колы изготавливает ее не только для магазинов, но и для всемирно известной сети ресторанов быстрого питания. ...

9
 Аватар для Goongala
1022 / 562 / 185
Регистрация: 18.08.2013
Сообщений: 2,027
Записей в блоге: 2
12.10.2019, 14:12
Лучший ответ Сообщение было отмечено Mirrox как решение

Решение

Чтож, не стану лгать. Сам я почти ничего не сделал, ибо чёт сложна, да и я уставший. Почти всё взял из интернетов. Алгоритм нахождения всех перестановок взял отсюда, регулярку для проверки IP адреса отсюда. Программу протестировал только с данным в первом посте примером
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
import java.util.stream.Collectors;
 
public class Test {
    public static void main(String args[]) {
        String[] bytes = null;
        try (Scanner in = new Scanner(System.in)) {
            System.out.print(": ");
            bytes = in.nextLine().split("\\s+");
        }
 
        List<String> permutations = new ArrayList<>();
        heapPermutation(bytes, bytes.length, permutations);
 
        permutations.stream().filter(p -> p.matches("\\b((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\\.|$)){4}\\b"))
                .forEach(System.out::println);
    }
 
    public static void heapPermutation(String[] a, int size, List<String> permutations) {
        if (size == 1) {
            permutations.add(Arrays.stream(a).collect(Collectors.joining()));
        }
 
        for (int i = 0; i < size; i++) {
            heapPermutation(a, size - 1, permutations);
 
            if (size % 2 == 1) {
                String temp = a[0];
                a[0] = a[size - 1];
                a[size - 1] = temp;
            } else {
                String temp = a[i];
                a[i] = a[size - 1];
                a[size - 1] = temp;
            }
        }
    }
}
1
 Аватар для alicesmagic
233 / 130 / 27
Регистрация: 24.08.2016
Сообщений: 875
12.10.2019, 15:28
Один всего возможный вариант айпишника получается)))
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import java.util.regex.Matcher;
import java.util.regex.Pattern;
 
public class Ip {
    public static void main(String[] args) {
        Pattern p = Pattern.compile("\\A\\.|\\.7\\d{2}|\\d{4,}");
        String[] fourPieces = { ".75", "5.106", "21", "1.24" };
        String[] mask = new String[24];
        int index = 0;
        for (int i = 256; i < 512; i++) {
            String s = Integer.toUnsignedString(i, 4).substring(1);
            if (s.contains("0") && s.contains("1") &&
                    s.contains("2") && s.contains("3")) {
                mask[index++] = s;
            }
        }
        for (int i = 0; i < mask.length; i++) {
            StringBuilder sb = new StringBuilder("");
            for (int j = 0; j < 4; j++) {
                sb.append(fourPieces[Integer.parseInt("" + mask[i].charAt(j))]);
            }
            Matcher m = p.matcher(sb);
            if (!m.find()) {
                System.out.println(sb);
            }
        }
    }
}

Code
1
211.245.106.75
1
 Аватар для alicesmagic
233 / 130 / 27
Регистрация: 24.08.2016
Сообщений: 875
13.10.2019, 03:55
Цитата Сообщение от vcrop
Волшебство ))) Вообще не понятно, что по коду происходит, но оно работает. Но носом ткну String[] fourPieces = { ".75.", ".5.106.", ".21.", "1.24" };
Получила вот такой лестный отзыв на свой чудо-код
Думаю, нужно сделать некоторые комментарии к своему шедевру - яркому образцу женской логики)))
Спать сильно хотелось, но задачка пленила меня своей "новизной". Нужен перебор всех вариантов расположения четырех кусков текста и выбор нужных вариантов с помощью регулярного выражения. Первую часть (перебор вариантов) я еще никогда не реализовывала. Умом было понятно, что циклами решаться должно просто (постом выше так и сделано, но на тот момент его еще не было), но изломала все мозги, а так и не смогла придумать как это сделать. Говорю же, спать хотелось)
Голову сверлила идея сделать через перебор чисел системы исчисления с основанием 4. Это же индексы массива получатся)) Решила "да пофиг... пусть смеются" и написала такой код. Там, правда, тоже пришлось поизголяться. Ведущие нули не отображаются. Пришлось добавить пятый разряд (for 256 to 512) и потом вычленять нужные четыре сабстрингом)))
Регулярка тоже на коленке деланная. Если васина сестренка порвет по другой схеме, то регулярка несдюжит)
Вот так, через задницу все и сделала. Можно же иногда и клоуном поработать

p.s. А что не так с String[] fourPieces = { ".75.", ".5.106.", ".21.", "1.24" }, я так и не поняла. Отражает физическую суть задачи. Четыре кусочка - четыре элемента массива)
1
502 / 348 / 134
Регистрация: 14.06.2016
Сообщений: 669
13.10.2019, 06:22
1.24.75..5.106..21.
1.24.75..21..5.106.
1.24.5.106..75..21.
1.24.5.106..21..75.
1.24.21..75..5.106.
1.24.21..5.106..75
Ненормально же и неправильно. Должно быть пустое множество.

Добавлено через 5 минут
От регуляра я, вообще, о..ел, если, честно. Приходят дети и оказываешься, что ты дибил.
Java
1
String s = Integer.toUnsignedString(i, 4).substring(1);
???
1
 Аватар для alicesmagic
233 / 130 / 27
Регистрация: 24.08.2016
Сообщений: 875
13.10.2019, 07:39
Цитата Сообщение от vcrop Посмотреть сообщение
1.24.75..5.106..21.
1.24.75..21..5.106.
1.24.5.106..75..21.
1.24.5.106..21..75.
1.24.21..75..5.106.
1.24.21..5.106..75
Ненормально же и неправильно. Должно быть пустое множество.
Все равно не поняла, в чем загвоздка... Разные комбинации кусков. Из 24 комбинаций, только одна правильная. Остальные отсекаются волшебной женской регуляркой)) Только что-то много точек. В моем коде столько нет.

Цитата Сообщение от vcrop Посмотреть сообщение
Java
1
String s = Integer.toUnsignedString(i, 4).substring(1);
???
Число i из диапазона [256..512[ переводится в систему счисления с основанием 4. Получается что-то такого плана: 10231. Затем сабстринг забирает все, без первой единички. Остается 0231. Это набор индексов массива. Всего таких наборов 254. Дальше из них выбираются 24, в которых индексы не повторяются. Затем по этим индексам собирается строка. Которая затем проверяется регуляркой на соответствие формату айпишника. Ну да, через задницу))) я же уже призналась

Добавлено через 3 минуты
... а регулярки я еще только собираюсь изучать)))

Добавлено через 11 минут
Кстати, ща посмотрела, пермутатор из второго поста тоже не особливо простой. Я бы такой точно не осилила. Там стримы и рекурсия. Для меня это очень сложно пока.
А что, не существует чего-нибудь более простого для перебора всевозможных комбинаций элементов из заданного массива?
Должен же быть простой алгоритм?

Добавлено через 43 минуты
Цитата Сообщение от alicesmagic Посмотреть сообщение
Только что-то много точек. В моем коде столько нет
Блин... Только сейчас врубилась... это же vcrop мне тест предложил, а я туплю. Сорри!
Да. Тесты мой код не пройдет, это точно. Писала его под данную конкретную задачу. Очень уж хотелось Васе помочь
Буду учить регулярки и PermutationIterator<E>. Рада, что получилось повеселить форум))
2
 Аватар для alicesmagic
233 / 130 / 27
Регистрация: 24.08.2016
Сообщений: 875
13.10.2019, 20:14
Уфф! Я сделала собственный пермутатор! Конечно, его еще причесать нужно, но вообще работает как часики)))

Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import java.util.*;
 
public class Permutation {
    public static void main(String[] args){
        ArrayList<String> al = new ArrayList<>(Arrays.asList("A", "B", "C"));
        ArrayList<ArrayList<String>> aal = permutation(al);
        System.out.println("В списке " + al + " - " + al.size() + " элемента");
        System.out.println("Всего " + al.size() + "! = " + aal.size() + " возможных комбинаций: " + aal);
    }
 
    public static ArrayList<ArrayList<String>> permutation(ArrayList<String> alist) {
        ArrayList<ArrayList<String>> res = new ArrayList<>();
        res.add(new ArrayList<>());
        for (int i = 0; i < alist.size(); i++) {
            res = levelUp(res, alist.get(i));
        }
        return res;
    }
 
    private static ArrayList<ArrayList<String>> levelUp(ArrayList<ArrayList<String>> aalist, String up) {
        ArrayList<ArrayList<String>> res = new ArrayList<>();
        int index = 0;
        for (int i = 0; i < aalist.size(); i++) {
            for (int j = 0; j < aalist.get(0).size() + 1; j++) {
                res.add(new ArrayList<>());
                for (int k = 0; k < aalist.get(0).size(); k++) {
                    res.get(index).add(aalist.get(i).get(k));
                }
                res.get(index++).add(j, up);
            }
        }
        return res;
    }
}

Code
1
2
В списке [A, B, C] - 3 элемента
Всего 3! = 6 возможных комбинаций: [[C, B, A], [B, C, A], [B, A, C], [C, A, B], [A, C, B], [A, B, C]]
0
 Аватар для Goongala
1022 / 562 / 185
Регистрация: 18.08.2013
Сообщений: 2,027
Записей в блоге: 2
13.10.2019, 20:24
alicesmagic, как правило, для любого вида выборки можно заранее расчитать количество возможных вариантов, поэтому можно было бы использовать обычные массивы
0
 Аватар для alicesmagic
233 / 130 / 27
Регистрация: 24.08.2016
Сообщений: 875
13.10.2019, 20:49
Под "причесать", в том числе я имела ввиду сделать вывод не в ArrayList, а в HashSet. Иначе при вводе такого списка {"A", "A", "A", "A"} тоже получим 24 очень интересных варианта.
К вопросу "о массивах" это тоже относится)
Но причесывать уже завтра... а сейчас спааааать!
0
 Аватар для alicesmagic
233 / 130 / 27
Регистрация: 24.08.2016
Сообщений: 875
14.10.2019, 07:14
Причесала как смогла)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.10.2019, 07:14
Помогаю со студенческими работами здесь

Получить все различные слова заданных строк, которые начинаются с ‘a’.
Дана последовательность строк, заканчивающаяся строкой ‘END’. Получить все различные слова из этих строк, которые начинаются с ‘a’. с...

Вывести все возможные фразы, которые можно составить из трех заданных слов
С клавиатуры вводятся три слова. Вывести на экран все возможные фразы, которые можно составить из этих трех слов.

Получить все возможные варианты трехзначных чисел, которые можно составить из двух заданных
Заданы две цифры от 0 до 9. Получить все возможные варианты трехзначных чисел, которые можно составить из этих двух цифр (цифры могут...

Получить все возможные варианты трёхзначных чисел, которые можно составить из двух заданных
Помогите. Заданы две цифры от 0 до 9. Получите все возможные варианты трёхзначных чисел,которые можно составить из этих двух...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru