Einführung
Gestern habe ich ein Geburtstagsrätsel gesehen . Glückwunsch!!
Auch diese Woche habe ich eine Folge der Fernsehsendung Bones gesehen, in der eine Leiche unter einem Baum begraben gefunden wurde. Um den Zeitpunkt des Todes zu berechnen, zählten sie die Baumringe.
Baumringe entstehen, weil Bäume im Winter langsamer und im Sommer schneller wachsen. So können Sie das Alter des Baumes durch Zählen der Ringe berechnen. Sie können auch natürliche Ereignisse wie Regen- oder Trockenzeiten beobachten.
Herausforderung
n >= 1
Schreiben Sie mit einer Ganzzahl als Eingabe ein vollständiges Programm, um die Altersringe des Baums auszugeben.
Da sich die Form von Ringen ändern kann, verwenden Sie drei verschiedene Zeichen ('0', '*', '+'), um die Klimazyklen anzuzeigen.
Alter 1
0
Alter 2
***
*0*
***
Alter 3
+++++
+***+
+*0*+
+***+
+++++
Alter 4
0000000
0+++++0
0+***+0
0+*0*+0
0+***+0
0+++++0
0000000
Die Größe des Baumes ist ein Quadrat von Seiten 2*n - 1
Gewinnen
Kürzester Code in Bytes gewinnt.
('0', '*', '+')
so 5 Jahre ist*
Antworten:
K5,
2730262522 BytesDieser Ansatz "umschließt" iterativ einen Kern (beginnend mit
"0"
) auf allen vier Seiten mit einem anderen Zeichen ({4(|+y,)/x}
). Die Reihenfolge der saisonalen Umhüllungen wird durch eine Modulo-3 (3!
) -Sequenz bestimmt. Es ist etwas umständlich, den Basisfall genau richtig auszurichten.bearbeiten:
Diese Alternative erstellt das gesamte rechteckige Array auf einmal aus dem angegebenen exklusiven Bereich (
!
), der umgekehrt und nach dem Ablegen eines Elements (t,1_|t:|
) mit sich selbst verbunden wird . Wir nehmen dann das kartesische Produktmaximum (u|\:u:
), nehmen die gesamte Matrix Modulo 3 (3!
) und indexieren das Array von Zeichen.In Aktion:
quelle
BBC Basic, 93 Bytes
Die abgekürzten Stichwörter helfen hier sehr. In Zeile 2 verwende ich den
VDU
Befehl (entspricht Cputchar()
), um jedes Zeichen zu drucken. Das ist viel effizienter alsP.MID$("0*+",p MOD3+1,1)
.Hier läuft es in BeebEm3 auf einem Mac:
quelle
CJam, 25 Bytes
Teste es hier.
Erläuterung
quelle
Matlab, 63 Bytes
Beispiel:
quelle
Python 2, 83 Bytes
Druckt zeilenweise. Jede Zeile ist in drei Teile geteilt:
Für
n=4
:Wir generieren den linken Teil in umgekehrter Reihenfolge, indem wir die
w
letzten Zeichen klonen2*i
und dann die Originalversion ohne das erste Zeichen hinzufügen.quelle
Python 2, 83 Bytes
Wenn wir uns den Baum als Koordinatengitter vorstellen, wird das Symbol at
(i,j)
durchmax(abs(i),abs(j))%3
oder gleichwertig bestimmtmax(i,-i,j,-j)%3
. Für jede Zeile verbindeni
wir die Symbole in dieser Zeile und drucken sie aus.quelle
R
zweimal und es ist länger als 5 Zeichen, so dass die Zuweisung gewinnt.Pyth, 23 Bytes
Probieren Sie es online aus: Demonstration
Erläuterung:
quelle
MATLAB,
807873 BytesDanke Luis Mendo, dass du mir geholfen hast, 5 Bytes zu rasieren!
Beispiel
Ungolfed und Code Erklärung
Kleinere Anmerkung
bwdist
ist eine Funktion, die Teil der Bildverarbeitungs-Toolbox ist und nur in MATLAB ausgeführt werden kann. Octave (IIRC) ist noch nichtbwdist
implementiert, daher kann dies nicht in Octave ausgeführt werden.quelle
eye
und multiplizieren Sie Element-weise mit seinerrot90
'ed-Version, um die "seed" -Matrix zu generieren:I=eye(2*input('')-1);a='0*+';a(mod(bwdist(I.*rot90(I),'chessboard'),3)+1)
Python 2, 134 Bytes
quelle
Perl, 118 Bytes
Mehr zu tun, aber vorerst eine Basisversion. Jetzt mit leckerer Extra-Spezifikation.
Verwendung:
quelle
Matlab 92
quelle
Sed,
277252 Zeichen(251 Zeichen Code + 1 Zeichen Befehlszeilenoption.)
Erwartet Eingaben im unären Format.
Probelauf:
quelle
JavaScript (ES6), 114
Verwenden der Warnung für die Ausgabe - schlechte proportionale Schriftart und das Ergebnis ist hässlich. Im folgenden Snippet wird die Warnung an den ausgeschnittenen Körper weitergeleitet, um ein besseres Ergebnis zu erzielen. Der Zeilenvorschub innerhalb der Backticks ist signifikant und wird gezählt.
Testen Sie das Snippet in Firefox.
quelle
Test running the snippet in Firefox
aber offensichtlich war ich nur ein Scherz, Chrome (keine Version von Chrome) ist nicht EcmaScritpt 6-konform, es fehlen die=>
Funktionen....
. Noch weit von ES6Ruby, 85 Zeichen
Probelauf:
quelle
Mondschrift - 104 Bytes
quelle
C 138 Bytes
Funktion
t
mit einem ganzzahligen Parameter - dem Alter.Ungolfed (mit der
main
Funktion, die oben genannten einfach auszuführen):Das
stdlib.h
kann auf manchen Systemen notwendig sein, da ohne es der Rückgabetyp der nicht deklarierten Funktioncalloc
standardmäßig auf würdeint
. Daint
und müssenchar*
nicht unbedingt gleich groß sein, könnte ein ungültiger Zeiger eingeschrieben werdenc
. In den meisten 32-Bit - Systemen beidechar*
undint
haben die gleiche Größe, aber das ist nicht wahr für 64-Bit - Systeme.quelle