Решение на Пета задача от Любомир Петков

Обратно към всички решения

Към профила на Любомир Петков

Резултати

  • 6 точки от тестове
  • 0 бонус точки
  • 6 точки общо
  • 0 успешни тест(а)
  • 0 неуспешни тест(а)

Код

REPOSITORY = 'https://github.com/liube/ruby-retrospective-4.git'
# 20 неща, които научих в курса:
#
# 1. Весел втори аргумент в String#split, който указва на колко части
# всъщност да се раздели символният низ.
#
# 2. 2 варианта за представяне на range - с 2 точки и с 3 точки.
# (1..5).to_a = [1, 2, 3, 4, 5]; (1...5).to_a = [1, 2, 3, 4]
#
# 3. Възможността за използване на unless вместо if, както и
# поставянето им след израза, който се оценява, с цел
# спестяване на излишни писания.
#
# 4. Интересната концепция, че всичко в Руби е обект, вкл. и
# самите класове, което улесни цялостното разбиране на езика -
# include, extend, съответно singleton класовете, в които се
# съхраняват "класовите" методи.
#
# 5. Най-накрая разбрах (поне частично) какво е интерниране -
# съхраняването на всички обекти числа или символи с равна стойност
# само веднъж в паметта (т.е. става дума за един и същ обект).
#
# 6. Ключовата дума или синтаксисът defined? оценява подадения
# израз само на ниво парсър, синтактично, може да се провери
# дали нещо (метод или променлива) е дефинирано.
#
# 7. С method_missing може да се предефинира по произволен
# начин поведението за хвърляне на изключение
# при извикване на несъществуващ метод върху обект.
#
# 8. Възможността за промяна на текущия self в рамките на даден
# блок, т.е. промяна на контекста на изпълнение на парче код
# с instance_eval и class_eval. Така, например, с instance_eval
# може да се дефинира метод на конкретен обект.
#
# 9. Разбрах някои елементи на github - направих първите си
# fork, commit, push.. :)
#
# 10. Т.нар. интерполация също ми допадна, т.е. възможносттта
# код да се изпълнява в рамките на стринг, вместо да има
# нужда от placeholder-и.
#
# 11. Научих как с помощта на блоковете може да се подава
# логика на методи, в частност на each, като това е
# еквивалентно на концепцията за callback в други езици?
#
# 12. Има предефинирани математически оператори за работа с низове:
# *, +.
#
# 13. Предефинирани оператори за работа с масиви: +, -, &, |.
#
# 14. case сравнява с ===, а не с ==, което позволява писането на
# по-елегантен код, защото може да се сравнява обект с клас
# или регулярен израз.
#
# 15. Методите на модула Enumerable връщат обект на класа Enumerator,
# когато са извикани без подаден блок, което позволява
# "навръзване" (chaining) на енумератори.
#
# 16. В различни случаи удобното паралелно присвояване и разпакетиране
# на списъци.
#
# 17. По-елегантен начин на извикване на методи със символи,
# например select(&:even?) вместо select {|n| n.even?}
#
# 18. В случаи като този с приоритетното отваряне на директория вместо
# файл със същото име в трета задача тернарният оператор може да
# се замени с ||.
#
# 19. Научих интересния метод tap, с който можеш да се "вмъкваш"
# между извиквания на методи и да проверяваш междинни резултати.
#
# 20. 10-те заповеди за програмиране :D

История (25 версии и 1 коментар)

Любомир обнови решението на 14.01.2015 23:44 (преди почти 10 години)

+REPOSITORY = 'https://github.com/liube/ruby-retrospective-4.git'

Правя уточнението, че първите 3 задачи съм разгледал внимателно (и подобрил; най-вече над трета умувах), докато последната, 4-та - само бегло, като съм взел наготово вашето решение, колкото домашното да мине тестовете.

Идеята ми беше да пререша всичко, но в крайна сметка ще се задоволя с това да попипна Git и евентуално да хвана някоя точица, разбира се, след като добавя и 20 научени неща : )

Любомир обнови решението на 17.01.2015 00:08 (преди почти 10 години)

-REPOSITORY = 'https://github.com/liube/ruby-retrospective-4.git'
+REPOSITORY = 'https://github.com/liube/ruby-retrospective-4.git'
+
+#20 неща, които научих в курса:
+
+# 1. Весел втори аргумент в String#split, който указва на колко части
+# всъщност да се раздели символният низ.

Любомир обнови решението на 17.01.2015 00:08 (преди почти 10 години)

REPOSITORY = 'https://github.com/liube/ruby-retrospective-4.git'
-#20 неща, които научих в курса:
+# 20 неща, които научих в курса:
# 1. Весел втори аргумент в String#split, който указва на колко части
# всъщност да се раздели символният низ.

Любомир обнови решението на 17.01.2015 00:27 (преди почти 10 години)

REPOSITORY = 'https://github.com/liube/ruby-retrospective-4.git'
# 20 неща, които научих в курса:
# 1. Весел втори аргумент в String#split, който указва на колко части
-# всъщност да се раздели символният низ.
+# всъщност да се раздели символният низ.
+#
+# 2. 2 варианта за представяне на range - с 2 точки и с 3 точки.
+# (1..5).to_a = [1, 2, 3, 4, 5]; (1...5).to_a = [1, 2, 3, 4]
+#
+#
+#
+#

Любомир обнови решението на 17.01.2015 00:34 (преди почти 10 години)

REPOSITORY = 'https://github.com/liube/ruby-retrospective-4.git'
# 20 неща, които научих в курса:
# 1. Весел втори аргумент в String#split, който указва на колко части
# всъщност да се раздели символният низ.
#
# 2. 2 варианта за представяне на range - с 2 точки и с 3 точки.
# (1..5).to_a = [1, 2, 3, 4, 5]; (1...5).to_a = [1, 2, 3, 4]
#
+# 3. Възможността за използване на unless вместо if, както и
+# поставянето им след израза, който се оценява, с цел спестяване на
+# излишни писания.
+#
+#
+#
#
#
#

Любомир обнови решението на 19.01.2015 15:53 (преди почти 10 години)

REPOSITORY = 'https://github.com/liube/ruby-retrospective-4.git'
# 20 неща, които научих в курса:
-
+#
# 1. Весел втори аргумент в String#split, който указва на колко части
# всъщност да се раздели символният низ.
#
# 2. 2 варианта за представяне на range - с 2 точки и с 3 точки.
# (1..5).to_a = [1, 2, 3, 4, 5]; (1...5).to_a = [1, 2, 3, 4]
#
# 3. Възможността за използване на unless вместо if, както и
-# поставянето им след израза, който се оценява, с цел спестяване на
-# излишни писания.
+# поставянето им след израза, който се оценява, с цел
+# спестяване на излишни писания.
#
+# 4. Интересната концепция, че всичко в Руби е обект, вкл. и
+# самите класове, което улесни цялостното разбиране на езика -
+# include, extend, съответно singleton класовете, в които се
+# съхраняват "класовите" методи.
#
+# 5.
#
#
#
#
+#
+#
+#
+#
+#
+#
+#
+#
+#
+#
+#
+#
+#
+#
+#
+

Любомир обнови решението на 19.01.2015 16:12 (преди почти 10 години)

REPOSITORY = 'https://github.com/liube/ruby-retrospective-4.git'
# 20 неща, които научих в курса:
#
# 1. Весел втори аргумент в String#split, който указва на колко части
# всъщност да се раздели символният низ.
#
# 2. 2 варианта за представяне на range - с 2 точки и с 3 точки.
# (1..5).to_a = [1, 2, 3, 4, 5]; (1...5).to_a = [1, 2, 3, 4]
#
# 3. Възможността за използване на unless вместо if, както и
# поставянето им след израза, който се оценява, с цел
# спестяване на излишни писания.
#
# 4. Интересната концепция, че всичко в Руби е обект, вкл. и
# самите класове, което улесни цялостното разбиране на езика -
# include, extend, съответно singleton класовете, в които се
# съхраняват "класовите" методи.
#
-# 5.
+# 5. Най-накрая разбрах (поне частично) какво е интерниране -
+# съхраняването на един и същ обект символен низ или символ # само веднъж в паметта.
+#
+# 6. Ключовата дума или синтаксисът defined? оценява подадения
+# израз само на ниво парсър, синтактично, може да се провери
+# дали нещо (метод или променлива) е дефинирано.
#
-#
-#
-#
-#
-#
-#
-#
+# 7.
#
#
#
#
#
#
#
#
#
#
#

Любомир обнови решението на 19.01.2015 16:22 (преди почти 10 години)

REPOSITORY = 'https://github.com/liube/ruby-retrospective-4.git'
# 20 неща, които научих в курса:
#
# 1. Весел втори аргумент в String#split, който указва на колко части
# всъщност да се раздели символният низ.
#
# 2. 2 варианта за представяне на range - с 2 точки и с 3 точки.
# (1..5).to_a = [1, 2, 3, 4, 5]; (1...5).to_a = [1, 2, 3, 4]
#
# 3. Възможността за използване на unless вместо if, както и
# поставянето им след израза, който се оценява, с цел
# спестяване на излишни писания.
#
# 4. Интересната концепция, че всичко в Руби е обект, вкл. и
# самите класове, което улесни цялостното разбиране на езика -
# include, extend, съответно singleton класовете, в които се
# съхраняват "класовите" методи.
#
# 5. Най-накрая разбрах (поне частично) какво е интерниране -
# съхраняването на един и същ обект символен низ или символ # само веднъж в паметта.
#
# 6. Ключовата дума или синтаксисът defined? оценява подадения
# израз само на ниво парсър, синтактично, може да се провери
# дали нещо (метод или променлива) е дефинирано.
#
-# 7.
-#
-#
+# 7. С method_missing може да се предефинира по произволен
+# начин поведението за хвърляне на изключение
+# при извикване на несъществуващ метод върху обект.
+#
+# 8.
#
#
#
#
#
#
#
#
#

Любомир обнови решението на 19.01.2015 16:26 (преди почти 10 години)

REPOSITORY = 'https://github.com/liube/ruby-retrospective-4.git'
# 20 неща, които научих в курса:
#
# 1. Весел втори аргумент в String#split, който указва на колко части
# всъщност да се раздели символният низ.
#
# 2. 2 варианта за представяне на range - с 2 точки и с 3 точки.
# (1..5).to_a = [1, 2, 3, 4, 5]; (1...5).to_a = [1, 2, 3, 4]
#
# 3. Възможността за използване на unless вместо if, както и
# поставянето им след израза, който се оценява, с цел
# спестяване на излишни писания.
#
# 4. Интересната концепция, че всичко в Руби е обект, вкл. и
# самите класове, което улесни цялостното разбиране на езика -
# include, extend, съответно singleton класовете, в които се
# съхраняват "класовите" методи.
#
# 5. Най-накрая разбрах (поне частично) какво е интерниране -
# съхраняването на един и същ обект символен низ или символ # само веднъж в паметта.
#
# 6. Ключовата дума или синтаксисът defined? оценява подадения
# израз само на ниво парсър, синтактично, може да се провери
# дали нещо (метод или променлива) е дефинирано.
#
# 7. С method_missing може да се предефинира по произволен
# начин поведението за хвърляне на изключение
# при извикване на несъществуващ метод върху обект.
#
-# 8.
-#
+# 8. Възможността за промяна на текущия self в рамките на даден
+# блок, т.е. промяна на контекста на изпълнение на парче код.
#
#
#
#
#
#
#
#

Любомир обнови решението на 19.01.2015 16:36 (преди почти 10 години)

