“N NE E SE S SW W NW” drucken

47

Dies scheint fast trivial zu sein, aber da ich nach einiger Anstrengung nicht in der Lage war, die wörtliche Lösung in J zu übertreffen, dachte ich, dass dies eine anständige Herausforderung sein könnte (obwohl dies, um klar zu sein, keine J-spezifische Herausforderung ist).

Der Titel sagt alles. Sie müssen lediglich ein Programm oder eine Funktion schreiben (ohne Argumente), die Folgendes zurückgibt oder ausgibt:

N NE E SE S SW W NW

Sie können Zeilenumbrüche anstelle von Leerzeichen verwenden.

Eine Funktion ohne Argumente, die ein Array von Zeichenfolgen zurückgibt, z

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

ist auch akzeptabel.

Die Buchstaben können Groß- oder Kleinbuchstaben sein, dürfen jedoch nicht gemischt werden.

Jona
quelle
9
Vielleicht wäre es etwas interessanter, sie in beliebiger Reihenfolge ausgeben zu lassen
Jo King,
3
@JoKing Sicher, ich werde das entfernen. Ehrlich gesagt hatte ich nicht erwartet, dass jemand Antworten einsendet, die den vollen wörtlichen Wert verwenden - das ist nicht im Sinne der Frage. Wie ich bereits sagte, ist es aufgetaucht, weil ich das Literal in J nicht schlagen konnte, obwohl die Saite eine Art Regelmäßigkeit und Struktur aufweist. Der springende Punkt ist, diese Regelmäßigkeit auszunutzen, um eine wörtliche Antwort zu schlagen. Schlecht für mich, weil ich nicht expliziter bin. Wenn ich ihnen einen Befehl erlaube, wird dies ebenfalls zunichte gemacht, also möchte ich das nicht ändern.
Jonah,
3
@UnrelatedString Die vielversprechendste Idee, die ich je gehabt habe, ist zu bemerken, dass die Anweisungen denen entsprechen, die ich zu den Mächten erhoben habe 0, 0.5, 1, 1.5, 2, 2.5, 3, 3.5. Leider war der J-Code, der benötigt wurde, um diese Ergebnisse in Buchstaben zu mappen, teurer als ein Literal.
Jonah,
1
Ach, schlau! Ich frage mich, ob die Zuordnung für die Gaußschen Ganzzahlen möglicherweise besser funktioniert, 1, 1+i, i, -1+i, -1, -1-i, -i, 1-isodass Sie statt zwei einen Real- oder Imaginärteil pro Himmelsrichtung haben. Es ist wahrscheinlich schwieriger, diese zu generieren, es sei denn, Sie könnten die Potenzen von i auf irgendeine Weise von 0 wegrunden. Ich weiß nicht, wie einfach oder schwer das in J sein würde, aber es ist eine Idee.
Unrelated String
3
Es fühlt sich an, als sollten Einträge auch die naive "Echo this String" -Version zum Vergleich in ihrer Sprache anzeigen, und die% Verkürzung wird als Richtwert verwendet.
Dewi Morgan

Antworten:

18

Canvas , 12 Bytes

