Това е мястото да задавате въпроси по първа задача.
Предполагам, че няма нужда да казвам, но все пак: не споделяйте решения тук. Всъщност, не споделяйте решения въобще.
Това е мястото да задавате въпроси по първа задача.
Предполагам, че няма нужда да казвам, но все пак: не споделяйте решения тук. Всъщност, не споделяйте решения въобще.
Имаме ли ограничения (и какви) ?
Ще го кажа и утре, но за първата задача няма да даваме ограничения.
Как да третираме [] в Array#subarray_count? В частност - какво се очаква да върнат неща от рода на:
[].subarray_count([])
[1, 2, 3].subarray_count([])
Предполагам 1 и 0?
По скоро 0 и 0. На мен [] ми изглежда като невалиден аргумент ('колко пъти там няма нищо?'). Или бъркам нещо?
Ако подадем на subarray_count като аргумент масив с дължина по-голяма от дължината на масива, пак връщаме 0, нали? Т.е.
[1, 2, 3].subarray_count([1, 2, 3, 4])
трябва да ни върне 0? Може и да изглежда очевидно, но за по-сигурно реших да питам. :)
Аз го виждам така:
[1, 2, 3].subarray_count([]) # невалиден аргумент
[].subarray_count([1, 2, 3]) # 0
Не мога да реша колко пъти се среща []
като подсписък на [1, 2, 3, 4, 5]
, така че ти предлагам да го оставиш недефинирано.
То е по-скоро за всички домашни, но имаме ли право официално да си разменяме тесове. Тоест, ако някой реши (случайно) да си напише допълнителни автоматични проверки за кода си, ще се приеме ли като нещо ужасно, ако ги сподели?
Не съм сигурен, че ще бъде коректно (какво правим, ако аз съм разбрал грешно условието и напиша тест, който да обърка иначе вярното решение на колега?) ...
В името на brainteaser-а:
[].subarray_count([]) == ?
Или то просто влиза в случая на [каквото-и-да-е].subarray_count([])
Разбира се всеки би ползва тестове на своя отговорност. По-добре да ти изгърми тест и да нямаш грешка, отколкото да не изгърми и да имаш. Поне аз така мисля. В крайна сметка никой не би могъл да те кара да ползваш допълнителни тестове, затова ми изглежда като смислено нещо, но нека все пак ръководството се изкаже.
@Евгени
Невалиден/некоректен аргумент е. Замисли се, питаш колко пъти нищото се среща някъде си - било то, празен списък, списък с 1, 2, ... 1 000 аргумента ;)
На мене ми е по-интересно дали един списък е подсписък на себе си: [1,2,3].subarray_count([1,2,3])
, но бих заложила на не.
Математически, едно множество е подмножество на себе си. А в случая на наредени и крайни, даже спокойно може да се каже и че се съдържа точно веднъж в себе си. А колко нищота има в нищото... може би е твърде философско и по-разумно да се приеме за недефинирано наистина :)
[].subarray_count([]) това не е ли 0? Аргумента ми е че [] не съдържа никакви елементи. Тоест нула. Докато ако имахме [[]] това вече е множество съдържащо един елемент, който е празното множество. Иначе си прав за това че всяко множество е подмножество на себе си, но в случая не важи защо броят на елементите е 0 (мисля, че това е валидният контра аргумент).
НО може ли да се спрем на въпроса на колегата Ивайло за тестовете? Не за друго, но снощи мислех да публикувам отделна тема по въпроса, естествено в негова подкрепа. Според мене е добра идея, както каза Ивайло, всеки си носи отговорност :)
Принципно нямам нищо против споделянето на тестове, но предлагам да вкараме някакъв ред, по който да има 'общоприето поведение' за да има смисъл (например всеки петък да се чува тежката дума на Стефан и коментарите да спират). Не съм много сигурен дали е постижимо, но трябва да разделим 'собствена отговорност' от 'загуба на време':)
Не съм сигурен за тестовете.
По тази причина: да, имате право да го правите засега. Може да си променя мнението вбъдеще. Ако го правите, разрешено е да става само като Gist-ове в GitHub. Gist-овете могат да се fork-ват, така че се забавлявайте.
Ето моя take на другия въпрос:
[1, 2, 3].subarray_count([1, 2, 3]) # 1, очевидно
[].subarray_count([]) # не е дефинирано
Докато един списък е подсписък на себе си, празния списък не е валиден аргумент за тази операция.
Ето моите допълнителни тестове (дадения от Стефан тест се съдържа).
https://gist.github.com/1301473
Ако някой има коментари/забележки, нека ги сподели.
[].subarray_count([]) # не е дефинирано
Това води до следния въпрос: трябва ли да го обработваме като случай (и примерно да връщаме nil)? Сега нямаме ограничения, но като дойдат ще е лошо да хабим редове за if-чета. :) В моето решение при извиквания с [ ] функцията не зацикля и даже връща резултат (безсмислен, но все пак :) ) Следва ли да се пазим?
P.S. feature request - Може ли към функционалността на форума да се добави възможност за цитиране на по-стара публикация? :)
Това води до следния въпрос: трябва ли да го обработваме като случай (и примерно да връщаме nil)? Сега нямаме ограничения, но като дойдат ще е лошо да хабим редове за if-чета. :) В моето решение при извиквания с [ ] функцията не зацикля и даже връща резултат (безсмислен, но все пак :) ) Следва ли да се пазим?
Правете каквото искате. Аз бих хвърлил грешка. В никакъв случай не бих върнал nil
от функция, която връща число. Не знаете как се хвърля грешка, обаче, така че няма значение.
P.S. feature request - Може ли към функционалността на форума да се добави възможност за цитиране на по-стара публикация? :)
П.П.: В Markdown има blockquote. Трябва да си копираш текста, ама това е положението. Ако искаш някакъв линк, който да го прави автоматично, можеш да отвориш issue в GitHub
Любопитно ми е доколко в Ruby се поощрява защитното програмиране? И какви аргументи за предимствата и недостатъците му съществуват по принцип?
П.П.: В Markdown има blockquote.
P.S. Кой да чете...
Питай ме в понеделник на лекция, ще отговоря. През останалото време, не бичи off-topic. Можеш да пуснеш друга тема.
Иначе, не, не го поощрява. Това е идеята на duck typing.
Как трябва да си качим домашните и къде?
@Димитър
Отиваш на първа задача и следваш линка "Моето решение". Нататък, вярвам, е достатъчно интуинивно.
Като цяло може би наистина би било по-добре ако линкът се откроява малко повечко по някакъв начин. Иначе в моемнта изглежда така
Edit: @Стефан, лоша идея ли е да има опция за триене на коментари? :)
Последният пример в условието на задачата е:
%w[a a b c b a].occurences_count # {a => 3, b => 2, c => 1}
Това не трябва ли да върне:
{"a"=>3, "b"=>2, "c"=>1}
Така трябва да е ;) :)
{"a"=>3, "b"=>2, "c"=>1}
@Мая и @Мартин:
Съвършенно прави сте. Моя грешка. Оправих го.
Сега, моля научете Markdown и си форматирайте постовете прегледно. Оправил съм вашите. Може да видите как.
Трябва да сте влезли в системата, за да може да отговаряте на теми.