37.1K subscribers
1.46K photos
33 videos
5 files
1.62K links
加入频道
👣 Задача лексический анализ (lex.go)

Пусть идентификатор — это последовательность латинских букв и цифр, начинающаяся с буквы.

Известно, что в некоторой строке записаны идентификаторы, разделённые произвольным количеством пробелов. При этом строка может начинаться и заканчиваться произвольным количеством пробелов. Назовём такую строку предложением.

Лексический анализ предложения заключается в выделении из него последовательности записанных в нём идентификаторов. В результате лексического анализа получается массив целых чисел, каждое из которых соответствует одному из идентификаторов. Целые числа назначаются идентификаторам произвольно, но так, чтобы разным идентификаторам соответствовали разные числа, а равным идентификаторам — одинаковые числа.

Пример. Пусть дано предложение

alpha x1 beta alpha x1 y

Тогда на выходе лексического анализатора может получиться последовательность чисел

1 2 3 1 2 4
Здесь число 1 соответствует идентификатору alpha, число 2 — идентификатору x1, число 3 — идентификатору beta, а число 4 — идентификатору y.

Необходимо разработать функцию lex, выполняющую лексический анализ предложения:

func lex(sentence string, array AssocArray) []int {
...
}


В качестве первого параметра функция lex принимает предложение, а второй параметр задаёт ассоциативный массив, который должен быть использован внутри функции для хранения соответствия идентификаторов и целых чисел.

Ассоциативный массив, который можно передавать в функцию lex, должен реализовывать интерфейс AssocArray:

type AssocArray interface {
Assign(s string, x int)
Lookup(s string) (x int, exists bool)
}


Метод Assign добавляет в ассоциативный массив словарную пару.

Метод Lookup выполняет поиск словарной пары по ключу и возвращает два значения: x и exists. Если словарной пары с указанным ключом в массиве нет, то exists принимает значение false. В противном случае exists равен true, а x — связанное с ключом значение.

Составьте программу lex.go, демонстрирующую работоспособность функции lex. В качестве ассоциативных массивов для тестирования функции lex нужно использовать список с пропусками и АВЛ-дерево.

Пишите свой ответ в комментариях👇

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 G3N - Go 3D Game Engine

Если вы любите игры и язык Go так, как мы, то предлагаем вам скачать и попробовать данный движок для разработки 3D игр.

🖥 Github
⚙️ Project

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Gopeed

Gopeed – высокоскоростной загрузчик, с открытым исходным кодом

Поддерживает:

HTTP
BitTorrent
Magnet

Работает почти на всех девайсах и системах.

🖥 Github

#Go #downloader
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Godis

Godis - это высокоскоростная реализация Redis Server на Go.


🖥 Github

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Задача топологическая сортировка формул

Пусть имеется некоторый набор формул, задающих зависимости между переменными. Например, объём пирамиды, в основании которой лежит прямоугольник со сторонами и , а высота равна полусумме сторон основания, определяется следующим набором формул:

V = S*h / 3
S = a * b
a, b = 10, 15
h = (a + b) / 2


Обратите внимание на то, что каждая формула состоит из левой и правой частей, разделённых знаком «=». Левая часть является списком переменных, а правая часть — списком соответствующих этим переменным выражений. Переменные в левой части и выражения в правой части разделяются запятыми.

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

Составьте программу, осуществляющую топологическую сортировку формул.

Для решения задачи нужно построить орграф, вершинами которого являются формулы, а дуги задают зависимости между ними. То есть, если формула зависит от формулы , то в графе существует дуга . Затем следует выполнить топологическую сортировку вершин этого орграфа, то есть расположить вершины в таком порядке, чтобы дуги вели от бо́льших вершин к меньшим. Этот порядок, как не трудно догадаться, совпадает с порядком превращения «серых» вершин в «чёрные» в процессе обхода графа в глубину.

Формулы подаются в программу через стандартный потока ввода. Они отделяются друг от друга символом перевода строки. Выражения в составе формул содержат знаки четырёх арифметических операций, круглые скобки, десятичные числа и имена переменных. Имя переменной — это последовательность латинских букв и десятичных цифр, начинающаяся с буквы.

Программа должна выводить сообщение «syntax error», если какая-нибудь формула содержит синтаксическую ошибку, или если некоторая переменная присутствует в левой части нескольких формул, или если не существует формулы для вычисления какой-нибудь переменной.