REPOSITORY = 'https://github.com/liube/ruby-retrospective-4.git'
# 20 неща, които научих в курса:
#
# 1. Весел втори аргумент в String#split, който указва на колко части
# всъщност да се раздели символният низ.
#
# 2. 2 варианта за представяне на range - с 2 точки и с 3 точки.
# (1..5).to_a = [1, 2, 3, 4, 5]; (1...5).to_a = [1, 2, 3, 4]
#
# 3. Възможността за използване на unless вместо if, както и
# поставянето им след израза, който се оценява, с цел
# спестяване на излишни писания.
#
# 4. Интересната концепция, че всичко в Руби е обект, вкл. и
# самите класове, което улесни цялостното разбиране на езика -
# include, extend, съответно singleton класовете, в които се
# съхраняват "класовите" методи.
#
# 5. Най-накрая разбрах (поне частично) какво е интерниране -
# съхраняването на един и същ обект символен низ или символ # само веднъж в паметта.
#
# 6. Ключовата дума или синтаксисът defined? оценява подадения
# израз само на ниво парсър, синтактично, може да се провери
# дали нещо (метод или променлива) е дефинирано.
#
# 7. С method_missing може да се предефинира по произволен
# начин поведението за хвърляне на изключение
# при извикване на несъществуващ метод върху обект.
#
# 8. Възможността за промяна на текущия self в рамките на даден
# блок, т.е. промяна на контекста на изпълнение на парче код.
#
+# 9. Разбрах някои елементи на github - направих първите си
+# fork, commit, push.. :)
#
-#
-#
-#
-#
+# 10.
#
#

Любомир обнови решението на 19.01.2015 16:37 (преди почти 10 години)

REPOSITORY = 'https://github.com/liube/ruby-retrospective-4.git'
# 20 неща, които научих в курса:
#
# 1. Весел втори аргумент в String#split, който указва на колко части
# всъщност да се раздели символният низ.
#
# 2. 2 варианта за представяне на range - с 2 точки и с 3 точки.
# (1..5).to_a = [1, 2, 3, 4, 5]; (1...5).to_a = [1, 2, 3, 4]
#
# 3. Възможността за използване на unless вместо if, както и
# поставянето им след израза, който се оценява, с цел
# спестяване на излишни писания.
#
# 4. Интересната концепция, че всичко в Руби е обект, вкл. и
# самите класове, което улесни цялостното разбиране на езика -
# include, extend, съответно singleton класовете, в които се
# съхраняват "класовите" методи.
#
# 5. Най-накрая разбрах (поне частично) какво е интерниране -
-# съхраняването на един и същ обект символен низ или символ # само веднъж в паметта.
+# съхраняването на един и същ обект символен низ или символ # само веднъж в паметта.
#
# 6. Ключовата дума или синтаксисът defined? оценява подадения
# израз само на ниво парсър, синтактично, може да се провери
# дали нещо (метод или променлива) е дефинирано.
#
# 7. С method_missing може да се предефинира по произволен
# начин поведението за хвърляне на изключение
# при извикване на несъществуващ метод върху обект.
#
# 8. Възможността за промяна на текущия self в рамките на даден
# блок, т.е. промяна на контекста на изпълнение на парче код.
#
# 9. Разбрах някои елементи на github - направих първите си
# fork, commit, push.. :)
#
# 10.
#
#

Любомир обнови решението на 19.01.2015 16:37 (преди почти 10 години)

REPOSITORY = 'https://github.com/liube/ruby-retrospective-4.git'
# 20 неща, които научих в курса:
#
# 1. Весел втори аргумент в String#split, който указва на колко части
# всъщност да се раздели символният низ.
#
# 2. 2 варианта за представяне на range - с 2 точки и с 3 точки.
# (1..5).to_a = [1, 2, 3, 4, 5]; (1...5).to_a = [1, 2, 3, 4]
#
# 3. Възможността за използване на unless вместо if, както и
# поставянето им след израза, който се оценява, с цел
# спестяване на излишни писания.
#
# 4. Интересната концепция, че всичко в Руби е обект, вкл. и
# самите класове, което улесни цялостното разбиране на езика -
# include, extend, съответно singleton класовете, в които се
# съхраняват "класовите" методи.
#
# 5. Най-накрая разбрах (поне частично) какво е интерниране -
-# съхраняването на един и същ обект символен низ или символ # само веднъж в паметта.
+# съхраняването на един и същ обект символен низ или символ
+# само веднъж в паметта.
#
# 6. Ключовата дума или синтаксисът defined? оценява подадения
# израз само на ниво парсър, синтактично, може да се провери
# дали нещо (метод или променлива) е дефинирано.
#
# 7. С method_missing може да се предефинира по произволен
# начин поведението за хвърляне на изключение
# при извикване на несъществуващ метод върху обект.
#
# 8. Възможността за промяна на текущия self в рамките на даден
# блок, т.е. промяна на контекста на изпълнение на парче код.
#
# 9. Разбрах някои елементи на github - направих първите си
# fork, commit, push.. :)
#
# 10.
#
#

Любомир обнови решението на 19.01.2015 16:41 (преди почти 10 години)

REPOSITORY = 'https://github.com/liube/ruby-retrospective-4.git'
# 20 неща, които научих в курса:
#
# 1. Весел втори аргумент в String#split, който указва на колко части
# всъщност да се раздели символният низ.
#
# 2. 2 варианта за представяне на range - с 2 точки и с 3 точки.
# (1..5).to_a = [1, 2, 3, 4, 5]; (1...5).to_a = [1, 2, 3, 4]
#
# 3. Възможността за използване на unless вместо if, както и
# поставянето им след израза, който се оценява, с цел
# спестяване на излишни писания.
#
# 4. Интересната концепция, че всичко в Руби е обект, вкл. и
# самите класове, което улесни цялостното разбиране на езика -
# include, extend, съответно singleton класовете, в които се
# съхраняват "класовите" методи.
#
# 5. Най-накрая разбрах (поне частично) какво е интерниране -
# съхраняването на един и същ обект символен низ или символ
# само веднъж в паметта.
#
# 6. Ключовата дума или синтаксисът defined? оценява подадения
# израз само на ниво парсър, синтактично, може да се провери
# дали нещо (метод или променлива) е дефинирано.
#
# 7. С method_missing може да се предефинира по произволен
# начин поведението за хвърляне на изключение
# при извикване на несъществуващ метод върху обект.
#
# 8. Възможността за промяна на текущия self в рамките на даден
# блок, т.е. промяна на контекста на изпълнение на парче код.
#
# 9. Разбрах някои елементи на github - направих първите си
# fork, commit, push.. :)
#
-# 10.
-#
-#
+# 10. Т.нар. интерполация също ми допадна, т.е. възможносттта
+# код да се изпълнява в рамките на стринг вместо да има
+# нужда от placeholder-и.

