draw
с Canvas::ASCII
връща стринг, всеки ред на нов ред, клетките слепени с нищо помежду. Correct?
Шеста задача
Ето и от мен едни тестове - има няколко и за Canvas::ASCII и Canvas::HTML. Ако забележите нещо, което не е ок според вас, казвайте. :)
@Владимир, да.
Какво трябва да връща това?
TurtleGraphics::Turtle.new(2, 3).draw do spawn_at 1, 0 look :left move end
[[0,0,0],
[1,0,1]]Здравко, мерси за тестовете, пробвах ги. Fail-ва ми set-ването на pixel size, и това което е в readme-то, но когато си видя output-а е същият, който трябва да е. Единствената разлика е в индентациите и newlinовете. Аз съм ги направил по шаблона на задачата, така че не би трябвало да са проблем.
Имам следната ситуация и не мога да разбера защо така се получава.
Когато изпълня draw(canvas), като canvas ми е инстанция на HTML, напиша p canvas, то ми излиза целия html, но ако напиша puts canvas, то ми излиза #<TurtleGraphics::Canvas::HTML::......> при положение, че не съм предефинирал нищо. Идеята е 1 към 1 с тази на ascii canvas, но при html-a се получава това и съответно когато го записвам във файла, за да тествам драконовия флаг ми се записва #<TurtleGraphics::Canvas::HTML::......>.
Ще съм благодарен, ако някой ми каже къде е проблема или къде може да съм объркал.
Искам да попитам HTML-a, който връщаме, като стринг ли трябва да се върне? И идентациите стриктни ли са?
@Петър, не ти излиза само HTML-а при
p
. Просто ти се показват инстанционните променливи, една от които при теб е HTML-а. Това е нормалното поведение, когато не си предефинирал нищо. Виж пак примера. Не записваш във файла инстанция наCanvas::HTML
, а това, което е върналdraw
.@Ивайло, да - трябва да е стринг. На предната страница има отговор на въпроса за индентациите
Да да да, нещо съм ретарднал. :D Всички е точно. Благодаря. :)
Позиционирането на костенурката в [0, 0] кога считаме, че се случва - при създаването на Turtle обект, или имплицитно преди първото движение в блока? Съответно, какво очакваме ако подадем празен блок?
Въпросът ми е свързан с тестовете, които @Здравко е споделил - по-конкретно "draws correctly canvas with no movement".
@Андрея, не сме дефинирали поведение за празен блок в описанието на задачата => няма да тестваме това => правиш го както искаш. Кога ще се случва позиционирането решаваш ти, стига да изпълнява нещата, описани в условието на задачата (първата и последната позиция на костенурката да е също в матрицата).
Горния коментар отговаря на въпроса и този е излишен :D
@Андрея, вече питах за това и отговорът на @Георги беше следния:
... Преди да я spawn-неш (бел.ред.: костенурката), може да си представиш, че не е никъде в полето. Ако бъде изпълнен move без да има spawn_at, все едно я spawn-ваш имплицитно на 0, 0.
Следователно при изпълняване на draw без движение би следвало таблицата с движенията да има 0 навсякъде. Но това ще означава, че максималният интензитет е 0. Така, според мен, TurtleGraphics::Canvas::ASCII трябва да връща таблица, всяка от чиито клетки съдържа символът, съответстващ на интензитет 1 (или 100%).
За по-сигурно, ще е добре и някой от екипа да сподели дали това е очакваното поведение :)@Станимира:
Ако не подадеш move, просто имаш 1-ца на мястото където се е spawn-ала? Мисля , че примерите , които са дадени, еднозначно показват това поведение.
@Андрея и @Станимира, Според мен най-удачно би било, ако не е мърдана костенурката, но сме викнали draw, то да бъде spawn-ната на default position-а, тъй като костенурката вече е жива и е в матрицата :D Така става и по-лесно за пресмятането на итензитета.
@Петър, @Георги, да, май има по-голяма логика да се spawn-ва при празен блок, но така или иначе е спорно кое е очакваното поведение. Но, както @Георги каза, няма да се тества този случай, so wateva
Всъщност , сгреших и мисля, че наистина трябва всичките да са 0 - най-логичното е :D. Имаш костенурка(краката и са изцапани с числа отдолу) , но още не си я хвърлил върху платното.
В PCLogo, което е имплементация на тази концепция, пускайки го костенурката е в центъра на платното. По-логично е имаш ли draw, макар и празен 0,0 да е посетено, поне за мен. Така или иначе, след малко ще се появи някой от екипа и ще каже, че такива случаи няма да се тестват и ще сме щастливи.
В тестовете на @Здравко има празен
draw
, който очаква 0,0 да е посетено - екипа нищо не е казал, така че или така трябва да бъде или няма значение.@Екипа, и @Здравко и @Добромир заслужават точки за споделените тестове, мисля - поне на мен ми бяха доста полезни, имайки се предвид, че я бях описал тази задача именно защото нямах време да я тествам. Ако не им дадете нищо, аз ще донеса едно Баунти да си разделят довечера.
Нашето решение и официалните тестове са публикувани. Разгледайте ги и почерпете идеи :)
Относно споделянето на тестове, нещата не са толкова прости.
Страхотно е, че има хора, които са си направили труда да си напишат тестове, да ги приведат в добър вид и да ги пуснат с идеята да помогнат на другите. Браво!За съжаление, обаче, това много лесно може да се превърне в мечешка услуга. Идеята на задачите е да са индивидуални, хората да хванат един код и да го накарат да работи без чужда помощ. Именно затова не даваме пълните тестове от началото.
Споделянето на тестове е вид заобикаляне на системата. Така част от работата, да си тестваш решението, става излишна, защото можеш просто да копираш споделените тестове на други хора. Задачата става групова. Също, задачите се разграничават от реалното писане на код, където няма готов test suite, с който да се проверява новонаписаният код.В минали издания на курса сме забранявали споделяне на тестове. Сега не забраняваме, но и не поощряваме споделянето.
Отново, страхотно е, че има хора, които си пишат тестове. Между другото, ако искате да споделяте тестове, можете да го направите и след крайния срок.
Така може да получите коментари и по тях :)Има я и другата гледна точка, колко силно open source community има около Руби и как да си споделяме тествовете е един перфектен начин да го усетим по време на курса.
А, живото доказателство, че задачите не стават общи е факта, че за картите написах 40+ екзампъла, които споделих, но ми фейлват половината продъкшън тестове, защото не съм си тествал най-очевидната функционалност на конструкторите на тестетата и уви никой не ми го каза. Не че обвинявам някого де.
Да не повтарям първия ми абзац, но да работим общо по спековете на задачите мисля, че може да ни е само от плюс и трябва да се поощрява.
Както и да е - Баунтито ми е в раницата, но не видях никой от тях на контролното. Ще го нося и следващия път като дойда на лекция. : )) Даже ако не забравя ще взема още едно, защото това ми е първата задача на която минавам всички тестове.
Гледам колко wrong number of args грешки имам и забелязвам, че съм пропуснал да сложа стойност по подразбиране за canvas аргумента на draw метода.
Грешката си е грешка, другия път ще се сетя ама гледайте какво се получава. Около 10 теста, се провалят заради постановката им въпреки че кодът отдолу работи (тестовете с ASCII платно го показват).
Другия път едно hint-че в условието ще е манна небесна :)
@Стоян ако се загледаш в условието внимателно ще забележиш, че интерфейса за canvas не е упоменат. Това е нарочно за да остави свобода за реализация на решението, но практически не оставя много възможности за mock-ване на такъв по какъвто и да е начин за да тестваме с default-ен такъв. Няма как да знаем този default-ен как изглежда при всяко решение и дали въобще съществува. Тестовете обаче се възползват от единственото сигурно и общо за всички - споменатото в условие поведение без canvas.
Едно предложение как ти би написал тестовете така, че да не правят презумпции неспоменати в условието ще е манна небесна :)
Трябва да сте влезли в системата, за да може да отговаряте на теми.