Программа должна выводить сообщение «cycle» в случае обнаружения циклической зависимости формул. Для обнаружения циклической зависимости следует проверять наличие обратных дуг при обходе графа в глубину. Напомним, что обратная дуга ведёт в «серую» вершину.

Если ошибки в формулах не обнаружены, то программа должна выводить в стандартный поток вывода отсортированный набор формул. В случае существования нескольких вариантов взаимного расположения формул, требуется вывести любой из них.

Пишите свой ответ в комментариях👇

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Service Weaver — свежий фреймворк на GO для разработки и деплоя распределенных приложений.

Service Weaver позволяет писать приложения в виде модульного монолита и деплоить в виде набора микросервисов.

🖥 Github
💨 Проект

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Задача. Подготовка экспедиции на Марс

N кандидатов готовятся к двум космическим экспедициям на Марс. Поскольку экспедиции будут продолжаться несколько лет, а их участники окажутся в замкнутом пространстве небольшого объёма, то важное значение приобретает психологическая совместимость членов экипажа.

Путём тестирования были установлены пары кандидатов, присутствие которых в одной и той же экспедиции было бы нежелательным. Результаты тестирования отражены в таблице размера NxN. Если на пересечении -той строки и $j$-го столбца таблицы находится знак «+», то участие -го и $j$-го кандидатов в одной экспедиции нежелательно.

Составьте программу, разделяющую кандидатов на две группы для участия в экспедициях. Если такое разделение невозможно, программа должна выводить сообщение «No solution». В противном случае, программа должна выводить номера кандидатов, принадлежащих первой группе. Первой группой мы будем считать группу, в которой меньше кандидатов.

Естественно, хорошо написанная программа должна стремиться к тому, чтобы размеры групп не очень сильно отличались. Поэтому, если возможно несколько разбиений на группы, программа должна выбирать разбиение с минимальной разностью количеств кандидатов в группах. При этом в случае, если разбиений с минимальной разницей всё равно получается несколько, для определённости выбирается разбиение, в котором первая группа лексикографически меньше, чем первые группы остальных разбиений.

Программа должна считывать со стандартного потока ввода количество кандидатов и матрицу размера NxN. Например, для входных данных

8
- - + - - - - -
- - - + - - - -
+ - - - - - - +
- + - - - + - -
- - - - - - - -
- - - + - - - -
- - - - - - - +
- - + - - - + -

программа должна выводить

1 2 6 8

Пишите свой ответ в комментариях👇

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Введение в Docker и контейнеры

Это большая презентация, в которой собрано более 800 слайдов по Docker. Основные темы:

— история контейнеров и Docker,
— установка Docker и создание первых контейнеров,
— первый запуск контейнера и переименование контейнера,
— CMD и ENTRYPOINT,
— задачи по написанию Dockerfiles.

Сохраняйте себе в закладки, чтобы не потерять:

https://container.training/intro-selfpaced.yml.html#1

#docker

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥 Top it channels

⭐️ Нейронные сети
@data_analysis_ml - data science
@vistehno - chatgpt ведет блог, решает любые задачи и отвечает на любые ваши вопросы.
@aigen - сети для генерации картинок. видео, музыки и многого другого.
@neural – погружение в нейросети.


👣 Golang
@golang_interview - вопросы и ответы с собеседований по Go. Для всех уровней разработчиков.
@golangtests - интересные тесты и задачи GO
@golangl - чат изучающих Go
@GolangJobsit - отборные вакансии и работа GO
@golang_jobsgo - чат для ищущих работу.
@golang_books - полезные книги Golang
@golang_speak - обсуждение языка Go

🖥 SQL базы данных

@sqllib - библиотека баз данных
@sqlhub - повышение эффективности кода с грамотным использованием бд.
@chat_sql - чат изучения бд.

🖥 Machine learning
@ai_ml – погружение в нейросети, ai, Chatgpt, midjourney, машинное обучение.
@machinelearning_ru – машинное обучении на русском от новичка до профессионала.
@machinelearning_interview – подготовка к собеседованию.
@datascienceiot – бесплатные книги Machine learning
@ArtificialIntelligencedl – канал о искусственном интеллекте

@machinee_learning – чат о машинном обучении
@datascienceml_jobs - работа ds, ml
@Machinelearning_Jobs - чат работы мл

🖥 Python

@pythonl - главный канал самого популярного языка программирования.
@pro_python_code – учим python с ментором.
@python_job_interview – подготовка к Python собеседованию.
@python_testit - проверочные тесты на python
@pythonlbooks - современные книги Python
@python_djangojobs - работа для Python программистов
@python_django_work - чат обсуждения вакансий