>X½+T)AuS{⁹‟

Probieren Sie es hier aus!

Die Zeichenfolge, einfach komprimiert.

dzaima
quelle
2
Können Sie genauer erklären, wie das funktioniert?
Dillanm
2
@Dillanm es gibt nicht viel mehr zu sagen - Canvas hat einen eingebauten Kompressor (sollte mit Strg + o → String-Komprimierung erreichbar sein), der hier einfach die benötigten Zeichen speichert ( "NESW ") und dann in Base-5 die Person speichert Figuren.
Dzaima
56

Bash (24 Bytes)

mit Klammererweiterung

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

ist die gleiche Länge wie Hardcodierung

echo N NE E SE S SW W NW

Es wird jedoch interessanter, wenn mehr Kompasspunkte ausgegeben werden

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

Klammererweiterung

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

Andernfalls, wenn die Reihenfolge geändert werden könnte (17 Byte), verschwindet der Parameter empy string ohne Anführungszeichen

echo {N,,S}{W,,E}
Nahuel Fouilleul
quelle
1
Das ist interessant, ich wusste nicht, dass du eine leere Position haben könntest, das ist der Klammerausdruck!
Fehler
1
@flawr Nützlich beim Chrooten: mount -t proc{,,}
gronostaj
7
Oder cp file{,.bak}
Oliphaunt
43

Mornington Crescent , 4395 3823 Bytes

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

Probieren Sie es online!

Da es ein wenig zu erwarten ist, dass Sie das alles lesen, möchte ich einen kurzen Überblick über meine Vorgehensweise geben. Die Hauptidee ist zu speichern 3 Kopien der Zeichen N, E, S, Wan verschiedenen Stationen auf der Circle Line, über Bank - Hammersmith. Diese Zeichen werden ab dem Beginn eines Stationsnamens bei Charing Cross erstellt. Konstruieren Sie dann   mit Mile End und Charing Cross aus der Mitte eines ausgewählten Stationsnamens und speichern Sie ihn in der Bank, damit er in der Verkettung bei Hammersmith abgeholt werden kann. Verketten Sie die Zeichen abschließend nacheinander in Paddington und kopieren Sie sie erneut über Bank - Hammersmith, falls sie später wiederverwendet werden müssen.


Ich denke, die derzeitige Lösung ist mit dieser Strategie nahezu optimal, zumindest was die Anzahl der besuchten Stationen anbelangt: Nur zwei Mal habe ich eine Station nur für den Transit verwendet:

  1. Sieben Schwestern erreichen (über die Victoria Station)
  2. und zurück nach Mornington Crescent (via Bank).

Alle anderen Stationsbesuche waren, sofern ich keinen vergessen habe, entweder das Speichern / Abrufen von nützlichen Informationen oder (ein Teil von) die Nutzung der Stationsfunktion.

Was die Linienlängen betrifft, habe ich versucht, die kürzesten Namen für Circle Line auszuwählen, aber es könnte eine geringfügige Verbesserung geben. Es ist möglich, dass das Speichern von Daten in District einige Bytes spart.

Diskrete Eidechse
quelle
Zwei Ideen, um noch mehr Golf zu spielen: 1. Nehmen Sie 'NE', 'SW', 'NW', 'SE' von einer einzigen Station (z. B. mit Neasden, Swiss Cottage, Acton To wnund Mansion Hou se). 2. Versuchen Sie, das auszunutzen Tatsache, dass Paddington es einfacher macht, W zu verketten, als W . Dies erfordert etwas mehr Overhead, um Paddington 'aufzufrischen', so dass es möglicherweise nichts gewinnt.
Diskrete Eidechse
4
Verwendet dies Dollis Hill-Schleifenregeln? Wenn ja, kann es meiner Meinung nach durch die Verwendung einer Argyle Street-Parabel und möglicherweise sogar einer leicht modifizierten Version des Webb-Ellis-Protokolls verbessert werden.
Richard Ward
26

PHP , 19 Bytes

N NE E SE S SW W NW

Probieren Sie es online!

Das aus dem Weg räumen. Jemand wird es irgendwann tun.

640 KB
quelle
8
Funktioniert auch für HTML + JS.
Cœur
Mehrsprachig mit ///.
Jemand
24

Brainfuck , 142 139 131 119 Bytes

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

Probieren Sie es online!

Einfach 10-mal in einer Schleife die Zellen mit 30, 70, 80 und 90 füllen, dann vorwärts und rückwärts gehen und die Zellenwerte anpassen, um die erforderlichen Zeichen auszudrucken. Nicht viel anders als der Standard "Hallo Welt!".

ElPedro
quelle
7
Lol ich habe nie verstanden, wie jemand diese obskuren Sprachen "Golf spielen" kann. Es ist schwer genug zu verstehen, was der Code an erster Stelle tut (dies kommt aus dem C ++ / Java-Hintergrund)
mackycheese21
10
@ mackycheese21 was? C ++ hat Sie nicht gelehrt, Zeiger-Manipulation zu lieben?
candied_orange
12
Brainfuck mag esoterisch sein, aber ich würde es nicht als dunkel bezeichnen
Unrelated String
3
@candied_orange C ++ hat mich gelehrt, Zeiger-Manipulation zu hassen und wegzulaufen, wenn jemand std :: :)
mackycheese21 10.06.
1
@UnrelatedString obskur, nein. Stumpf, ja.
Rich
14

Brain-Flak , 204 Bytes

((((((((((((((((()()()){}()){}){}())){}{}))<([([][]){}()]{})(([][]){}[])>)<([][]
()())>)[[]]()())<([]()()())>)<((([]())[][]){}[][()])>)<([][()()])>[[]()])<([][((
)()){}])>)((()()())){}{})<((()()()()()){})>)

Probieren Sie es online!

DJMcMayhem
quelle
4
Punkte abgezogen für die Verpackung.
Rich
12

MarioLANG , 249 221 Bytes

+
+
+
+
+
+
+
+
+  ((+++++++++)))<
+>==============="
)++++++++)+++((-[!)--.)++.(.---------.).(.).)++.((.).).(.).++++.(.).(.(+++++++++.))
=================#================================================================.

Probieren Sie es online!

Charlie
quelle
10

Deadfish ~ , 188 183 Bytes

-5 dank Tintenfisch

iiissdddc{ddddd}iiiicdddd{iiiii}c{d}ic{dddd}iiicddd{iiii}c{dddd}iiic{iiiii}ic{d}ddddc{dddd}iiic{iiiii}ic{ddddd}dci{iiiii}ciiiic{ddddd}dddddciiiii{iiiii}c{ddddd}dddddcdddd{iiiii}c{i}dc

Probieren Sie es online!

ein Stein Spinnentier
quelle
1
{i}dcam Ende für 183
Setzen Sie Monica
10

Excel-Formel, 59 57 Bytes

Folgendes sollte als Matrixformel ( Ctrl+ Shift+ Enter) eingegeben werden :

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

Nachdem Sie die Formel als Matrixformel eingegeben haben, markieren Sie sie in der Formelleiste und werten Sie sie mit aus F9, um das Ergebnis zurückzugeben. Beispiel:

Vor:
Vor der Formelauswertung

Nach:
Vor der Formelauswertung

Wie es funktioniert

Das ADDRESS Funktion gibt eine Zeichenfolge zurück, die eine Referenz darstellt, die auf zwei Parametern rowund basiert col. Der dritte Parameter steuert, welcher Referenztyp zurückgegeben wird, eine absolute oder relative Referenz. Zum Beispiel =ADDRESS(1,2,4)kehrt zurück"B1" .

Wir können ein Array an liefern ADDRESS und es als eine Matrixformel mehrere Ergebnisse zurückgeben, zum Beispiel =ADDRESS(1,{1,2,3},4)zurückkehrt "A1","B1","C1".

Daher wird in meiner Antwort das Array an geliefert ADDRESS nur die Spaltennummern, die sich auf die erforderlichen Kompasspunkte beziehen, z. B. Spalte 14 ist Spalte N, Spalte 369 ist Spalte NE.

Allerdings sind wir hier nicht fertig , da alle zurück Referenzen die Zeile enthält, zum Beispiel haben, N1, NE1. Deshalb verwenden wir einfach SUBSTITUTE, um die 1aus allen Referenzen zu entfernen .

i_saw_drones
quelle
1
Wäre =IF(1,"N NE E SE S SW W NW")gültig?
Setzen Sie Monica
3
@squid Ja das würde es ja! Ich entschied mich jedoch für eine Alternative, bei der die Zeichenfolge nicht wörtlich zitiert werden musste.
i_saw_drones
Wie funktioniert das?
Anatolyg
@anatolyg Ich habe einen Erklärungsabschnitt hinzugefügt, hoffe, es ist verständlich.
i_saw_drones
9

Dreieckigkeit , 71 Bytes

..... .....
...."W"....
..."W N"...
.." SW "+..
." SE S"++.
"N NE E"+  

Probieren Sie es online!

Es gibt zwei Leerzeichen in der letzten Zeile, um die für die Triangularität erforderliche Byteanzahl zu treffen.

Setzen Sie Monica wieder ein
quelle
7

Holzkohle , 14 Bytes

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

Probieren Sie es online!Der Link ist eine ausführliche Version des Codes. Dies ist nur die zu druckende Zeichenfolge, da der Auto-Deverbosifier die Zeichenfolgenkomprimierung übernimmt.

Das unkomprimierte Drucken der Zeichenfolge dauert 19 Byte, da Charcoal druckbare ASCII-Zeichen buchstäblich druckt. Die beste algorithmische Antwort, die ich finden konnte, benötigt leider 20 Bytes:

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

Probieren Sie es online! Ausgaben im Array-Format (würden zwei Bytes kosten, um die Elemente in Leerzeichen zusammenzufügen). Erkennt, dass die Buchstaben des Strings SNWEnur verwendet werden, wenn der aktuelle äußere Index gleich oder 1 (Modulo 8) von dem entsprechenden Element der Indexliste entfernt ist 4,0,6,2.

Neil
quelle
7

Brainfuck , 117 Bytes

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

Probieren Sie es online!

Dieser Code erstellt zuerst die Zeichen "EN SW" im Speicher und bewegt sich dann vor und zurück, um sie zu drucken. Das Leerzeichen befindet sich in der Mitte, da es am häufigsten gedruckt wird. N und S und W und E erscheinen niemals zusammen, so dass sie sich auf entgegengesetzten Seiten des Gedächtnisses befinden. Zur Optimierung werden einige der endgültigen Dekremente während der Ausgabephase vorgenommen.

Helena
quelle
1
OK, das ist eine coole Antwort. Vermutlich hast du mich in diesem Fall besiegt. +1 für -1 :-)
ElPedro
1
Übrigens, vergessen zu sagen, willkommen auf der Code Golf Seite. Ich freue mich darauf, in Zukunft mit Ihnen zu konkurrieren ☺
ElPedro
1
Herzlich willkommen! Erwägen Sie, eine Erklärung oder einen Link zu einem Online-Dolmetscher für das Programm hinzuzufügen. Beispiele finden Sie in anderen Antworten. Nur-Code-Kurzantworten werden in der Regel automatisch als minderwertig gekennzeichnet.
mbomb007
1
Danke, ich kann eine Erklärung meines Codes hinzufügen. Ich werde auch versuchen zu verstehen, wie die Online-Links funktionieren.
Helena,
1
@Helena Für den Link kannst du den "Try it Online" -Link auf meiner Antwort überprüfen. Wenn Sie Ihren Code einfügen und ausführen, können Sie auf das Link-Symbol klicken und erhalten eine perfekt formatierte Code-Golf-Antwort, die Sie einfach hier kopieren und einfügen können. Funktioniert wie Magie und unterstützt viele Sprachen. Einen Versuch wert.
ElPedro
5

Jelly ,  16  15 Bytes

“¤œỵpq⁵’ṃ“NESW 

Ein vollständiges Programm, das den Text druckt

Probieren Sie es online!


16

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

Ein niladischer Link, der eine Liste mit Listen von (Klein-) Zeichen liefert.

Probieren Sie es online!


Alternative 15 als argumentlose Verbindung , die eine Liste (Kleinbuchstaben) Zeichen (mit Leerzeichen) ergibt: “¡XÇŀqỵÑ’ṃ“¡⁴ṁ».

Jonathan Allan
quelle
5

Commodore BASIC (TheC64Mini, C64, C128, VIC-20 usw.) 28 Tokenized BASIC-Bytes verwendet

 0 PRINT"N NE E SE S SW W NW

In Commodore BASIC benötigen Sie weder das schließende Anführungszeichen PRINTnoch LETAnweisungen, da der Interpreter es automatisch schließt. Dadurch wird ein BASIC-Token gespeichert.

Alternativ kann man einfach den Direktmodus wie folgt verwenden:

Commodore BASIC 23 PETSCII-Zeichen (+ RETURNzum Ausführen)

?"N NE E SE S SW W NW

Ich bin mir nicht sicher, wie ich die Anzahl der in diesem Fall verwendeten Bytes gemäß dem Interpreter zählen ?und PRINTdie gleiche Anzahl von Bytes verwenden soll, und es ist kein Programm im Speicher gespeichert.

Shaun Bebbers
quelle
1
PRINTkann auch durch ersetzt werden ?, wodurch vier Bytes eingespart werden.
James
1
Nein, das ist nicht wahr; PRINTund ?verwenden Sie die gleiche Menge an BASIC-Token. Ich zähle keine PETSCII-Zeichen, da dies nicht sehr repräsentativ dafür ist, wie viel des verfügbaren Speichers vom Interpreter verwendet wird.
Shaun Bebbers
1
Nach all den Jahren lerne ich immer noch Neues über den Commodore. Danke Shaun! c64-wiki.com/wiki/BASIC_token
James
Hier ist eine, die ich früher gemacht habe (für den C64) -> pastebin.com/NMYzTC7k
Shaun Bebbers
4

Japt , 16 Bytes

Gibt ein Array von Kleinbuchstaben zurück. Die komprimierte Zeichenfolge hatte 18 Byte, wurde jedoch stattdessen aals Begrenzer verwendet, und die Aufteilung darauf wurde kürzer.

`nÂà!Z°°nw`qa 

Probieren Sie es aus - die Fußzeile formatiert die Ausgabe.

Zottelig
quelle
4

Deadfish ~ , 138 Bytes

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

Probieren Sie es online!

Die Ausgabe in Kleinbuchstaben mit Zeilenumbrüchen ist daher besser als die Standardausgabe (in Großbuchstaben mit Leerzeichen).

Dieser Code wurde von meinem Optimierer in C ++ generiert (danke an squid für eine weitere Optimierungsidee!):

#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';
}
anatolyg
quelle
1
155
Setzen Sie Monica
4

Batch-Datei, 19 Bytes

In der Frage wurde nie angegeben, dass Sie etwas ausgeben mussten N NE E SE S SW W NWund nichts anderes, und es konnte auch nicht aufgrund eines Fehlers beendet werden, da dieser Code nur einen Fehler auslöst, aber nicht aufgrund eines Fehlers beendet wird.

N NE E SE S SW W NW

Ausgabe

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

Batch-Datei, 25 Bytes

Nur N NE E SE S SW W NWAusgabe ohne Fehler oder Abstürze.

@echo N NE E SE S SW W NW
BDM
quelle
Sie können ein Byte speichern, indem Sie die CD durch einfache Anführungszeichen ersetzen. 'N NE E SE S SW W NW'Sie erhalten beispielsweise Folgendes: N NE E SE S SW W NW - command not found
Dewi Morgan,
4

Python2, 59 Bytes

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

Die magische Zahl sind die zusammengefügten Drei-Bit-Indizes in der Zeichenfolge, in umgekehrter Reihenfolge, damit wir mit der Iteration am LSB beginnen können.


Ich habe eine Weile damit verbracht, die magische Zahl zu verkleinern, aber das Wiederholen der Zeichenfolge durch Multiplizieren, um zusätzliche Indizes zu ermöglichen, funktioniert nicht, da Leerzeichen codiert werden müssen Zeichenfolge als Ziffern, die von der magischen Zahl entfernt wurden (einschließlich einiger unglücklicher Belangloser in der Mitte):

''.join('WN S ES W xxE '[0x423659711>>i*2&15]for i in range(19))
Meistens harmlos
quelle
Warum machen Sie es einfach, wenn Sie es kompliziert machen können? :-)
GB
4

K (NGN / k) , 23 22 Bytes

-1 Byte danke an ngn!

"WNES"@5\7108085518230

Probieren Sie es online!

J , 34-30 Bytes

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

Probieren Sie es online!

Galen Ivanov
quelle
Galen, für J echo wäre das wörtliche Wort kürzer. Ich würde gerne diesen Beat sehen ... Ich habe es nicht geschafft
Jonah
1
Ja, das Echo würde 4 + 19 Bytes betragen. Ich habe keine besseren Ideen.
Galen Ivanov
1
für k: Wenn wir " "<-> "W"( 0<-> 4in Basis 5) tauschen , befindet sich das Leerzeichen am Ende und wir können es entfernen, da die Indexierung von Zeichenfolgen außerhalb der Grenzen ohnehin ein Leerzeichen ergibt:"WNES"@5\7108085518230
ngn
@ngn Danke!
Galen Ivanov
1
@GalenIvanov auch für Hochleistungsdatenbanken gut :) arthur hat k als zugrunde liegende Sprache für kdb +
ngn
3

05AB1E , 14 Bytes

.•2Àβ‡yÞJŒ¾oÒ8

Probieren Sie es online!

Dadurch wird die Zeichenfolge mit Ausnahme von Kleinbuchstaben gedruckt.

MilkyWay90
quelle
Entfernen Sie einfach das Finale für -1
Grimmy
3

Brachylog , 19 Bytes

"NNEESESSWWNW"ḍ₄ḍᵐc

Probieren Sie es online!

Ausgaben als Liste. ḍ₄ḍᵐcSpart zwei Bytes, indem sieben Leerzeichen ausgeschrieben werden und das gesamte Prädikat zu einem String-Literal wird. Zumindest bindet es PHP ...

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

Ich habe versucht, klug zu sein 3⟦{;"NESW"↺₍h₂a₀ᶠ}ᵐc, aber es konnte SE oder NW nicht richtig machen und ist sowieso ein Byte länger.

Nicht verwandte Zeichenfolge
quelle
3

Leerzeichen , 151 Bytes

[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]

Buchstaben S(Leerzeichen), T(Tabulator) und (Zeilenvorschub) werden Nnur als Hervorhebungen hinzugefügt.
[..._some_action]nur als Erklärung hinzugefügt.

Probieren Sie es online aus (nur mit Leerzeichen, Tabulatoren und Zeilenumbrüchen).

Erläuterung:

  1. Schieben Sie die Unicode-Werte minus der Konstanten 84 für die Zeichen "WN W WS S ES E EN N" in den Stapel (beachten Sie, dass die Zeichenfolge umgekehrt eingeschoben wird). Außerdem verwende ich einige Kopien der zuvor übertragenen Werte, um nach Möglichkeit Bytes zu sparen.
  2. Starten Sie dann eine Endlosschleife, die Folgendes ausführt:
    1. Addieren Sie die Konstante 84 zum aktuellen Unicode-Wert
    2. Drucken Sie es als Zeichen an STDOUT aus

Die Konstante 84wird von diesem Java-Programm generiert , das ich für eine andere Herausforderung geschrieben habe, die ich in Whitespace beantwortet habe .

Kevin Cruijssen
quelle
3

MathGolf , 20 17 Bytes

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

-3 Bytes dank @maxb .

Probieren Sie es online aus.

Erläuterung:

ÿ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)
Kevin Cruijssen
quelle
1
17 Bytes . Das war eine lustige Herausforderung. Ich habe es schon einmal versucht, bin aber dort gelandet, wo du es getan hast. Ich denke, Sie könnten höchstens 1 Byte mehr daraus machen, aber ich konnte keinen kürzeren Weg finden.
Maxb
@ maxb Ah netter Ansatz. Ich muss zugeben, dass der Code mit der Blockgröße X ( Éund Äin diesem Fall) mich manchmal immer noch etwas verwirrt. Manchmal bin ich mir nicht sicher, ob ich diese Codeblöcke verwenden muss oder nicht. Sie m+verwenden zum Beispiel keine. Aber du Äbist ein Code-Block der Größe 1. Ich habe mÅî╪gerade versucht zu sehen, was passiert ist. Deshalb verstehe ich jetzt, warum es einen Code-Block der Größe 1 gibt Ä. :)) Danke für die -3 Bytes. Ich sehe noch viel zu lernen.
Kevin Cruijssen
1
Schöne Erklärung! Ich habe versucht, eine Lösung zu erstellen, ohne sie in eine Liste von Zeichen zu konvertieren, aber der Befehl zip war ein bisschen wackelig. Stellen Sie sich die Codeblöcke als Ersetzungen vor, die anstelle von verwendet werden{} . mÅî╪erstellt das Mapping, hat aber keine for-Schleife im Mapping. Wenn Sie schreiben m{î{╪}}, ist es möglicherweise einfacher zu erkennen, dass der Code "map to: loop <index> times" lautet und die Zeichenfolge bei jeder Schleife gedreht wird. Der Grund, warum m+es keinen gibt, ist, dass bestimmte Befehle implizite 1-Byte-Blöcke haben (Zuordnen, Filtern, Reduzieren usw.), aber îkein Befehl, der in Kombination mit einem Block verwendet werden soll.
Maxb
1
@maxb Ich wusste in der Tat, dass die Codeblöcke eine kürzere Variante von waren {...} , aber ich habe irgendwie vergessen, dass integer{es sich um eine for-Schleife handelt. :) Jetzt îÄ╪macht das viel mehr Sinn. Danke für die Erklärung!
Kevin Cruijssen
2

CSS , 42 39 Bytes

(danke an einen steinernen Spinnentier für die überarbeitete Version)

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

roberrrt-s
quelle
1
-3 Bytes:body:after{content:"N NE E SE S SW W NW"
ein Stein-Spinnentier
Oh, ich habe vergessen, das ist auch gültig, aktualisiert :)!
roberrrt-s
2

Seed , 6014 Bytes

27 32429737401852232227804295321578416370544555457622262891879921280324727410131817586348135470079420921373938348260737299348550007805068404867624897650263347568409592608258945989033792510474363164709158118555665232935403908551415888090695760298337219819413274977014408722140235669339108001709528995376914900494019798521214727367535169036319615676199584661126257462974800782884967804763256678000063025237472650538076831876942979826335539886276642624472204985016283691316313249488093825552581263195700506490263014623798470563718844847334940964632636436478404543496272112184140337568637349767918641524452384959486975049813859244670160569884744538279036643294867674161431756929550170395739925307134312406291063668809195567313928307910934660574895433141956111513050736041440669472422865481546405020220238818265794921314653725749392385549924210837964649297239381603259476675148489582680939048820717739905271461370132524025785160026801625672272913416389786086946626728842588663673416395169524016926695769334183833366462685756958054189820999370092892855665559717806826530952610964256124463840218293029538229042911551526509745973128558291005365222643503139067010483637086697955919587162384655443959408291567894061028044826636171014388153130769792397282335858985323269310727311039012381122390183102126191168963870116881629339035600546009305431793687183913979054151312200573069395058914262857368132993952655571167118263728070696377852599343989848263167312887211748226689125561718255196655446099711296568221690530717651328503948183228932786503716890383195810396161663632504174142420921735055441162618914957825032056019218584287089599270312541933094119409995775035365862244691419255488688879630142415739738796957474249592086989231999568273454247198389863139439897248192949030226324637037937607004428557202644332945222019553599908855943840883606735602486216245714280716148378430738983808375466562604692991701163078094015860708365913183037140180020776525026891135163345427911749533164462233906885068864798951466382247930357444595606617682531499045805835102155190109668901179666311163071611393282924908189215675892953256826649762594463293867383921972181952997833560371571545190945543033351108064265894854803319008655145213765667074789305055723258530694850418765677462165413557272747961130459219342146615095862014137406489375157766959799291089215740196734079295172946350338663239451562589633216908805028629767462044463310475859283605554743731396818983359527612902567406307270838160926586311672252276690909354125055468912844343806046309796590149977323343332039095076680537362333773750051043281967620781236684580688649899599894791764969639275247700776637892615729757899608628514791667795106390376246890330575517824338764219021396958188958235055290896924249770944905659304681507478975095888248103169710912376599445302527257479613158446721050489233911736089191439017996962182413511012900366501119556105789078275149705515012300827868862038071066912823449506913958912235923323638505757204526506327010926007595704417253684932596231606733027284263178479840785607928320603259662026791082244015829365605451084366715394628351636563955621161378688550003390556445245074739462307110100863024184316465734324401688465928827408449165190271528329602702373730346394803239394173490819727873116531045433457650881080122796159241596543253982402471104065237941729677594379317274541529006952959000152687275974001138315010176843925599438278290218390644740919129323109582279220437886915496736885058271413958305953151184342725824729076581370881383360210631877985352671536000503948280559301633936877162466145026758809907939645467704805892486147550057845773849575278620555906080753862688722846292689494961297512113753414009189522365247542490200336579292488067953461299023326925661887077747288500270026888774635820948696015812357241781814592351848858954139716506111479475207696790949277211077720834891880913260866501916732427370806066035548982017315826213049658915419681842381914237502216614528174237875875738156132703973666564945026254499265910704148825037630761619650949635972980035630316257135212349181639940504547722767898302879234673272154028964478458469466250102554612059368293497511404163963705442187242769706586819405113285219700159125119338601931670779192478917206878107091618448093140705173062420040261126935373689918208815797991761563304607704283868972915636425613833785564679990574095368828308776724486415005128506687942819070129022911666887363253202695416103545769073021185132010920185208632024811337544715055406031297413168802089421761798020616230024290524096396092608042069087607272534874457093977610919233750725135220581682913316085638068663247820037223692942067994551786014033707387642820855601334002540339334606906772532939337779748305357112540312103757754695577077583846897693527091162962000082213332051059005644562753372638247584982354478224403477604356150912451128591138652721098074872513196253790561736352841309810909110001754673250730698454675988798465247376421075019414107337634079281061629221783859449063069175434073835673063716565555614782886016441814199915418848976070834414782427725187820926042778984081922550398210353288229598805397201850487997254871012213762289412828417039945896819359898337616122446201299182152276549340911589671291124887672310931868023491872685227548726494469798568145715500153324646857181224645073236602344526749192704938665584870007079941922775292601106345725659322322536675461008337648982039319953181733660980694781559207671567197161027796266390879206526082137700937056380629087949633487181507979286568656291044492869916694352395542638882544967807857391058161838343109606346401310155771709714142586733985703451391374159045025205718989407293651441039802247981386993858491342422355232055341447145969376687615001834650283116652856369804298047720786536278306210551862061566639283704928517998916884505819581251906693306116531467413995747910736025576089721150597919824878333808115757216261812226145636769545796913912159437533454858286778214791559458862216426856243544801486923659355580455048265633089421966932180992

Erzeugt folgendes befunge Programm:

"WN W WS S ES E EN N">:#,_@
Krzysztof Szewczyk
quelle
2

Hodor , 177 Bytes

hodor.hod("HoOodoOorhodor  HoOodoOorhodor HooodorrHodor  HooodorrHodor  HODOR?!? HooodorrHodor  HODOR?!?  HODOR?!? Hooodorrhodor  Hooodorrhodor  HoOodoOorhodor Hooodorrhodor ");

Probieren Sie es online!

Steve
quelle
2

Assembly (x86, Linux), 68 Byte

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

Quelle:

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'

Code meistens aus Shortest ELF für "Hello world \ n" genommen?

Steve
quelle