Любомир обнови решението на 19.01.2015 16:54 (преди почти 10 години)

REPOSITORY = 'https://github.com/liube/ruby-retrospective-4.git'
# 20 неща, които научих в курса:
#
# 1. Весел втори аргумент в String#split, който указва на колко части
# всъщност да се раздели символният низ.
#
# 2. 2 варианта за представяне на range - с 2 точки и с 3 точки.
# (1..5).to_a = [1, 2, 3, 4, 5]; (1...5).to_a = [1, 2, 3, 4]
#
# 3. Възможността за използване на unless вместо if, както и
# поставянето им след израза, който се оценява, с цел
# спестяване на излишни писания.
#
# 4. Интересната концепция, че всичко в Руби е обект, вкл. и
# самите класове, което улесни цялостното разбиране на езика -
# include, extend, съответно singleton класовете, в които се
# съхраняват "класовите" методи.
#
# 5. Най-накрая разбрах (поне частично) какво е интерниране -
-# съхраняването на един и същ обект символен низ или символ
+# съхраняването на един и същ обект число или символ
# само веднъж в паметта.
#
# 6. Ключовата дума или синтаксисът defined? оценява подадения
# израз само на ниво парсър, синтактично, може да се провери
# дали нещо (метод или променлива) е дефинирано.
#
# 7. С method_missing може да се предефинира по произволен
# начин поведението за хвърляне на изключение
# при извикване на несъществуващ метод върху обект.
#
# 8. Възможността за промяна на текущия self в рамките на даден
# блок, т.е. промяна на контекста на изпълнение на парче код.
#
# 9. Разбрах някои елементи на github - направих първите си
# fork, commit, push.. :)
#
# 10. Т.нар. интерполация също ми допадна, т.е. възможносттта
# код да се изпълнява в рамките на стринг вместо да има
# нужда от placeholder-и.
-
+#
+# 11. Научих как с помощта на блоковете може да се подава
+# логика на методи, в частност на each, като това е
+# еквивалентно на концепцията за callback в други езици?
+#
+#
+#
+#
+#
+#

Любомир обнови решението на 19.01.2015 16:59 (преди почти 10 години)

REPOSITORY = 'https://github.com/liube/ruby-retrospective-4.git'
# 20 неща, които научих в курса:
#
# 1. Весел втори аргумент в String#split, който указва на колко части
# всъщност да се раздели символният низ.
#
# 2. 2 варианта за представяне на range - с 2 точки и с 3 точки.
# (1..5).to_a = [1, 2, 3, 4, 5]; (1...5).to_a = [1, 2, 3, 4]
#
# 3. Възможността за използване на unless вместо if, както и
# поставянето им след израза, който се оценява, с цел
# спестяване на излишни писания.
#
# 4. Интересната концепция, че всичко в Руби е обект, вкл. и
# самите класове, което улесни цялостното разбиране на езика -
# include, extend, съответно singleton класовете, в които се
# съхраняват "класовите" методи.
#
# 5. Най-накрая разбрах (поне частично) какво е интерниране -
# съхраняването на един и същ обект число или символ
# само веднъж в паметта.
#
# 6. Ключовата дума или синтаксисът defined? оценява подадения
# израз само на ниво парсър, синтактично, може да се провери
# дали нещо (метод или променлива) е дефинирано.
#
# 7. С method_missing може да се предефинира по произволен
# начин поведението за хвърляне на изключение
# при извикване на несъществуващ метод върху обект.
#
# 8. Възможността за промяна на текущия self в рамките на даден
-# блок, т.е. промяна на контекста на изпълнение на парче код.
+# блок, т.е. промяна на контекста на изпълнение на парче код
+# с instance_eval и class_eval.
#
# 9. Разбрах някои елементи на github - направих първите си
# fork, commit, push.. :)
#
# 10. Т.нар. интерполация също ми допадна, т.е. възможносттта
# код да се изпълнява в рамките на стринг вместо да има
# нужда от placeholder-и.
#
# 11. Научих как с помощта на блоковете може да се подава
# логика на методи, в частност на each, като това е
# еквивалентно на концепцията за callback в други езици?
#
-#
+# 12.
#
#
#
#

Любомир обнови решението на 19.01.2015 16:59 (преди почти 10 години)

REPOSITORY = 'https://github.com/liube/ruby-retrospective-4.git'
# 20 неща, които научих в курса:
#
# 1. Весел втори аргумент в String#split, който указва на колко части
# всъщност да се раздели символният низ.
#
# 2. 2 варианта за представяне на range - с 2 точки и с 3 точки.
# (1..5).to_a = [1, 2, 3, 4, 5]; (1...5).to_a = [1, 2, 3, 4]
#
# 3. Възможността за използване на unless вместо if, както и
# поставянето им след израза, който се оценява, с цел
# спестяване на излишни писания.
#
# 4. Интересната концепция, че всичко в Руби е обект, вкл. и
# самите класове, което улесни цялостното разбиране на езика -
# include, extend, съответно singleton класовете, в които се
# съхраняват "класовите" методи.
#
# 5. Най-накрая разбрах (поне частично) какво е интерниране -
# съхраняването на един и същ обект число или символ
# само веднъж в паметта.
#
# 6. Ключовата дума или синтаксисът defined? оценява подадения
# израз само на ниво парсър, синтактично, може да се провери
# дали нещо (метод или променлива) е дефинирано.
#
# 7. С method_missing може да се предефинира по произволен
# начин поведението за хвърляне на изключение
# при извикване на несъществуващ метод върху обект.
#
# 8. Възможността за промяна на текущия self в рамките на даден
# блок, т.е. промяна на контекста на изпълнение на парче код
# с instance_eval и class_eval.
#
# 9. Разбрах някои елементи на github - направих първите си
# fork, commit, push.. :)
#
# 10. Т.нар. интерполация също ми допадна, т.е. възможносттта
# код да се изпълнява в рамките на стринг вместо да има
# нужда от placeholder-и.
#
# 11. Научих как с помощта на блоковете може да се подава
# логика на методи, в частност на each, като това е
# еквивалентно на концепцията за callback в други езици?
-#
-# 12.
+
-#
-#
-#
-#

Любомир обнови решението на 19.01.2015 16:59 (преди почти 10 години)

REPOSITORY = 'https://github.com/liube/ruby-retrospective-4.git'
-# 20 неща, които научих в курса:
+# 11 неща, които научих в курса:
#
# 1. Весел втори аргумент в String#split, който указва на колко части
# всъщност да се раздели символният низ.
#
# 2. 2 варианта за представяне на range - с 2 точки и с 3 точки.
# (1..5).to_a = [1, 2, 3, 4, 5]; (1...5).to_a = [1, 2, 3, 4]
#
# 3. Възможността за използване на unless вместо if, както и
# поставянето им след израза, който се оценява, с цел
# спестяване на излишни писания.
#
# 4. Интересната концепция, че всичко в Руби е обект, вкл. и
# самите класове, което улесни цялостното разбиране на езика -
# include, extend, съответно singleton класовете, в които се
# съхраняват "класовите" методи.
#
# 5. Най-накрая разбрах (поне частично) какво е интерниране -
# съхраняването на един и същ обект число или символ
# само веднъж в паметта.
#
# 6. Ключовата дума или синтаксисът defined? оценява подадения
# израз само на ниво парсър, синтактично, може да се провери
# дали нещо (метод или променлива) е дефинирано.
#
# 7. С method_missing може да се предефинира по произволен
# начин поведението за хвърляне на изключение
# при извикване на несъществуващ метод върху обект.
#
# 8. Възможността за промяна на текущия self в рамките на даден
# блок, т.е. промяна на контекста на изпълнение на парче код
# с instance_eval и class_eval.
#
# 9. Разбрах някои елементи на github - направих първите си
# fork, commit, push.. :)
#
# 10. Т.нар. интерполация също ми допадна, т.е. възможносттта
# код да се изпълнява в рамките на стринг вместо да има
# нужда от placeholder-и.
#
# 11. Научих как с помощта на блоковете може да се подава
# логика на методи, в частност на each, като това е
# еквивалентно на концепцията за callback в други езици?

Любомир обнови решението на 19.01.2015 20:35 (преди почти 10 години)

REPOSITORY = 'https://github.com/liube/ruby-retrospective-4.git'
-# 11 неща, които научих в курса:
+# 20 неща, които научих в курса:
#
# 1. Весел втори аргумент в String#split, който указва на колко части
# всъщност да се раздели символният низ.
#
# 2. 2 варианта за представяне на range - с 2 точки и с 3 точки.
# (1..5).to_a = [1, 2, 3, 4, 5]; (1...5).to_a = [1, 2, 3, 4]
#
# 3. Възможността за използване на unless вместо if, както и
# поставянето им след израза, който се оценява, с цел
# спестяване на излишни писания.
#
# 4. Интересната концепция, че всичко в Руби е обект, вкл. и
# самите класове, което улесни цялостното разбиране на езика -
# include, extend, съответно singleton класовете, в които се
# съхраняват "класовите" методи.
#
# 5. Най-накрая разбрах (поне частично) какво е интерниране -
# съхраняването на един и същ обект число или символ
# само веднъж в паметта.
#
# 6. Ключовата дума или синтаксисът defined? оценява подадения
# израз само на ниво парсър, синтактично, може да се провери
# дали нещо (метод или променлива) е дефинирано.
#
# 7. С method_missing може да се предефинира по произволен
# начин поведението за хвърляне на изключение
# при извикване на несъществуващ метод върху обект.
#
# 8. Възможността за промяна на текущия self в рамките на даден
# блок, т.е. промяна на контекста на изпълнение на парче код
# с instance_eval и class_eval.
#
# 9. Разбрах някои елементи на github - направих първите си
# fork, commit, push.. :)
#
# 10. Т.нар. интерполация също ми допадна, т.е. възможносттта
# код да се изпълнява в рамките на стринг вместо да има
# нужда от placeholder-и.
#
# 11. Научих как с помощта на блоковете може да се подава
# логика на методи, в частност на each, като това е
# еквивалентно на концепцията за callback в други езици?
+#
+# 12. Има предефинирани математически оператори за работа с низове:
+# *, +.
+#
+# 13. Предефинирани оператори за работа с масиви: +, -, &, &&, |, ||.
+#
+# 14.
+#
+

Любомир обнови решението на 19.01.2015 20:41 (преди почти 10 години)