🖥 Javascript / front

@react_tg - - 40,14% разработчиков сайтов использовали React в 2022 году - это самая популярная библиотека для создания сайтов.
@javascript -канал для JS и FrontEnd разработчиков. Лучшие практики и примеры кода. Туториалы и фишки JS
@Js Tests - каверзные тесты JS
@hashdev - погружение в web разработку.
@javascriptjobjs - отборные вакансии и работа FrontEnd.
@jsspeak - чат поиска FrontEnd работы.

🖥 Java
@javatg - выучить Java с senior разработчиком по профессиональной методике.
@javachats - чат для ответов на вопросы по Java
@java_library - библиотека книг Java
@android_its - Android разработка
@java_quizes - тесты Java
@Java_workit - работа Java
@progersit - шпаргалки ит


🖥 Linux
@linux -топ фишки, гайды, уроки по работе  с Linux.
@linux chat - чат linux для обучения и помощи.
@linux_read - бесплатные книги linux

👷‍♂️ IT работа

@hr_itwork -кураторский список актуальных ит-ваканнсии

🤡It memes
@memes_prog - ит-мемы

⚙️ Rust
@rust_code - Rust избавлен от болевых точек, которые есть во многих современных яп
@rust_chats - чат rust

#️⃣ c# c++
C# - объединяет лучшие идеи современных языков программирования
@csharp_cplus чат
С++ - Универсальность. Возможно, этот главный плюс C++.

📓 Книги

@programming_books_it - большая библиотека. программиста
@datascienceiot -ds книги
@pythonlbooks - python библиотека.
@golang_books - книги Golang
@frontendbooksit - front книги
@progersit - ит-шпаргалки
@linux_read - Linux books
@java_library - Java books

🖥 Github
@github_code - лучшие проекты с github
@bigdatai - инструменты по работе с данными

🖥 Devops
Devops - специалист общего профиля, которому нужны обширные знания в области разработки.

📢 English for coders

@english_forprogrammers - Английский для программистов
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 raylib-go

Фреймворк для разработки игр на Go.

🖥 Github

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 5 интересных проектов на Golang

Kubeshark. Golang идеален для таких систем диагностики, как Kubeshark, приложения для упрощения отслеживания трафика подов Kubernetes. У него красивый интерфейс, как в инструментах разработчика на Opera, имеются двоичные файлы Windows, Linux и MacOS.

Хорошо подходият для отслеживания трафика для диагностики проблем между фронтендом и бэкендом. Kubeshark  —  незаменимый инструмент.

Phoneinfoga —  это фреймворк для упрощения сбора информации о телефонных номерах, определения, существует ли номер и из какой он страны. Другие интересные применения  —  автоматизация процесса регистрации и выявление мошенничества.

MOSINT —  это сборщик информации об адресах электронной почты. В нем проверяется адрес почты, публичные учетные записи в соцсетях, общедоступные базы данных о нарушениях, связанные почтовые сообщения и домены, выполняется поиск DNS.

Хотя проект полезен для масштабных целей безопасности, я защищаю им свои письма от онлайн-опасностей.

Finch  —  Это CLI для разработки контейнеров.

PocketBase  —  еще один интересный бэкенд-сервер. Состоит из одного файла, встроенной SQLite. Удобно применять и легко освоить.

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
job.pdf
1 MB
🔥Если вы ищете удаленную работу, неполный рабочий день или фриланс, этот список для вас.

В нем собран огромный список работодателей по всему миру, которые работают удаленно и часто набирают сотрудников.

Не забудьте подтянуть английский.

@Golang_google
👣 Задачи на алгоритмы и их решения

The Algorithms — проект с открытым исходным кодом, созданный группой разработчиков для понимания структур данных и алгоритмов на разных языках. Любой желающий может внести свой вклад в проект или помочь решить задачу других:

1. Go
2. JavaScript
3. Python
4. Java

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Примеры, упражнения и тесты на Golang

Лучший способ изучить новый язык программирования — это практика. В этом репозитории собрано более 100 задач для Go. Изначально автор создал проект для своего курса, но позже добавил упражнения для всех желающих изучить этот язык:

🖥 Github

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
👣 Сli

Инструмент GitLab CLI, написанный на Go, позволяющий работать с GitLab в командной строке.

Gitlab

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Задача телефонные линии

