Программирование


Ответить в тред Ответить в тред

Check this out!
<<
Назад | Вниз | Каталог | Обновить тред | Автообновление
52 7 15

Сап, анон, проходил недавно тест входной в Яндексе, Аноним # OP 20/07/19 Суб 15:25:48 14394261
original.jpg (110Кб, 900x566)
900x566
Сап, анон, проходил недавно тест входной в Яндексе, так и не разобрался с задачами, пишу на Java, вот сами задачи:
выставлю одну, остальные буду скидывать в тред
A. Граф подстрок
Ограничение времени 6 секунд
Ограничение памяти 128Mb
Ввод стандартный ввод или input.txt
Вывод стандартный вывод или output.txt
Антон стажируется в группе обработки комментариев и отзывов. Для проверки гипотезы об автоматической генерации текстов Антон должен построить граф подстрок существующих текстов.

Антон берет все имеющиеся у него слова и действует следующим образом:

слово S=s1s2…sn−1sn образует n−2 слова длины 3: w1=s1s2s3, w2=s2s3s4, w3=s3s4s5 …wn−2=sn−2sn−1sn;
если для какого-то из слов wi еще нет вершины в графе, то она создается;
для каждой пары слов (wi,wi+1) добавляется ориентированное ребро веса 1, или увеличивается вес существующего ребра на 1.

Таким образом получается граф G с v вершинами и e ориентированными ребрами. Между некоторыми вершинами может быть несколько дуг (от a к b и от b к a).

По заданному набору слов помогите Антону найти количество вершин в графе и вывести ориентированные ребра между вершинами.

Формат ввода
В первой строке записано одно целое число T (1≤T≤40000) — количество слов, имеющихся у Антона.

В каждой из T следующих строк записано одно слово Si (4≤|Si|≤30). Все слова состоят из строчных букв английского алфавита.
Формат вывода
В первой строке выведите количество вершин v в графе G.

Во второй строке выведите количество пар вершин e, между которыми есть ориентированные ребра.

В каждой из следующих e строк выведите слово ws, соответствующее началу ребра, затем слово wf, соответствующее концу ребра, и вес ориентированного ребра из вершины ws в wf.

Ребра вы можете перечислить в произвольном порядке.

Пример 1
Ввод Вывод

2
aaaaaaaaaaaaa
aaabbbaaabbba



6
7
aaa aaa 10
aaa aab 2
aab abb 2
abb bbb 2
bbb bba 2
bba baa 1
baa aaa 1

Пример 2
Ввод Вывод

2
abab
baba



2
2
aba bab 1
bab aba 1

Пример 3
Ввод Вывод

1
qwertyqwertyqwertyqwertyqwerty



6
6
qwe wer 5
wer ert 5
ert rty 5
rty tyq 4
tyq yqw 4
yqw qwe 4
//////////////////////////////////////////////////////////////
Аноним 20/07/19 Суб 15:43:33 14394422
Не думаю, что тут имеют место какие-то хитрые оптимизации. Мне тяжело было переварить условие, но решение, кажется, довольно прямолинейно. Ходим по каждому слову сдвигающимся окном в 3 символа, запоминаем текущее и предыдущее слово. Имеем ассоциативный массив (хэш или дерево), в котором каждой паре ставится в соответствие счечтик, инкрементирующийся для каждой новой пары. Осталось учесть симметрию, то есть, например, парам (aaa, bbb) и (bbb, aaa) должно ставиться в соответствие единственное значение счетчика; для этого, кажется, достаточно сортировать пары в лексиграфическом порядке. Позже попробую написать код не ливай с доски.
Аноним 20/07/19 Суб 15:47:08 14394443
>>1439442
оставь контакты, напишу
Аноним 20/07/19 Суб 16:00:36 14394544
>>1439426 (OP)
Для питона совсем простая задача, для других языков будет сложнее.
Создаём список слов,
{'aaa', 'aab'}
Словарь рёбер
{('aaa', 'aab') : 2, ('aaa', 'aaa') : 10}
дальше одним циклом заполняем словарь слов, потом вторым циклом словарь рёбер. Можно в один проход, но это сложнее, некрасиво и наверно даже дольше работать будет.

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

