Советы по игре в гольф в Ниме


11

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

Пожалуйста, оставьте один совет за ответ.

Ответы:


7

Гибкий синтаксис звонка

Nim довольно гибок, когда дело доходит до синтаксиса вызова функций. Например, вот несколько способов вызвать функцию с одним аргументом:

ord(c)
ord c
c.ord

И способы вызова функции с двумя аргументами:

max(a,b)
a.max(b)
a.max b

Выберите самую лучшую версию, которая подходит именно для вашей ситуации, особенно в отношении приоритета. Например, сравните:

abs(n)+2
n.abs+2
(abs n)+2

В отличие от:

abs(n+2)
(n+2).abs
abs n+2

Обратите внимание, что max a,bдаже работает (иногда).
Медь

7

Используйте futureмодуль

futureМодуль содержит два основных байтовые функции экономии: лямбды и списковых. Лямбды чрезвычайно полезны.

Например, это:

proc f(s:any):any=s&", world!"

можно сократить до этого:

import future
s=>s&", world!"

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

import future
proc test(f: string -> string) = echo f "Hello"
test(s=>s&", world!")

Кроме того, списки могут быть использованы с futureмодулем. Например, этот код печатает seq ( @[...]) всех квадратов, меньших 100, делимых на 4:

import future
echo lc[x*x|(x<-1..9,x*x mod 4==0),int]

Для более справедливого сравнения следует отметить, что иногда вы можете использовать anyвместо string(я предполагаю, что вы выбрали самое длинное имя типа), но это все равно сохраняет независимо.
Sp3000

@ Sp3000 Я не знал, что вы могли бы использовать any, спасибо за совет! Вы должны опубликовать это как ответ.
Медь

Для еще лучшего сравнения, вы можете сделать proc(s:any):any=s&", world!", отбросив <space>fанонимныйproc
Sp3000

6

Неподписанные операторы

При работе с неотрицательными целыми числами иногда лучше использовать беззнаковые операторы. В частности, если возможно, используйте /%и %%вместо divи mod.

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