Consejos para jugar al golf en Excel?


20

Es extraño que no haya visto esto, ya que Excel parece ser un lenguaje válido para el golf de código (a pesar de que su "compilador" no es gratuito).

Excel es algo así como un comodín en el golf, es bueno para los desafíos de golf de complejidad media y, a veces, también para los desafíos más simples. La mayoría de las veces, Excel es bueno en los desafíos con la manipulación de cadenas y la manipulación mixta de números de cadena.

¿Qué consejos generales tienes para jugar al golf en Excel? Estoy buscando ideas que se puedan aplicar a los problemas de código de golf en general que sean al menos algo específicos para Excel (NO VBA). Por favor, un consejo por respuesta.


44
Aparentemente, el autómata celular no es algo relacionado con Excel ... :(

Me preguntaba si es válido crear un UDF con VBA?
danieltakeshi

1
@danieltakeshi - no; bueno, no como una respuesta de Excel: si en su lugar usa Excel VBA y luego lo llama desde la ventana inmediata, la hoja activa o una subrutina, que generalmente se considera válida
Taylor Scott el

Respuestas:


11

Taquigrafía de referencia:

Si se requiere que su programa tome múltiples entradas, es posible que pueda recogerlas todas a la vez. para leer varias celdas como una matriz, se podría hacer como en el ejemplo:

Ejemplo:
=len(A1)+Len(B1)+LEN(C1)
podría ser
=SUM(LEN(A1:C1))

=SUM(LEN(A1:C1 A2:C2 A3:C3))
podría ser
=SUM(LEN(A1:C3))

=SUM(LEN(A1:A1024))
podría ser
=SUM(LEN(A:A))

=SUM(LEN(A:A B:B C:C))
podría ser
=SUM(LEN(A:C))


1
Sé que este no es un gran consejo, pero es lo suficientemente específico para sobresalir que pensé que debería incluirse.

9

Taquigrafía concatenada:

La CONCATENATEfunción se puede reemplazar con el &símbolo el 100% del tiempo, siempre que el primer argumento sea una cadena o celda.

ejemplo:
=CONCATENATE(A1,B1)
podría acortarse a
=A1&B1


9

Vectorización con matrices

Siempre que una función tome una matriz como argumento en lugar de un singleton, esa función también generará una matriz con el valor del resultado en las indencias correspondientes.

Ejemplo:
=LEN(A1)+LEN(B2)+LEN(C3)
podría ser reemplazado con
=SUM(LEN({A1,B2,C3}))


1
Este proceso generalmente se llama "vectorización" si mi memoria me sirve bien.
Conor O'Brien

@ ConorO'Brien Gracias! ¡Cambié mi respuesta!

2

Convertir un número a texto:

Este es un consejo muy simple, pero puede ser útil para algunos de todos modos ...

  • Si necesita convertir un número a texto desde una fórmula, use el operador de concatenación para unir dos partes del número como una cadena (es decir 1&23).
  • Si necesita convertir un número a texto para usarlo como referencia de celda (es decir A1), cambie el Formato de número de la celda a Texto para eliminar la necesidad de bytes adicionales.
  • Consulte el cuadro a continuación para ver una comparación de los métodos de número a texto.

Tabla de referencia rápida:

+-------------------------------------------------------------------------------------+
|   | A               | B        | C         | D                | E                   |
|-------------------------------------------------------------------------------------|
| 1 | Formula         | Bytes    | Result    | ISTEXT(cell)¹    | ISTEXT(formula)²    |
|-------------------------------------------------------------------------------------|
| 2 | =TEXT(123,0)    | 12       | 123       | TRUE             | TRUE                |
| 3 | ="123"          | 6        | 123       | TRUE             | TRUE                |
| 4 | =1&23           | 5        | 123       | TRUE             | TRUE                |
| 5 | '123            | 4        | 123       | TRUE             | NOT VALID           |
| 6 | 123             | 3        | 123       | TRUE             | FALSE               |
| 7 | 123             | 3        | 123       | FALSE            | FALSE               |
+-------------------------------------------------------------------------------------+

Note: The result for cell C6 has been formatted as text, whereas the result for C7 has not.

¹ Denotes =ISTEXT(C2), =ISTEXT(C3), =ISTEXT(C4), etc.
² Denotes =ISTEXT(TEXT(123,0)), =ISTEXT("123"), =ISTEXT(1&23), etc.

1

Vectorización de matrices de células:

La sugerencia Vectorización con matrices Muestra cómo puede reducir una función con una matriz utilizando un formato específico dentro de la matriz. Es posible hacer lo mismo con las celdas, y le ahorrará muchos bytes a largo plazo. Digamos que tiene la siguiente hoja:

hoja de ejemplo

Y queremos encontrar la vida útil más alta de una fruta.

Sin Vectorización, uno podría usar las dos fórmulas así: ingrese la descripción de la imagen aquí

Y esto da una respuesta correcta, pero el puntaje para este golf no es convencional, y probablemente no será aceptado tan ampliamente. Además de eso, esto utiliza una función de arrastre hacia abajo (Ew), lo que hace una respuesta confusa.

En cambio, podemos colocar la función en la columna D directamente con la fórmula en E2. Para hacer esto, reemplaza (en este caso B2 y C2) sus variables con matrices para el rango que desea probar. Por lo tanto, su fórmula se convierte en:
ingrese la descripción de la imagen aquí

Esto le ahorra unos pocos bytes y hace que su entrada se pueda puntuar correctamente.


1

Taquigrafía booleana:

En lugar de usar las funciones =TRUE()y =FALSE(), use =1=1y =1=2.


0

ISBLANK () Abreviatura:

En lugar de usar =ISBLANK(A1), use =A1=0para determinar si una celda (es decir A1) está vacía.

Nota: Este acceso directo no funcionará si la celda A1 contiene 0 . En ese caso, deberá usar =A1="" .


0

Acortar nombres de hoja

Si cambia el nombre Sheet2a las Sreferencias para Sheet2!a0convertirse S!a0.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.