Reglas
No hay referencias de rango de celdas (
A2:B3
).Máximo 9 filas y 9 columnas.
No hay referencias circulares ni errores de fórmula.
Las celdas vacías evalúan a
0
.Los datos son solo números, pero pueden tomarse como cadenas.
Las fórmulas son cadenas.
Opciones de implementación
Debe indicar sus elecciones en estos asuntos:
Exigir que las fórmulas tengan como prefijo cualquier carácter individual, por ejemplo
=
, o no.La celda más a la izquierda de la segunda fila es
A2
oR2C1
, según las dos convenciones utilizadas por Excel et al.Requerir cualquier prefijo o sufijo de un solo carácter en las referencias de celda, por ejemplo
$
, o no.Uno de nulo, cadena vacía, lista vacía, etc., (pero no
0
) para representar celdas vacías.Idioma de su envío (los administradores de hojas de cálculo no están permitidos).
Idioma para las fórmulas (puede diferir de lo anterior). *
Brownie puntos o cookies para explicar su solución.
Ejemplos
Opciones: 7 =
:; 8 A2
:; 9: ninguno; 10 ""
:; 12: lenguaje de fórmulas de Excel
En:
[[ 2, 3],
["=A1+B1",""]]
Fuera:
[[2,3],
[5,0]]
En:
[[ 2,"=A1+B2"],
["=A1+B1", ""]]
Fuera:
[[2,2],
[4,0]]
En:
[[ 3, 4,"=A1*B1"],
[ 2, 5,"=A2*B2"],
["","","=C1+C2"]]
Fuera:
[[3,4,12],
[2,5,10],
[0,0,22]]
En:
[["","=2*B2*B3" ,""],
[ 3,"=A1+(A2+C2)/2", 2],
[ 1,"=C1+(A3+C3)/2", 5]]
Fuera:
[[0,15, 0],
[3, 2.5,2],
[1, 3 ,5]]
* El lenguaje de la fórmula debe ser PPCG admisible , pero solo debe admitir referencias de celda más los criterios 3 y 4 allí, por ejemplo. Además y determinación de primacía.
Expand array to cells, evaluate.
R0C0
?Respuestas:
JavaScript
125112105 bytesPara usar, agregue
f=
al principio e invoque comof(argument)
.Opciones:
=
.A2
.""
(Cadena vacía) para denotar la celda vacía.Explicación:
Esta solución itera sobre todas las celdas de la hoja de trabajo (cada elemento de las sub-matrices de la matriz dada) y si se encuentra una Cadena no vacía, reemplaza sus referencias de celda con las referencias correspondientes en términos de la matriz dada y evalúa la expresión con
eval()
(sí, esa cosa malvada que te persigue en tus pesadillas ). Esta solución supone que las constantes proporcionadas en la matriz de entrada son de tipo entero.Casos de prueba
fuente
/\w\d/g
para tu expresión regular?\w
coincide con los dígitos y\d
también con 0, ambas cosas que no quieres en este caso./[A-I][1-9]/g
aunque debería funcionar/\w\d/g
produce exactamente los mismos resultados en los casos de prueba. Además, usar un literal de plantilla en la porción eval podría ahorrar un puñado de bytes.PHP,
265 263 259 258 257 240 224 222 213 202196 bytespresentando
array_walk_recursive
, una función anónima recursiva ypreg_replace_callback
:o
opera en entrada: llamada por referencia. Pruébelo en línea .
R2C1
, sin prefijodesglose (primera versión)
fuente
max(range(A1,A3))
puede ser confuso. : D$d=$c;preg_match($x="#[A-Z](.)#",$c=$c[0]
apreg_match($x="#[A-Z](.)#",$c=($d=$c)[0]
debe guardar 1 byte.Mathematica,
11911595 bytesOpciones:
R2C1
estilo.""
para celdas vacías.RxCy
y no tienen efectos secundarios deberían funcionar.Explicación
Comenzamos reemplazando todas las cadenas vacías en la entrada (
#
) con ceros y almacenando el resultadom
, porque lo necesitaremos nuevamente en otro lugar.Reemplace repetidamente cualquier cadena restante
s
con lo siguiente ...Coincide cualquier subcadenas de la forma
RxCy
ens
y reemplazarlos con ...Que da
m[[x,y]]
, que usax
yy
como índices en la matrizm
.Finallz, evalúa esta cadena como una expresión de Mathematica.
fuente
Clojure,
263281 bytesOh, maldita sea, sin eso,
apply map vector
el resultado está en transposición, comoA2
está alfabéticamente antesB1
.Ejemplos:
A2
(+ A1 A2)
esta biennil
yfalse
funcionan como celdas vacías, pero la cadena vacía noUn ejemplo de hilo primera macro:
El valor inicial de
C
en el bucle es un mapa hash, las claves son nombres de celda y los valores son valores originales. Luego, todas las referencias de celda se reemplazan por el contenido de las celdas referenciadas hasta que hayamos convergido (P
revious =C
urrent), luego se evalúan las celdas y la estructura plana se divide nuevamente en una lista anidada.Sería genial encontrar una solución donde
A1
,A2
etc., en realidad son funciones invocables, que luego(* 2 B2 B3)
podrían reescribirse(* 2 (B2) (B3))
y ejecutarse.Pruébalo en línea!
fuente
APL (Dyalog) , 51 bytes
Ninguna
A2
Ninguna
Cuerda vacía
APL
APL
Pruébalo en línea!
⍎¨
Evaluar cada celda del resultado de(
...)⍣≡
aplicación continua de las siguientes dos funciones hasta que nada más cambie{
primera función anónima que se aplicará ...0
en cualquier::
error:⍵
devuelve el argumento sin modificar⋄
ahora intenta;⍵
si el≢
conteo del argumento :×
es positivo,:
entonces:⍕
stringify⍎
el argumento⍕
stringified evaluado⍵
⋄
más;0
devolver cero}¨
... a cada celda{
segunda función anónima que se aplicará ...'←',¨
anteponer una flecha de asignación a cada celda del⍵
argumento(
...),¨
anteponga lo siguiente a cada celda de ese1↓
suelte el primero de⎕D
la cadena de todos los D igits (es decir, cero)⎕A
Con todas las letras del alfabeto A bajando,∘.,
haga una tabla de concatenación (con los dígitos restantes a la derecha)⍉
transposición (para obtener números cada vez mayores, letras progresivas correctas)(
...)↑
tome la submatriz superior izquierda con el tamaño de ...⍴
el tamaño del⍵
argumento}
... al resultado de la función anterior.fuente
Python 2
273,265,263, 259 bytesPruébalo en línea!
Opciones:
=
A2
ninguna
""
Python 2.7
Expresiones de Python
Explicación básica:
Para cada fórmula en la sublista, sustitúyala con el índice de la lista correspondiente (es decir, para B1 s [0] [1]) y evalúe el resultado.
fuente
s=[[ 3, 4,"max(A1,B1)"],[ 2, 5,"A2**B2"],[ "", "","C1+C2"]]
[[ 3, 4,"=max(A1,B1)"],[ 2, 5,"=A2**B2"],[ "", "","=C1+C2"]]
Eso está ahí como parte de los encabezados! ¡Compruébalo en el enlace de prueba en línea!