“N NE E SE S SW W NW” yazdır


47

Bu neredeyse önemsiz görünüyor, ancak bazı çabalardan sonra J'deki değişmez çözümü yenemediğimden, bunun iyi bir meydan okuma yapabileceğini düşündüm (açık olmak gerekirse, bu J'ye özgü bir meydan okuma değil).

Başlık her şeyi söylüyor. Dönen ya da basan bir program ya da işlev (argüman almayan) yazmanız yeterlidir:

N NE E SE S SW W NW

Yeni satırları boşluk yerine kullanabilirsiniz.

Dizge dizisi döndüren bağımsız değişken işlevi

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

ayrıca kabul edilebilir.

Harfler büyük veya küçük harf olabilir, ancak karıştırılmayabilir.


9
Belki de herhangi bir sıraya göre çıktı almalarına izin vermek biraz daha ilginç olurdu
Jo King

3
@JoKing Elbette, onu kaldıracağım. Açıkçası, kimsenin tam anlamıyla değeri kullanan cevaplar göndermesini beklemiyordum - bu sorunun özü değil. Ben çünkü devlet olarak, geldi değildi bir çeşit dize sahip düzenlilik ve yapısına rağmen, J literal yenmek mümkün. Bütün mesele bu düzenliliği, gerçek bir cevabı yenmek için kullanmak. Daha açık olmadığım için kötü. Onlara herhangi bir sipariş vermek, onu da yener, bu yüzden bu değişikliği yapmak istemiyorum.
Jonah

3
Ben yaşadım en umut verici bir fikir @UnrelatedString yol tarifini uygun nota olduğunu i güçlere kaldırdı 0, 0.5, 1, 1.5, 2, 2.5, 3, 3.5. Ne yazık ki daha sonra bu sonuçları harflerle eşlemek için gereken J kodu değişmezden daha pahalıydı.
Jonah

1
Ah, akıllı! Haritalamanın Gauss tamsayıları için daha iyi çalışıp çalışmayacağını merak ediyorum, bu 1, 1+i, i, -1+i, -1, -1-i, -i, 1-iyüzden iki yerine kardinal yön başına gerçek veya hayali bir bölümünüz var. Eğer bu güçler yuvarlak etmemin bir yolu var sürece, o karşın, yine de üretmek için daha çok muhtemelen i 0'dan uzakta? J'de bunun ne kadar kolay ya da zor olacağını bilmiyorum, ama bu bir fikir.
İlişkisiz String

3
Girdilerin, aynı zamanda, naif "bu dize eko" versiyonunu karşılaştırma için kendi dillerinde göstermesi ve kısaltılmış yüzdelerin yargılanması konusunda yargılaması gerektiğini düşünüyor.
Dewi Morgan

Yanıtlar:


18

Tuval , 12 bayt

>X½+T)AuS{⁹‟

Burada dene!

Dize, basitçe sıkıştırılmış.


2
Bunun nasıl çalıştığını biraz daha ayrıntılı olarak açıklayabilir misiniz?
Dillanm

2
@Dillanm diyecek çok fazla şey yok - Canvas yerleşik bir kompresöre sahiptir (ctrl + o → string sıkıştırma ile erişilebilir olmalıdır), burada basitçe gereken karakterleri saklar ( "NESW ") ve daha sonra base-5 içinde bireyi saklar karakter.
dzaima

56

bash (24 bayt)

ayraç genişletme kullanmak

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

sabit kodlama ile aynı uzunluktadır

echo N NE E SE S SW W NW

ancak pusulanın daha fazla noktasını çıkarırken daha ilginç hale gelir

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

ayraç genişletme

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

Aksi taktirde, sipariş değiştirilebilirse (17 bayt), püf nokta empy string parametresinin tırnak işaretleri olmadan kaybolmasıdır.

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

1
Bu ilginç, boş pozisyonunuz olduğunu bilmiyordum ayraç ifadesi!
kusur

1
@flawr Chrooting yaparken kullanışlıdır:mount -t proc{,,}
gronostaj

7
Veyacp file{,.bak}
Oliphaunt

43

Mornington Crescent , 4395 3823 bayt

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

Çevrimiçi deneyin!

Bunları okumanı beklemek biraz fazla olduğundan, yaklaşımımı hızlıca gözden geçirmeme izin ver. Ana fikir karakter 3 kopya saklamaktır N, E, S, WBanka aracılığıyla Çember hattında çeşitli istasyonlarında - Hammersmith. Bu karakterler Charing Cross'ta bir istasyon adının başından itibaren oluşturulmuştur. Daha sonra,   Mile End ve Charing Cross kullanarak iyi seçilmiş bir istasyon adının ortasından inşa edin ve birleştirme işleminde Hammersmith'te toplanabilmesi için Banka'da saklayın. Sonunda, karakterleri Paddington'da birer birer birleştirme, daha sonra tekrar kullanılması gerektiğinde bunları tekrar Banka - Hammersmith aracılığıyla kopyalamak.


Şu anki çözümün bu stratejiyle, en azından ziyaret edilen istasyon sayısı bakımından en iyisine yakın olduğunu düşünüyorum: sadece 2 kez bir istasyonu sadece geçiş için kullandım :

  1. Sisters (Victoria istasyonu) ile nasıl gidilir?
  2. ve Mornington Crescent'e (Banka aracılığıyla) geri dönmek için.

Diğer tüm istasyon ziyaretleri, birisini unutmadıysam, ya yararlı bir şeyi saklamak / almak ya da (bir kısmını) istasyon yeteneğini kullanmaktı.

Çizgi uzunluklarına gelince, Circle Line üzerindeki en kısa isimleri seçmeye çalıştım, ancak orada küçük bir gelişme olabilir. İlçe üzerinde bir şey saklamak birkaç bayt tıraş olabilir.


Bunu biraz daha Negolfe sokmak için iki fikir: 1. 'NE', 'SW', 'NW', 'SE' yi tek bir istasyondan alın (örneğin asden, Swiss Cottage, Acton To wnve Mansion Hou kullanarak se) 2. Paddington daha kolay `ziyade W` bitiştirmek kolaylaştırır gerçeği W . Bu, Paddington'u 'yenilemek' için biraz daha fazla masrafa ihtiyaç duyar, bu nedenle hiçbir şey kazanamayabilir.
Ayrık kertenkele

4
Bu Dollis Hill döngü kurallarını kullanıyor mu? Öyleyse, Argyle Street parabolü ve belki de Webb-Ellis'in protokolünün biraz değiştirilmiş bir versiyonu kullanılarak geliştirilebileceğini düşünüyorum.
Richard Ward,


24

brainfuck , 142 139 131 119 bayt

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

Çevrimiçi deneyin!

Hücreleri 30, 70, 80 ve 90 ile doldurmak için basitçe 10 kez döngü yapın, ardından geriye ve ileriye doğru adım atar ve gerekli karakterleri yazdırmak için hücre değerlerini ayarlar. "Merhaba dünya!" Standardından çok da farklı değil.


7
Lol Kimsenin bu karanlık dilleri nasıl "golf" yapabildiğini anlamadım. İlk başta kodun ne yaptığını anlamak yeterince zor (bunun C ++ / Java arkaplanından
geldiği söylenir

10
@ mackycheese21 ne? C ++ size işaretçi manipülasyonunu sevmeyi öğretmedi mi?
candied_orange

12
brainfuck ezoterik olabilir, ama kesinlikle belirsiz
demezdim

3
@candied_orange C ++ bana işaretçi manipülasyonundan nefret etmeyi öğretti ve biri std :: :) 'den bahsettiğinde
kaçmayı öğretti

1
@ İlgisizString müstehcen, hayır. Geniş, evet.
Zengin

14

Brain-Flak , 204 bayt

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

Çevrimiçi deneyin!


4
Kaydırma için düşülecek noktalar.
Zengin

12

MarioLANG , 249 221 bayt

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

Çevrimiçi deneyin!



10

Excel Formülü, 59 57 bayt

Bir dizi formülü ( Ctrl+ Shift+ Enter) olarak aşağıdakiler girilmelidir :

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

Formülü bir dizi formülü olarak girdikten sonra, formül çubuğunda vurgulayın F9ve sonucu döndürmek için kullanarak değerlendirin , örneğin:

Önce:
Formül değerlendirmesinden önce

Sonra:
Formül değerlendirmesinden önce

Nasıl çalışır

ADDRESSİşlevin iki parametrelere dayalı bir başvuru temsil eden bir dize döndürür, rowve col. Üçüncü parametre, ne tür bir referansın döndüğünü, mutlak veya göreceli bir referansı kontrol eder. Örneğin, =ADDRESS(1,2,4)geri döner "B1".

Bir dizi sağlayabilir ADDRESSve çok sayıda sonuç döndürmek için bir dizi formülü olarak kullanabiliriz, örneğin =ADDRESS(1,{1,2,3},4)döndürür "A1","B1","C1".

Bu nedenle, cevabımda, verilen dizi ADDRESSsadece gerekli pusula noktalarına ilişkin sütun numaralarıdır, örneğin Sütun 14 sütun N, Sütun 369 sütundur NE.

Tüm iade referanslar örneğin satır dahil olması ancak, biz burada bitmedi, N1, NE1. Bu nedenle, sadece tüm referanslardan SUBSTITUTEkaldırmak için kullanıyoruz 1.


1
Misiniz =IF(1,"N NE E SE S SW W NW")geçerli olması?
Monica

3
@squid Evet gerçekten olurdu! Ancak, dize sözlü alıntı yapılmasını gerektirmeyen bir alternatif için gidiyordum.
i_saw_drones

Bu nasıl çalışıyor?
anatolyg

@anatolyg Bir açıklama bölümü ekledim, anlaşılabilir olduğunu umuyorum.
i_saw_drones


7

Kömür , 14 bayt

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

Çevrimiçi deneyin! Bağlantı, otomatik geliştirici dizge sıkıştırmasıyla ilgilendiği için, sadece yazdırılacak dizge olan kodun ayrıntılı bir versiyonudur.

Dize sıkıştırılmamış olarak basılması, 19 bayt alır çünkü Kömür kömürü tam olarak yazdırılabilir ASCII yazdırır. Maalesef bulabildiğim en iyi algoritmik cevap 20 bayt:

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

Çevrimiçi deneyin! Dizi biçimini kullanarak çıktılar (öğeleri boşluklarda birleştirmek için iki bayta mal olur). Dize harflerinin SNWEyalnızca geçerli dış indeks eşit olduğunda veya indeks listesinin karşılık gelen elemanından her iki yönde 1 uzakta olduğunda (modulo 8) kullanıldığını fark ederek çalışır 4,0,6,2.


7

brainfuck , 117 bayt

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

Çevrimiçi deneyin!

Bu kod önce "EN SW" karakterlerini belleğe oluşturur ve sonra bunları yazdırmak için ileri geri hareket eder. Alan ortada, çünkü en sık yazdırılıyor. N ve S ve W ve E hiçbir zaman birlikte görünmezler, böylece hafızanın zıt taraflarında olurlar. Optimizasyon için bazı son azalmalar çıkış aşamasında gerçekleşir.


1
Tamam, güzel bir cevap. Sanırım bu konuda beni yendin. -1 için +1 :-)
ElPedro

1
BTW, demeyi unuttum, Code Golf sitesine hoş geldiniz. Gelecekte seninle rekabet etmek için bekliyorum ☺
ElPedro

1
Hoşgeldiniz! Program için çevrimiçi bir tercümana bir açıklama ya da bağlantı eklemeyi düşünün. Örnekler için diğer cevaplara bakınız. Yalnızca kısa kod yanıtları, otomatik olarak düşük kaliteli olarak işaretlenme eğilimindedir.
mbomb007

1
Teşekkürler, kodum hakkında bir açıklama ekleyebilirim. Ayrıca çevrimiçi bağlantıların nasıl çalıştığını anlamaya çalışacağım.
Helena,

1
@Helena Bağlantı için cevabımdaki "Çevrimiçi Deneyin" bağlantısını kontrol edebilirsiniz. Kodunuzu yapıştırıp çalıştırırsanız, link simgesine tıklayabilir ve buraya kolayca kopyalayıp yapıştırabileceğiniz mükemmel biçimlendirilmiş bir kod golf yanıtı alabilirsiniz. Büyü gibi çalışır ve birçok dili destekler. İyi denemeye değer.
ElPedro


5

Jöle ,  16  15 bayt

“¤œỵpq⁵’ṃ“NESW 

Yazıyı basan tam bir program

Çevrimiçi deneyin!


16 ...

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

(Küçük harf) karakter listelerinin bir listesini veren bir niladik Bağlantı.

Çevrimiçi deneyin!


Alternatif (15) karakterlerin (boşluklu) listesini veren bir niladik Bağlantı olarak “¡XÇŀqỵÑ’ṃ“¡⁴ṁ».


5

Commodore BASIC (TheC64Mini, C64, C128, VIC-20 vb.) 28 Kullanılan Tokenized BASIC baytları

 0 PRINT"N NE E SE S SW W NW

Commodore BASIC'te tercüman tarafından otomatik olarak kapanacağı için kapanış tırnak işaretini PRINTveya LETifadeleri gerekmez , bu bir BASIC belirtecini kurtarır.

Alternatif olarak, aşağıdaki gibi doğrudan modu kullanabilirsiniz:

Commodore BASIC 23 PETSCII karakter (+ RETURNyürütmek için)

?"N NE E SE S SW W NW

Emin tercüman göre bu durumda kullanılan bayt sayısını saymak nasıl değilim ?ve PRINTaynı sayıda bayt kullanın ve hafızasında kayıtlı hiçbir program yoktur.


1
PRINT?dört byte tasarruf ederek de değiştirilebilir .
James,

1
Hayır, bu doğru değil; PRINTve ?aynı miktarda BASIC belirteçleri kullanın. Tercüman tarafından kullanılabilir hafızanın ne kadarının kullanıldığını pek temsil etmediğinden PETSCII karakterlerini saymıyorum.
Shaun Bebbers

1
Bunca yıldan sonra hala Commodore hakkında yeni şeyler öğreniyorum. Teşekkürler Shaun! c64-wiki.com/wiki/BASIC_token
James

İşte daha önce yaptım bir tane (C64 için) -> pastebin.com/NMYzTC7k
Shaun Bebbers

4

Japt , 16 bayt

Küçük harfli dizelerin bir dizisini döndürür. Sıkıştırılmış dize 18 byte'dı ancak abunun yerine sınırlayıcı olarak kullanıyordu ve sonra bunun üzerinde bölünerek daha kısa sürede çalıştı.

`nÂà!Z°°nw`qa 

Deneyin - altbilgi çıktıyı biçimlendirir.


4

Deadfish ~ , 138 bayt

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

Çevrimiçi deneyin!

Bu nedenle, küçük harflerle newlines ile çıktı almak varsayılandan daha iyidir (boşluklu büyük harf).

Bu kod, optimize edicim tarafından C ++ ile yazılmış ( başka bir optimizasyon fikri için mürekkep balığı sayesinde !):

#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

Toplu iş dosyası, 19 bayt

Soru hiçbir zaman çıktı almanız gerektiğini N NE E SE S SW W NWve başka hiçbir şey yapmadığınızı, ne yaptığından sonra hata nedeniyle çıkamayacağınızı söylemedi ;

N NE E SE S SW W NW

Çıktı

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

Toplu iş dosyası, 25 bayt

Yalnızca N NE E SE S SW W NWhatasız veya çökmeyen çıktılar.

@echo N NE E SE S SW W NW

Bir alıntı ile cd yerine sadece tırnak, gibi olabilir 'N NE E SE S SW W NW'- gibi bir şey alırsınız: N NE E SE S SW W NW - command not found
Dewi Morgan

4

Python2, 59 bayt

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

Sihirli sayı, karakter sırasına dizilen üç bitlik dizindir, ters sırayla LSB'de yinelemeye başlayabiliriz.


Sihirli sayıyı küçültmeye çalışırken biraz zaman harcadım, ancak fazladan endekslere izin vermek için karakter dizesini çoğaltmakla tekrarlamak, boşluk için kodlama yapmak zorunda kalmayacağından işe yaramadı; Sihirli sayıdan kaldırılan rakamlardan daha çok dize (ortada birkaç talihsiz umurumda değil):

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

Neden karmaşık hale getirebiliyorken neden basitleştiriyorsunuz? :-)
GB

4

K (ngn / k) , 23 22 bayt

Ngn sayesinde -1 bayt!

"WNES"@5\7108085518230

Çevrimiçi deneyin!

J , 3430 bayt

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

Çevrimiçi deneyin!


Galen, J'nin yankılanması için hazır bilgi daha kısa olacaktır. O ritmi görmeyi çok isterdim ...
Yapmayı

1
Evet, yankı 4 + 19 bayt olur. Daha iyi bir fikrim yok.
Galen Ivanov

1
k: için " "<-> "W"( üs 5'te 0<-> 4) yer değiştirirsek, alan sonunda olur ve onu kaldırabiliriz, çünkü sınır dışı dizge indekslemesi yine de bir boşluk verir:"WNES"@5\7108085518230
ngn

@ngn Teşekkürler!
Galen Ivanov

1
Üst performans veritabanları için @GalenIvanov iyi de :) arthur için altta yatan dil olarak k tasarlanmış + KDB
ngn


3

Brachylog , 19 bayt

"NNEESESSWWNW"ḍ₄ḍᵐc

Çevrimiçi deneyin!

Liste halinde çıktılar. ḍ₄ḍᵐcYedi boşluk yazması ve bütünün bir dizgede değişmez hale gelmesi üzerine iki bayt kaydeder, bu yüzden en azından PHP'yi bağlar ...

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

Zeki olmaya çalıştım 3⟦{;"NESW"↺₍h₂a₀ᶠ}ᵐc, ancak SE ya da NW'yi doğru anlayamadım ve zaten bir bayt oldu.


3

Boşluk , 151 bayt

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

Harfler S(boşluk), T(sekme) ve N(yeni satır) yalnızca vurgulama olarak eklenmiştir.
[..._some_action]sadece açıklama olarak eklendi.

Çevrimiçi deneyin (yalnızca ham alanlar, sekmeler ve yeni satırlarla).

Açıklama:

  1. "WN W WS S ES E TR N" karakterleri için unicode değerlerini eksi sabiti 84'e istifleyin (dizenin tersine itildiğine dikkat edin). Ek olarak, mümkün olduğunda bayt tasarrufu yapmak için önceden basılan değerlerin birkaç kopyasını kullanıyorum.
  2. Ardından, aşağıdakileri yapan sonsuz bir döngü başlatın:
    1. 84 sabitini geçerli unicode değerine ekle
    2. STDOUT'a karakter olarak yazdır

Sabit 84, Whitespace'de cevapladığım başka bir zorluk için yazdığım bu Java programı tarafından üretildi .


3

MathGolf , 20 17 bayt

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

@ Maxb sayesinde -3 bayt .

Çevrimiçi deneyin.

Açıklama:

ÿ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 bayt . Bu eğlenceli bir mücadele oldu. Daha önce denedim, ama yaptığın yerde bitti. Bundan en fazla 1 byte daha fazla şey yapabileceğinizi düşünüyorum ama daha kısa bir yol bulamadım.
maxb

@ maxb Ah güzel yaklaşım. Bu blok büyüklüğü kodunun ( Éve Äbu durumda) bazen hala biraz kafamı karıştırdığını itiraf etmeliyim ki: Bazen bu kod bloklarını ne zaman kullanacağımdan veya kullanmak zorunda olmadığımdan emin değilim. Sizin m+mesela birini kullanmaz. Ama sizin 1 Äbüyüklüğünde bir kod bloğunuz. mÅî╪Henüz ne olduğunu görmeye çalıştım , bu yüzden şimdi neden 1 büyüklüğünde bir kod bloğunun Äbaşladığını anlıyorum . :)) Yine de -3 bayt için teşekkürler. Hala öğreneceğim çok şey var.
Kevin Cruijssen

1
Güzel açıklama! Bunu bir karakter listesine dönüştürmeden bir çözüm bulmaya çalıştım, ama zip komutu biraz garipti. Kod blokları için bunları yerine kullanılanlar olarak düşünün {}. mÅî╪eşleştirmeyi oluşturur, ancak eşlemenin içinde bir for döngüsü yoktur. Eğer yazarsanız m{î{╪}}, kodun "eşleyiniz: loop <index> times ve her döngüyü döndürün" olduğunu görmek daha kolaydır. Bir m+komutun olmamasının nedeni , belirli komutların 1 baytlık blokları (harita, filtre, azaltma, vb.) İçermesidir, ancak îbir blokla birlikte kullanılması amaçlanan bir komut değildir.
maxb

1
@ maxb Gerçekten kod bloklarının daha kısa bir varyantı olduğunu biliyordum {...}, ama bir tür integer{döngü olduğunu unuttum . :) Şimdi îÄ╪çok daha mantıklı geliyor. Açıklama için teşekkürler!
Kevin Cruijssen


2

Tohum , 6014 bayt

