Советы по игре в гольф в Excel?


20

Странно, что я этого не видел, так как Excel кажется правильным языком для игры в код (несмотря на то, что его «компилятор» не бесплатный).

Excel является своего рода символом в гольфе, он хорошо справляется с задачами средней сложности, а иногда и с более простыми задачами. Чаще всего Excel хорошо справляется с задачами, связанными с манипуляциями со строками и смешанными числами.

Какие общие советы у вас есть для игры в гольф в Excel? Я ищу идеи, которые могут быть применены к проблемам с гольф-кодом в целом, которые, по крайней мере, несколько специфичны для Excel (НЕ VBA). Пожалуйста, один совет за ответ.


4
очевидно, клеточные автоматы не то, что связано с Excel ... :(

Мне было интересно, если это действительно для создания UDF с VBA?
Даниэлтакеши

1
@danieltakeshi - нет; ну, не как ответ Excel - если вы вместо этого используете Excel VBA, а затем вызываете его из непосредственного окна, активной таблицы или подпрограммы, которую он обычно считает действительным
Тейлор Скотт

Ответы:


11

Сокращенная ссылка:

Если ваша программа должна принимать несколько входов, вы можете захотеть собрать их все сразу. Чтобы прочитать несколько ячеек как массив, можно сделать, например, такой:

Пример:
=len(A1)+Len(B1)+LEN(C1)
может быть
=SUM(LEN(A1:C1))

=SUM(LEN(A1:C1 A2:C2 A3:C3))
может быть
=SUM(LEN(A1:C3))

=SUM(LEN(A1:A1024))
может быть
=SUM(LEN(A:A))

=SUM(LEN(A:A B:B C:C))
может быть
=SUM(LEN(A:C))


1
Я знаю, что это не очень хороший совет, но он достаточно конкретен, чтобы превзойти его, и я подумал, что его стоит включить.

9

Сокращенная стенография:

CONCATENATEФункция может быть заменена на &символ 100% от времени, так долго , как первый аргумент является строкой, или клетку.

пример:
=CONCATENATE(A1,B1)
можно сократить до
=A1&B1


9

Векторизация с массивами

Всякий раз, когда функция принимает массив в качестве аргумента вместо одиночного, эта функция также выводит массив с результирующим значением в соответствующие значения.

Пример:
=LEN(A1)+LEN(B2)+LEN(C3)
можно заменить на
=SUM(LEN({A1,B2,C3}))


1
Этот процесс обычно называют «векторизацией», если моя память хорошо мне служит.
Конор О'Брайен,

@ ConorO'Brien Спасибо! Я изменил свой ответ!

2

Преобразование числа в текст:

Это очень простой совет, но, тем не менее, он может быть полезен для некоторых ...

  • Если вам нужно преобразовать число в текст из формулы, используйте оператор конкатенации, чтобы объединить две части числа в виде строки (то есть 1&23).
  • Если вам нужно преобразовать число в текст для использования по ссылке на ячейку (т. Е. A1), Измените числовой формат ячейки на текст, чтобы исключить необходимость в дополнительных байтах.
  • См. Таблицу ниже для сравнения числовых методов.

Краткая справочная таблица:

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

Векторизация массивов клеток:

Подсказка Векторизация с массивами Показывает, как можно выполнить функцию с массивом, используя специальное форматирование в массиве. С ячейками можно сделать то же самое, и в конечном итоге вы сэкономите много-много байтов. Скажем, у вас есть следующий лист:

пример листа

И мы хотим найти самый высокий срок хранения фруктов.

Без векторизации можно использовать две формулы следующим образом: введите описание изображения здесь

И это дает правильный ответ, но оценка для этого гольфа является нетрадиционной, и, вероятно, не будет принята так широко. Вдобавок ко всему, здесь используется функция перетаскивания (Ew), которая дает запутанный ответ.

Вместо этого мы можем поместить функцию в столбец D прямо по формуле в E2. Для этого вы заменяете (в данном случае B2 и C2) свои переменные массивами для диапазона, который вы хотите проверить. Таким образом, ваша формула становится:
введите описание изображения здесь

Это сэкономит вам несколько байтов, а также сделает вашу запись правильно оцененной.



0

ISBLANK () Сокращение:

Вместо использования =ISBLANK(A1)используйте =A1=0для определения, является ли ячейка (то есть A1) пустой.

Примечание: этот ярлык не будет работать, если ячейка A1 содержит 0 . В этом случае вам нужно будет использовать =A1="" .


0

Сократить названия листов

Если переименовать Sheet2в Sтогда ссылки на Sheet2!a0стать S!a0.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.