Осма задача е публикувана.
Срокът е една седмица, до понеделник, 11 януари, 17:30 ч.
Използвайте тази тема, ако имате въпроси по условието на задачата.
Осма задача е публикувана.
Срокът е една седмица, до понеделник, 11 януари, 17:30 ч.
Използвайте тази тема, ако имате въпроси по условието на задачата.
Здравейте,
В условието като пример е дадено следното:
sheet = Spreadsheet.new '
cell1 cell2
cell3 cell4
'
sheet.cell_at("A1") # => "cell1"
sheet.cell_at("B2") # => "cell4"
В началото, обаче, пише:
В рамките на един ред, отделните клетки, формиращи колони, могат да са раздеелни по два начина:
- Със символа "\t" (tab).
- С два или повече последователни интервала.
и в примера би трябвало редът ' cell1 cell2'
да се раздели на 3 клетки ""
, "cell1"
и "cell2"
(разделени с по 2 интервала). И оттук
sheet.cell_at("A1") # => ""
sheet.cell_at("B2") # => "cell3"
Аз ли съм в грешка?
Поздрави
Здравейте,
Само при формулите ли може да се предизвика изключение или изключение със съобщение "Invalid expression 'израз'" може да се предизвика и при другите възможности за изрази?
Например какво се случва при изразите:
"=13abc"
"=FUNC1, 2, 3)"
Ако изключения се предизвикват само при формулите, то как разбираме, че нещо е формула, за да установим след това, че синтаксиса му е грешен?
Или приемаме, че числата и референциите към клетка са винаги в правилен формат и ако не е число или референция, то винаги е формула?
@Теодор, разбирам какво поражда объркването. Пише При конструиране на таблица от низ, whitespace-ът около всяка клетка трябва да бъде премахнат.
, но твоята интерпретация не се опровергава изрично от това изречение.
Поведението трябва да е както в примерите.
@Здравко, Една клетка се счита за формула, ако започва със символ за равенство. Ако клетка започва с =
, но няма синтаксис на формула, трябва да се предизвика изключение.
И двете неща вече са доизяснени изрично в условието.
А ако искам да получа таблица
A B C
+---+---+---+
1 | 1 | 2 | 3 |
+---+---+---+
2 | | 5 | 6 |
+---+---+---+
3 | | | 9 |
+---+---+---+
какво трябва да подам като аргумент на конструктора?
С този интерфейс не можеш да създадеш таблица с празна клетка. Както и клетка, съдържаща две празни места едно след друго, или празно място в началото си.
Не се грижи за тези случаи. Таблиците, които подаваме, няма да имат празни клетки.
Ако трябваше да се поддържат и празни клетки, щеше да се наложи да се направи по-строг форматът на низа. Например, да се имплементира някакъв механизъм за escape-ване.
Това не е нещо трудно, но фокуса на задачата не е върху парсването на строг формат, а върху механизма за изчисление на формули.
Здравейте, в примерния тест, returns the evaluated spreadsheet as a table
, е създадена следната таблица:
1 2 =ADD(1, B1)
4 5 6
Не трябва ли референцията към B1
да е записана =B1
?
.
Здравейте,
Ако имаме формула, чието име е непознато и в която има синтактична грешка, например =FOO)23, 1(
, какво изключение ще се предизвика?
@Георги Киряков, не, записът в примерния тест е правилен. Символът =
е само в началото на клетка, когато имаме формула/израз. Просто след равното трябва да може да е директно име на клетка.
@Алекс, логично първо би трябвало да е синтактичната грешка, но няма да има такива тестове.
Здравейте,
Ако имам
s = Spreadsheet.new "\t\t=ADD(\t\t1 , 3, 18 )"
s['A1']
ще счете ли формулата за валидна?s.cell_at 'A1'
ще върне текстовата стойност, точно както е въведена, или ще махне излишните интервали?s.to_s
?Поздрави
@Теодор, след прилагане на правилата за разделяне на редове и колони, описани в условието, низът:
"\t\t=ADD(\t\t1 , 3, 18 )"
Ще бъде разделен по следния начин:
| "=ADD("
| ""
| "1"
| ","
| "3,"
| "18"
| ")"
|
Следователно:
s['A1']
няма да счете формулата за валидна.s.cell_at 'A1'
ще върне низа =ADD(
.to_s
трябва да гръмне.В условието не е указано, че разделителите за колони могат да бъдат escape-вани по някакъв начин, или че вътре във формула не важат.
В такъв случай, ако имам s = Spreadsheet.new '=ADD(1,1,1)'
, тогава s.cell_at 'A1'
ще върне текста както е подаден - "=ADD(1,1,1)"
, или ще върне текста в правилен формат - "=ADD(1, 1, 1)"
?
@Теодор, няма дефиниран "правилен формат" за една формула. cell_at
трябва да върне стойността на клетката такава, каквато е. В твоя пример, =ADD(1,1,1)
.
Здравейте!
Въпрос: Нека една клетка реферира към втора ;
Ще тествате ли случаи, в които втората съответно също реферира към клетка ?
Здрасти :)
В ограниченията има "Изисква да ползвате само комбинации валидни английски думи за именуване, със следните изключения:" но не следват изключенията. Това значи ли, че няма изключения?
Поздрави
Въпрос № 1:
Ако имаме следната таблица
1 2.2 3
=ADD(B1, C2) 4 5
#to_s какво трябва да върне
1 2.2 3
6.20 4 5
or
1 2.20 3
6.20 4 5
Въпрос № 2:
Правилно ли разбирам: "След символа = и преди началото на израза може да има нула или повече интервала."
1 2 = ADD(3, 4)
Таблицата е валидна и не трябва да се интерпретира като: |1
|2
|=
|ADD(3, 4)
|
И е изключение от: "В рамките на един ред, отделните клетки, формиращи колони, могат да са разделени по два начина: Със символа "\t" (tab). С два или повече последователни интервала."
@Георги Стефанов, каскадните референции би трябвало да работят. Няма да тестваме случаи, в които има циклични референции.
@Веселин, да, няма изключения. Ако смяташ, че има нужда да добавим нещо смислено, кажи, но имай предвид, че има възможност да се напише решение и без изключения.
@Георги Киряков, на въпрос 1), трябва да върне вариант едно – клетката B1 не трябва да е променена.
На въпрос 2) - не, не е такава интерпретацията, не е изключение от правилото за разделяне на ред на клетки. Таб или два или повече интервала винаги разделят ред на клетки. Приемете, че първо се прилага правилото за разделяне на ред на клетки и чак след това – останалите правила за премахване на whitespace.
Добър вечер!
Ще се дават ли таблици от вида:
'11 22 ADD(1, 2,3)'
?
В тази таблица не се разбира дали трябва да има 4 колонки или 3, но последната да е с верен синтаксис.
@Георги, прочети пак коментара преди твоя :) Това са 4 колони. Също, няма =
преди ADD
, така че дори да бяха три (а не са), това не е формула.
*Във връзка с последния въпрос и отговор.
Тогава условието би трябвало да бъде модифицирано леко от:
Параметрите на формулите са разделени със запетая, като преди и след запетаята може да има нула или повече whitespace символа.
на:
Параметрите на формулите са разделени със запетая, като преди и след запетаята може да има нула или един whitespace символа.
Същото да е и за знака '='. :)
Благодаря!
Извинявам се, че повторих въпроса.
Друг въпрос: Празната таблица означава ли, че нищо не е подадено на конструктора ?
По условие празни клетки няма да се подават, но може ли да се подаде таблица
" "
например?
Да, можеше условието да е по-ясно в тази част, признавам :)
@Георги, да, може да се подаде такава таблица. Това, като се приложат правилата, описани в условието, в реда, в който са описани, ще доведе до празна таблица.
Може ли да се случи така, че във формулата да имаме whitespaces? Пример "=ADD(1, 3, 5)"
@Веселин, виж коментарите по-нагоре (и обърни внимание, че от коментара ти примерът не е ясен).
Имаме в дадена клетка "=FOO(1,2,)". Каква грешка би излязла : Невалиден синтаксис , заради запетаята без нищо след нея, или непозната функция "FOO"?
Друг въпрос: Това валиден синтаксис ли е FOO (1,2,3) - тоест между името на формулата и параметрите да има 1 интервал?
Трети въпрос: Подобен на първия : "=FOO(1,bar)" - Тук изразът съдържа "формула", но в аргументите има нещо различно от число или индекс на клетка. Формулата също е с непознато име. Каква грешка би изляза в случая - невалиден израз или непозната формула?
Здравейте,
В някои от описаните примери за индекси на клетки сте ползвали символа 'А' от кирилица и сте върнали валидна клетка. Например:
BА42" – 53-тата клетка на 42-рия ред.
Това ли е очакваното поведение, когато видим символ от кирилица, или трябва да връщаме грешка?
@Георги,
1: http://fmi.ruby.bg/topics/509?page=1#reply_517 :)
2: Направи го както искаш. Щом не го пише изрично няма нужда да го поддържаш. Не сме толкова гадни :)
3: Виж 1
@Любомир, Интересно наблюдение. Заради copy/paste ли го откри? :) Всичко ще е с латиница.
Методът "[]" върху клетка със стойност "=42.234" би трябвало да върне "42.23". Ако клетката съдържа само число без знак за равенство, не се счита за израз и тогава се връща същият низ, който е записан в клетката като са премахнати whitespace-овете в началото и в края на клетката. Това е интерпретацията ми на условието: така ли трябва да е?
Благодаря предварително!
@Георги Стефанов, да, интерпретацията ти е правилна.
Колкото до по-ранния ти въпрос за =FOO(1,bar)
– няма да има тест с подобна "двойна" грешка – привидно валиден израз, но невалидна функция и невалиден аргумент. Това е недефинирано в условието поведение и затова няма да го тестваме. Направете го както искате.
Трябва да сте влезли в системата, за да може да отговаряте на теми.