REPOSITORY = 'https://github.com/liube/ruby-retrospective-4.git'
# 20 неща, които научих в курса:
#
# 1. Весел втори аргумент в String#split, който указва на колко части
# всъщност да се раздели символният низ.
#
# 2. 2 варианта за представяне на range - с 2 точки и с 3 точки.
# (1..5).to_a = [1, 2, 3, 4, 5]; (1...5).to_a = [1, 2, 3, 4]
#
# 3. Възможността за използване на unless вместо if, както и
# поставянето им след израза, който се оценява, с цел
# спестяване на излишни писания.
#
# 4. Интересната концепция, че всичко в Руби е обект, вкл. и
# самите класове, което улесни цялостното разбиране на езика -
# include, extend, съответно singleton класовете, в които се
# съхраняват "класовите" методи.
#
# 5. Най-накрая разбрах (поне частично) какво е интерниране -
# съхраняването на един и същ обект число или символ
# само веднъж в паметта.
#
# 6. Ключовата дума или синтаксисът defined? оценява подадения
# израз само на ниво парсър, синтактично, може да се провери
# дали нещо (метод или променлива) е дефинирано.
#
# 7. С method_missing може да се предефинира по произволен
# начин поведението за хвърляне на изключение
# при извикване на несъществуващ метод върху обект.
#
# 8. Възможността за промяна на текущия self в рамките на даден
# блок, т.е. промяна на контекста на изпълнение на парче код
# с instance_eval и class_eval.
#
# 9. Разбрах някои елементи на github - направих първите си
# fork, commit, push.. :)
#
# 10. Т.нар. интерполация също ми допадна, т.е. възможносттта
# код да се изпълнява в рамките на стринг вместо да има
# нужда от placeholder-и.
#
# 11. Научих как с помощта на блоковете може да се подава
# логика на методи, в частност на each, като това е
# еквивалентно на концепцията за callback в други езици?
#
# 12. Има предефинирани математически оператори за работа с низове:
# *, +.
#
-# 13. Предефинирани оператори за работа с масиви: +, -, &, &&, |, ||.
+# 13. Предефинирани оператори за работа с масиви: +, -, &, |.
#
# 14.
#

Любомир обнови решението на 19.01.2015 23:22 (преди почти 10 години)

REPOSITORY = 'https://github.com/liube/ruby-retrospective-4.git'
# 20 неща, които научих в курса:
#
# 1. Весел втори аргумент в String#split, който указва на колко части
# всъщност да се раздели символният низ.
#
# 2. 2 варианта за представяне на range - с 2 точки и с 3 точки.
# (1..5).to_a = [1, 2, 3, 4, 5]; (1...5).to_a = [1, 2, 3, 4]
#
# 3. Възможността за използване на unless вместо if, както и
# поставянето им след израза, който се оценява, с цел
# спестяване на излишни писания.
#
# 4. Интересната концепция, че всичко в Руби е обект, вкл. и
# самите класове, което улесни цялостното разбиране на езика -
# include, extend, съответно singleton класовете, в които се
# съхраняват "класовите" методи.
#
# 5. Най-накрая разбрах (поне частично) какво е интерниране -
# съхраняването на един и същ обект число или символ
# само веднъж в паметта.
#
# 6. Ключовата дума или синтаксисът defined? оценява подадения
# израз само на ниво парсър, синтактично, може да се провери
# дали нещо (метод или променлива) е дефинирано.
#
# 7. С method_missing може да се предефинира по произволен
# начин поведението за хвърляне на изключение
# при извикване на несъществуващ метод върху обект.
#
# 8. Възможността за промяна на текущия self в рамките на даден
# блок, т.е. промяна на контекста на изпълнение на парче код
# с instance_eval и class_eval.
#
# 9. Разбрах някои елементи на github - направих първите си
# fork, commit, push.. :)
#
# 10. Т.нар. интерполация също ми допадна, т.е. възможносттта
# код да се изпълнява в рамките на стринг вместо да има
# нужда от placeholder-и.
#
# 11. Научих как с помощта на блоковете може да се подава
# логика на методи, в частност на each, като това е
# еквивалентно на концепцията за callback в други езици?
#
# 12. Има предефинирани математически оператори за работа с низове:
# *, +.
#
# 13. Предефинирани оператори за работа с масиви: +, -, &, |.
#
-# 14.
+# 14. case сравнява с ===, а не с ==, което позволява писането на
+# по-елегантен код, защото се сравнява обект с клас или регулярен
+# израз.
+#
+# 15.
+#
+#
+#
+#
#

Любомир обнови решението на 19.01.2015 23:40 (преди почти 10 години)

REPOSITORY = 'https://github.com/liube/ruby-retrospective-4.git'
# 20 неща, които научих в курса:
#
# 1. Весел втори аргумент в String#split, който указва на колко части
# всъщност да се раздели символният низ.
#
# 2. 2 варианта за представяне на range - с 2 точки и с 3 точки.
# (1..5).to_a = [1, 2, 3, 4, 5]; (1...5).to_a = [1, 2, 3, 4]
#
# 3. Възможността за използване на unless вместо if, както и
# поставянето им след израза, който се оценява, с цел
# спестяване на излишни писания.
#
# 4. Интересната концепция, че всичко в Руби е обект, вкл. и
# самите класове, което улесни цялостното разбиране на езика -
# include, extend, съответно singleton класовете, в които се
# съхраняват "класовите" методи.
#
# 5. Най-накрая разбрах (поне частично) какво е интерниране -
# съхраняването на един и същ обект число или символ
# само веднъж в паметта.
#
# 6. Ключовата дума или синтаксисът defined? оценява подадения
# израз само на ниво парсър, синтактично, може да се провери
# дали нещо (метод или променлива) е дефинирано.
#
# 7. С method_missing може да се предефинира по произволен
# начин поведението за хвърляне на изключение
# при извикване на несъществуващ метод върху обект.
#
# 8. Възможността за промяна на текущия self в рамките на даден
# блок, т.е. промяна на контекста на изпълнение на парче код
# с instance_eval и class_eval.
#
# 9. Разбрах някои елементи на github - направих първите си
# fork, commit, push.. :)
#
# 10. Т.нар. интерполация също ми допадна, т.е. възможносттта
# код да се изпълнява в рамките на стринг вместо да има
# нужда от placeholder-и.
#
# 11. Научих как с помощта на блоковете може да се подава
# логика на методи, в частност на each, като това е
# еквивалентно на концепцията за callback в други езици?
#
# 12. Има предефинирани математически оператори за работа с низове:
# *, +.
#
# 13. Предефинирани оператори за работа с масиви: +, -, &, |.
#
# 14. case сравнява с ===, а не с ==, което позволява писането на
-# по-елегантен код, защото се сравнява обект с клас или регулярен
-# израз.
+# по-елегантен код, защото може да се сравнява обект с клас
+# или регулярен израз.
+#
#
-# 15.
-#
-#
+# 15. Методите на модула Enumerable връщат обект на класа Enumerator,
+# когато са извикани без подаден блок, което позволява
+# "навръзване" (chaining) на енумератори.
#
#
#

