Аноны , привет , недопрограммист вкатывается в бред , такая хуйня всю ночь сижу и думаю , как же решить задачу , нужно чтобы нарандомило число из 0,1,2 и при этом число должно состоять из одинакового число 0 и 2 , програмлю на питоне , спасайте анончики import randomn=int(input())for i in range (n) : a=random.randint(0,2)
>нужно чтобы нарандомило число из 0,1,2 и при этом число должно состоять из одинакового число 0 и 2 , програмлю на питоне , спасайте анончикиЧе за высер, как это вообще понимать? питоноблядь не человек
Нужно чтобы выдало число длинны n блять , из чисел 0,1,2 и при этом состояло из одинакового числа нулей и двоек , т.е количество двоек в числе ровнялось количеству нулей
>>205872696 (OP)>a=random.randint(0,2)Ты на каждую итерацию а переопределяешь заново. Сделай такa = ""....a+=str(a=random.randint(0,2))Так для начала хотя бы.
>>205872850> количество двоек в числе ровнялось количеству нулейТо есть по сути сумма всех цифр в числе должна быть равна длине этого числа?
>>205872987Смотри , типа выдало число 1202 , а надо чтобы выдало 0202 или 11202 а надо 10202, ну по сути дела то да , хорошая мысль
>>205872850Проходишь n итераций, первый раз берешь a=random.randint(0,2). потом каждый раз умножаешь число на 10 (что бы ноль прибавился) и добавляешь random.randint(0,2), при этом используешь алгоритм который анализирует кол-во двоек и нолей, и если одних больше то не random.randint(0,2) а + 0/2 тупой питоноблядок
>>205873097Не, типа можно изъебнуться, и когда одно из чисел будет отставать не сразу вписывать его, а отложенно с некоторым шансом, и если после закрытия цикла суммы не сходятся начинать пересчет блаблабла но в сухом остатке что так псевдорандом что так.
>>205873169>Алгоритм типа счетчика по остатку?Типа того, я сейчас в лигу играю, если надо потом напишу его, но лучше конечно сам.
Сибог унижает питоноблядей иттn = int(input())d = 0a = ""for i in n:t = random.randint(0,2)d+=tif(not i == d):t == 2 if 0 else 2a.append(t)Надеюсь поймешь как расставить табы, а вообще был бы непротив увидеть версию покороче.
>>205873069А я думаю хуйня. Короче в цикле делай if. Первым условием будетif n = 0: a+=random.randint(1,2)Чтобы не с нуля начиналось.потом как заметил этот господин >>205872987>То есть по сути сумма всех цифр в числе должна быть равна длине этого числа?Значит на единицы в целом похуй. Их не считаем.Нужно ввести какой то count чтобы уравнивать кол-во двоек с нулями.Ебала а не задача.Учись ХТТП парсить, для этого Питон нужен, а не для единичек с ноликами.
>>205873210У меня просто есть более ахуенная ебанутая идея. Сначала делим n на 2 и берем рандомное число в диапазоне от 0 до полученного числа - это будет количество 0/2 будем обозначать за х. Затем для каждой цифры запиливаем счетчик c1 = n-x, c0/c2 = x. Затем проходимся циклом по n и на каждой итерации берем рандом в диапазоне [0; c0 + c1 + c2] обозначим за y. Затем проходимся по ифам с проверкой, что полученное число принадлежит счетчику данного числа (y < c0/c1/c2). Если число принадлежит - прибавляем к итогу, вычитаем 1 из счетика и выходим из цикла, иначе вычитаем из y счетчик и переходим дальше.
>>205873465Да , анончик , слишком сложно для моего узкого разума , надо что-то попроще и желательно с пояснениями действий , чтобы я мог полностью разобраться
import randomn = int(input())a = ""d = 0for i in range(n): t = random.randint(0,2) if i >= n-1-abs(d): if d == 0: t = 1 if d < 0: t = 0 d+=1 if d > 0: t = 2 d-=1 else: if t == 2: d-=1 if t == 0: d+=1 a+=str(t)print(a)
Кароч это долговая система, тут всего один счётчик — счётчик долга.Если у нас рандомится 1, то долг не меняется, 1 ни на что не влияет.Если рандомится 0, то мы должны 2, счётчик делает -1.Если 2, то должны 0, долг растёт на 1.Когда долг больше или равен оставшемуся количеству ходов, то мы его "выплачиваем", то есть потихоньку выводим то, что должны.
Мне кажется дерево условий можно как-нибудь тернаркой пиздато сократить или формулами, но тут нагляднее.
>>2058741801.У тебя первая цифра всегда будет либо 1, либо 2, хотя она вполне может быть равна 0.2. n = 1 вроде как онли 2 у тебя выводит3. Ниппонел нахуя тебе присваивание в условии
>>205874043Спасибо анончик , если у кого будут еще интересные идеи возможно попроще . буду рад почитать , а мне пора в шарагу , надеюсь не проебусь
>>205872696 (OP)ебать ты аутисть документацию почитать по random не вариант или пиши свою библиотеку что бы такой хуйни не было
import numpy as npn = 10num_non_ones = n * 2 // 3num_non_ones += n % 2non_one_indexes = np.random.choice(range(n), num_non_ones, replace=False)two_indexes = np.random.choice(non_one_indexes, num_non_ones // 2, replace = False)res = np.ones(n, dtype=np.int8)res[non_one_indexes] = 0res[two_indexes] = 2print(res)
пиздец конечно на дваче программеры.читаем ТЗ:"ужно чтобы нарандомило число из 0,1,2 и при этом число должно состоять из одинакового число 0 и 2""Нужно чтобы выдало число длинны n блять , из чисел 0,1,2 и при этом состояло из одинакового числа нулей и двоек , т.е количество двоек в числе ровнялось количеству нулей"если всего N цифр, то единиц из них будет 0 <= M <= N.соответствено,m = random.randint(0,n)потом хуярим строку из этого количества единичек, оставшееся делим поровну между 0 и 2. Если N-M нечетное, то вычитаем 1, чтобы делилось поровну (добавлять нельзя, иначе если M=0, вылетим из индексов):ь = m = m if ((n-m) % 2 == 0) else m - 1потом хуярим строку из M единичек и оставшееся двойки и нули поровнуstr = '1' m + '0' ((n-m)/2) + '2' * ((n-m)/2)И,блядь, магия ебучая, шаффлим ее:print(''.join(random.sample(str, len(str))))ВСЕ БЛЯДЬ, 4 ЕБАНЫХ СТРОЧКИ. Вы точно программисты а не ебаные дегенераты?мимо девелопер с 11 годами коммерческого кодинга
>>205875049ебаный парсер сожрал звездочки, вот быстрофиксimport randomn=int(input())m = random.randint(0,n)m = m if ((n-m) % 2 == 0) else m - 1str = '1' ЗВЕЗДОЧКА m + '0' ЗВЕЗДОЧКА ((n-m)/2) + '2' ЗВЕЗДОЧКА ((n-m)/2)print(''.join(random.sample(str, len(str))))при этом я вообще ни разу на питоне не пишу, а пехопе кодер, над которыми двачеры смеются, блядь. Похоже, язык программирования к умению системно решать задачи отношения не имеет
>>205875101Да ебать, унизил каеш, я привык посимвольно обрабатывать в сишке, поэтому даже не думал в сторону шафла, сейчас больше на си пишу прост.мимо оправдывающийся >>205874043
>>205875201ну ладно, я на самом деле не чисто пехопе кодер, а еще девопс и андроид девелопер, поэтому помимо пехопе еще и правлю чужую хуйню на руби и питоне, немного пишу на котлине, да и вообще начинал с паскаля и перла и джавы когда-то, так то я не сильно привязан к парадигмам, навязанным языком, и поэтому могу мыслить шире чем многие программеры, занимающиеся чем-то одним
>>205875390ты скозал? в условиях задачи этого не было, еба.Ну, если хочешь поменять тз - то достаточно поменять одну строчку, догадаешься как распределение поменять с [0;1) c матожиданием 0.5 на [0;1) с матожиданием 1/3 ?
>>205875336Так-то кстати моё решение наибыстрейшее, твой шафл по факту дохуя времени занимает. Хоть какое-то утешение.
>>205875390оп написал что должен быть рандом, а не равномерно распределенный рандом. А так-то это рандом, т.к. запустить программу кучу раз, то будут выведены все возможные варианты
>>205875535возможно, я прикладной программист, мне настрать на o(n2) всякие, пока это реально работает за приемлемое время$ time python 1.py <<< 1000 > /dev/nullreal 0m0.038suser 0m0.028ssys 0m0.009s$ time python 1.py <<< 100000 > /dev/nullreal 0m0.152suser 0m0.140ssys 0m0.012s$ time python 1.py <<< 1000000 > /dev/nullreal 0m0.803suser 0m0.774ssys 0m0.027sстроки до миллиона знаков меньше чем за секунду хуярит - опу норм, можешь свое попрофайлить
>>205875535>>205875682ну и кстати здесь видно, что оно за O(n) делает, у тебя цикл, так что тоже должно быть O(n). Различие может быть только в том, сколько 1 итерация цикла выполняется, и что-то мне подсказывает, что цикл в шафле быстрее, чем рандом каждую итерацию.
>>205875750НУ И ЛАДНА!На самом деле шафл не такой и простой, ты же делаешь рандом и замену. А я делаю только рандом. Хз, профайльни если не лень, мне уже самому интересно, я на сперме, не могу.
Охуел с дегенератов итт, а потом такие на собес приходят. Один >>205875049-кун луч света в темном царстве, остальные вообще тз прочесть не осилили.
>>205875484ну еба - для тупых тупой вариант (питон 2, если 3 то сам гугли как там редьюс делать)functools.reduce(lambda acc, a: acc + (1 if random.randint(0, a) < random.randint(0,n/3) else 0), range(0,n), 0)
>>205876403Аутист не осилил понять, что в задаче всего 2 рандомных параметра: длина строки и число единиц, вдобавок вместо перемешивания готовых значений запилил алгоритм с непредсказуемой сложностью.
>>205875818вот на том же компе, на миллионе цифр твоя в 4 раза медленней$ time python 2.py <<< 1000 > /dev/nullreal 0m0.036suser 0m0.022ssys 0m0.013s$ time python 2.py <<< 100000 > /dev/nullreal 0m0.303suser 0m0.292ssys 0m0.010s$ time python 2.py <<< 1000000 > /dev/nullreal 0m3.101suser 0m3.053ssys 0m0.046s
>>205876226> не знает, что такое нормальное распределение> складывает по единичке> СМОТРИ МАМ, Я ФУНКЦИОНАЛЬЩИК> токсичность во все поляВся суть пхп макак.
>>205878007ну, расскажи же, что такое нормальное распределение на дискретном пространстве, я послушаю. Заодно прочитай что такое метод Монте Карло, я как раз для тупых решение сделал им.
>>205878007вот смотри:import randomn=10a = [0]*nfor i in range(0,10000): a[(sum([0 if random.uniform(0,n)>n/3.0 else 1 for i in range(0,n)]))] += 1print(a)[168, 883, 1969, 2538, 2273, 1385, 586, 152, 40, 6]достаточно нормально для тебя, Гаусс?
Пиздец братан, ты мало того, что в банальную задачу не можешь, так ещё и пишешь как умственноотсталый
>>205875101Неправильное решение. Собственно, что ожидать от тупой макаки на языке для петухов.- Распределение чисел не нормальное, что не является рандомом.- Некоторые числа будут с нуля начинаться, что полный бред, так как для числа длинной 5, у тебя в итоге может выйти 00221, что в итоге 221, а это нихуя не число длинной 5 цифр. В задаче разговор про числа, а не про строки.- Шафл медленное говно. Нахуй шафл, если всё проще решается.- Ну и с разметкой на дваче ты обосрался. Лан, расскажу секрет, можно юзуть pastebin.
>>205879298>pаспределение чисел не нормальное, что не является рандомом.Ты скозал? Случайные числа не обязаны быть нормально распределенными. Задумайся над названием "нормальное распределение случайной величины" и подумай, может ли случайная величина быть распределена не нормально. Подсказка - может, "случайная величина" это не то же самое что "случайная величина с нормальным распределением". В ТЗ про нормальное распределение не написано.Впрочем, если нужно нормалньое распределение - вон выше я написал изменение, слепушара.> Некоторые числа будут с нуля начинатьсяты долбоебушка, оп сам написал, что с 0 может начинаться, читай внимательней ТЗ.> Шафл медленное говнону охуеть вообще. Все, пишем на ассемблере теперь, сука, int 13h> Ну и с разметкой на дваче ты обосралсяда, вот такой я хуевый программист
Вы что ебанулись. Вот вам алгоритм: Рандомим число 1 или 2, потом генерируем массив вида 000000222222 длиной n-1 в зависимости от первого числа и четности (n-1), так чтобы было одинаковое количество двоек и нулей.Потом перемешиваем этот массив, конкатенируем его с первым числом и выдаем ответ. Хули сложного
>>205880130ну, строго говоря - случайное число это то, которое нельзя предсказать. Так что он даже усложнил, элементарный вариант был бы взять например первую цифру 0 или 2 рандомом, вторую - 2 или 0 в зависимости от первой, а потом n-2 единичек. Получится либо02111 либо 20111какое следующее число выпадет из этих двух - неизвестно, так что это случайные числа.
>>205879524>ты долбоебушка, оп сам написал, что с 0 может начинаться, читай внимательней ТЗ.Это писал какой-то хуй. Галки ОПа нет. Я ему не верю.Если допустить. что это был ОП, проебавший галку, то числа начинающиеся на ноль, это как вообще? Это уже не число, а строка. Тогда задача не имеет смысла, надо уточнять ТЗ.>случайная величина с нормальным распределениемЛан, ок. Давай другой термин использую, вижу ты прикопался к нормальному распределению Гауса. На примире попробую объяснить. Вот, если ты возьмёшь числа подходящие под условия задачи из трёх цифр, это будут:111102120201210По идее, ежели у нас рандом, при многократном запуске кода каждое из этих чисел должно выпасть одинаковое количество раз. Это рандом, случайность.Допустим, мы прогоним алгоритм 2400 раз. Числа будут примерно такие:111 - 480102 - 480120 - 480201 - 480210 - 480А в твоём алгоритме будут такие числа и такая частота выпадения:111 - 1200102 - 200120 - 200201 - 200210 - 200012 - 200021 - 200Нихуя се рандом, в половине случаев 111.Кстати, ОП-dick, не указал, обязаны ли 0 и 2 присутствовать в числе или нет, это тоже важно.
>>205880567Дополню, что, даже не смотря на то, что я кодмакака, пока ОП не придёт, не напишет нормальные условия задачи и не скажет, что готов рассмотреть решение на нормальном языке JavaScript azaza, писать я это конечно же не буду.
>>205880567> По идее, ежели у нас рандом, при многократном запуске кода каждое из этих чисел должно выпасть одинаковое количество раз.нет. Единственное определение случайной величины - ее нельзя предсказать, она не зависит от предыдущих значений.еще раз, я сделал там вариант с нормальным распределением, смотри выше
>>205881599А, тогда хули париться. На конце просто случайным образом выбирает 02 или 20 и получаем рандом. В условиях же не написано.function randomHuiandom(length) { if (length === 1) return '1'; let result = Math.random() > 0.5 ? '20' : '02'; for (let i = 0; i < length - 2; i++) result = '1' + result; return result;}
>>205880567ну и это, ты вообще какую-то хуйню считаешь - речь шла о нормальном распределении количества единичек в числе. В моем первом варианте это значение равномерно распределено на промежутке 0,n с матожиданием n/2. Для того, чтобы функция плотности распределения (ты говоришь о плотности, оперируй нормальными математическими терминами) чисел была линейной p=1/n, т.е. каджое из n чисел выпало 1/n раз при n->оо, количество каждой из цифр должно быть нормально распределено на промежутке 0,n с матожиданем 1/k, где k - количество цифр. Поэтому числа в моем первом решении не распределены равномерно, т.к. количество единичек имеет матожидание 1/2, а не 1/3. Если ты поднимешь свои глаза, то найдешь коммент, где я сказал, на что заменить строчку m = ..., чтобы сделать матожидание 1/3.
>>205880567вот запустил мой вариант, который выше с нормальным распределением, число можно начинаться с 0, 70000 итераций:import randomn=3a={}sample_size = 70000while sample_size > 0: m = sum([0 if random.uniform(0,n-1)>n/3.0 else 1 for i in range(0,n)]) if m == 0: continue m = m if ((n-m) % 2 == 0) else m - 1 str = '1' m + '0' ((n-m)/2) + '2' * ((n-m)/2) str = ''.join(random.sample(str, len(str))) if not str in a: a[str] = 1 else: a[str] += 1 sample_size -= 1print(a)$ python 1.py {'201': 10043, '210': 9954, '120': 9958, '012': 10144, '111': 9828, '102': 9966, '021': 10107}достаточно равномерно тебе теперь?