Роздрукувати “N NE E SE S SW W NW”


47

Це здається майже тривіальним, але оскільки після певних зусиль я не зміг перемогти буквальне рішення в J, я подумав, що це може зробити гідний виклик (хоча, щоб бути зрозумілим, це не специфічна проблема для J).

Назва говорить все це. Вам просто потрібно написати програму або функцію (не беручи аргументів), яка повертає або друкує:

N NE E SE S SW W NW

Ви можете використовувати нові рядки замість пробілів.

Функція без аргументів, що повертає масив рядків, таких як

['N', 'NE', 'E', 'SE', 'S', 'SW', 'W', 'NW']

є також прийнятним.

Літери можуть бути великими або малими літерами, але не можуть бути змішаними.


9
Можливо, дозволити їх виводити в будь-якому порядку було б трохи цікавіше
Jo King

3
@JoKing Впевнений, я його видалю. Чесно кажучи, я не очікував, що хтось подасть відповіді, які використовують повне буквальне значення - це не в дусі питання. Як я констатую, це з'явилося тому, що я не зміг перемогти буквальне в J, незважаючи на те, що струна має регулярність і структуру свого роду. Вся справа в тому, щоб використовувати цю закономірність, щоб перемогти буквальну відповідь. Погано на мене, що не явніше. Дозволюючи їм будь-який порядок, це також перемагає, тому я не хочу вносити ці зміни.
Йона

3
@UnrelatedString Найперспективнішою ідеєю, яку я мав, є зазначити, що вказівки відповідають мені, піднятим до повноважень 0, 0.5, 1, 1.5, 2, 2.5, 3, 3.5. На жаль, код J, необхідний для перенесення цих результатів у літери, виявився дорожчим, ніж буквальний.
Йона

1
Ах, розумний! Цікаво, чи відображення може працювати краще для гауссових цілих чисел, 1, 1+i, i, -1+i, -1, -1-i, -i, 1-iтому у вас є одна реальна чи уявна частина на кардинальний напрямок замість двох. Це, мабуть, важче згенерувати, окрім випадків, коли ви не зможете подолати ці повноваження i від 0? Я не знаю, наскільки легко чи важко це було б у J, але це ідея.
Непов’язана струна

3
Видається, що записи також повинні показувати наївну версію "відлуння цієї нитки" їхньою мовою для порівняння, і судячи з того, що це робиться на% скороченому?
Деві Морган

Відповіді:


18

Полотно , 12 байт