Любомир обнови решението на 19.01.2015 23:40 (преди почти 10 години)

REPOSITORY = 'https://github.com/liube/ruby-retrospective-4.git'
# 20 неща, които научих в курса:
#
# 1. Весел втори аргумент в String#split, който указва на колко части
# всъщност да се раздели символният низ.
#
# 2. 2 варианта за представяне на range - с 2 точки и с 3 точки.
# (1..5).to_a = [1, 2, 3, 4, 5]; (1...5).to_a = [1, 2, 3, 4]
#
# 3. Възможността за използване на unless вместо if, както и
# поставянето им след израза, който се оценява, с цел
# спестяване на излишни писания.
#
# 4. Интересната концепция, че всичко в Руби е обект, вкл. и
# самите класове, което улесни цялостното разбиране на езика -
# include, extend, съответно singleton класовете, в които се
# съхраняват "класовите" методи.
#
# 5. Най-накрая разбрах (поне частично) какво е интерниране -
# съхраняването на един и същ обект число или символ
# само веднъж в паметта.
#
# 6. Ключовата дума или синтаксисът defined? оценява подадения
# израз само на ниво парсър, синтактично, може да се провери
# дали нещо (метод или променлива) е дефинирано.
#
# 7. С method_missing може да се предефинира по произволен
# начин поведението за хвърляне на изключение
# при извикване на несъществуващ метод върху обект.
#
# 8. Възможността за промяна на текущия self в рамките на даден
# блок, т.е. промяна на контекста на изпълнение на парче код
# с instance_eval и class_eval.
#
# 9. Разбрах някои елементи на github - направих първите си
# fork, commit, push.. :)
#
# 10. Т.нар. интерполация също ми допадна, т.е. възможносттта
# код да се изпълнява в рамките на стринг вместо да има
# нужда от placeholder-и.
#
# 11. Научих как с помощта на блоковете може да се подава
# логика на методи, в частност на each, като това е
# еквивалентно на концепцията за callback в други езици?
#
# 12. Има предефинирани математически оператори за работа с низове:
# *, +.
#
# 13. Предефинирани оператори за работа с масиви: +, -, &, |.
#
# 14. case сравнява с ===, а не с ==, което позволява писането на
# по-елегантен код, защото може да се сравнява обект с клас
# или регулярен израз.
#
-#
# 15. Методите на модула Enumerable връщат обект на класа Enumerator,
# когато са извикани без подаден блок, което позволява
# "навръзване" (chaining) на енумератори.
#
#
#

Любомир обнови решението на 19.01.2015 23:47 (преди почти 10 години)

REPOSITORY = 'https://github.com/liube/ruby-retrospective-4.git'
# 20 неща, които научих в курса:
#
# 1. Весел втори аргумент в String#split, който указва на колко части
# всъщност да се раздели символният низ.
#
# 2. 2 варианта за представяне на range - с 2 точки и с 3 точки.
# (1..5).to_a = [1, 2, 3, 4, 5]; (1...5).to_a = [1, 2, 3, 4]
#
# 3. Възможността за използване на unless вместо if, както и
# поставянето им след израза, който се оценява, с цел
# спестяване на излишни писания.
#
# 4. Интересната концепция, че всичко в Руби е обект, вкл. и
# самите класове, което улесни цялостното разбиране на езика -
# include, extend, съответно singleton класовете, в които се
# съхраняват "класовите" методи.
#
# 5. Най-накрая разбрах (поне частично) какво е интерниране -
-# съхраняването на един и същ обект число или символ
-# само веднъж в паметта.
+# съхраняването на всички обекти числа или символи с равна стойност
+# само веднъж в паметта (т.е. става дума за един и същ обект).
#
# 6. Ключовата дума или синтаксисът defined? оценява подадения
# израз само на ниво парсър, синтактично, може да се провери
# дали нещо (метод или променлива) е дефинирано.
#
# 7. С method_missing може да се предефинира по произволен
# начин поведението за хвърляне на изключение
# при извикване на несъществуващ метод върху обект.
#
# 8. Възможността за промяна на текущия self в рамките на даден
# блок, т.е. промяна на контекста на изпълнение на парче код
# с instance_eval и class_eval.
#
# 9. Разбрах някои елементи на github - направих първите си
# fork, commit, push.. :)
#
# 10. Т.нар. интерполация също ми допадна, т.е. възможносттта
# код да се изпълнява в рамките на стринг вместо да има
# нужда от placeholder-и.
#
# 11. Научих как с помощта на блоковете може да се подава
# логика на методи, в частност на each, като това е
# еквивалентно на концепцията за callback в други езици?
#
# 12. Има предефинирани математически оператори за работа с низове:
# *, +.
#
# 13. Предефинирани оператори за работа с масиви: +, -, &, |.
#
# 14. case сравнява с ===, а не с ==, което позволява писането на
# по-елегантен код, защото може да се сравнява обект с клас
# или регулярен израз.
#
# 15. Методите на модула Enumerable връщат обект на класа Enumerator,
# когато са извикани без подаден блок, което позволява
# "навръзване" (chaining) на енумератори.
#
#
#

Любомир обнови решението на 20.01.2015 16:55 (преди почти 10 години)