27 32429737401852232227804295321578416370544555457622262891879921280324727410131817586348135470079420921373938348260737299348550007805068404867624897650263347568409592608258945989033792510474363164709158118555665232935403908551415888090695760298337219819413274977014408722140235669339108001709528995376914900494019798521214727367535169036319615676199584661126257462974800782884967804763256678000063025237472650538076831876942979826335539886276642624472204985016283691316313249488093825552581263195700506490263014623798470563718844847334940964632636436478404543496272112184140337568637349767918641524452384959486975049813859244670160569884744538279036643294867674161431756929550170395739925307134312406291063668809195567313928307910934660574895433141956111513050736041440669472422865481546405020220238818265794921314653725749392385549924210837964649297239381603259476675148489582680939048820717739905271461370132524025785160026801625672272913416389786086946626728842588663673416395169524016926695769334183833366462685756958054189820999370092892855665559717806826530952610964256124463840218293029538229042911551526509745973128558291005365222643503139067010483637086697955919587162384655443959408291567894061028044826636171014388153130769792397282335858985323269310727311039012381122390183102126191168963870116881629339035600546009305431793687183913979054151312200573069395058914262857368132993952655571167118263728070696377852599343989848263167312887211748226689125561718255196655446099711296568221690530717651328503948183228932786503716890383195810396161663632504174142420921735055441162618914957825032056019218584287089599270312541933094119409995775035365862244691419255488688879630142415739738796957474249592086989231999568273454247198389863139439897248192949030226324637037937607004428557202644332945222019553599908855943840883606735602486216245714280716148378430738983808375466562604692991701163078094015860708365913183037140180020776525026891135163345427911749533164462233906885068864798951466382247930357444595606617682531499045805835102155190109668901179666311163071611393282924908189215675892953256826649762594463293867383921972181952997833560371571545190945543033351108064265894854803319008655145213765667074789305055723258530694850418765677462165413557272747961130459219342146615095862014137406489375157766959799291089215740196734079295172946350338663239451562589633216908805028629767462044463310475859283605554743731396818983359527612902567406307270838160926586311672252276690909354125055468912844343806046309796590149977323343332039095076680537362333773750051043281967620781236684580688649899599894791764969639275247700776637892615729757899608628514791667795106390376246890330575517824338764219021396958188958235055290896924249770944905659304681507478975095888248103169710912376599445302527257479613158446721050489233911736089191439017996962182413511012900366501119556105789078275149705515012300827868862038071066912823449506913958912235923323638505757204526506327010926007595704417253684932596231606733027284263178479840785607928320603259662026791082244015829365605451084366715394628351636563955621161378688550003390556445245074739462307110100863024184316465734324401688465928827408449165190271528329602702373730346394803239394173490819727873116531045433457650881080122796159241596543253982402471104065237941729677594379317274541529006952959000152687275974001138315010176843925599438278290218390644740919129323109582279220437886915496736885058271413958305953151184342725824729076581370881383360210631877985352671536000503948280559301633936877162466145026758809907939645467704805892486147550057845773849575278620555906080753862688722846292689494961297512113753414009189522365247542490200336579292488067953461299023326925661887077747288500270026888774635820948696015812357241781814592351848858954139716506111479475207696790949277211077720834891880913260866501916732427370806066035548982017315826213049658915419681842381914237502216614528174237875875738156132703973666564945026254499265910704148825037630761619650949635972980035630316257135212349181639940504547722767898302879234673272154028964478458469466250102554612059368293497511404163963705442187242769706586819405113285219700159125119338601931670779192478917206878107091618448093140705173062420040261126935373689918208815797991761563304607704283868972915636425613833785564679990574095368828308776724486415005128506687942819070129022911666887363253202695416103545769073021185132010920185208632024811337544715055406031297413168802089421761798020616230024290524096396092608042069087607272534874457093977610919233750725135220581682913316085638068663247820037223692942067994551786014033707387642820855601334002540339334606906772532939337779748305357112540312103757754695577077583846897693527091162962000082213332051059005644562753372638247584982354478224403477604356150912451128591138652721098074872513196253790561736352841309810909110001754673250730698454675988798465247376421075019414107337634079281061629221783859449063069175434073835673063716565555614782886016441814199915418848976070834414782427725187820926042778984081922550398210353288229598805397201850487997254871012213762289412828417039945896819359898337616122446201299182152276549340911589671291124887672310931868023491872685227548726494469798568145715500153324646857181224645073236602344526749192704938665584870007079941922775292601106345725659322322536675461008337648982039319953181733660980694781559207671567197161027796266390879206526082137700937056380629087949633487181507979286568656291044492869916694352395542638882544967807857391058161838343109606346401310155771709714142586733985703451391374159045025205718989407293651441039802247981386993858491342422355232055341447145969376687615001834650283116652856369804298047720786536278306210551862061566639283704928517998916884505819581251906693306116531467413995747910736025576089721150597919824878333808115757216261812226145636769545796913912159437533454858286778214791559458862216426856243544801486923659355580455048265633089421966932180992

Aşağıdaki befunge programını oluşturur:

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

2

Hodor , 177 bayt

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

Çevrimiçi deneyin!


2

Montaj (x86, Linux), 68 bayt

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

Kaynak:

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'

Kod "Merhaba dünya \ n" için en kısa ELF'den alındı.



Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.