правила
Нет ссылок на диапазон ячеек (
A2:B3
).Максимум 9 строк и 9 столбцов.
Нет циклических ссылок или формул ошибок.
Пустые клетки оценивают до
0
.Данные являются только числами, но могут быть приняты как строки.
Формулы - это строки.
Варианты реализации
Вы должны указать свой выбор в этих вопросах:
Требуется, чтобы в формулах использовался префикс с любым отдельным символом, например,
=
- или нет.Крайняя левая ячейка второй строки -
A2
илиR2C1
, согласно двум соглашениям, используемым Excel et al.Требовать любой односимвольный пре- или суффикс в ссылках на ячейки, например,
$
- или нет.Одно из пустых, пустых строк, пустых списков и т. Д. (Но не
0
) для представления пустых ячеек.Язык представления (менеджеры электронных таблиц не допускаются).
Язык для формул (может отличаться от приведенного выше). *
Брауни указывает или печенье для объяснения вашего решения.
Примеры
Выбор: 7 =
:; 8 A2
:; 9: нет; 10 ""
:; 12: язык формулы Excel
В:
[[ 2, 3],
["=A1+B1",""]]
Вне:
[[2,3],
[5,0]]
В:
[[ 2,"=A1+B2"],
["=A1+B1", ""]]
Вне:
[[2,2],
[4,0]]
В:
[[ 3, 4,"=A1*B1"],
[ 2, 5,"=A2*B2"],
["","","=C1+C2"]]
Вне:
[[3,4,12],
[2,5,10],
[0,0,22]]
В:
[["","=2*B2*B3" ,""],
[ 3,"=A1+(A2+C2)/2", 2],
[ 1,"=C1+(A3+C3)/2", 5]]
Вне:
[[0,15, 0],
[3, 2.5,2],
[1, 3 ,5]]
* Язык формул должен быть допустимым PPCG , но вам нужно только поддерживать ссылки на ячейки плюс критерии 3 и 4, wiz. сложение и определение первичности.
Expand array to cells, evaluate.
R0C0
,?Ответы:
JavaScript,
125112105 байтЧтобы использовать, добавить
f=
в начале и вызвать какf(argument)
.Выбор:
=
.A2
.""
(Пустая строка) для обозначения пустой ячейки.Объяснение:
Это решение перебирает все ячейки рабочего листа (каждый элемент подмассива данного массива) и, если обнаруживается непустая строка, заменяет ссылки на ячейки соответствующими ссылками в терминах данного массива и оценивает выражение с
eval()
(да, той злой вещью, которая преследует тебя в твоих кошмарах ). Это решение предполагает, что константы, предоставленные во входном массиве, имеют тип Integer.Тестовые случаи
источник
/\w\d/g
для своего регулярного выражения?\w
тоже совпадает с цифрами и тоже\d
совпадает с 0, в этом случае вам не нужны./[A-I][1-9]/g
должно работать, хотя/\w\d/g
выдает точно такие же результаты в тестовых случаях. Также использование литерала шаблона в части eval может сэкономить несколько байтов.PHP,
265 263 259 258 257 240 224 222 213 202196 байтпоказ
array_walk_recursive
, рекурсивная анонимная функция иpreg_replace_callback
:или
работает на входе: звонок по ссылке. Проверьте это онлайн .
R2C1
, без префиксаразбивка (первая версия)
источник
max(range(A1,A3))
может быть запутанным. : D$d=$c;preg_match($x="#[A-Z](.)#",$c=$c[0]
чтобыpreg_match($x="#[A-Z](.)#",$c=($d=$c)[0]
сэкономить 1 байт.Mathematica,
11911595 байтовВыбор:
R2C1
стиль.""
для пустых ячеек.RxCy
и не имеют побочных эффектов, должны работать.объяснение
Мы начнем с замены всех пустых строк в input (
#
) нулями и сохранения результата вm
, потому что нам это понадобится снова в другом месте.Повторно замените любую оставшуюся строку
s
следующим ...Содержащий любые подстроки формы
RxCy
вs
и заменить их ...Который дает
m[[x,y]]
, который используетx
иy
как индексы в матрицуm
.Finallz, оцените эту строку как выражение Mathematica.
источник
Clojure,
263281 байтО, черт, без этого
apply map vector
результат в транспонировании, какA2
в алфавитном порядке раньшеB1
.Примеры:
A2
(+ A1 A2)
хорошоnil
иfalse
работают как пустые ячейки, но пустая строка неПример первого макроса потока:
Начальное значение
C
в цикле - это хэш-карта, ключи - это имена ячеек, а значения - это исходные значения. Затем все ссылки на ячейки заменяются содержимым ссылочных ячеек, пока мы неP
сойдемся ( revious =C
urrent), затем ячейки будут оценены, и плоская структура будет разделена обратно во вложенный список.Было бы здорово найти решение, где
A1
иA2
т. Д. Фактически являются вызываемыми функциями, а затем(* 2 B2 B3)
могли бы быть переписаны(* 2 (B2) (B3))
и выполнены.Попробуйте онлайн!
источник
APL (Дьялог) , 51 байт
Никто
A2
Никто
Пустая строка
APL
APL
Попробуйте онлайн!
⍎¨
Оцените каждую ячейку результата от(
…)⍣≡
Непрерывное применение следующих двух функций, пока ничего не изменится{
первая анонимная функция, которая будет применена ...0
при любой::
ошибке:⍵
вернуть аргумент без изменений⋄
сейчас попробуй;⍵
если аргумент≢
подсчитан:×
является положительным,:
то:⍕
зафиксируйте⍎
оцененный⍕
строковый⍵
аргумент⋄
еще;0
вернуть ноль}¨
… В каждую клетку{
вторая анонимная функция для применения ...'←',¨
добавить стрелку присваивания каждой ячейке⍵
аргумента(
...),¨
добавьте следующее к каждой ячейке этого1↓
опускать первый из⎕D
строки всех D igits (т.е. ноль)⎕A
Со все буквы A lphabet спускаясь,∘.,
сделать конкатенации таблицы (а остальные цифры ладятся)⍉
транспонировать (чтобы уменьшить число, правильно двигать буквы)(
...)↑
возьмите верхнюю левую подматрицу с размером ...⍴
размер⍵
аргумента}
… К результату предыдущей функции.источник
Python 2
273 265 263, 259 байтПопробуйте онлайн!
Выбор:
знак равно
A2
никто
«»
Python 2.7
Выражения Python
Основное объяснение:
Для каждой формулы в подсписке замените ее соответствующим индексом списка (то есть для B1 s [0] [1]) и оцените результат!
источник
s=[[ 3, 4,"max(A1,B1)"],[ 2, 5,"A2**B2"],[ "", "","C1+C2"]]
[[ 3, 4,"=max(A1,B1)"],[ 2, 5,"=A2**B2"],[ "", "","=C1+C2"]]
Это как часть заголовков! Проверьте это по ссылке онлайн!