Можно поупражняться на пример красивого оформления этого дела. Может кому интересно.
Аноним 20/07/19 Суб 16:02:18 14394565
>>1439454
а можешь полностью на питоне написать:? как будет выглядеть?
Аноним 20/07/19 Суб 16:07:42 14394596
Вот еще задачка, но она попроще:
Телефонные номера
Ограничение времени 3 секунды
Ограничение памяти 256Mb
Ввод стандартный ввод или input.txt
Вывод стандартный вывод или output.txt
Есть база данных телефонных номеров. Необходимо для каждого номера определить страну, оператора, а также привести номер в определённый формат.

Существует список шаблонов, которым может удовлетворять номер. Он имеет вид: NUMBER - COUNTRY OPERATOR

NUMBER – шаблон номера, формат ниже
COUNTRY – названия страны, последовательности символов латинского алфавита
OPERATOR – названия оператора, последовательности символов латинского алфавита и цифр

Номер в шаблоне задаётся в следующем виде: +COUNTRY_CODE (OPERATOR_CODE) PERSONAL_NUMBER

COUNTRY_CODE – код страны, от одной до трёх цифр, первая цифра не может быть нулём
OPERATOR_CODE – код оператора, от двух до четырёх цифр
PERSONAL_NUMBER – шаблон номера абонента внутри оператора, строка длиной от пяти до девяти символов. Символом может быть цифра от 0 до 9 или символ X. Символ X означает, что на данной позиции может быть любая цифра от 0 до 9. Справа от символа X не может стоять цифра

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

могут отсутствовать знак + и скобки
могут отсутствовать или быть в любом месте номера пробелы и знак-разделитель дефис
не содержат больше никакой информации (имени абонента, оператора и т.п.)

Гарантируется, что для каждого номера существует ровно один шаблон, которому он удовлетворяет, и все шаблоны не пересекаются.

Формат ввода
Первая строка содержит число N (1≤N≤1000) – количество номеров в базе данных.

Далее следует N строк – номера телефонов по одному номеру в строке. Длина строки не превосходит 100 символов.

Следующая строка содержит число M (1≤M≤1000) – количество шаблонов.

Далее M строк – шаблоны в формате, описанном выше. Длина шаблона не превосходит 100 символов.

Формат вывода
Выведите N строк, в каждой номер в новом формате в том порядке, в котором они указаны во входе.
Пример 1
Ввод Вывод

4
28-49-5-123-45-67
87544456789
+28 (495) 123 45 56
875-(29)-123456
3
+875 (29) 1XXXXX - Atlantis MythCell
+875 (44) 4XXXXX - Atlantis MobTelecom
+28 (495) XXXXXXX - ElDorado GoldLine



+28 (495) 1234567 - ElDorado GoldLine
+875 (44) 456789 - Atlantis MobTelecom
+28 (495) 1234556 - ElDorado GoldLine
+875 (29) 123456 - Atlantis MythCell
Аноним 20/07/19 Суб 16:24:17 14394787
pysubwords.png (57Кб, 641x547)
641x547
>>1439456
В виде скрина и прямо сюда, но без форматирования. На тестовых значениях вывод один в один с ними, порядок рёбер тот же, я думаю, они тоже на питоне делали. Это питон-3.

inp_sentences = []

with open ('input.txt') as inp:
n_words = int(inp.readline().strip())
for i in range(n_words):
inp_sentences.append(inp.readline().strip())

set_words = set()
dict_edges = {}

for sentence in inp_sentences:
for i in range(len(sentence) - 2):
set_words.add(sentence[i : i+3])

for sentence in inp_sentences:
for i in range(len(sentence) - 3):
word1 = sentence[i : i+3]
word2 = sentence[i+1 : i+4]
dict_edges[(word1, word2)] = dict_edges.get((word1, word2), 0) + 1

print (len(set_words))
print (len(dict_edges))

for (edge1, edge2), num in dict_edges.items():
print ("{} {} {}".format(edge1, edge2, num))
Аноним 20/07/19 Суб 16:26:56 14394818
>>1439478
В строках 24-25 должно быть word1, word2. На функциональность переименование не влияет никак, это по смыслу переменные названы неправильно.
Аноним 20/07/19 Суб 16:27:31 14394829
>>1439478
Чувак ты крутой!
у меня еще задачи есть, осилишь?
Аноним 20/07/19 Суб 16:34:41 143948810
>>1439482
Осилю, но поздним вечером, сейчас не готов.
Аноним 20/07/19 Суб 16:35:40 143948911
Аноним 20/07/19 Суб 16:36:08 143949012
Аноним 20/07/19 Суб 16:43:55 143949813
>>1439489
Ты сейчас что-ли решаешь? Ну могу ещё какую-нибудь сделать, те же телефоны.

