С Новым годом! Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
84 / 83 / 8
Регистрация: 31.03.2015
Сообщений: 447
1

Можно сделать данный код еще меньше?

11.06.2015, 15:31. Показов 2328. Ответов 35
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Сейчас 195 символов, но можно ли еще меньше?
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
p = int(input())
m = []
for i in range(int(input())):
    m += input()
def f(m):
    w = len(m)
    t = []
    for i in range(2**w):
        s = "{"
        for j in range(w):
            if i & 1 << j:
                s += " " + m[j] + " "
        s += "}"
        t.append(s)
    return t
for y in range(p):
    m = f(m)
for k in m:
    print(k)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Блог
11.06.2015, 15:31
Ответы с готовыми решениями:

Как можно сделать данный кусок кода меньше и проще?
Задние: Заменить все элементы с четными номерами на значение второго положительного элемента...

Можно ли данный код сделать короче?
#include&lt;iostream&gt; #include&lt;iomanip&gt; int main() { int r,f,a,b,c,d,x,y; cout&lt;&lt;&quot;Vvedite...

Что нужно сделать, чтобы данную функцию можно было вызвать еще раз, не меняя ее код
Функцию add() из фрагмента кода вызвали 10 раз. Что нужно сделать, чтобы эту функцию можно было...

Как еще короче записать данный код?
#include &lt;ios&gt; main() { system(&quot;for /f \&quot;tokens=1,2,3\&quot; %a in (input.txt) do set /a %a*%b*%c*2...

35
Эксперт NIX
2795 / 2038 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
11.06.2015, 16:37 2
Лучший ответ Сообщение было отмечено Vaderkos как решение

Решение

Было бы намного проще, если бы Вы объяснили какую х... Вы этим кодом пытаетесь осуществить.

Добавлено через 5 минут
Python
2
m = [input() for _ in range(int(input()))]
3
84 / 83 / 8
Регистрация: 31.03.2015
Сообщений: 447
11.06.2015, 16:38  [ТС] 3
Эта, как вы говорите, х.... находит заданное количество подмножеств(p) указанного множества(m).
0
Эксперт NIX
2795 / 2038 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
11.06.2015, 16:47 4
Лучший ответ Сообщение было отмечено Vaderkos как решение

Решение

Python
7
return ['{ ' + ' '.join([m[j] for j in range(w) if i & 1 << j]) + ' }' for i in range(2**w)]
1
84 / 83 / 8
Регистрация: 31.03.2015
Сообщений: 447
11.06.2015, 16:52  [ТС] 5
Вы уверены, что это подходит, у меня выбивает ошибку несовместимости типов, хотя может я не правильно просто вписал
Python
1
2
3
4
5
6
7
8
9
p = int(input())
m = [input() for _ in range(int(input()))]
def f(m):
    w = len(m)
    return ['{ ' +' '.join([str(j) for j in m if i & 1 << j]) + ' }' for i in range(2**w)] 
for y in range(p):
    m = f(m)
for k in m:
    print(k)
0
Эксперт NIX
2795 / 2038 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
11.06.2015, 16:53 6
Цитата Сообщение от Vaderkos Посмотреть сообщение
подмножеств(p) указанного множества(m)
m — это список, если надо именно множество, то там другие знаки.
+ поправил
0
84 / 83 / 8
Регистрация: 31.03.2015
Сообщений: 447
11.06.2015, 16:57  [ТС] 7
Я недавно начал учить питон и еще немного знаю. А задание я делаю по дискретной математике поэтому назвал множеством список.
0
foo();
886 / 587 / 222
Регистрация: 03.07.2013
Сообщений: 1,549
Записей в блоге: 2
13.06.2015, 10:42 8
Vaderkos, стало интересно, вот что получилось:
Python
1
2
3
4
5
6
7
def subsets(data):
    if not len(data):
        yield []
    else:
        for subset in subsets(data[1:]):
            yield subset
            yield [data[0]] + subset
Использование
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import itertools
 
def subsets(data):
    if not len(data):
        yield []
    else:
        for subset in subsets(data[1:]):
            yield subset
            yield [data[0]] + subset
 
print("Enter sequence:", end=' ')
seq = list(map(int, input().split()))
print("Enter count:", end=' ')
count = int(input())
 
for s in itertools.islice(subsets(seq), 0, count):
    print(s)
Код
Enter sequence: 1 2 3
Enter count: 8
[]
[1]
[2]
[1, 2]
[3]
[1, 3]
[2, 3]
[1, 2, 3]
0
84 / 83 / 8
Регистрация: 31.03.2015
Сообщений: 447
13.06.2015, 15:48  [ТС] 9
Да, но проблема в том, что тогда программа работает только для одного подмножества, и она явно не стала меньше.
Вот что вышло у меня

Python
1
2
3
4
5
6
7
8
n = input
r = range
p = r(int(n()))
m = [n() for _ in r(int(n()))]
for y in p:
    l = len(m)
    m = ["{" + " ".join(m[j] for j in r(l) if i & 1 << j)+"}" for i in r(2**l)]
print(m)
Это самый минимум к которому мне удалось прийти (131 знак)
0
Эксперт NIX
2795 / 2038 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
13.06.2015, 16:00 10
Не знаю насчет короче, но немного быстрее и понятнее код
Python
7
    m = ['{ %s }' % " ".join(m[j] for j in r(l) if i & 1 << j) for i in r(2**l)]
