Hintergrundgeschichte
Haftungsausschluss: Kann erfundene Informationen über Kängurus enthalten.
Kängurus durchlaufen mehrere Entwicklungsstufen. Je älter und stärker sie werden, desto höher und länger können sie springen, und desto öfter können sie springen, bevor sie hungrig werden.
In Stufe 1 ist das Känguru sehr klein und kann überhaupt nicht springen. Trotzdem bedarf es ständig der Ernährung. Wir können das Aktivitätsmuster eines Kängurus der Stufe 1 so darstellen.
o
In Stufe 2 kann das Känguru kleine Sprünge machen, aber nicht mehr als 2, bevor es hungrig wird. Wir können das Aktivitätsmuster eines Kängurus der Stufe 2 so darstellen.
o o
o o o
Nach Stufe 2 bessert sich das Känguru schnell. In jeder weiteren Phase kann das Känguru etwas höher (1 Einheit in der grafischen Darstellung) und doppelt so oft springen. Das Aktivitätsmuster eines Kängurus der Stufe 3 sieht beispielsweise so aus.
o o o o
o o o o o o o o
o o o o o
Für die Stufe n besteht das Aktivitätsmuster aus 2 n-1 V-förmigen Sprüngen der Höhe n .
Beispielsweise für die Stufe 4 gibt es 8 springt von der Höhe 4 .
o o o o o o o o
o o o o o o o o o o o o o o o o
o o o o o o o o o o o o o o o o
o o o o o o o o o
Aufgabe
Schreiben Sie ein vollständiges Programm oder eine Funktion, die eine positive ganze Zahl n als Eingabe verwendet und die ASCII- Grafikdarstellung des Aktivitätsmusters eines Kängurus der Stufe n ausgibt oder zurückgibt .
Es sind umgebende Whitespace- und ANSI-Escape-Codes zulässig, sofern das Muster genau wie oben dargestellt aussieht.
Wenn Sie eine Funktion auswählen, die die Ausgabe zurückgibt, muss sie eine einzelne Zeichenfolge oder ein einzelnes Zeichenarray zurückgeben, das beim Drucken die richtige Ausgabe anzeigt. Das Zurückgeben eines Arrays von Zeichenfolgen ist nicht zulässig.
Sie können statt eines beliebigen druckbaren Nicht-Leerzeichens ein beliebiges Zeichen verwenden o
, sofern es innerhalb des Aktivitätsmusters und über alle Muster in Ihrer Antwort hinweg konsistent ist.
Das ist Code-Golf ; möge die kürzeste Antwort in Bytes gewinnen!
o
. Können Sie auch ein beliebiges Zeichen verwenden, um die Leerzeichen darzustellen (sofern sie unterschiedlich sind?)?Antworten:
05AB1E ,
1210 BytesErläuterung:
Verwendet die CP-1252- Codierung. Probieren Sie es online!
quelle
MATLAB,
92 90 8684 BytesProbieren Sie es online!
eye
Erstellt eine Identitätsmatrix. Wenn wir es umdrehen und das Original verketten, erhalten[fliplr(p),p]
wir (fürn=3
):Mit
repmat(...,1,2^n/2)
wiederholen wir dies2^(n-1)
mal und bekommenHiermit löschen wir nur die unnötigen Spalten mit
A(:,n+1:n:end)=[];
quelle
Holzkohle , 14 Bytes
Probieren Sie es online!
Erläuterung
Nλ
gibt eine ganze Zahl in einλ
.P^
ist ein multidirektionaler Ausdruck (SE und SW) von×λo
(String-Multiplikation vonλ
mito
). DannF⁻λ¹
läuft eine for-Schleifeλ - 1
mal, in der sich‖O→
das Ganze rechts mit Überlappung widerspiegelt.quelle
P^
ist ein multidirektionaler Druck (SE und SW) " Cool, das sieht man in Programmiersprachen nicht so oft!Python 2 , 87 Bytes
Probieren Sie es online!
Verwendet eine Formel für die Koordinaten
(i,j)
, die einen Kreis enthalten. Anschließend wird das Raster verbunden und gedruckt. Hier riecht es nach Golf -''.join
zwei verschachtelte Bereiche sindfor
vorbeiexec
, daher ist mit Verbesserungen zu rechnen.quelle
Python 2,
83-81BytesProbieren Sie es online!
quelle
exec
Trick kann einige weitere speichern.Befunge,
9891 BytesDies verwendet ein
,
anstelle vono
, da dies uns ermöglicht, ein paar Bytes zu sparen.Probieren Sie es online!
Erläuterung
Ausgehend von der Stufennummer n berechnen wir zunächst die folgenden drei Parameter des Musters:
Das jump_len wird normalisiert, um zu vermeiden, dass es für ein Känguru der Stufe 1 Null ist, mit:
Wir können dann das Sprungmuster ausgeben , indem wir über die x- und y- Koordinaten des Ausgabebereichs iterieren und das entsprechende Zeichen berechnen, das für jede Position ausgegeben werden soll. Die y- Koordinate zählt von n - 1 bis 0 herunter und die x- Koordinate zählt von der Breite - 1 bis 0 herunter . Wir bestimmen, ob ein Punkt mit der folgenden Formel angezeigt werden muss:
Der Boolesche Wert show_dot wird als Tabellenindex verwendet, um das tatsächliche Zeichen zu bestimmen, das an jeder Position ausgegeben werden soll. Um Platz zu sparen, verwenden wir den Anfang der letzten Zeile der Quelle als diese Tabelle, weshalb unser
o
Charakter am Ende ein ist,
.quelle
J ,
28-25Bytes3 Bytes gespart dank @ Conor O'Brien .
Dies basiert auf dem Palindrom-Trick von @ muddyfishs Lösung .
Probieren Sie es online!
Erläuterung
quelle
' o'{~3 :'(}."1,.~|."1)^:y=i.y'
. Ich wünschte, ich könnte einen Weg finden, dieses explizite Verb zu entfernen ... Verdammt^:
.u&v
ganz nett.Pyke, 11 Bytes
Probieren Sie es hier aus!
quelle
Haskell , 100 Bytes
Probieren Sie es online! Verbrauch:
k 3
.Erläuterung:
Bei einer gegebenen Zeile
r
werden eine Spaltec
undm = 2(n-1)
eino
gesetzt, wennc mod m
gleichr
oderm-r
. Das äußerste Listenverständnis legt den Bereichr
vonn-1
bis fest0
, das nächste den Bereichc
von0
bism*2^(n-1)
und das Innerste dient als bedingte Rückgabe,'o'
wenn die obige Formel erfüllt ist und' '
ansonsten. Dies ergibt eine Liste von Strings, die in einen einzelnen, durch Newline getrennten String umgewandelt wirdunlines
. Dennn=1
die Funktion erzeugt einen Division-durch-Null-Fehler, so dass dieser Fall in der ersten Zeile explizit behandelt wird.quelle
['o'|mod c m`elem`[m-r,r]]
Teil wirklich !C #,
180, 173171 BytesGewinnen Sie nicht dieses und bekanntgeben für andere C # Bewerber als etwas, das sie schlagen können.
komplettes Programm:
edit: -7 bytes dank @KevinCruijssen
edit: -2 bytes, vereinfacht wenn
quelle
,i
; Sie könneni
anstelle desn-1
If-Checks wiederverwenden .||
kann sein|
;j++
kann entfernt und++
hinzugefügt werdenj
. Also insgesamt:(n)=>{var s=new string[n];for(int x=0,a=1,j=0,i;j<=Math.Pow(2,n)*(n*n-n);){i=j++%n;s[n-i-1]+=x%n==i?'o':' ';if(i==n-1){x+=a;a*=x==i|x==0?-1:1;}}return string.Join("\n",s);};
( 173 Bytes )||
und&&
dann im kompletten Programm behalten.Pyth , 30 Bytes
Ein Programm, das die Eingabe einer Ganzzahl akzeptiert und das Ergebnis ausgibt. Verwendet ein Anführungszeichen
"
anstelle vono
.Probieren Sie es online!
Wie es funktioniert
quelle
Python 2 ,
11511310898 BytesProbieren Sie es online!
Verwenden Sie
range(-n+1,n-1)
, um die absolute Anzahl der Leerzeichen zwischen dem Boden und demo
zu generierenden zu erstellenund dann weitere Kopien anhängen, alles um 90º drehen und die letzte
o
rechts unten anhängenquelle
J ,
5847 BytesMit der Identitätsmatrix-Idee aus der @ flawr- Lösung wurden 11 Byte gespeichert .
Probieren Sie es online!
Eine einfache Anwendung der Definition.
Erläuterung
Für
n = 3
erstellt die Identitätsmatrix der Ordnung n .Dann spiegel es zu machen
Wiederholen Sie dies 2 n -1 Mal und lassen Sie den Kopf jeder Reihe auf den Duplikaten fallen
Verwenden Sie diese Werte als Indizes in das char-Array,
[' ', 'o']
um ein 2d char-Array auszugebenquelle
JavaScript (ES6), 83 Byte
quelle
Jelly , 11 Bytes
TryItOnline!
Wie?
Das verwendete druckbare Zeichen ist
0
.Baut auf der Methode von Dennis 'Antwort auf seine vorherige Frage zum Thema Kängurus auf.
quelle
ŒḄ¡Ṭ€z0o⁶ṚY
.MATL, 27 Bytes
Probieren Sie es bei MATL Online aus
quelle
Python 3 , 177 Bytes
Probieren Sie es online!
quelle
Perl 6 ,
1049388 BytesFügt
o
s in ein 2D-Array ein und druckt es dann aus.quelle
05AB1E , 16 Bytes
Probieren Sie es online!
Warum und wie?
quelle
Java 8, 254 Bytes
Golf gespielt:
Ungolfed:
Programmausgabe:
quelle
PHP, 157 Bytes
Ungolfed:
quelle
'o'
mit1
und jedes''
mit ersetzen0
. Hoffe das klappt, auch die Leerzeichen können durchO
oder ersetzt werden9
. Wichtig ist das Muster nach den Regeln. Aber überprüfe zuerst