На строительном участке нужно создать телефонную сеть, соединяющую все бытовки. Для того, чтобы телефонные линии не мешали строительству, их решили проводить вдоль дорог. Составьте программу, реализующую алгоритм Прима для вычисления минимальной общей длины телефонных линий для указанной конфигурации участка. Граф конфигурации участка должен быть представлен в программе в виде списка инцидентности.

Программа должна считывать со стандартного потока ввода количество бытовок , количество дорог , соединяющих бытовки, и информацию об этих дорогах. При этом каждая дорога задаётся тремя целыми числами , и , где и — номера соединяемых дорогой бытовок (), а — длина дороги.

Программа должна выводить в стандартный поток вывода минимальную общую длину телефонных линий.

Например, для входных данных

7
10
0 1 200
1 2 150
0 3 100
1 4 170
1 5 180
2 5 100
3 4 240
3 6 380
4 6 210
5 6 260

программа должна выводить число 930.

Пишите свой ответ в комментариях👇

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 go DiskUsage()

Довольно быстрый анализатор использования диска, написанный на Go.

🖥 Github

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Вопросы и ответы для собеседования Back-end/Golang разработчика и не только

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

🖥 Github

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 WRP«Прокси-сервер» на Go, который позволяет использовать старые браузеры в современной сети

Он работает путем рендеринга веб-страницы в изображение GIF или PNG с интерактивной картой изображений.

🖥 Github

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥 12 приёмов Go, которые помогут в работе

Работая над производственными проектами, я заметил, что часто дублирую код и использую одни и те же определённые методы, не осознавая этого до тех пор, пока не перепроверю свой код.

Чтобы избавиться от этой проблемы, я собрал небольшие скрипты, которые оказалось весьма полезным для меня. Я также подумал, что они могут быть полезными и для других.

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

Читать

@Golang_google
🖥 Шпаргалка по командам Git на русском

echo "# название" >> README.md - создание файла README.md
git init - инициализация репозитория
git add README.md - добавления файла README.md в проект
git commit -m "first commit" - получает проиндексированный снимок состояния и выполняет его коммит в историю проекта
git remote add origin https://github.com/stanruss/название.git - команда, которой устанавливается подключение к удаленному серверу и git репозиторию, размещающемуся на нем.
git push -u origin master - кзменения отправляются на удаленный сервер

git log --oneline - посмотреть все коммиты.
git checkout . - восстановить все.
git checkout "код коммита" - вернуть до состояния этого коммита.
git checkout master - вернуться в ветку мастер.

Восстановить файлы на локальном компьютере:
```git fetch --all
git reset --hard origin/master или git reset --hard origin/<название_ветки>

```git add text.txt - Добавить файл в репозиторий
git rm text.txt - Удалить файл
git status - Текущее состояние репозитория (изменения, неразрешенные конфликты и тп)
git commit -a -m "Commit description" - Сделать коммит
git push origin - Замерджить все ветки локального репозитория на удаленный репозиторий
git push origin master - Аналогично предыдущему, но делается пуш только ветки master
git push origin HEAD - Запушить текущую ветку, не вводя целиком ее название
git pull origin - Замерджить все ветки с удаленного репозитория
git pull origin master - Аналогично предыдущему, но накатывается только ветка master
git pull origin HEAD - Накатить текущую ветку, не вводя ее длинное имя
git fetch origin - Скачать все ветки с origin, но не мерджить их в локальный репозиторий
git fetch origin master - Аналогично предыдущему, но только для одной заданной ветки
git checkout -b some_branch origin/some_branch - Начать работать с веткой some_branch (уже существующей)
git branch some_branch - Создать новый бранч (ответвится от текущего)
git checkout some_branch - Переключиться на другую ветку (из тех, с которыми уже работаем)
git branch # звездочкой отмечена текущая ветвь - Получаем список веток, с которыми работаем
git branch -a # | grep something - Просмотреть все существующие ветви
git merge some_branch - Замерджить some_branch в текущую ветку
git branch -d some_branch - Удалить бранч (после мерджа)
git branch -D some_branch - Просто удалить бранч (тупиковая ветвь)
git show d8578edf8458ce06fbc5bb76a58c5ca4a58c5ca4 - Изменения, сделанные в заданном коммите
git push origin :branch-name - Удалить бранч из репозитория на сервере
git reset --hard d8578edf8458ce06fbc5bb76a58c5ca4a58c5ca4 - Откатиться к конкретному коммиту и удалить последующие (хэш смотрим в «git log»)
git push -f - залить на сервер измененные коммиты
git clean -f - Удаление untracked files

#git #github #doc #cheatsheet

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM