RSS
[>] задачка №1
llk.14
51t(lenina,1) — All
2014-07-20 07:58:46


практическая, и связанная с ii

есть файлы в msg - хоть 100, хоть 10000

необходимо найти наименьшую длину коллизии по первым буквам идентификатора
например, если есть файлы 00xxxx и 00yyyy, то длина коллизии = 2, по 00. соответственно, чем больше файлов, тем больше может быть совпадений

решения, которые требуются:
1 - максимально краткое, возможно однострочник
2 - максимально простое и понятное

[>] Re: задачка №1
llk.14
vit01(lenina,50) — 51t
2014-07-24 19:08:11


import os

a=0
b=""
for i in os.listdir("msg/"):
        for c in range(0,len(i)):
                if (c==0):
                        b=i[c]
                elif(i[c]!=b):
                        break
                elif(i[c]==b and c+1>a):
                        a=a+1
print a
Не однострочник, зато работает =)

[>] Re: задачка №1
llk.14
51t(lenina,1) — vit01
2014-07-24 19:14:16


только сложно понять, как... вообще, такие методы в python обычно не используются: наверное, проще было бы создать список, и оттуда уже вычислять значение. а сейчас код какой-то нелинейный, туды, сюды, с брейком... ещё и эта антипитоновская конструкция range(len(i)), которую лично я бы запретил законодательно :)

но если работает - то хорошо... :)

я, кстати, однострочник пока так и не придумал :) думаю. :)

[>] Re: задачка №1
llk.14
FireFighter(lenina,120) — 51t
2014-07-24 20:55:25


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

[>] Re: задачка №1
llk.14
51t(lenina,1) — FireFighter
2014-07-24 21:01:43


> А вообще, это задачка больше на построение алгоритма, чем на знание языка.

ну, чтобы построить однострочник или хотя бы двустрочник - нужно знание языка

а так, да, похоже этот алгоритм работать не будет, надо, как минимум, прогонять sorted... или listdir уже остортированный список выдаст?

> Надо сравнивать имена всех файлов в каталоге. т.е. каждое с каждым...

если значения отсортированы - то не надо

[>] Re: задачка №1
llk.14
FireFighter(lenina,120) — 51t
2014-07-24 21:12:16


listdir не сортирует, сортируй список отдельно

[>] Re: задачка №1
llk.14
51t(lenina,1) — FireFighter
2014-07-24 21:22:49


я сейчас проверил на своей базе, где уже 12000 сообщений - результат что с sorted, что без - одинаковый :)

[>] Re: задачка №1
llk.14
FireFighter(lenina,120) — 51t
2014-07-24 21:32:58


А если подкаталоги туда создать? я просто на своём хомяке проверял

[>] Re: задачка №1
llk.14
51t(lenina,1) — FireFighter
2014-07-25 06:28:20


> А если подкаталоги туда создать?

если создавать подкаталоги - тогда будет с подкаталогами :)

[>] Re: задачка №1
llk.14
FireFighter(lenina,120) — 51t
2014-07-25 13:17:03


>> тогда будет с подкаталогами :)

Тогда listdir() такой бред выдаёт...

[>] Re: задачка №1
llk.14
51t(lenina,1) — FireFighter
2014-07-25 13:27:36


разумеется... либо через os.walk, либо вообще в лоб сделать дамп из find, и разбирать его..