А какую ошибку выдаёт? Ты пробелы все поставил как надо? Это питон ведь. И именно питон-3, а не питон-2
Аноним 20/07/19 Суб 16:48:34 143950414
111.PNG (23Кб, 725x493)
725x493
>>1439498
Давай, может, что и получится
там онлайн компилятор,
есть питон 2.7 и 3.6
Аноним 20/07/19 Суб 16:51:05 143950815
Да
Аноним 20/07/19 Суб 16:55:11 143951116
>>1439504
Ты че долбоеб из поста просто скопировал без табуляций?
Аноним 20/07/19 Суб 16:56:36 143951217
>>1439511
я с питоном не знаком вообще, поставил табуляцию, скомпилилось,
Аноним 20/07/19 Суб 16:57:01 143951318
4.PNG (38Кб, 712x384)
712x384
5.PNG (14Кб, 711x541)
711x541
Вот еще задача
Аноним 20/07/19 Суб 16:57:48 143951419
Аноним 20/07/19 Суб 17:01:20 143951620
>>1439514
скопмпилилось, надо еще 5 разобрать, сложные жесть
Аноним 20/07/19 Суб 17:07:32 143952021
6.PNG (33Кб, 677x424)
677x424
7.PNG (5Кб, 702x355)
702x355
Аноним 20/07/19 Суб 17:11:01 143952222
Хочешь за счет анона попасть на стажиров очку в Яндекс?
Аноним 20/07/19 Суб 17:12:46 143952423
>>1439522
тест уже кончился, хочу просто решений увидеть)
Аноним 20/07/19 Суб 17:18:15 143952824
Тоже решал эти задачи, только на c++. Сами задачи не сильно сложные кроме последней , сложно выдрачить свой алгоритм, что бы они прошли все тест.
Например, с задачей "Телефонные номера" тестов 100 написал, все работало корректно, но в контекста выдавал WA на 7мом тесте, какой они туда input грузят не понятно
Аноним 20/07/19 Суб 17:19:07 143952925
ss+(2019-07-20+[...].png (5Кб, 274x208)
274x208
Аноним 20/07/19 Суб 17:21:21 143953226
Аноним 20/07/19 Суб 17:32:07 143953827
Хотел решить первую задачу на C++, но не процедурно в main, а красиво. Как же это выматывает.

http://ideone.com/8vYyeG
Аноним 20/07/19 Суб 17:33:39 143953928
>>1439538
круто, но ошибка компиляции всплывает
Аноним 20/07/19 Суб 17:35:06 143954229
>>1439539
Нужна поддержка C++17.
Аноним 20/07/19 Суб 17:35:09 143954430
>>1439522
>>1439524
А жаль, что кончился. Хотелось бы в лице анона на стажировочку в яндекс отобраться. А так не интересно.
Решение с телефонами:

https://www.codepile.net/pile/dmd65JMz

Аноним 20/07/19 Суб 17:36:36 143954531
>>1439538
О ужас. И после этого ещё кто-то спрашивает, чем питон лучше C++
Аноним 20/07/19 Суб 17:37:50 143954632
Аноним 20/07/19 Суб 17:43:25 143954733
>>1439545
Решение на питоне сверху (оно вообще правильное?) написано процедурно в виде скрипта. Я мог бы на C++ решить в несколько циклов for в main и у меня бы получилось бы не сильно длиннее.
Аноним 20/07/19 Суб 17:45:12 143954834
Аноним 20/07/19 Суб 17:46:39 143955035
Аноним 20/07/19 Суб 17:59:42 143955936
>>1439550
Ответил, но у меня всё работает. Даже во втором питоне. Но я пишу в 3.6 обычно.
Аноним 20/07/19 Суб 18:07:44 143956637
>>1439532
Да, но сомневаюсь что он тебе поможет. Могу описать свои попытки решения.
Граф подстрок
Через префиксное дерево, хотя уверен можно придумать куда лучше решение
Телефонные номера.
при первом вводе данных, полностью очищал шаблоны и номера от всего кроме цифр (скобочек, пробелом, плюсов и т.д.), и записывал в соответствующие массивы (массив номеров и массив шаблонов). И отдельно сохранял не модифицированные шаблоны в отдельный массив. После этого сравнивал чистый номер с каждым чистым шаблоном, там где наибольшее совпадение тот и верный шаблон. ну и остается только вставить нужный номер вместо ХХХХХ в шаблон с не модифицированными шаблонами.
Произведение
Есть алгоритм перебора сочетаний из N по K, через битовые сдвиги, работает намного быстрее чем обычный перебор, им я перебрал итераторы в массиве и проверял сумму. Но при отправке выдавало PE, хотя локально все работало.
Аноним 20/07/19 Суб 18:09:04 143956738
>>1439566
в итоге, сколько правильных решений?
Аноним 20/07/19 Суб 18:17:23 143957639
>>1439567
Пока ноль, тоже ошибка ответа. Они ловят какие-то изъёбистые случаи, но ты даже примерно не поймёшь, на чём они ловят. Это самое противное в таких тестах.
Аноним 20/07/19 Суб 18:17:37 143957740
>>1439567
1 полностью, 3 частичное решение
Аноним 20/07/19 Суб 18:18:27 143957841
>>1439577
скинь код пожалуйста)
Аноним 20/07/19 Суб 18:24:08 143957942
На /pr есть тред решения задач Leetcode, Hackerrank etc.? Или может кто знает ТГ каналы?
Аноним 21/07/19 Вск 08:38:05 143977843
Аноним 21/07/19 Вск 11:39:34 143982444
>>1439426 (OP)
>Ограничение времени 6 секунд
>Ограничение времени 3 секунды
На чем? на i7 или на p2? Ору с такой конкретики.

>>1439511
>собирается в яндекс
>долбоеб из поста просто скопировал без табуляций?
Бля, как же я ору.
Аноним 21/07/19 Вск 11:50:38 143983045
>>1439824
Сразу видно маньку, которая НИКОГДА не решала алгоритмические задачи, но пиздящую о мвоей охуенности.
Аноним 21/07/19 Вск 14:41:16 143997046
>>1439426 (OP)
>Антон стажируется в группе обработки комментариев и отзывов
>aaaaaaaaaaaaa
>aaabbbaaabbba
Кекнул
Аноним 21/07/19 Вск 14:52:32 143997447
Яндекс сдавно не торт там текучка как в сбербанке щас
Аноним 21/07/19 Вск 15:06:49 143998348
>>1439974
Сам яндекс может быть, но яндекс-стажировки может быть и интересны. Да и джуниорский опыт в таком бренде тоже плюс в карму.

Аноним 21/07/19 Вск 15:07:39 143998549
1.png (4Кб, 1089x51)
1089x51
Яндексокуколды здесь? Обьясните, опущи, вот это как вообще понимать? 416 заблокированных элементов на странице, вы там не охуели в своем рекламном агентстве? Вы чем-нибудь кроме впаривания малвари вообще занимаетесь? Зачем вам нужны работники со знанием алгоритмов, машоба итд? Стильно, модно, молодежно? У вас же гитхаб беднее, чем у любого студента-индуса. Все это не нужно чтобы впаривать малварь.
Аноним 21/07/19 Вск 17:03:49 144005350
>>1439985
Ты сломал Хуяндекс
---
Ошибка 404
Вы попали на несуществующую страницу.

Вероятно, это произошло из-за опечатки или неправильной раскладки клавиатуры.

Если вы прошли сюда по ссылке, поделитесь ею с нами, пожалуйста.
Аноним 21/07/19 Вск 17:32:28 144006651
>>1439778
контекст открыт только для подавших заявку
Аноним 22/07/19 Пнд 11:20:50 144031352
>>1440053
>Ты сломал Хуяндекс
Я удалил часть строки с моим акком. Дело не в этом, а в количестве заблоченного говна. Ну доколе, правда?
Аноним 22/07/19 Пнд 20:54:21 144064853
Настройки X
Ответить в тред X
15000 [S]
Макс объем: 40Mб, макс кол-во файлов: 4
Кликни/брось файл/ctrl-v
Стикеры X
Избранное / Топ тредов