Здравствуйте, a7d3, Вы писали:
A>Есть книжка:
A>«Programming Collective Intelligence. Building Smart Web 2.0 Applications» By Toby Segaran, Publisher: O'Reilly Media.
Спасибо, попробую глянуть. Правда, опасаюсь, что для меня это будет слишком сложно из-за крайне слабого знания Web-технологий.
A>Примеры кода на питоне, а рассматриваются такие вещи, ради которых и на которых учатся программированию в современно мире. Например, как именно сделать систему рекомендаций пользователю — книг, фильмов, музыки — чтобы оно действительно работало. Это не такое скучное и оторванное от реальности, как использование пяти алгоритмов сортировки массивов встроенными средствами языка программирования. Когда про них жуют сотню страниц, но у читающего новичка не появляется осознания как это применить к системе-сервисе для повседневной жизни людей.
Вообще-то я с интересом решаю некоторые алгоритмические задачки, пробуя разные подходы с целью повысить скорость выполнения кода.
| Вот, например... |
| Вариант 1:
class Solution:
def backspaceCompare(self, S: str, T: str) -> bool:
def processBackspaces(s: str) -> str:
s_list = list(s)
bs_count = 0
for i in range(len(s)-1, -1, -1):
if s[i] == '#':
s_list[i] = ''
bs_count += 1
elif bs_count > 0:
s_list[i] = ''
bs_count -= 1
return ''.join(s_list)
return processBackspaces(S) == processBackspaces(T)
Вариант 2:
class Solution:
def backspaceCompare(self, S: str, T: str) -> bool:
def processBackspaces(s: str) -> list:
s_list = []
bs_count = 0
for i in range(len(s)-1, -1, -1):
if s[i] == '#':
bs_count += 1
elif bs_count > 0:
bs_count -= 1
else:
s_list.append(s[i])
return s_list
return processBackspaces(S) == processBackspaces(T)
Вариант 3:
class Solution:
def backspaceCompare(self, S: str, T: str) -> bool:
pos_S, pos_T = len(S) - 1, len(T) - 1
count_S, count_T = 0, 0
while True:
while pos_S > -1:
if S[pos_S] == '#':
count_S += 1
elif count_S > 0:
count_S -= 1
else:
break
pos_S -= 1
char_S = S[pos_S] if pos_S > -1 else ""
while pos_T > -1:
if T[pos_T] == '#':
count_T += 1
elif count_T > 0:
count_T -= 1
else:
break
pos_T -= 1
char_T = T[pos_T] if pos_T > -1 else ""
if char_S != char_T:
return False
if pos_S <= 0 and pos_T <= 0:
return True
elif pos_S < 0 and pos_T == 0:
return False
elif pos_S == 0 and pos_T < 0:
return False
pos_S -= 1
pos_T -= 1
return True
По результатам тестирования скорость выполнения всех этих вариантов кода приблизительно одинакова, хотя я очень надеялся, что последний вариант будет заметно быстрее остальных. |
| |
A>Т.е. читать, набираться идей чего хотелось бы сделать — реализовывать через PyQT или онлайн ресурс собрав веб-сайтик. После этого будет о чём поговорить с людьми на интервью-собеседованиях.
A>Потенциально, в перспективе может даже появиться осознание, что незачем привязывать к конкретному языку. Что искать работу по этому принципу — это как умение работать сугубо лопатами строго одного конкретного вида-типа. Деньги платят за другое — то самое умение использовать разные подходы в некой предметной сфере, что описаны в подобных книжках.
Спасибо за полезные советы!