REPOSITORY = 'https://github.com/liube/ruby-retrospective-4.git'
# 20 неща, които научих в курса:
#
# 1. Весел втори аргумент в String#split, който указва на колко части
# всъщност да се раздели символният низ.
#
# 2. 2 варианта за представяне на range - с 2 точки и с 3 точки.
# (1..5).to_a = [1, 2, 3, 4, 5]; (1...5).to_a = [1, 2, 3, 4]
#
# 3. Възможността за използване на unless вместо if, както и
# поставянето им след израза, който се оценява, с цел
# спестяване на излишни писания.
#
# 4. Интересната концепция, че всичко в Руби е обект, вкл. и
# самите класове, което улесни цялостното разбиране на езика -
# include, extend, съответно singleton класовете, в които се
# съхраняват "класовите" методи.
#
# 5. Най-накрая разбрах (поне частично) какво е интерниране -
# съхраняването на всички обекти числа или символи с равна стойност
# само веднъж в паметта (т.е. става дума за един и същ обект).
#
# 6. Ключовата дума или синтаксисът defined? оценява подадения
# израз само на ниво парсър, синтактично, може да се провери
# дали нещо (метод или променлива) е дефинирано.
#
# 7. С method_missing може да се предефинира по произволен
# начин поведението за хвърляне на изключение
# при извикване на несъществуващ метод върху обект.
#
# 8. Възможността за промяна на текущия self в рамките на даден
# блок, т.е. промяна на контекста на изпълнение на парче код
-# с instance_eval и class_eval.
+# с instance_eval и class_eval. Така, например, с instance_eval
+# може да се дефинира метод на конкретен обект.
#
# 9. Разбрах някои елементи на github - направих първите си
# fork, commit, push.. :)
#
# 10. Т.нар. интерполация също ми допадна, т.е. възможносттта
-# код да се изпълнява в рамките на стринг вместо да има
+# код да се изпълнява в рамките на стринг, вместо да има
# нужда от placeholder-и.
#
# 11. Научих как с помощта на блоковете може да се подава
# логика на методи, в частност на each, като това е
# еквивалентно на концепцията за callback в други езици?
#
# 12. Има предефинирани математически оператори за работа с низове:
# *, +.
#
# 13. Предефинирани оператори за работа с масиви: +, -, &, |.
#
# 14. case сравнява с ===, а не с ==, което позволява писането на
# по-елегантен код, защото може да се сравнява обект с клас
# или регулярен израз.
#
# 15. Методите на модула Enumerable връщат обект на класа Enumerator,
# когато са извикани без подаден блок, което позволява
# "навръзване" (chaining) на енумератори.
#
+# 16. В различни случаи удобното паралелно присвояване и разпакетиране # на списъци.
#
+# 17. По-елегантен начин на извикване на методи със символи,
+# например select(&:even?) вместо select {|n| n.even?}
#
-
+# 18. В случаи като този с приоритетното отваряне на директория вместо # файл със същото име в трета задача тернарният оператор може да # се замени с ||.
+#
+# 19. Научих интересния метод tap, с който можеш да се "вмъкваш"
+# между извиквания на методи и да проверяваш междинни резултати.
+#
+# 20. 10-те заповеди за програмиране :D

Любомир обнови решението на 20.01.2015 16:57 (преди почти 10 години)

REPOSITORY = 'https://github.com/liube/ruby-retrospective-4.git'
# 20 неща, които научих в курса:
#
# 1. Весел втори аргумент в String#split, който указва на колко части
# всъщност да се раздели символният низ.
#
# 2. 2 варианта за представяне на range - с 2 точки и с 3 точки.
# (1..5).to_a = [1, 2, 3, 4, 5]; (1...5).to_a = [1, 2, 3, 4]
#
# 3. Възможността за използване на unless вместо if, както и
# поставянето им след израза, който се оценява, с цел
# спестяване на излишни писания.
#
# 4. Интересната концепция, че всичко в Руби е обект, вкл. и
# самите класове, което улесни цялостното разбиране на езика -
# include, extend, съответно singleton класовете, в които се
# съхраняват "класовите" методи.
#
# 5. Най-накрая разбрах (поне частично) какво е интерниране -
# съхраняването на всички обекти числа или символи с равна стойност
# само веднъж в паметта (т.е. става дума за един и същ обект).
#
# 6. Ключовата дума или синтаксисът defined? оценява подадения
# израз само на ниво парсър, синтактично, може да се провери
# дали нещо (метод или променлива) е дефинирано.
#
# 7. С method_missing може да се предефинира по произволен
# начин поведението за хвърляне на изключение
# при извикване на несъществуващ метод върху обект.
#
# 8. Възможността за промяна на текущия self в рамките на даден
# блок, т.е. промяна на контекста на изпълнение на парче код
# с instance_eval и class_eval. Така, например, с instance_eval
# може да се дефинира метод на конкретен обект.
#
# 9. Разбрах някои елементи на github - направих първите си
# fork, commit, push.. :)
#
# 10. Т.нар. интерполация също ми допадна, т.е. възможносттта
# код да се изпълнява в рамките на стринг, вместо да има
# нужда от placeholder-и.
#
# 11. Научих как с помощта на блоковете може да се подава
# логика на методи, в частност на each, като това е
# еквивалентно на концепцията за callback в други езици?
#
# 12. Има предефинирани математически оператори за работа с низове:
# *, +.
#
# 13. Предефинирани оператори за работа с масиви: +, -, &, |.
#
# 14. case сравнява с ===, а не с ==, което позволява писането на
# по-елегантен код, защото може да се сравнява обект с клас
# или регулярен израз.
#
# 15. Методите на модула Enumerable връщат обект на класа Enumerator,
# когато са извикани без подаден блок, което позволява
# "навръзване" (chaining) на енумератори.
#
-# 16. В различни случаи удобното паралелно присвояване и разпакетиране # на списъци.
+# 16. В различни случаи удобното паралелно присвояване и разпакетиране
+# на списъци.
#
# 17. По-елегантен начин на извикване на методи със символи,
# например select(&:even?) вместо select {|n| n.even?}
#
-# 18. В случаи като този с приоритетното отваряне на директория вместо # файл със същото име в трета задача тернарният оператор може да # се замени с ||.
+# 18. В случаи като този с приоритетното отваряне на директория вместо
+# файл със същото име в трета задача тернарният оператор може да
+# се замени с ||.
#
# 19. Научих интересния метод tap, с който можеш да се "вмъкваш"
# между извиквания на методи и да проверяваш междинни резултати.
#
# 20. 10-те заповеди за програмиране :D