Написание однострочников в Python всегда было довольно интересным для меня, и однажды я заинтересовался — а любой ли алгоритм возможно реализовать всего в одну строчку Python кода ?
Оказалось — да!
Немного теории
Исполнитель называется Тьюринг-полным, если на нём можно реализовать любую вычислимую функцию, и наоборот. То есть, чтобы доказать что в одну строку на Python можно написать какой угодно код, необходимо доказать Тьюринг-полноту однострочных программ на python. Как это сделать ?
Довольно простой способ, который я и выбрал — имитировать другую исполнительную систему, для которой уже доказано, что она обладает полнотой по Тьюрингу. Например, я мог бы написать интерпретатор языка PHP, который, естественно, является Тьюринг-полным, как и почти все существующие языки программирования. В этом, однако, нет никакой необходимости, ведь есть гораздо более простые системы, полные по Тьюрингу. Например, клеточный автомат, под названием Правило 110.
Чёткие правила данного автомата изложены в Википедии по ссылке здесь.
Вкратце, мы имеем бесконечную ленту из последовательно размещённых клеток, которые могут иметь только два состояния (0 и 1), будущее состояние клетки зависит от текущих значений трёх клеток — её самой и двух её ближайших соседей и рассчитывается по определённому несложному алгоритму.
Получается, что если мы сможем написать в одну строчку этот клеточный автомат, значит и любой другой алгоритм написать в одну строчку тоже будет возможно.
Реализация
Сразу уточню, что символ «;» я считал началом новой строки, чем он по сути и является, иначе задача превращается в тривиальную.
Итак, опредилившись с тем что же именно я собираюсь написать, я, недолго думая, запустил VSCode и… И завис. Потому что неясно было что писать. Ясно было, что нужен цикл while, ввод начального состояния, которое нужно как-то обработать, действия над ним в цикле, Кроме того, цикл надо ещё как-то остановливать, если состояние системы стабилизировалось и больше не меняется.
Как это всё уместить в одну строчку, было не очень понятно. Например даже результат вызова input() нельзя никак занести в обычную в переменную и потом работать с ним дальше одной строкой.
# А не работает так!
while (a=int(input()) or a!=0):print(a)
На некоторое время я оставил свою идею, пока, читая хабр, вдруг не наткнулся на следующую мысль — для объявления переменной в одну строку в python можно использовать глобальные переменные. Например, вот так:
#Объявление
globals().update({"a":0})
#Получение значения
globals().get("a")
# Простейший цикл while
while (globals().update({"a":int(input())}) or globals().get("a")!=0):print(globals().get("a"))
В этом примере мы также пользуемся тем, что исполняемая функция globals.update() возвращает None, а условие (None or value) почти всегда вернёт value, кроме некоторых случаев. То есть, по факту, условный оператор or можно использовать, чтобы встраивать любой исполняемый код в условие. Разумеется, можно написать сколько угодно … or … or … подряд, так что задача существенно упрощается.
В целом, достаточно сложная задача и была решена при помощи этих двух приёмов — глобальные переменные и фиктивный условный оператор. Исходники лежат здесь, если кому-то интересно, можно посмотреть, а сейчас я немного распишу как итоговый код работает.
https://github.com/Thane784/rule_110
Куда же тыкать ?
Основной файл — code.py Там, правда есть некоторые проблемы с выводом — для человека он не очень читаем. Можно запустить файл show.py , там цикл искусственно ограничен 25 итерациями и всё видно нагляднее.
Итоговый код и как он работает
Итак, нам необходимо каждый проход цикла проверять состояние системы и заканчивать выполнение программы, если оно такое же, как предыдущее(состояние стабилизировалось).
Для этого заведем две глобальные переменные «s» (string) и «l» (last). Да, я знаю, что s и l — не очень хорошие названия для переменных, но для одноразового кода, который никто в дальнейшем поддерживать не будет, думаю нормально.
Сперва, мы должны запросить на вход начальное состояние, причем сделать это лишь один раз. Также мы будем сравнивать текущее состояние системы с предыдущим. Для этого используем следующий код:
# Записываем нач. состояние в переменную,
# выводим его же в консоль,
# причём только если предыдущего состояния нет,
# то есть на первой иттерации цикла,
# используем оператор or для исполнения кода.
# По факту в сравнение пойдет лишь globals().get("s")),
# которое мы и сравниваем с предыдущим состоянием globals().get("l"))
while (( ( globals().update({"s": input()}) or print(globals().get("s"))) if globals().get("l") == None else None) or globals().get("s")) != globals().get("l"): print('')
Далее, уже в теле цикла мы объявляем фиктивную переменную a которой присваиваем значение длинного длинного сравнения через оператор or. На самом деле, оператор сравнения здесь нужен чтобы выполнить большое количество исполняемого кода, в котром каждая вызываемая функция вернёт None. Возможно, можно было реализовать подобное более красиво, но это самое быстрое рабочее решение, которое пришло мне в голову.
#Скелет
while last_code: a = (func1() or func2() or func3() or 1)
В полном же варианте нарощенном на данный скелет мы обновляем l (предыдущее состояние), проходим один цикл клеточного автомата, перезаписывая переменную s, и выводим новое состояние.
Для хранения состояния используем строку, постепенно обрабатывая её, собираем массив, который содержит новое состояние. Этот массив затем приводим к строке при помощи функции ».join() и перезаписываем глобальную переменную s. Скорее всего, можно было бы обойтись без массива, но оптимизация здесь не слишком важна. Также, при определённых условиях расширяем наблюдаемую область(если в результате работы алгоритма «оживились» клетки, ранее нами не отслеживаемые(поле, естесственно бесконечно), откуда кстати и проблемы с выводом — довольно скоро поле становится ОЧЕНЬ большим). Большую часть кода занимает вычисление следующего состояния на основе предыдущего, это просто множество условий if elif else записанных в одну строчку.
Вот так выглядит финальный код.
while (( ( globals().update({"s": input()}) or print(globals().get("s"))) if globals().get("l") == None else None) or globals().get("s")) != globals().get("l"): a = ( globals().update({"l": (globals().get("s"))}) or globals().update({"s": (''.join(['1' if globals().get("s")[0] == '1' else '']+[('0' if (n != 0 and n!=(len(globals().get("s"))-1) and (globals().get("s")[n-1:n+2] == '000' or globals().get("s")[n-1:n+2] == '100' or globals().get("s")[n-1:n+2] == '111') ) else '0' if (n == (len(globals().get("s"))-1) and ( ((globals().get("s")[-2] if len(globals().get("s"))>1 else '0')+globals().get("s")[-1]) == '00' or ((globals().get("s")[-2] if len(globals().get("s"))>1 else '0')+globals().get("s")[-1]) == '10') ) else '0' if (n == 0 and globals().get("s")[0]+(globals().get("s")[1] if len(globals().get("s"))>1 else '0') == '00' ) else '1') for n in range(0,len(globals().get("s")))]) )}) or (print(globals().get("s")) if globals().get("s") != globals().get("l") else None) or 1)
Что же в итоге ?
Итак ! Мы написали в одну строчку Тьюринг-полную систему, чем доказали, что однострочники на python обладают Тьюринг-полнотой. Что же это значит ? Это значит, что в одну строчку python кода можно написать всё что угодно ! Даже Windows 11 или ядро Linux.
Правда, скорее всего, код получится слегка нечитаемым да и дебаггинг будет затруднён…)
P. s.
Автор знаком с python на любительском уровне и не пишет на нём ничего серьёзного, поэтому прошу простить, если проглядел какие-то очевидные вещи и возможности. Автор понимает, что написание подобного кода в реальном проекте, чревато некоторым непониманием со стороны коллег и не призывает никого повторять изложенные здесь эксперименты)
5 декабÑÑ 2021, воÑкÑеÑенÑе
СÑÐµÐ»Ñ Ð²Â ÑеÑÑÑ Ð¾Ð±Ð¾ÑÐ¾Ð½Ñ ÐоÑÐºÐ²Ñ Ð¿Ð¾ÑÑавили в ÐÑÑково
4 декабÑÑ 2021, ÑÑббоÑа
РазÑÑкиваÑÑ Ð¿ÑопавÑего в ÐеленогÑаде 38-леÑнего Ðазбека Ðолаева. ÐомогиÑе найÑи
3 декабÑÑ 2021, пÑÑниÑа
ÐаÑалиÑÑ Ð¿Ñодажи кваÑÑÐ¸Ñ Ð²Â Ð±ÑдÑÑем зеленогÑадÑком микÑоÑайоне ЦÐÐ. ТепеÑÑ Ð¾Ð½Â Ð½Ð°Ð·ÑваеÑÑÑ Â«ÐелÑнÑй паÑк»
ÐÐ°Â Ð·Ð¸Ð¼Ð¾Ð²ÐºÑ Ð²Â ÐеленогÑад пÑилеÑели пеÑвÑе ÑвиÑиÑÑели и ÑеÑÑÑки
ÐÑаво поÑÑÑоиÑÑ Ð³Ð¾ÑÑиниÑÑ Ð½Ð°Ð¿ÑоÑив 14-го микÑоÑайона полÑÑил новÑй инвеÑÑоÑ. ÐÑо Ñже пÑÑÐ°Ñ Ð¿Ð¾Ð¿ÑÑка
ÐÑниÑипалÑнÑй деÑÑкий Ñад в ÐР«ÐовÑй ÐеленогÑад» полÑÑил ÑазÑеÑение на ÑÑÑоиÑелÑÑÑво
Ðоенно-иÑÑоÑиÑеÑÐºÐ°Ñ ÑеконÑÑÑÑкÑÐ¸Ñ Â«Ð£Â Ð´ÐµÑевни ÐÑÑковоâ¦Â» â 4 декабÑÑ Ð²Â ÐндÑеевке
ÐонÑеÑÑ Ð¿Ð°Ð½Ðº-гÑÑÐ¿Ð¿Ñ F.P.G â 4 декабÑÑ Ð²Â ÐºÐ»Ñбе Sova
2 декабÑÑ 2021, ÑеÑвеÑг
ÐибеÑклÑб Black оÑкÑÑлÑÑ Ð¿Ð¾Ñле пеÑеезда и ÑемонÑа Ð¿Ð¾Â Ð½Ð¾Ð²Ð¾Ð¼Ñ Ð°Ð´ÑеÑÑ
ÐваÑÑиÑа 39 Ñ диÑекÑоÑом на кÑÑ Ð½ÐµÂ â полÑÐ²ÐµÐºÐ¾Ð²Ð°Ñ Ð¸ÑÑоÑÐ¸Ñ ÐеленогÑадÑкого мÑзеÑ, коÑоÑÐ°Ñ ÑолÑко наÑинаеÑÑÑ
«ÐикÑон» наÑал ÑеÑийное пÑоизводÑÑво компоненÑов Ð´Ð»Ñ Ñиловой ÑлекÑÑоники по ÑÐµÑ Ð½Ð¾Ð»Ð¾Ð³Ð¸Ð¸ Trench MOSFET
400-Ð¼Ñ Ð°Ð²ÑобÑÑÑ Ð´Ð¾ «ТÑÑинÑкой» добавили еÑе Ð¾Ð´Ð½Ñ Ð¾ÑÑÐ°Ð½Ð¾Ð²ÐºÑ Ð½Ð°Â ÐÑÑÑзовÑком ÑоÑÑе. Ðна бÑÐ´ÐµÑ Ð²Ð¾Ð·Ð»Ðµ жилого комплекÑа «ÐовÑй ÐеленогÑад»
ÐонÑеÑÑ jazz-fusion гÑÑÐ¿Ð¿Ñ Ascorbic Acid â 3 декабÑÑ Ð² «ÐинемаÑогÑаÑе». ÐлÑб дÑÑзей «ÐеленогÑад.ÑÑ» даÑÐ¸Ñ Ð±Ð¸Ð»ÐµÑÑ
СеÑевой «Ðагазин поÑÑоÑннÑÑ ÑаÑпÑодаж» поÑвилÑÑ Ð²Â 15-м микÑоÑайоне
1 декабÑÑ 2021, ÑÑеда
Ðве запÑавки «ÐÑкойл» оÑкÑоÑÑÑÑ Ð½Ð°Â Ð-11 ÑÑдом Ñ ШеÑемеÑÑево
Ð¨Ð¾Ñ Ð¿Ð¾Ð´ дождÑм «ÐÑжÑина и женÑина» â 23 декабÑÑ Ð²Â ÐЦ «ÐеленогÑад». ÐлÑб дÑÑзей «ÐеленогÑад.ÑÑ» и ÐЦ даÑÑÑ Ð±Ð¸Ð»ÐµÑÑ
ÐÑÐµÐ»Ñ Hilton Garden Inn поÑÑÑоÑÑ Ð²Â ÐеленогÑаде в 2025 Ð³Ð¾Ð´Ñ ÑÑдом Ñ плоÑадкой ÐÐР«ÐлабÑÑево»
30 ноÑбÑÑ 2021, вÑоÑник
ÐÑвоз мÑÑоÑа Ð´Ð»Ñ Ð¶Ð¸Ñелей подоÑÐ¾Ð¶Ð°ÐµÑ Ñ ÑнваÑÑ. ТепеÑÑ ÑÑа ÑÑлÑга бÑÐ´ÐµÑ Ð²Â Ð¿Ð»Ð°Ñежке оÑделÑной ÑÑÑокой
«ÐизанÑкаÑ» беÑеза в 4 микÑоÑайоне деÑжиÑÑÑ Ð±Ð»Ð°Ð³Ð¾Ð´Ð°ÑÑ ÑÑÑлÑ
СкоÑоÑÑнÑе «ÐаÑÑоÑки» до Ðлина ÑепеÑÑ Ð±ÑдÑÑ Ñ Ð¾Ð´Ð¸ÑÑ Ð¸Â Ð¿Ð¾Â Ð²ÑÑ Ð¾Ð´Ð½Ñм
Ð¨Ð°Ñ Ð¼Ð°ÑнÑй ÑÑÑÐ½Ð¸Ñ Â«Ð¥Ð¾Ð´ конÑм» â 5 декабÑÑ Ð²Â ÐÑлÑÑÑÑном ÑенÑÑе «ÐеленогÑад»
ÐвÑобÑÑÑ-ÑкÑпÑеÑÑÑ Ð·Ð°Ð¿ÑÑÑили оÑ меÑÑо «ХовÑино» до ТвеÑи. Ðни едÑÑ Ð¿Ð¾Â Ð-11 без оÑÑановок
29 ноÑбÑÑ 2021, понеделÑник
СвеÑоÑÐ¾Ñ Ð½Ð°Ñали ÑÑÑанавливаÑÑ Ð½Ð°Â Ð¿ÐµÑÐµÑ Ð¾Ð´Ðµ ÑеÑез ÐоÑковÑкий пÑоÑÐ¿ÐµÐºÑ Ð²Ð¾Ð·Ð»Ðµ оÑÑановки «ÐвоÑÐµÑ ÐºÑлÑÑÑÑÑ»
«ÐеÑвонаÑалÑнÑй пÑÐ¾ÐµÐºÑ Ð¸Ñкажен, анÑамблевое единÑÑво наÑÑÑено». ÐоÑÐµÐ¼Ñ Ñиновники оÑказалиÑÑ Ð¿ÑизнаÑÑ Ð°ÑÑ Ð¸ÑекÑÑÑнÑй ÑенÑÑ ÐеленогÑада обÑекÑом кÑлÑÑÑÑного наÑледиÑ
СовеÑÑкий Ñанк, заÑонÑвÑий 80 Ð»ÐµÑ Ð½Ð°Ð·Ð°Ð´, Ð¼Ð¾Ð¶ÐµÑ Ð»ÐµÐ¶Ð°ÑÑ Ð¿Ð¾Ð´ землей возле ШколÑного озеÑа. Ðго пÑедлагаÑÑ Ð¿Ð¾Ð´Ð½ÑÑÑ Ð¸Â ÑделаÑÑ Ð¼ÑзейнÑм ÑкÑпонаÑом
СделаÑÑ Ð²ÑделеннÑÑ Ð¿Ð¾Ð»Ð¾ÑÑ Ð´Ð»Ñ Ð°Ð²ÑобÑÑов на СолнеÑной аллее на пеÑеÑеÑении Ñо ÑÑаÑÑм моÑÑом
ÐоÑной Ð²Ð¾Ñ Ð²ÑÐ½ÐµÑ Ð¸Ð· «ÐÑÑÑÑоÑки» Ð°Ð»ÐºÐ¾Ð³Ð¾Ð»Ñ Ð¿Ð¾ÑÑи на девÑÑÑ ÑÑÑÑÑ ÑÑблей
Ðак гоÑовÑÑÑÑ ÐºÂ Ð·Ð¸Ð¼Ðµ на плаÑной доÑоге Ð-11
ÐоиÑк по новоÑÑÑм
8 декабÑÑ 2021, ÑÑеда
ÐÑлинаÑÐ¸Ñ Â«ÐÑеÑелÑ» оÑкÑÑлаÑÑ Ð²Â 12-м микÑоÑайоне
СделаÑÑ Ð½Ð¾Ð²Ð¾Ð³Ð¾Ð´Ð½ÑÑ ÑоÑÐ¾Ð·Ð¾Ð½Ñ Ð²Â Ð¿Ð¾Ð´ÑÐµÐ·Ð´Ð°Ñ Ð¶Ð¸Ð»ÑÑ Ð´Ð¾Ð¼Ð¾Ð²
Ðагазин «ÐикÑи» в ÑÑеÑÑем микÑоÑайоне закÑÑваеÑÑÑ
«СÑббоÑник» по ÑбоÑке Ñнега оÑганизÑÑÑ Ð²Â ÐолÑбом
ÐекÑÐ¸Ñ Ð¿Ð¾Â Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑи Ð´Ð»Ñ Ð´ÐµÑей оÑ ÑÐºÐ¾Ð»Ñ ÐизаÐлеÑÑ â 12 декабÑÑ Ð²Â Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñеке в коÑпÑÑе 1106
7 декабÑÑ 2021, вÑоÑник
ÐÐ°Ð¹Ð´ÐµÐ½Ð½Ð°Ñ Ð½Ð°Â ÑÑÑойке в 19-м микÑоÑайоне «мина вÑемÑн войнÑ» оказалаÑÑ Ð²Ð¾Ð²Ñе не ÑнаÑÑдом
ÐенÑина попала под маÑÐ¸Ð½Ñ ÑÑдом Ñ болÑниÑей. Ðна пеÑÐµÑ Ð¾Ð´Ð¸Ð»Ð° доÑÐ¾Ð³Ñ Ð²Â Ð½ÐµÐ¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð½Ð¾Ð¼ меÑÑе, Ñ Ð¾ÑÑ ÑÑдом пеÑÐµÑ Ð¾Ð´
СÑÐ°Ð·Ñ Ð´ÐµÑÑÑÑ Ð½Ð¾Ð²ÑÑ ÑÑанÑий меÑÑо оÑкÑÑли в ÐоÑкве
ÐÂ ÐºÐ°ÐºÐ¸Ñ Ð´Ð¾Ð¼Ð°Ñ ÐеленогÑада бÑдÑÑ Ð´ÐµÐ»Ð°ÑÑ ÐºÐ°Ð¿Ð¸ÑалÑнÑй ÑÐµÐ¼Ð¾Ð½Ñ Ð¸Â Ð¼ÐµÐ½ÑÑÑ Ð»Ð¸ÑÑÑ Ð²Â 2022 и 2023 годаÑ
ÐÑеÑоÑÑийÑкие ÑÐµÑ Ð½Ð¾Ð»Ð¾Ð³Ð¸ÑеÑкие ÑоÑÐµÐ²Ð½Ð¾Ð²Ð°Ð½Ð¸Ñ Â«Ð Ð°Ð´Ð¸Ð¾ÑеÑÑ 2021» пÑоÑли в ÐеленогÑаде: заданиÑ, ÑÑаÑÑники и победиÑели
ФÑÑа пеÑекÑÑла ÐенингÑадÑкое ÑоÑÑе возле ЧÑÑной гÑÑзи. ÐÑобка ÑаÑÑÑнÑлаÑÑ Ð½Ð°Â ÑÐµÐ¼Ñ ÐºÐ¸Ð»Ð¾Ð¼ÐµÑÑов
6 декабÑÑ 2021, понеделÑник
УмеÑла заÑлÑженнÑй ÑÑиÑÐµÐ»Ñ ÐнÑонина ÐоÑеÑкова. Ðна ÑÑоÑла Ñ иÑÑоков зеленогÑадÑкого обÑазованиÑ
Ð¡Ð°Ð¹Ñ Ð½ÐµÐ´Ð²Ð¸Ð¶Ð¸Ð¼Ð¾ÑÑи ЦÐÐРзапÑеÑил ÑдаваÑÑ Ð¶Ð¸Ð»Ñе «ÑолÑко ÑлавÑнам». РиелÑÐ¾Ñ ÑÑиÑаеÑ, ÑÑо запÑеÑом пиÑаÑÑ ÐºÐ°ÐºÐ¸Ðµ-Ñо Ñлова в Ñекламе пÑÐ¾Ð±Ð»ÐµÐ¼Ñ Ð½ÐµÂ ÑеÑиÑÑ
ÐÐ¸Ð½Ñ Ð²ÑемÑн Ð²Ð¾Ð¹Ð½Ñ Ð½Ð°Ñли на ÑÑÑойке новÑÑ Ð´Ð¾Ð¼Ð¾Ð² в 19-м микÑоÑайоне
ÐоÑÐµÐ¼Ñ Ð²Â 400-м ÑкÑпÑеÑÑе Ñедко поÑвлÑÑÑÑÑ ÐºÐ¾Ð½ÑÑолеÑÑ?
ÐоÑнÑе «ÐаÑÑоÑки-ÑкÑпÑеÑÑÑ» пÑÑÑÑÑ Ð¼ÐµÐ¶Ð´Ñ ÐоÑквой и ÐеленогÑадом по вÑÑ Ð¾Ð´Ð½Ñм
«Ðе ÑмеÑеÑÑ â надо ÑмеÑÑ». Ðде в ÐеленогÑаде ÑабоÑаÑÑ Ð³ÑÑÐ¿Ð¿Ñ Ð°Ð½Ð¾Ð½Ð¸Ð¼Ð½ÑÑ Ð°Ð»ÐºÐ¾Ð³Ð¾Ð»Ð¸ÐºÐ¾Ð² и наÑкоманов
5 декабÑÑ 2021, воÑкÑеÑенÑе
СÑÐµÐ»Ñ Ð²Â ÑеÑÑÑ Ð¾Ð±Ð¾ÑÐ¾Ð½Ñ ÐоÑÐºÐ²Ñ Ð¿Ð¾ÑÑавили в ÐÑÑково
4 декабÑÑ 2021, ÑÑббоÑа
РазÑÑкиваÑÑ Ð¿ÑопавÑего в ÐеленогÑаде 38-леÑнего Ðазбека Ðолаева. ÐомогиÑе найÑи
3 декабÑÑ 2021, пÑÑниÑа
ÐаÑалиÑÑ Ð¿Ñодажи кваÑÑÐ¸Ñ Ð²Â Ð±ÑдÑÑем зеленогÑадÑком микÑоÑайоне ЦÐÐ. ТепеÑÑ Ð¾Ð½Â Ð½Ð°Ð·ÑваеÑÑÑ Â«ÐелÑнÑй паÑк»
ÐÐ°Â Ð·Ð¸Ð¼Ð¾Ð²ÐºÑ Ð²Â ÐеленогÑад пÑилеÑели пеÑвÑе ÑвиÑиÑÑели и ÑеÑÑÑки
ÐÑаво поÑÑÑоиÑÑ Ð³Ð¾ÑÑиниÑÑ Ð½Ð°Ð¿ÑоÑив 14-го микÑоÑайона полÑÑил новÑй инвеÑÑоÑ. ÐÑо Ñже пÑÑÐ°Ñ Ð¿Ð¾Ð¿ÑÑка
ÐÑниÑипалÑнÑй деÑÑкий Ñад в ÐР«ÐовÑй ÐеленогÑад» полÑÑил ÑазÑеÑение на ÑÑÑоиÑелÑÑÑво
Ðоенно-иÑÑоÑиÑеÑÐºÐ°Ñ ÑеконÑÑÑÑкÑÐ¸Ñ Â«Ð£Â Ð´ÐµÑевни ÐÑÑковоâ¦Â» â 4 декабÑÑ Ð²Â ÐндÑеевке
ÐонÑеÑÑ Ð¿Ð°Ð½Ðº-гÑÑÐ¿Ð¿Ñ F.P.G â 4 декабÑÑ Ð²Â ÐºÐ»Ñбе Sova
2 декабÑÑ 2021, ÑеÑвеÑг
ÐибеÑклÑб Black оÑкÑÑлÑÑ Ð¿Ð¾Ñле пеÑеезда и ÑемонÑа Ð¿Ð¾Â Ð½Ð¾Ð²Ð¾Ð¼Ñ Ð°Ð´ÑеÑÑ
ÐваÑÑиÑа 39 Ñ диÑекÑоÑом на кÑÑ Ð½ÐµÂ â полÑÐ²ÐµÐºÐ¾Ð²Ð°Ñ Ð¸ÑÑоÑÐ¸Ñ ÐеленогÑадÑкого мÑзеÑ, коÑоÑÐ°Ñ ÑолÑко наÑинаеÑÑÑ
«ÐикÑон» наÑал ÑеÑийное пÑоизводÑÑво компоненÑов Ð´Ð»Ñ Ñиловой ÑлекÑÑоники по ÑÐµÑ Ð½Ð¾Ð»Ð¾Ð³Ð¸Ð¸ Trench MOSFET
400-Ð¼Ñ Ð°Ð²ÑобÑÑÑ Ð´Ð¾ «ТÑÑинÑкой» добавили еÑе Ð¾Ð´Ð½Ñ Ð¾ÑÑÐ°Ð½Ð¾Ð²ÐºÑ Ð½Ð°Â ÐÑÑÑзовÑком ÑоÑÑе. Ðна бÑÐ´ÐµÑ Ð²Ð¾Ð·Ð»Ðµ жилого комплекÑа «ÐовÑй ÐеленогÑад»
ÐонÑеÑÑ jazz-fusion гÑÑÐ¿Ð¿Ñ Ascorbic Acid â 3 декабÑÑ Ð² «ÐинемаÑогÑаÑе». ÐлÑб дÑÑзей «ÐеленогÑад.ÑÑ» даÑÐ¸Ñ Ð±Ð¸Ð»ÐµÑÑ
СеÑевой «Ðагазин поÑÑоÑннÑÑ ÑаÑпÑодаж» поÑвилÑÑ Ð²Â 15-м микÑоÑайоне