>X½+T)AuS{⁹‟

Спробуйте тут!

Рядок, просто стислий.


2
Чи можете ви пояснити, як це працює трохи детальніше?
Ділланм

2
@Dillanm не багато чого сказати - Canvas має вбудований компресор (повинен бути доступний за допомогою ctrl + o → string сжаття), який тут просто зберігає потрібні символи ( "NESW "), а потім у базовій 5 зберігає індивідуума символів.
dzaima

56

баш (24 байти)

за допомогою розширення дужок

echo N {N,,S}E S {S,,N}W

така ж довжина, як і жорстке кодування

echo N NE E SE S SW W NW

однак це стає цікавіше, коли виводиться більше точок компаса

echo N NNE NE ENE E ESE SE SSE S SSW SW WSW W WNW NW NNW

розширення дужки

echo N {{N,,E}N,,{E,,S}S}E S {{S,,W}S,,{W,,N}N}W

в іншому випадку, якщо порядок можна змінити (17 байт), хитрість полягає в тому, що без лапок параметр рядка empi зникає

echo {N,,S}{W,,E}

1
Що цікаво, я не знав, що у вас може бути порожня позиція - це дужка вираз!
недолік

1
@flawr Корисно під час хронування:mount -t proc{,,}
gronostaj

7
Абоcp file{,.bak}
Оліфант

43

Морнінгтон Півмісяць , 4395 3823 байт

Take Northern Line to Bank
Take District Line to Parsons Green
Take District Line to Paddington
Take Bakerloo Line to North Wembley
Take Bakerloo Line to Charing Cross
Take Bakerloo Line to Charing Cross
Take Bakerloo Line to Charing Cross
Take Bakerloo Line to Charing Cross
Take Northern Line to Bank
Take Circle Line to Hammersmith
Take Circle Line to Paddington
Take Circle Line to Hammersmith
Take Circle Line to Barbican
Take Circle Line to Bank
Take Circle Line to Aldgate
Take Circle Line to Embankment
Take Bakerloo Line to Charing Cross
Take Bakerloo Line to Charing Cross
Take Bakerloo Line to Charing Cross
Take Bakerloo Line to Charing Cross
Take Northern Line to Bank
Take Circle Line to Hammersmith
Take Circle Line to Bayswater
Take Circle Line to Hammersmith
Take Circle Line to Baker Street
Take Circle Line to Bank
Take Circle Line to Embankment
Take Northern Line to Stockwell
Take Northern Line to Charing Cross
Take Northern Line to Charing Cross
Take Northern Line to Charing Cross
Take Northern Line to Charing Cross
Take Northern Line to Bank
Take Circle Line to Hammersmith
Take Circle Line to Farringdon
Take Circle Line to Hammersmith
Take Circle Line to Blackfriars
Take Circle Line to Bank
Take Circle Line to Moorgate
Take Northern Line to Waterloo
Take Northern Line to Charing Cross
Take Northern Line to Charing Cross
Take Northern Line to Charing Cross
Take Northern Line to Charing Cross
Take Northern Line to Bank
Take Circle Line to Hammersmith
Take Circle Line to Westminster
Take Circle Line to Hammersmith
Take Circle Line to Tower Hill
Take Circle Line to Bank
Take Circle Line to Edgware Road
Take Circle Line to Liverpool Street
Take Central Line to Mile End
Take District Line to Victoria
Take Victoria Line to Seven Sisters
Take Victoria Line to Victoria
Take Circle Line to Victoria
Take District Line to Mile End
Take District Line to Bank
Take Circle Line to Bank
Take Northern Line to Charing Cross
Take Northern Line to Charing Cross
Take Northern Line to Charing Cross
Take Northern Line to Charing Cross
Take Northern Line to Bank
Take Circle Line to Hammersmith
Take Circle Line to Paddington
Take Circle Line to Paddington
Take Circle Line to Barbican
Take Circle Line to Paddington
Take Circle Line to Paddington
Take Circle Line to Bayswater
Take Circle Line to Paddington
Take Circle Line to Paddington
Take Circle Line to Hammersmith
Take Circle Line to Paddington
Take Circle Line to Paddington
Take Circle Line to Baker Street
Take Circle Line to Paddington
Take Circle Line to Paddington
Take Circle Line to Hammersmith
Take Circle Line to Paddington
Take Circle Line to Paddington
Take Circle Line to Farringdon
Take Circle Line to Paddington
Take Circle Line to Paddington
Take Circle Line to Embankment
Take Circle Line to Paddington
Take Circle Line to Paddington
Take Circle Line to Hammersmith
Take Circle Line to Paddington
Take Circle Line to Paddington
Take Circle Line to Blackfriars
Take Circle Line to Paddington
Take Circle Line to Paddington
Take Circle Line to Hammersmith
Take Circle Line to Paddington
Take Circle Line to Paddington
Take Circle Line to Moorgate
Take Circle Line to Paddington
Take Circle Line to Paddington
Take Circle Line to Westminster
Take Circle Line to Paddington
Take Circle Line to Paddington
Take Circle Line to Hammersmith
Take Circle Line to Paddington
Take Circle Line to Paddington
Take Circle Line to Tower Hill
Take Circle Line to Paddington
Take Circle Line to Paddington
Take Circle Line to Hammersmith
Take Circle Line to Paddington
Take Circle Line to Paddington
Take Circle Line to Aldgate
Take Circle Line to Paddington
Take Circle Line to Paddington
Take Circle Line to Edgware Road
Take Circle Line to Paddington
Take Circle Line to Bank
Take Circle Line to Bank
Take Northern Line to Mornington Crescent

Спробуйте в Інтернеті!

Оскільки трохи очікувати, що ви прочитаєте все це, дозвольте мені коротко оглянути мій підхід. Основна ідея полягає в тому, щоб зберігати 3 копії персонажів N, E, S, Wна різних станціях на лінії кола, через банк - Хаммерсміті. Ці символи побудовані від початку назви станції на Charing Cross. Потім побудуйте   з середини добре вибране ім'я станції, використовуючи Mile End і Charing Cross, і зберігайте їх у банку, щоб його можна було зібрати в Hammersmith при конкатенації. Нарешті, з'єднайте персонажів один за одним у Паддінгтоні, копіюючи їх знову через Bank - Hammersmith, якщо їх потрібно буде повторно використовувати пізніше.


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

  1. дістатися до Seven Sisters (через станцію Victoria)
  2. і повернутися до Морнінгтон Півмісяця (через банк).

Усі інші відвідування станції, якщо я не забув, або зберігали / витягували щось корисне, або (частину) з використанням станції.

Що стосується довжин рядків, то я намагався вибрати найкоротші назви в Circle Line, але там може бути незначне поліпшення. Цілком можливо, що зберігання чогось у районі може збрити кілька байтів.


Дві ідеї для гольфу це ще: 1. візьміть "NE", "SW", "NW", "SE" з однієї станції (використовуючи, наприклад, Neasden, iss SwCottage, Acton To wnі Mansion Hou se) 2. Спробуйте використати факт, що Паддінгтон полегшує об'єднання `W`, а не W . Для цього потрібне ще трохи накладних витрат, щоб "оновити" Паддінгтон, тому воно може не отримати нічого.
Дискретна ящірка

4
Чи використовує це правило цикл Долліс-Хілл? Якщо так, я думаю, що це можна покращити за допомогою параболи Argyle Street і, можливо, навіть дещо зміненої версії протоколу Webb-Ellis.
Річард Уорд


24

мозковий ебать , 142 139 131 119 байт

++++++++++[>+++>+++++++>++++++++>+++++++++<<<<-]>>>--.<<++.>>.<-.<.>.<.>>+++++.<.<.>>.<<.>>.>---.<<<.>>>.<<<.>>-----.>.

Спробуйте в Інтернеті!

Просто петлі 10 разів, щоб заповнити комірки 30, 70, 80 і 90, потім кроки назад і вперед, і коригує значення комірок для друку потрібних символів. Не сильно відрізняється від стандарту «Привіт, світ!».


7
Lol Я ніколи не розумів, як хто-небудь може «гольфувати» ці неясні мови. Досить важко зрозуміти, що робить код в першу чергу (це сказано, що йде з C ++ / Java)
mackycheese21

10
@ mackycheese21 що? C ++ не навчив вас любити маніпуляції з вказівниками?
candied_orange

12
brainfuck може бути езотеричним, але я впевнений, що не називаю це незрозумілим
Непов'язаний рядок

3
@candied_orange C ++ навчив мене ненавидіти маніпуляції з вказівниками та тікати, коли хтось згадав std :: :)
mackycheese21

1
@UnrelatedString неясно, ні. Тупий, так.
Багатий




10

Формула Excel, 59 57 байт

У якості формули масиву ( Ctrl+ Shift+ Enter) слід ввести наступне :

=SUBSTITUTE(ADDRESS(1,{14,369,5,499,19,517,23,387},4),1,)

Ввівши формулу як формулу масиву, виділіть її на панелі формул і оцініть її, використовуючи F9для повернення результату, наприклад:

Перед:
Перед оцінкою формули

Після:
Перед оцінкою формули

Як це працює

ADDRESSФункція повертає рядок , що представляє посилання на основі два параметрів, rowі col. Третій параметр керує тим, який тип посилання повертається, абсолютна або відносна посилання. Наприклад, =ADDRESS(1,2,4)повертає "B1".

Ми можемо поставити масив ADDRESSі використовувати його як формулу масиву для повернення кількох результатів, наприклад, =ADDRESS(1,{1,2,3},4)повернення "A1","B1","C1".

Тому, у моїй відповіді, масив, що надається, - ADDRESSце лише номери стовпців, що стосуються необхідних точок компаса, наприклад, стовпець 14 - це стовпець N, стовпець 369 - стовпець NE.

Тим НЕ менше, ми ще не закінчили тут , так як всі повертаються посилання мають ряд включені, наприклад, N1, NE1. Тому ми просто використовуємо SUBSTITUTEдля видалення 1всіх посилань.


1
Чи =IF(1,"N NE E SE S SW W NW")було б дійсним?
Відновіть Моніку

3
@squid Так, це справді! Однак я збирався знайти альтернативу, яка не вимагала, щоб рядки були котировані дослівно.
i_saw_drones

Як це працює?
anatolyg

@anatolyg Я додав розділ з поясненнями, сподіваюся, що це зрозуміло.
i_saw_drones


7

Вугілля деревне , 14 байт

”{⊟“�_Zn↖⦄RüΦ≦

Спробуйте в Інтернеті! Посилання полягає у багатослівній версії коду ... що є лише рядком для друку, оскільки автоматичний девербосифікатор піклується про стиснення рядка.

Друк рядка нестисненим займає 19 байт, оскільки Деревне вугілля друкує ASCII для друку буквально. Найкраща алгоритмічна відповідь, яку я міг придумати, займає 20 байт:

E⁸ΦSNWE›³﹪⁻﹪⁺⁵×⁶μχι⁸

Спробуйте в Інтернеті! Виводи, що використовують формат масиву (коштуватиме два байти, щоб приєднати елементи до пробілів). Працює, помічаючи, що літери рядка SNWEвикористовуються лише тоді, коли поточний зовнішній індекс дорівнює або знаходиться на відстані 1 (модуль 8) у будь-якому напрямку від відповідного елемента списку індексів 4,0,6,2.


7

мозковий ебать , 117 байт

+++++[>++++++>+>+++>>++++>+++++<<<<<<-]>++[>++>++>+>++>++[<]>-]>>-.>.<.<.>>.<<.>>.>-.<<<.>>.>.<.>.>--.<<.>>.<<.<.>>>.

Спробуйте в Інтернеті!

Цей код спочатку створить символи "EN SW" в пам'ять, а потім переміститься вперед і назад для їх друку. Простір знаходиться посередині, бо він друкується найчастіше. N і S, W і E ніколи не з'являються разом, тому вони знаходяться на протилежних сторонах пам'яті. Для оптимізації деякі кінцеві декременти трапляються під час вихідної фази.


1
Гаразд, це класна відповідь. Здогадайтесь, ви побили мене на цьому. +1 за -1 :-)
ElPedro

1
До речі, забув сказати, ласкаво просимо на сайт Code Golf. З нетерпінням чекаю змагань з вами в майбутньому ☺
ElPedro

1
Ласкаво просимо! Подумайте про додавання пояснення або посилання до онлайн-перекладача програми. Див. Інші відповіді для прикладів. Короткі відповіді лише для коду, як правило, автоматично позначаються як неякісні.
mbomb007

1
Дякую, я можу додати пояснення свого коду. Я також спробую зрозуміти, як працюють онлайн-посилання.
Олена

1
@Helena Для посилання ви можете ознайомитись із посиланням "Спробуйте в Інтернеті" на мою відповідь. Якщо вставити код і запустити його, ви можете натиснути на піктограму посилання та отримати ідеально відформатований відповідь на код гольфу, який ви можете просто скопіювати та вставити сюди. Працює як магія і підтримує багато мов. Ну варто спробувати.
ElPedro


5

Желе ,  16  15 байт

“¤œỵpq⁵’ṃ“NESW 

Повна програма, що друкує текст

Спробуйте в Інтернеті!


16 ...

“¥Þ¡¦¢¬£æ‘ṃ“¡ɱ⁻»

Ніладичне посилання, яке дає список списків (малих) символів.

Спробуйте в Інтернеті!


Альтернатива 15 як niladic Link , який дає список (малих) символів (з пробілами): “¡XÇŀqỵÑ’ṃ“¡⁴ṁ».


5

Commodore BASIC (TheC64Mini, C64, C128, VIC-20 та ін.)

 0 PRINT"N NE E SE S SW W NW

У Commodore BASIC вам не потрібно закривати лапки PRINTабо LETтвердження, оскільки інтерпретатор автоматично закриє його, це зберігає один маркер BASIC.

Крім того, можна просто використовувати прямий режим таким чином:

Commodore BASIC 23 символи PETSCII (+ RETURNдля виконання)

?"N NE E SE S SW W NW

Я не впевнений, як підрахувати кількість байтів, що використовуються в цьому випадку, як за даними інтерпретатора, ?і PRINTвикористовувати однакову кількість байтів, і жодна програма не зберігається в пам'яті.


1
PRINTможна також замінити ?, заощадивши чотири байти.
Джеймс

1
Ні, це неправда; PRINTі ?використовувати однакову кількість маркерів BASIC. Я не рахую символів PETSCII, оскільки це не дуже є репрезентативним у тому, яка частина наявної пам'яті використовується інтерпретатором.
Шон Бебберс

1
Після всіх цих років я все ще вивчаю нові речі про Commodore. Дякую Шаун! c64-wiki.com/wiki/BASIC_token
Джеймс

Ось я зробив раніше (для C64) -> pastebin.com/NMYzTC7k
Shaun Bebbers

4

Japt , 16 байт

Повертає масив малих рядків. Стислий рядок склав 18 байт, але використовуючи його aяк роздільник, а потім розщеплення розробили коротше.

`nÂà!Z°°nw`qa 

Спробуйте - колонтитул форматує вихід.


4

Мертва риба ~ , 138 байт

{{i}i}c{{d}}cs{i}c{d}ic{{d}}iisicsic{{d}}iisicisddddddc{d}ddddc{{d}}iisicisddddddc{{iiii}}sicisddddddciiiic{{d}d}icisddc{{d}d}ics{i}c{i}dc

Спробуйте в Інтернеті!

Отже, виведення у малі регістри з новими рядками краще, ніж за замовчуванням (великі регістри з пробілами).

Цей код був сформований моїм оптимізатором, написаним на C ++ (завдяки кальмарам для іншої ідеї оптимізації!):

#include <iostream>
#include <string>
#include <queue>
#include <vector>


int eval(const std::string& actions, int result)
{
    int mult = 1;

    for (int i = 0; i < (int)actions.length(); ++i)
    {
        switch (actions[i])
        {
        case 's':
            result *= result;
            if (result == 256)
                result = 0;
            break;

        case '{':
            mult *= 10;
            break;

        case '}':
            mult /= 10;
            break;

        case 'd':
            if (result > 256 && result - mult <= 256)
                result = (result - mult) % 256;
            else
                result -= mult;
            break;

        case 'i':
            if (result < 256 && result + mult >= 256)
                result = (result + mult) % 256;
            else
                result += mult;
            break;
        }
    }

    return result;
}

struct worse
{
    bool operator()(const std::string& a1, const std::string& a2)
    {
        return a1.length() > a2.length();
    }
};

std::string BestStr(int accumulator, int target)
{
    std::priority_queue<std::string, std::vector<std::string>, worse> actions;
    actions.push(std::string(""));
    while (true)
    {
        std::string a = actions.top();
        int new_acc = eval(a, accumulator);
        if (new_acc == target)
            return a + "c";

        actions.pop();

        int last_braces = 0;
        int i = a.length() - 1;
        while (i >= 0 && a[i] == '}' && last_braces < 2)
        {
            ++last_braces;
            --i;
        }
        bool is_last_i = (i >= 0 && a[i] == 'i');
        bool is_last_d = (i >= 0 && a[i] == 'd');
        bool may_add_braces = (i < 0 || a[i] == 's');
        bool may_add_c = (new_acc > 1 && new_acc < 30);

        if (may_add_c)
        {
            actions.push(a + "s");
        }
        if (may_add_braces)
        {
            actions.push(a + "{{}}");
            actions.push(a + "{}");
        }
        for (int braces_back = 0; braces_back <= last_braces; ++braces_back)
        {
            for (int c = 'd'; c <= 'i'; c += 'i' - 'd')
            {
                if ((!is_last_i || c == 'i') &&
                    (!is_last_d || c == 'd') ||
                    braces_back == 0)
                {
                    std::string new_actions = a;
                    new_actions.insert(new_actions.length() - braces_back, 1, (char)c);
                    actions.push(new_actions);
                }
            }
        }
    }
}

std::string DeadfishConvert(std::string s)
{
    std::string result;
    int accumulator = 0;

    for (int c: s)
    {
        result += BestStr(accumulator, c);
        accumulator = c;
    }
    return result;
}

int main()
{
    std::string s1 = DeadfishConvert("N NE E SE S SW W NW");
    std::cout << s1 << '\n';
    std::cout << s1.length() << '\n' << '\n';
    std::string s2 = DeadfishConvert("n ne e se s sw w nw");
    std::cout << s2 << '\n';
    std::cout << s2.length() << '\n' << '\n';
    std::string s3 = DeadfishConvert("N\nNE\nE\nSE\nS\nSW\nW\nNW");
    std::cout << s3 << '\n';
    std::cout << s3.length() << '\n' << '\n';
    std::string s4 = DeadfishConvert("n\nne\ne\nse\ns\nsw\nw\nnw");
    std::cout << s4 << '\n';
    std::cout << s4.length() << '\n' << '\n';
}


4

Пакетний файл, 19 байт

У запитанні ніколи не було зазначено, що вам доведеться виводити N NE E SE S SW W NWі нічого іншого, а також, що він не міг вийти через помилку після цього, цей код лише видаляє помилку, але не виходить із-за неї.

N NE E SE S SW W NW

Вихід

>N NE E SE S SW W NW
'N' is not recognized as an internal or external command,
operable program or batch file.

Пакетний файл, 25 байт

N NE E SE S SW W NWВиводити лише без помилок чи збоїв.

@echo N NE E SE S SW W NW

Ви можете зберегти байт, замінивши компакт-диск просто цитатами, наприклад 'N NE E SE S SW W NW'- ви отримаєте щось на кшталт: N NE E SE S SW W NW - command not found
Дьюї Морган,

4

Python2, 59 байт

''.join(' SEWN'[0xe0619042210504>>i*3&7]for i in range(19))

Магічне число - це об'єднані три бітні індекси в символьній рядку, зворотній порядок, щоб ми могли розпочати ітерацію в LSB.


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

''.join('WN S ES W xxE '[0x423659711>>i*2&15]for i in range(19))

Навіщо робити ІР просто, коли ви можете зробити це складніше? :-)
GB

4

К (нг / к) , 23 22 байт

-1 байт завдяки ngn!

"WNES"@5\7108085518230

Спробуйте в Інтернеті!

J , 34 30 байт

echo(#:3510)<;.1'NNEESESSWWNW'

Спробуйте в Інтернеті!


Гален, для J повторення буквального було б коротшим. Мені б хотілося бачити цей бит ... Мені не вдалося це зробити
Йона

1
Так, відлуння було б 4 + 19 байт. У мене немає кращих ідей.
Гален Іванов

1
для k: якщо ми поміняємо " "<-> "W"( 0<-> 4в базі 5), пробіл буде в кінці, і ми можемо його видалити, оскільки індексація рядків за межами меж все одно дає пробіл:"WNES"@5\7108085518230
ngn

@ngn Дякую!
Гален Іванов

1
@GalenIvanov хороший і для баз даних про найвищу ефективність :) Артур розробив k як основну мову для kdb +
ngn


3

Брахілог , 19 байт

"NNEESESSWWNW"ḍ₄ḍᵐc

Спробуйте в Інтернеті!

Виводи у вигляді списку. ḍ₄ḍᵐcекономить два байти на виписанні семи пробілів і робить весь предикат рядковим літералом, так що принаймні це зв'язує PHP ...

"NNEESESSWWNW"         The string "NNEESESSWWNW"
              ḍ₄       split into quarters
                 ᵐ     with each quarter
                ḍ      split in half
                  c    and concatenated
                       is the output.

Я намагався бути розумним 3⟦{;"NESW"↺₍h₂a₀ᶠ}ᵐc, але це не могло отримати SE чи NW правильно, і байт все одно.


3

Пробіл , 151 байт

[S S S T    T   N
_Push_3_W][S S T    T   T   S N
_Push_-6_N][S S T   T   T   S T S S N
_Push_-52_space][S S S T    T   N
_Push_3_W][S T  S S T   N
_Copy_0-based_1st_(space)][S S S T  T   N
_Push_3_W][S S T    T   N
_Push_-1_S][S T S S T   S N
_Copy_0-based_2nd_(space)][S S T    T   N
_Push_-1_S][S T S S T   N
_Copy_0-based_1st_(space)][S S T    T   T   T   T   N
_Push_-15_E][S S T  T   N
_Push_-1_S][S T S S T   S N
_Copy_0-based_2nd_(space)][S T  S S T   S N
_Copy_0-based_2nd_(E)][S T  S S T   N
_Copy_0-based_1st_(space)][S T  S S T   N
_Copy_0-based_1st_(E)][S S T    T   T   S N
_Push_-6_N][S T S S T   S N
_Copy_0-based_2nd_(space)][S S T    T   T   S N
_Push_-6_N][N
S S N
_Create_Label_LOOP][S S S T S T S T S S N
_Push_84][T S S S _Add][T   N
S S _Print_as_character][N
S N
N
_Jump_to_Label_LOOP]

Букви S(пробіл), T(вкладка) та N(новий рядок) додаються лише як підкреслення.
[..._some_action]додано лише як пояснення.

Спробуйте це в Інтернеті (лише із необробленими пробілами, вкладками та новими рядками).

Пояснення:

  1. Натисніть значення unicode мінус константа 84 для символів "WN W WS S ES E EN N" до стеку (зауважте, що рядок висунуто в зворотному напрямку). Крім того, я використовую декілька копій раніше натиснутих значень, щоб зберегти байти, де це можливо.
  2. Потім запустіть нескінченну петлю, яка виконує наступні дії:
    1. Додайте константу 84 до поточного значення unicode
    2. Роздрукуйте його як символ для STDOUT

Константа 84генерується цією програмою Java, яку я написав для іншого завдання, на який я відповів у Whitespace .


3

MathGolf , 20 17 байт

ÿnesw▒∙╫m+mÉîÄ╪^─

-3 байти завдяки @maxb .

Спробуйте в Інтернеті.

Пояснення:

ÿnesw      # Push 4-char string "nesw"
           #  STACK: "nesw"
          # Split to a list of characters
           #  STACK: ["n","e","s","w"]
          # Triplicate it
           #  STACK: ["n","e","s","w"],["n","e","s","w"],["n","e","s","w"]
          # Rotate the top one once towards the left
           #  STACK: ["n","e","s","w"],["n","e","s","w"],["e","s","w","n"]
 m+        # Append the top two together
           #  STACK: ["n","e","s","w"],["en","se","ws","nw"]
   m       # Map the strings in the top list to:
    ÉîÄ╪   #  Rotate the string the 1-based index amount of times towards the right
           #   STACK: ["n","e","s","w"],["ne","se","sw","nw"]
^          # Zip; creating pairs with the top two lists
           #  STACK: [["n","ne"],["e","se"],["s","sw"],["w","nw"]]
          # Flatten this list
           #  STACK: ["n","ne","e","se","s","sw","w","nw"]
           # (after which the entire stack is output implicitly as result)

1
17 байт . Це було веселим викликом. Я спробував це раніше, але опинився там, де ти. Я думаю, що найбільше ви могли зробити з цього - на 1 байт більше, але я не міг знайти коротший шлях.
maxb

@maxb Ах приємний підхід. Я мушу визнати, що той код розміру блоку X ( Éі Äв цьому випадку) все ще мене дещо плутає. Іноді я не впевнений, коли мені це робити або не потрібно використовувати ці кодові блоки. Ви m+не використовувати один для прикладу. Але ваш Ä- код коду розміром 1. Я mÅî╪лише спробував побачити, що сталося, і саме тому я тепер розумію, для чого існує код-блок розміром 1 Ä. :)) Дякую за -3 байти, хоча. Ще багато чого навчитися я бачу.
Кевін Круїссен

1
Приємне пояснення! Я спробував зробити рішення, не перетворюючи його на список символів, але команда zip була трохи химерною. Щодо блоків коду, думайте про них як замінники, що використовуються замість них {}. mÅî╪створює відображення, але воно не має петлі for всередині відображення. Якщо ви пишете m{î{╪}}, можливо, простіше побачити, що код - "map to: loop <index> times, і обертайте рядок кожного циклу". Причина, чому m+цього немає, полягає в тому, що певні команди мають неявні 1-байтові блоки (карта, фільтр, зменшення тощо), але îце не команда, яку слід використовувати в поєднанні з блоком.
maxb

1
@maxb Я дійсно знав, що кодові блоки є більш коротким варіантом {...}, але я якось забув integer{- це цикл for. :) Тепер îÄ╪має набагато більше сенсу. Дякую за пояснення!
Кевін Кройсейсен

2

CSS , 42 39 байт

(спасибі кам'яному павукоподібному за переглянуту версію)

body:after{content:"N NE E SE S SW W NW"


1
-3 байти:body:after{content:"N NE E SE S SW W NW"
кам’яний павукоподібний

О, я забув, це також дійсно ofc, оновлено :)!
roberrrt-s

2

Насіння , 6014 байт

27 32429737401852232227804295321578416370544555457622262891879921280324727410131817586348135470079420921373938348260737299348550007805068404867624897650263347568409592608258945989033792510474363164709158118555665232935403908551415888090695760298337219819413274977014408722140235669339108001709528995376914900494019798521214727367535169036319615676199584661126257462974800782884967804763256678000063025237472650538076831876942979826335539886276642624472204985016283691316313249488093825552581263195700506490263014623798470563718844847334940964632636436478404543496272112184140337568637349767918641524452384959486975049813859244670160569884744538279036643294867674161431756929550170395739925307134312406291063668809195567313928307910934660574895433141956111513050736041440669472422865481546405020220238818265794921314653725749392385549924210837964649297239381603259476675148489582680939048820717739905271461370132524025785160026801625672272913416389786086946626728842588663673416395169524016926695769334183833366462685756958054189820999370092892855665559717806826530952610964256124463840218293029538229042911551526509745973128558291005365222643503139067010483637086697955919587162384655443959408291567894061028044826636171014388153130769792397282335858985323269310727311039012381122390183102126191168963870116881629339035600546009305431793687183913979054151312200573069395058914262857368132993952655571167118263728070696377852599343989848263167312887211748226689125561718255196655446099711296568221690530717651328503948183228932786503716890383195810396161663632504174142420921735055441162618914957825032056019218584287089599270312541933094119409995775035365862244691419255488688879630142415739738796957474249592086989231999568273454247198389863139439897248192949030226324637037937607004428557202644332945222019553599908855943840883606735602486216245714280716148378430738983808375466562604692991701163078094015860708365913183037140180020776525026891135163345427911749533164462233906885068864798951466382247930357444595606617682531499045805835102155190109668901179666311163071611393282924908189215675892953256826649762594463293867383921972181952997833560371571545190945543033351108064265894854803319008655145213765667074789305055723258530694850418765677462165413557272747961130459219342146615095862014137406489375157766959799291089215740196734079295172946350338663239451562589633216908805028629767462044463310475859283605554743731396818983359527612902567406307270838160926586311672252276690909354125055468912844343806046309796590149977323343332039095076680537362333773750051043281967620781236684580688649899599894791764969639275247700776637892615729757899608628514791667795106390376246890330575517824338764219021396958188958235055290896924249770944905659304681507478975095888248103169710912376599445302527257479613158446721050489233911736089191439017996962182413511012900366501119556105789078275149705515012300827868862038071066912823449506913958912235923323638505757204526506327010926007595704417253684932596231606733027284263178479840785607928320603259662026791082244015829365605451084366715394628351636563955621161378688550003390556445245074739462307110100863024184316465734324401688465928827408449165190271528329602702373730346394803239394173490819727873116531045433457650881080122796159241596543253982402471104065237941729677594379317274541529006952959000152687275974001138315010176843925599438278290218390644740919129323109582279220437886915496736885058271413958305953151184342725824729076581370881383360210631877985352671536000503948280559301633936877162466145026758809907939645467704805892486147550057845773849575278620555906080753862688722846292689494961297512113753414009189522365247542490200336579292488067953461299023326925661887077747288500270026888774635820948696015812357241781814592351848858954139716506111479475207696790949277211077720834891880913260866501916732427370806066035548982017315826213049658915419681842381914237502216614528174237875875738156132703973666564945026254499265910704148825037630761619650949635972980035630316257135212349181639940504547722767898302879234673272154028964478458469466250102554612059368293497511404163963705442187242769706586819405113285219700159125119338601931670779192478917206878107091618448093140705173062420040261126935373689918208815797991761563304607704283868972915636425613833785564679990574095368828308776724486415005128506687942819070129022911666887363253202695416103545769073021185132010920185208632024811337544715055406031297413168802089421761798020616230024290524096396092608042069087607272534874457093977610919233750725135220581682913316085638068663247820037223692942067994551786014033707387642820855601334002540339334606906772532939337779748305357112540312103757754695577077583846897693527091162962000082213332051059005644562753372638247584982354478224403477604356150912451128591138652721098074872513196253790561736352841309810909110001754673250730698454675988798465247376421075019414107337634079281061629221783859449063069175434073835673063716565555614782886016441814199915418848976070834414782427725187820926042778984081922550398210353288229598805397201850487997254871012213762289412828417039945896819359898337616122446201299182152276549340911589671291124887672310931868023491872685227548726494469798568145715500153324646857181224645073236602344526749192704938665584870007079941922775292601106345725659322322536675461008337648982039319953181733660980694781559207671567197161027796266390879206526082137700937056380629087949633487181507979286568656291044492869916694352395542638882544967807857391058161838343109606346401310155771709714142586733985703451391374159045025205718989407293651441039802247981386993858491342422355232055341447145969376687615001834650283116652856369804298047720786536278306210551862061566639283704928517998916884505819581251906693306116531467413995747910736025576089721150597919824878333808115757216261812226145636769545796913912159437533454858286778214791559458862216426856243544801486923659355580455048265633089421966932180992

Створює наступну програму:

"WN W WS S ES E EN N">:#,_@


2

Збірка (x86, Linux), 68 байт

$ od -x a
0000000 457f 464c 0001 0000 0000 0000 0000 0500
0000020 0002 0003 001b 0500 001b 0500 0004 0000
0000040 13b2 31b9 0000 cd05 2580 0020 0001 cd40
0000060 4e80 4e20 2045 2045 4553 5320 5320 2057
0000100 2057 574e
0000104
$ ./a
N NE E SE S SW W NW$

Джерело:

BITS 32
org 0x05000000
db 127,"ELF"
dd 1,0
dd $$
dw 2,3
dd 0x0500001B,0x0500001B
dd 4
mov dl,19
mov ecx,m
int 128
db 37
dw 32,1
inc eax
int 0x80
m db 'N NE E SE S SW W NW'

Код, здебільшого взято з найкоротшого ELF для "Hello world \ n"?



Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.