Suggerimenti per giocare a golf in Excel?


20

È strano che non l'abbia visto, poiché Excel sembra essere un linguaggio valido per il golf del codice (nonostante il suo "compilatore" non sia gratuito).

Excel è in qualche modo un jolly nel golf, essendo bravo nelle sfide del golf di media complessità e talvolta anche nelle sfide più semplici. Più spesso, Excel è bravo nelle sfide con la manipolazione di stringhe e la manipolazione mista di numeri di stringa.

Quali consigli generali hai per giocare a golf in Excel? Sto cercando idee che possano essere applicate ai problemi del codice golf in generale che siano almeno in qualche modo specifiche per Excel (NON VBA). Per favore, un consiglio per risposta.


4
apparentemente cellular-automi non è qualcosa che è correlato a Excel ... :(

Mi chiedevo se fosse valido creare un UDF con VBA?
danieltakeshi,

1
@danieltakeshi - no; beh, non come una risposta di Excel - se invece usi Excel VBA e poi lo chiami dalla finestra immediata, dal foglio attivo o da una subroutine, che generalmente considerava valida
Taylor Scott

Risposte:


11

Stenografia di riferimento:

Se il tuo programma è tenuto a ricevere più input, potresti essere in grado di raccoglierli tutti in una volta. per leggere più celle come un array, si potrebbe fare come nell'esempio:

Esempio:
=len(A1)+Len(B1)+LEN(C1)
potrebbe essere
=SUM(LEN(A1:C1))

=SUM(LEN(A1:C1 A2:C2 A3:C3))
potrebbe essere
=SUM(LEN(A1:C3))

=SUM(LEN(A1:A1024))
potrebbe essere
=SUM(LEN(A:A))

=SUM(LEN(A:A B:B C:C))
potrebbe essere
=SUM(LEN(A:C))


1
So che questo non è un ottimo suggerimento, ma è abbastanza specifico da eccellere e ho pensato che dovesse essere incluso.

9

Stenografia concatenata:

La CONCATENATEfunzione può essere sostituita con il &simbolo il 100% delle volte, purché il primo argomento sia una stringa o cella.

esempio:
=CONCATENATE(A1,B1)
potrebbe essere abbreviato in
=A1&B1


9

Vettorializzazione con array

Ogni volta che una funzione accetta un array come argomento anziché un singleton, tale funzione genererà anche un array con il valore del risultato nelle corrispondenti indecie.

Esempio:
=LEN(A1)+LEN(B2)+LEN(C3)
potrebbe essere sostituito con
=SUM(LEN({A1,B2,C3}))


1
Questo processo di solito è chiamato "vettorializzazione" se la mia memoria mi serve bene.
Conor O'Brien,

@ConorO'Brien Grazie! Ho cambiato la mia risposta!

2

Conversione di un numero in testo:

Questo è un suggerimento molto semplice, ma può essere utile per alcuni ...

  • Se è necessario convertire un numero in testo dall'interno di una formula, utilizzare l'operatore di concatenazione per unire due parti del numero come stringa (ad es 1&23.).
  • Se è necessario convertire un numero in testo da utilizzare come riferimento di cella (ad es. A1), Modificare il Formato numerico della cella in Testo per eliminare la necessità di byte aggiuntivi.
  • Vedere la tabella seguente per un confronto tra i metodi da numero a testo.

Grafico di riferimento rapido:

+-------------------------------------------------------------------------------------+
|   | 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

Vettorizzazione di matrici di cellule:

Il suggerimento Vettorializzazione con array Mostra come è possibile eseguire il golf di una funzione con un array utilizzando una formattazione specifica all'interno dell'array. È possibile fare la stessa cosa con le celle e nel lungo periodo ti farà risparmiare molti byte. Supponi di avere il seguente foglio:

foglio di esempio

E vogliamo trovare la durata di conservazione più alta di un frutto.

Senza Vectorization, si potrebbero usare le due formule in questo modo: inserisci qui la descrizione dell'immagine

E questo dà una risposta corretta, ma il punteggio per questo golf è non convenzionale e probabilmente non sarà accettato così ampiamente. Inoltre, utilizza una funzione di trascinamento (Ew), che crea una risposta confusa.

Invece, possiamo posizionare la funzione nella colonna D direttamente con la formula in E2. Per fare ciò, sostituisci (in questo caso B2 e C2) le tue variabili con array per l'intervallo che vuoi testare. Pertanto, la tua formula diventa:
inserisci qui la descrizione dell'immagine

Ciò consente di risparmiare qualche byte, oltre a rendere la voce in grado di classificare correttamente.


1

Stenografia booleana:

Invece di utilizzare le funzioni =TRUE()e =FALSE(), utilizzare =1=1e =1=2.


0

ISBLANK () Stenografia:

Invece di usare =ISBLANK(A1), usa =A1=0per determinare se una cella (cioè A1) è vuota.

Nota: questo collegamento non funzionerà se la cella A1 contiene 0 . In tal caso, dovrai utilizzare =A1="" .


0

Abbreviare i nomi dei fogli

Se si rinomina Sheet2per Spoi riferimenti per Sheet2!a0diventare S!a0.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.