1
2741 / 2340 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
13.06.2015, 16:06 11
Цитата Сообщение от Marinero Посмотреть сообщение
понятнее код
Очень спорное высказывание. Потому что если в первый раз на этот код взглянуть сразу не понятно, что он делает. Нужно посидеть и подумать, что к чему.
К тому же все переменные представляют из себя 1 букву, о чем вообще дальше говорить!? Когда, только это в сто раз снижает читабельность кода.
0
84 / 83 / 8
Регистрация: 31.03.2015
Сообщений: 447
13.06.2015, 16:10  [ТС] 12
Marinero, ваш вариант короче моего на 1 символ(за это вам спасибо), но не быстрее, в обычных вычеслениях он выдает ту же скорость что и мой, а вот в вычислении 5 0 проигрывает моему варианту на две секунды.
Все проверял на http://rextester.com/runcode

Добавлено через 2 минуты
alex925, Изначально я этот код написал в javе. Мой проект заключается в том что-бы найти самый быстрый и самый короткий вариант записи в разных языках.
Вот самая первая версия
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
42
43
44
45
package MAD;
import java.io.*;
 
 
class MAD
{  
    static public String[] fun(String M[]){
        int w = M.length;
        String t[] = new String[(int) (Math.pow(2, w))];
        int n =(int) (Math.pow(2, w));
        for (int i = 0; i < n; i++ ) 
        {
            String s = "";
            s += "{";
            for (int j = 0; j < w; j++ ) 
                if ( (i & (1 << j)) !=0 ) 
                    s+=  " " + M[j] + " ";
            s+= "}";
            t[i] = s;
        }
        
        return t;
    }
 
    public static void main(String[] args) throws Exception {
        BufferedReader c = new BufferedReader(new InputStreamReader(System.in));
        int P = Integer.parseInt(c.readLine());
        int w = Integer.parseInt(c.readLine());
        String r[] = new String[w];
        for(int x = 0 ;x < w; x++ ){
                r[x] = c.readLine();
        }
        String x [] = fun(r);
        
        for(int s = 1; s < P; s++){
            x = fun(x);
        }
        
        
        for(int i = 0; i < x.length; i++){
            System.out.println(x[i] + ", ");
        }
        System.out.println(x.length);
    }
}
0
204 / 26 / 5
Регистрация: 22.05.2015
Сообщений: 357
13.06.2015, 20:56 13
Vaderkos, я так и не понял что надо сделать.

Добавлено через 20 секунд
что должна делать программа
0
84 / 83 / 8
Регистрация: 31.03.2015
Сообщений: 447
13.06.2015, 20:58  [ТС] 14
cybercitizen, Чтобы в программе стало меньше знаков
0
204 / 26 / 5
Регистрация: 22.05.2015
Сообщений: 357
13.06.2015, 21:04 15
Цитата Сообщение от Vaderkos Посмотреть сообщение
Чтобы в программе стало меньше знаков
спасибо, кэп
Цитата Сообщение от cybercitizen Посмотреть сообщение
что должна делать программа
0
84 / 83 / 8
Регистрация: 31.03.2015
Сообщений: 447
13.06.2015, 21:07  [ТС] 16
cybercitizen, Находить заданное количество подмножеств множества.
Например
2
0
{}
{{}}

или
1
2
2
1
{}
{1}
{2}
{1, 2}
0
204 / 26 / 5
Регистрация: 22.05.2015
Сообщений: 357
13.06.2015, 21:15 17
Vaderkos, что означают эти волшебные цифры? P.S. Я знаю матчасть.
0
84 / 83 / 8
Регистрация: 31.03.2015
Сообщений: 447
13.06.2015, 21:19  [ТС] 18
cybercitizen,
для 2 0 A = https://www.cyberforum.ru/cgi-bin/latex.cgi?\oslash P(P(A))
для 1 2 2 1 A = {2, 1} P(A)
0
204 / 26 / 5
Регистрация: 22.05.2015
Сообщений: 357
13.06.2015, 21:23 19
А эти волшебные цифры что значат? Ты, кстати еще за прошлые не сказал. Можешь нормально описать задачу?
0
84 / 83 / 8
Регистрация: 31.03.2015
Сообщений: 447
13.06.2015, 21:26  [ТС] 20
cybercitizen,
Что конкретно не понятно? эти цифры значат
2 количество подмножеств
0 количество єлементов множества
-------------а во втором случае
1 количество подмножеств
2 количество єлементов множества
2 сами элементы
1 сами элементы
0
13.06.2015, 21:26
BasicMan
Эксперт
19315 / 2622 / 84
Регистрация: 17.02.2009
Сообщений: 10,364
Блог
13.06.2015, 21:26
Помогаю со студенческими работами здесь

Как сделать данный текст и еще с поворотамм ?
Падающий текст. Из текстового файла читаются символы, которые «сыплются» с правого верхнего угла...

Какими ещё способами можно ещё сделать?
Задание: Известно, что: 1 в третей степени будет=1 2 в третей степени будет=3+5 3 в третей...

Сжать код 140байт. нужно еще меньше.
Сжать как то можно? Сейчас занимает 140B нужно меньше

Как можно максимально оптимизировать данный код через логическое индексирование? Код полностью работает
header = data = , , , , , , , , , , , , ] import numpy as np def...

Пожалуйста объясните данный участок кода: typename std::vector<T>::iterator it), где его ещё можно применять?
//полный участок кода template &lt;typename T&gt; void quick_remove_at(std::vector&lt;T&gt; &amp;v, typename...

Можно ли оптимизировать данный код?
Есть задача: Прочитать шифр: Решил вот так: k = 0 aList = for s in &quot;g fmnc wms bgblr...

Можно ли сократить данный код
String score = &quot;0&quot;; int a = Convert.ToInt32(score); a++; score = Convert.ToString(a); ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru