Regras
Não há referências de intervalo de células (
A2:B3
).Máximo de 9 linhas e 9 colunas.
Sem referências circulares ou erros de fórmula.
As células vazias são avaliadas como
0
.Os dados são apenas números, mas podem ser tomados como cadeias.
Fórmulas são seqüências de caracteres.
Opções de implementação
Você deve declarar suas escolhas nestes assuntos:
Exija que as fórmulas sejam prefixadas com qualquer caractere único, por exemplo
=
- ou não.A célula mais à esquerda da segunda linha é
A2
ouR2C1
, conforme as duas convenções usadas por Excel et al.Exija qualquer pré ou sufixo de um caractere nas referências de célula, por exemplo
$
- ou não.Um de cadeia nula, vazia, lista vazia etc., (mas não
0
) para representar células vazias.Idioma do seu envio (não é permitido o gerenciamento de planilhas).
Idioma para as fórmulas (pode ser diferente do acima). *
Brownie pontos ou cookies para explicar sua solução.
Exemplos
Escolhas: 7 =
:; 8 A2
:; 9: nenhum; 10 ""
:; 12: linguagem de fórmula do Excel
Dentro:
[[ 2, 3],
["=A1+B1",""]]
Fora:
[[2,3],
[5,0]]
Dentro:
[[ 2,"=A1+B2"],
["=A1+B1", ""]]
Fora:
[[2,2],
[4,0]]
Dentro:
[[ 3, 4,"=A1*B1"],
[ 2, 5,"=A2*B2"],
["","","=C1+C2"]]
Fora:
[[3,4,12],
[2,5,10],
[0,0,22]]
Dentro:
[["","=2*B2*B3" ,""],
[ 3,"=A1+(A2+C2)/2", 2],
[ 1,"=C1+(A3+C3)/2", 5]]
Fora:
[[0,15, 0],
[3, 2.5,2],
[1, 3 ,5]]
* O idioma da fórmula deve ser admissível para PPCG , mas você só precisa oferecer suporte a referências de célula, além dos critérios 3 e 4, wiz. determinação de adição e primidez.
Expand array to cells, evaluate.
R0C0
?Respostas:
JavaScript,
125112105 bytesPara usar, adicione
f=
no início e chame likef(argument)
.Escolhas:
=
.A2
.""
(String vazia) para indicar a célula vazia.Explicação:
Esta solução itera sobre todas as células da planilha (cada elemento das sub-matrizes da matriz especificada) e se String não-vazia for encontrada, substitui as referências de célula pelas referências correspondentes em termos da matriz especificada e avalia a expressão com
eval()
(sim, aquela coisa má que assombra você em seus pesadelos ). Esta solução pressupõe que as constantes fornecidas na matriz de entrada sejam do tipo Inteiro.Casos de teste
fonte
/\w\d/g
para o seu regex?\w
combina dígitos e\d
0 também, as duas coisas que você não deseja neste caso./[A-I][1-9]/g
deve funcionar embora/\w\d/g
produz exatamente os mesmos resultados nos casos de teste. Também o uso de um literal de modelo na parte eval poderia economizar um punhado de bytes.PHP,
265 263 259 258 257 240 224 222 213 202196 bytesapresentando
array_walk_recursive
, uma função anônima recursiva epreg_replace_callback
:ou
opera na entrada: chamada por referência. Teste online .
R2C1
, sem prefixorepartição (primeira versão)
fonte
max(range(A1,A3))
possa ser confuso. : D$d=$c;preg_match($x="#[A-Z](.)#",$c=$c[0]
parapreg_match($x="#[A-Z](.)#",$c=($d=$c)[0]
economizar 1 byte.Mathematica,
11911595 bytesEscolhas:
R2C1
estilo.""
para células vazias.RxCy
e não têm efeitos colaterais devem funcionar.Explicação
Começamos substituindo todas as cadeias vazias na entrada (
#
) por zeros e armazenando o resultadom
, porque precisaremos disso novamente em outro local.Substitua repetidamente qualquer sequência restante
s
pelas seguintes ...Combina qualquer substrings da forma
RxCy
ems
e substituí-los com ...O que fornece
m[[x,y]]
, o que usax
ey
como índices na matrizm
.Por fim, avalie essa sequência como uma expressão do Mathematica.
fonte
Clojure,
263281 bytesOh, caramba, sem que
apply map vector
o resultado esteja em transposição, comoA2
é alfabeticamente antesB1
.Exemplos:
A2
(+ A1 A2)
está bemnil
efalse
funcionam como células vazias, mas a cadeia vazia nãoUm exemplo de primeira macro de encadeamento:
O valor inicial de
C
no loop é um mapa de hash, chaves são nomes de células e valores são valores originais. Então todas as referências de células são substituídas pelo conteúdo das células referenciadas até convergirmos (P
revious =C
urrent), depois as células são avaliadas e a estrutura plana é particionada novamente em uma lista aninhada.Seria legal encontrar uma solução onde
A1
,A2
etc. , são realmente funções que(* 2 B2 B3)
podem ser chamadas e, em seguida, poderiam ser reescritas(* 2 (B2) (B3))
e executadas.Experimente online!
fonte
APL (Dyalog) , 51 bytes
Nenhum
A2
Nenhum
String vazia
APL
APL
Experimente online!
⍎¨
Avalie cada célula do resultado de(
…)⍣≡
Aplicação contínua das duas funções a seguir até que nada mais mude{
primeira função anônima a ser aplicada…0
em qualquer::
erro:⍵
retorne o argumento não modificado⋄
agora tente;⍵
se a≢
contagem do argumento :×
for positiva,:
então:⍕
stringify⍎
o argumento⍕
stringified avaliado⍵
⋄
outro;0
retornar zero}¨
… Para cada célula{
segunda função anônima a ser aplicada…'←',¨
Anexar uma seta de atribuição a cada célula do⍵
argumento(
…),¨
Acrescente o seguinte a cada célula dessa1↓
largue o primeiro da⎕D
cadeia de todos os D igits (ou seja, zero)⎕A
Com todas as letras do A lphabet indo para baixo,∘.,
faça uma tabela de concatenação (com os dígitos restantes indo para a direita)⍉
transpor (para diminuir números crescentes, letras progressivas corretas)(
…)↑
Pegue a submatriz superior esquerda com o tamanho de…⍴
o tamanho do⍵
argumento}
… Para o resultado da função anterior.fonte
Python 2
273,265,263, 259 bytesExperimente online!
Escolhas:
=
A2
Nenhum
""
Python 2.7
Expressões Python
Explicação básica:
Para todas as fórmulas da sub-lista, substitua-a pela lista correspondente (ou seja, para o índice B1 s [0] [1]) e avalie o resultado!
fonte
s=[[ 3, 4,"max(A1,B1)"],[ 2, 5,"A2**B2"],[ "", "","C1+C2"]]
[[ 3, 4,"=max(A1,B1)"],[ 2, 5,"=A2**B2"],[ "", "","=C1+C2"]]
Isso existe como parte dos cabeçalhos! Confira no link Experimente!