رأيي الشخصي في تحديات Google Foobar.
مشكلة سهلة.
يتم الحل عن طريق توليد وتخزين كل عدد أولي على سلسلة، وإرجاع السلسلة الفرعية ( n
إلى n+5
) بمجرد تخزين n+5
أرقام على السلسلة، لأن هذا هو الرقم الذي نبحث عنه.
algorithm prime_seq_substring is
input: Index N of first digit on the substring
output: String of 5 digits of prime numbers
for each prime in range[2..30000] do
concat prime to prime_seq
if length of prime_seq >= N+5 do
break
return prime_seq[N..N+5]
مشكلة أخرى سهلة، واستمتعت كثيرًا بحلها في أقل عدد من الأسطر. لأن... ولما لا؟.
يتم حلها عن طريق تقسيم السلسلة حسب الحرف <
وحساب عدد المرات التي يظهر فيها الحرف >
في كل عنصر من عناصر القائمة. بعد ذلك، قم بإنشاء قائمة بفهرس القائمة ولكن بترتيب تنازلي، حيث أن هذا هو عدد المرات التي سيواجه فيها كل موظف في كل قسم من القائمة موظفًا يسير في الاتجاه الآخر.
الخطوة الأخيرة من الحل هي ضرب كل عنصر في القائمة بالعنصر المقابل له في قائمة الفهارس (وهذا يعطي عدد لقاءات كل موظف) وضرب هذا الرقم في اثنين، حيث أن كل لقاء يولد تحيتين.
ونعيد مجموع كل هذه الأرقام (إجمالي عدد التحيات لجميع الموظفين).
algorithms salutes_solution is
input: String S representing the employees
output: Number of salutes performed by the employees
for each section in (S split by '<') do
concat (number of '>' in section) to sec_list
index_list := (length of sec_list)..0
for I in range[0..(length of sec_list)] do
concat ( (elem I of sec_list) * (elem I of index_list) * 2) to salutes_list
return sum of elements in salutes_list