Dört Spiral Ekseni


9

Sayıları alın ve her bir basamağı kendi ayrı karesine 0, 1, 2, 3, 4, ...yazarak, aşağı doğru başlayarak saat yönünde spiral olarak düzenleyin .

Daha sonra, bir ekseni ve bir girdi tamsayısını temsil eden dört farklı ve tutarlı ASCII karakterinden biri (seçiminiz) göz önüne alındığında , karşılık gelen eksen boyunca kareler seçerek açıklanan sekansın nilk nterimlerini çıktılar .

Örneğin, aşağıda yarıya kadar düzenlenmiş spiral verilmiştir 29. u / d / l / rDört karakterimiz için temsil ettiğimizi varsayalım up / down / left / right. Daha sonra, ugirdi olarak verildiğinde , 0, 5, 1, 4 ...(pozitif y ekseni) nth terimine kadar çıkış yaparız . Bunun yerine verildi ise lgirdi olarak, o zaman olurdu 0, 3, 1, 1 ...kadar ninci dönem.

  2---3---2---4---2---5---2
  |                       |
  2   1---3---1---4---1   6
  |   |               |   |
  2   2   4---5---6   5   2
  |   |   |       |   |   |
  1   1   3   0   7   1   7
  |   |   |   |   |   |   |
  2   1   2---1   8   6   2
  |   |           |   |   |
  0   1---0---1---9   1   8
  |                   |   |
  2---9---1---8---1---7   2

Bunlar OEIS'deki dizilerdir:

Örnekler

d 19
[0, 1, 1, 8, 3, 7, 6, 2, 1, 5, 1, 1, 6, 2, 2, 1, 3, 4, 0]

r 72
[0, 7, 1, 7, 4, 2, 8, 1, 1, 3, 1, 2, 0, 2, 3, 1, 3, 4, 6, 5, 5, 5, 7, 7, 8, 8, 9, 6, 8, 1, 1, 1, 2, 3, 1, 8, 0, 6, 1, 7, 0, 9, 2, 8, 4, 3, 2, 1, 1, 7, 2, 6, 2, 1, 3, 3, 5, 5, 3, 2, 2, 0, 4, 3, 2, 5, 4, 6, 5, 0, 5, 1]

u 1
[0]

kurallar

  • Varsa, giriş / çıktının dilinizin yerel Tamsayı türüne uygun olacağını varsayabilirsiniz.
  • Dört ekseni temsil etmek için tamsayılar kullanıyorsanız, kuralları ihlal etmeden negatif tamsayılar kullanabilirsiniz.
  • Giriş ve çıkış herhangi bir uygun yöntemle verilebilir .
  • Tam bir program veya bir işlev kabul edilebilir. Bir işlev varsa, çıktıyı yazdırmak yerine döndürebilirsiniz.
  • Standart boşluklar yasaktır.
  • Bu böylece tüm olağan golf kuralları geçerlidir ve en kısa kod (bayt cinsinden) kazanır.

Birkaç yön için negatif tamsayı alabilir miyiz?
mbomb007

@ mbomb007 Elbette, sorun olmaz.
AdmBorkBork

Çok pratik görünmüyor, ancak baştaki sıfır (yine de ima edilecek) dışında gerekli basamaklara sahip bir tamsayı döndürebilir miyiz?
Erik the Outgolfer

@AdmBorkBork Temelde aklımda böyle bir çözüm yok, sadece sormayı düşündüm. :)
Outgolfer Erik

Bir zorluk çıktı tarafından değerlendirilir. Eğer sıfır eklenmezse, bunun yanlış olacağını düşünürdüm, çünkü dize çıktısı için sıfır hariç tutulursa yanlış saymış olursunuz. Python, önde gelen sıfırlarla tamsayılar çıkarabilir, o zaman neden diğer diller olmasın.
mbomb007

Yanıtlar:


5

Python 2 , 94 89 84 83 74 72 70 bayt

WolframAlpha kullandım ve 5 n > 4n 2 + 3n üst sınırının yeterli olduğunu belirledim . Ücretsiz olarak 9 n olarak değiştirilebilir . Daha büyük girişleri denemek için, hafızanın tükenmesini önlemek 9*n*nyerine kullanın 5**n.

lambda d,n:["".join(map(str,range(5**n)))[x*(4*x+d)]for x in range(n)]

Çevrimiçi deneyin!

Talimatlar için girişler:

  • 3: doğru
  • -3: aşağı
  • -1 kaldı
  • 1 Yukarı

Rod sayesinde 14 bayt
kaydedildi Jonathan Allan sayesinde 2 bayt kaydedildi



1

Jöle ,  19  18 bayt

Mbomb007'nin Python cevabındaki 5 n numarayı kullanır

4,0jḅɗ@€ị5*D€FʋṖ0;

nSoldan bir ikili bağlantı dve aşağıdakilerden tamsayı:[-3,-1,1,3]:[v,<,^,>]

Çevrimiçi deneyin!

Hem çok daha hızlı olan hem de bu kadar küçük n için segfault yapmayan 20 baytlık bir alternatif:

²×5D€ƲFị@4,0jḅɗ@€Ṗ0;

Çevrimiçi deneyin!

Nasıl?

4,0jḅɗ@€ị5*D€FʋṖ0; - Link: integer, n; integer, d
     ɗ@€           - last three links as a dyad with sw@pped arguments for €ach (of implicit range [1,n])
4,0                -   literal list [4,0]
   j               -   join with d = [4,d,0]
    ḅ              -   convert from base n = 4*n^2+d*n+0
        ị          - index into...
              ʋ    - last four links as a monad:
         5         -   five
          *        -   exponentiate = 5^n
           D€      -   decimal list of each (in implicit range [1,5^n])
            F      -   flatten into a single list of the digits
               Ṗ   - pop (drop the final element)
                0; - prepend a zero

1

önemli miktarda çalışacak (+1000 gibi)

JavaScript (Node.js) , 104 bayt

f=(d,n)=>--n?[...f(d,n),C(n*(4*n+d))]:[0]
C=(n,N=i=0)=>n>N?C(n-N,(p=10**i)*9*++i):+((p+--n/i|0)+"")[n%i]

Çevrimiçi deneyin!

açıklama

  • 3: doğru
  • -3: aşağı (-3 yoruma göre yasaldır)
  • -1 kaldı
  • 1: yukarı (@ mbomb007 gibi)

Champernowne sabitinin C'inci basamağı

________________________________________________________

Daha az verimli yöntem (1000+ için çalışmayacak)

JavaScript (Node.js) , 81 bayt

f=(d,n)=>eval(`for(r=[],s=i=I="";I<n;)(s+=i++)[u=I*(4*I+d)]&&r.push(s[I++,u]),r`)

Çevrimiçi deneyin!


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.