Поради щодо гольфу в Хаксе


12

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

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

Haxe можна запустити онлайн тут !


У минулому я мало використовував Haxe, але, оскільки я почав займатися гольфом, я не дуже його використовував. Мені доведеться спробувати використовувати його для гольфу ...
ETHproductions

@ETHproductions Те саме тут. Сьогодні я два рази з ним полював, і це було весело. У нього є кілька хороших можливостей для гольфу (наприклад) з його списком та ітераторами, тому я вирішив відкрити питання, щоб побачити, чи є у кого поради.
Yytsi

Відповіді:


8

Строкова інтерполяція

Haxe підтримує рядкову інтерполяцію на рядках з однією цитатою. Як і рядки шаблону в JavaScript ES6, ви можете включати вираз у рядок із ${...}:

trace('2 + 2 = ${2 + 2}');

Однак, на відміну від ES6, ви можете опустити фігурні дужки, коли вираз є єдиною змінною:

var x = 2 + 2;
trace('2 + 2 = $x');

Обидва ці приклади друкуються 2 + 2 = 4.


7

Масив розуміння

Haxe підтримує розуміння масиву:

trace([for (i in 0...5) i]); // Prints 0,1,2,3,4

На відміну від багатьох інших мов, ви також можете використовувати whileв розуміннях:

var i = 5;
trace([while (i > 0) i--]); // Prints 5,4,3,2,1

Це може бути дуже корисно, коли ви не знаєте, який довгий масив вам потрібен.

Ви можете також ланцюг for, whileі ifзаяву:

trace([for (x in ['A','B','C','D'])
       for (y in ['x','y'])
       if (x + y != "Cx")
       x + y
]); // Prints Ax,Ay,Bx,By,Cy,Dx,Dy

Ого. Я видалю свою відповідь. Я буквально будував ту саму відповідь, лише на хвилину запізнюючись. Крім того, ви можете зауважити, що він фактично друкує квадратні дужки навколо списків, тому читачі не будуть плутати, оскільки для деяких викликів потрібні суворі формати виводу.
Yytsi

@TuukkaX Ха-ха, це трапляється іноді :) Я включу сюди один із ваших прикладів, якщо ви не заперечуєте. Також try.haxe.org не видає квадратні дужки ...
ETHproductions

Той, що розраховує декартовий продукт, є акуратним. Я думаю, що це буде гарним доповненням до вашого допису :)
Yytsi

6

Оператор дальності

У Haxe є оператор діапазону, ...який можна використовувати для створення діапазонів цілих чисел. Наприклад, замість цього:

var i = 0;
while (i < 10) trace(i++);

Ви можете зробити це:

for (i in 0...10) trace(i++);

Особливості для x...y:

  • xі yобидва повинні бути Інтами.
  • xне може бути більшим за y.
  • Це повертає об’єкт IntIterator , який можна використовувати в тих же місцях, що і будь-який Iterable.

1

Запуск запуску заяви умовно

Очевидно, що ви можете запустити що завгодно умовно if:

if(n>5)doSomething(n);

Якщо ж у вас є лише одне твердження, як зазначено вище, ви можете використовувати потрійний умовний оператор, щоб зберегти байт:

n>5?doSomething(n):0;

Іноді ви можете зберегти інший байт, використовуючи &&, хоча це дуже рідко, оскільки &&працює лише в тому випадку, якщо обидва вирази повертають булеві:

n>5&&doSomething(n);

Одним з головного виключення це ключові слова : якщо Haxe працює в return, breakабо continue де - небудь , він буде відразу ж запустити його і кинути все , що вираз було працювати. Це означає, що замість цього:

if(n>5)return n;

Ви можете зробити це, щоб зберегти 2 байти:

n>5&&return n;

1

Використовуйте ключові слова у виразах

Ще одна незвична особливість Хаксе полягає в тому, що все - це вираз . Наприклад, цей код цілком дійсний:

function(n){while(n>0)n%4==1?return 6:n--;return 3;}

Гаразд, це досить марний приклад, але, сподіваюся, ви зрозумієте мою думку. Це працює з більшістю ключових слів:

function(n){while(n>0)n%4==1?break:n--;return n;}

Це дозволяє використовувати if/ elseвбудований, як p=if(n>1)7else 4;, хоча, звичайно p=n>1?7:4;, коротший.

Ключові слова, які ви не можете використовувати вбудовані

  • var - Компілятор поскаржиться на спробу використання Void як значення.
  • for/ while- Те саме, що вище, хоча ви можете використовувати їх у розумінні масиву .

1

Опустіть функціональні дужки

На відміну від більшості мов, все в Хаксе - це вираз , в тому числі {blocks}. Таким чином, фігурні дужки будь-де в програмі Haxe (за винятком switchвиразів) можна залишити, якщо вони містять лише одне твердження. Тож замість цього:

function f(n){return Math.pow(3,n);}

Ви можете зробити це:

function f(n)return Math.pow(3,n);

Прості два байти, збережені на багатьох функціях.

Навіть якщо функція повинна містити кілька операторів, ви можете часто зберігати байт, переміщуючи return зовнішній блок:

function f(a){var b=a*a;return a<0?-b:b;}
function f(a)return{var b=a*a;a<0?-b:b;}

Це працює, тому що блок оцінюється до останнього виразу всередині блоку.


Edit: якщо вам потрібен куб числа, то краще використовувати n*n*n, або що то ж саме n*n*n*nдля Тессеракт ряду, і т.д ... Тим НЕ менше, Math.powє гарним прикладом тут.
Yytsi

@TuukkaX Хе, спасибі Я буду використовувати Math.pow(3,n)замість цього ;-)
ETHproductions
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.