Поради щодо гольфу в Нім


11

Які загальні поради щодо гольфу в Німі ? Я шукаю ідеї, які можна застосувати до проблем із гольф-кодом і які також принаймні дещо характерні для Німа (наприклад, "видалити коментарі" - це не відповідь).

Будь ласка, опублікуйте одну пораду на відповідь.

Відповіді:


7

Гнучкий синтаксис виклику

Нім є досить гнучким, коли мова йде про синтаксис виклику функцій. Наприклад, ось кілька способів викликати функцію одним аргументом:

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.