Vier spiralförmige Achsen

9

Nehmen Sie die Zahlen 0, 1, 2, 3, 4, ...und ordnen Sie sie im Uhrzeigersinn an. Beginnen Sie nach unten und schreiben Sie jede Ziffer in ein eigenes Quadrat.

Geben Sie dann bei einem von vier unterschiedlichen und konsistenten ASCII-Zeichen (Ihrer Wahl), die eine Achse darstellen, und einer Eingabe-Ganzzahl ndie ersten nTerme der beschriebenen Sequenz aus, indem Sie Quadrate entlang der entsprechenden Achse auswählen.

Zum Beispiel ist unten die angeordnete Spirale bis zur Mitte durch 29. Angenommen, wir verwenden u / d / l / rfür unsere vier Zeichen, die darstellen up / down / left / right. Dann geben uwir als Eingabe 0, 5, 1, 4 ...(die positive y-Achse) bis zum ndritten Term aus. Wenn wir stattdessen lals Input gegeben würden, wäre es 0, 3, 1, 1 ...bis zum ndritten Term.

  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

Dies sind Sequenzen auf OEIS:

Beispiele

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]

Regeln

  • Falls zutreffend, können Sie davon ausgehen, dass die Eingabe / Ausgabe in den nativen Integer-Typ Ihrer Sprache passt.
  • Wenn Sie Ganzzahlen verwenden, um die vier Achsen darzustellen, können Sie negative Ganzzahlen verwenden, ohne die Regeln zu verletzen.
  • Die Eingabe und Ausgabe kann durch jede bequeme Methode erfolgen .
  • Entweder ein vollständiges Programm oder eine Funktion sind akzeptabel. Wenn es sich um eine Funktion handelt, können Sie die Ausgabe zurückgeben, anstatt sie zu drucken.
  • Standardlücken sind verboten.
  • Dies ist daher gelten alle üblichen Golfregeln, und der kürzeste Code (in Bytes) gewinnt.
AdmBorkBork
quelle
Können wir für ein paar Richtungen negative ganze Zahlen nehmen?
mbomb007
@ mbomb007 Klar, das wäre OK.
AdmBorkBork
Scheint nicht sehr praktisch, aber können wir eine Ganzzahl zurückgeben, die die erforderlichen Ziffern außer der führenden Null hat (was sowieso impliziert wäre)?
Erik der Outgolfer
@AdmBorkBork Grundsätzlich habe ich keine solche Lösung im Sinn, dachte nur zu fragen. :)
Erik der Outgolfer
Eine Herausforderung wird anhand der Ausgabe beurteilt. Wenn also die Null nicht enthalten ist, würde ich denken, dass dies falsch wäre, da Sie es falsch zählen würden, wenn die Null für die Zeichenfolgenausgabe ausgeschlossen wäre. Python kann Ganzzahlen mit führenden Nullen ausgeben. Warum also nicht andere Sprachen?
mbomb007

Antworten:

5

Python 2 , 94 89 84 83 74 72 70 Bytes

Ich habe WolframAlpha verwendet und festgestellt, dass eine Obergrenze von 5 n > 4n 2 + 3n ausreichend zu sein scheint. Es kann kostenlos auf 9 n geändert werden . Verwenden Sie zum Ausprobieren größerer Eingaben 9*n*nanstelle von 5**n, um zu vermeiden, dass der Speicher knapp wird.

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

Probieren Sie es online aus!

Die Eingaben für Anweisungen sind:

  • 3: richtig
  • -3: runter
  • -1 links
  • 1: auf

Gespeichert 14 Bytes dank Rod
Gespeichert 2 Bytes dank Jonathan Allan

mbomb007
quelle
1

Gelee ,  19  18 Bytes

Verwendet den 5 n- Trick aus der Python-Antwort von mbomb007

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

Eine dyadische Verbindung nlinks dund eine ganze Zahl von:[-3,-1,1,3]:[v,<,^,>]

Probieren Sie es online aus!

Eine 20-Byte-Alternative, die sowohl viel schneller ist als auch für ein so kleines n keinen Fehler aufweist, ist:

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

Probieren Sie es online aus!

Wie?

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
Jonathan Allan
quelle
1

wird für beträchtliche n arbeiten (wie +1000)

JavaScript (Node.js) , 104 Bytes

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]

Probieren Sie es online aus!

Erläuterung

  • 3: richtig
  • -3: down (-3 ist laut Kommentaren legitim)
  • -1 links
  • 1: up (wie @ mbomb007)

C-te Ziffer der Champernowne-Konstante

________________________________________________________

Weniger effiziente Methode (funktioniert nicht für 1000+)

JavaScript (Node.js) , 81 Byte

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

Probieren Sie es online aus!

DanielIndie
quelle
0

Stax, 13 bytes

â╞ê←τ"(]]⌐┘?N

Run and debug it

It takes input with the direction, followed by the count. Right, up, left, and down are 1, 3, 5, and 7 respectively. It takes a full minute to run the three provided test cases.

recursive
quelle