Bei einer Ganzzahl n ≥ 1 wird eine 2D-Darstellung † eines Prozentzeichens der Breite n ausgegeben . Der Aufbau läuft wie folgt ab:
- Erstellen eine n durch n - Matrix (oder eine Liste von Listen) , gefüllt mit Nullen.
- Fügen Sie diese oben links und unten rechts ein.
- Legen Sie diese von links unten nach rechts oben auf die Diagonale.
Für die Eingabe n = 4 würde diese Konstruktion folgendermaßen aussehen:
1. 4x4 matrix of 0s
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
2. 1s in TL and BR corners
1 0 0 0
0 0 0 0
0 0 0 0
0 0 0 1
3. 1s across BL-TR diagonal
1 0 0 1
0 0 1 0
0 1 0 0
1 0 0 1
Dies ist ein Code-Golf , also gewinnt das kürzeste Programm in Bytes.
† Ich verwende eine Matrix aus 1 und 0, aber es ist auch akzeptabel, Zeichen und Leerzeichen zu verwenden, die keine Leerzeichen sind. Das obige Beispiel könnte also so aussehen:
# #
#
#
# #
oder
# #
#
#
# #
Testfälle
n
output
1
1
2
1 1
1 1
3
1 0 1
0 1 0
1 0 1
4
1 0 0 1
0 0 1 0
0 1 0 0
1 0 0 1
10
1 0 0 0 0 0 0 0 0 1
0 0 0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 1 0 0 0 0
0 0 0 0 1 0 0 0 0 0
0 0 0 1 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 1
Schlussbemerkung
Das Hinzufügen einer Erklärung wäre sehr dankbar.
'1'+'0'*(n-2)
mit Leerzeichen eingefügt wirdAntworten:
Gelee , 6 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
²Ḷ%’¬s
oder+þ%’=2
²Ḷọ’s
ist so nah ...ḍ@
aber zwei Bytes.⁼þµ+1¦Ṫṁ³UG
... bis eine Dennis-²
Lösung auftauchte.JavaScript (ES6), 52 Byte
quelle
V , 15 Bytes
Probieren Sie es online!
Erläuterung
quelle
Python 2 ,
5857 BytesProbieren Sie es online!
quelle
GNU APL,
17-15BytesDies ist ein seltsamer Tag ... GNU hat Dyalog APL tatsächlich besiegt ... woah.
TIO unterstützt GNU APL nicht ...
Erklärung (Eingabe ist
⍵
):quelle
1=⍵∨
und es in meine Lösung implementierenPython 2 , 46 Bytes
Probieren Sie es online!
Ausgänge mögen
Python 2 , 48 Bytes
Probieren Sie es online!
Ausgänge mögen
Python 3 , 48 Bytes
Probieren Sie es online!
Ein ganz anderer Ansatz zum Ersetzen von Strings in Python 3. Ausgaben wie:
quelle
10L
10
?L
am Ende gibt, damit ich die gleiche Anzahl von Zeichen vom Ende großer und kleiner Zahlen abschneiden kann.10
und10L
war anders.Gelee , 9 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
APL (Dyalog) , 18 Bytes
Probieren Sie es online!
Damit dies für Eingang 1 funktioniert, wurden 6 Bytes hinzugefügt.
Wenn wir uns Testfall 4 ansehen, sehen wir, dass die Ausgabe ist
Dies wird im Grunde genommen in der gesamten Matrix wiederholt. Mit anderen Worten, 1 0 0 wird in einer 4-mal-4-Matrix geformt. In dieser Lösung generieren wir diesen Vektor also zuerst mit 1 und nachgestellten 0en
1=⍳⍵-1
und formen ihn dann mit⍵ ⍵⍴
. Aber das funktioniert für Eingang 1, also müssen wir eine Bedingung erstellen und 6 Bytes gewinnen ...quelle
Haskell , 55 Bytes
Zuerst bestand mein Ansatz darin, die transponierte Identitätsmatrix rekursiv zu generieren, aber dann erforderte die Korrektur der ersten und letzten Zeile einige hässliche / langwierige Fallunterscheidungen. Also suchte ich nach einem anderen Weg, um die Identitätsmatrix zu generieren, wie ich diese Idee fand.
Probieren Sie es online!
Erläuterung
generiert diese Matrix (für
n=4
):Wie Sie sehen, ist das obere linke Element
2
(im Allgemeinen), alle diagonalen Elemente sind5
(im Allgemeinenn+1
) und das untere rechte Element ist8
(im Allgemeinen2*n
). Wir müssen also nur prüfen, obx+y
es sich um ein Element von handelt[2,n+1,2*n]
.quelle
R ,
5442 Bytes-12 Bytes dank Jarko Dubbeldam
gibt eine Matrix zurück; liest aus stdin. Erstellt eine Identitätsmatrix
diag(n)
, dreht sie von oben nach unten[,n:1]
, setzt oben links und unten rechts auf1
und schreibt dann''
mit der Breite in console ( )n
.Probieren Sie es online!
quelle
pryr::f
).R+pryr
damit ich das als separate Sprache betrachte; Sie können das gerne einreichen! Dann könnten Sie die Idee aus Cows Quacks Antwort verwenden, die meiner Meinung nach in diesem Zusammenhang sogar noch kürzer wäre (ein Einzeiler).function(n)
wäre die Verwendung wahrscheinlich noch kürzerfunction(n)matrix(rep(c(1,rep(0,n-2)),n+1),n,n)
MATL , 7 Bytes
Probieren Sie es bei MATL Online!
Erläuterung
Erstelle eine Identitätsmatrix (
Xy
), drehe sie vertikal (P
) um und schreibe ((
) den Wert 1 (l
) zu den ersten und letzten Einträgen (5L
), die oben links und unten rechts sind.quelle
Dyalog APL,
121110 BytesProbieren Sie es online aus
-1 Byte dank lstefano.
Wie?
quelle
,⍨⍴×,2↓⊢↑×
(10 Bytes). Ich bin versucht hinzuzufügen: Verwenden Sie nicht zu viele Pendler ... :-PC # (.NET Core) ,
121 9188 Bytes-30 Bytes, weil der alte Weg dumm war.
-3 Bytes durch Bewegen der Variableninitialisierung
Probieren Sie es online!
Loops durchlaufen das Array, um die Einsen auszufüllen. Gibt ein Array von 1 und 0 zurück.
quelle
b
wievar
einige Bytes zu speichern.05AB1E ,
14117 BytesProbieren Sie es online!
Erläuterung
quelle
Kohle ,
14127 Bytes-5 Bytes danke an Neil !
Probieren Sie es online!
quelle
Nν◨/ν←↙ν‖O↘
, aber dann habe ich es mir ausgedacht↗N⸿/‖O↘
!⸿
macht. Wird es in die ursprüngliche Position zurückgesetzt?⸿
ist so,¶
dass es sich in einer Zeile nach unten bewegt, aber immer zur Spalte Null (gemessen anJ
) und nicht zur Spalte am Anfang der Zeichenfolge, also ist es zum BeispielJ⁵¦⁵⸿
dasselbe wieJ⁰¦⁶
.C ++, 144 Bytes
Die 1-Byte-Differenz zwischen '#' und 35 wird ausgenutzt
quelle
'#'
und35
?Mathematica, 72 Bytes
Eingang
Ausgabe
quelle
Grid@s
mits
zu speichern 5 Byte.Python 2 ,
8662 BytesProbieren Sie es online!
-24 Bytes: Dank einer Idee von Rod!
quelle
PowerShell , 67 Byte
Probieren Sie es online!
Übernimmt Eingaben
$n
und Schleifen von0
bis--$n
(dh$n
vordekrementiert). Bei jeder Iteration konstruieren wir eine Folge von1
gefolgt von$n-1
0
s und multiplizieren diese aus den3
Zeiten (z. B.100010001000
für die Eingabe von5
). Dann indizieren wir das abwechselnd von0
bis0 + $n
. Diese Zeichen werden-join
zu einer Zeichenfolge zusammengefasst, die in der Pipeline verbleibt. Die Ausgabe ist implizit.(NB - Dies erfordert zusätzliche 9 Bytes, um den Sonderfall von zu behandeln
n=1
. Unten ist der 58-Byte-Code, wenn wir garantiert sind.n>1
)quelle
Dyalog APL v16, 23 Bytes
Probieren Sie es online!
Erläuterung:
quelle
Lua, 117 Bytes
Versuch es
Code ist ziemlich einfach. Es setzt m auf das erste Argument, fügt 0 hinzu, um es in eine Zahl umzuwandeln, iteriert dann rückwärts für die Y-Koordinate, vorwärts durch die X-Koordinate und setzt ein #, wenn x == y oder wenn es die anderen Ecken sind.
Dieses Programm verwendet niemals das Schlüsselwort "if".
quelle
Oktave, 37 Bytes
Probieren Sie es online!
Erzeugt eine dünne Matrix, die das Prozentzeichen darstellt.
quelle
Japt , 12 Bytes
Gibt ein 2D-Array / eine 2D-Matrix zurück.
Probieren Sie es online! Verwendung der
-Q
Flag, um die Ausgabe im Array-Format anzuzeigen.Erläuterung
Implizit:
U
= Ganzzahl eingebenSquare
U
(²
), erstelle das Array[0, U*U)
(o
) und ordne jedes Element ...1
wenn esv
durchU-1
(UÉ
) teilbar ist , sonst0
.Stellen Sie den Punkt (
h
) bei Index 0 (T
) auf1
.Teilen Sie das Array in Segmente (
ò
) mit einer Länge aufU
.quelle
hT1
, da0
ist technisch schonU
für jeden teilbarU
.1
. Ohne diesen Wert wird der Wert zurückgegeben,[[0]]
da anscheinend Null nicht durch Null teilbar ist.PHP, 53 Bytes
Die Länge der Seite der Matrix beträgt
$l
. Dieser Code hat einen PHP-Hinweis und sogar eine PHP-Warnung für die Division durch 0, wenn$l=0
, aber macht den Job!quelle
$l
) gespeichert wird . Leider ist dies keine von uns akzeptierte Möglichkeit, Eingaben zu machen . In dem verlinkten Metapost finden Sie Alternativen, z. B. die Verwendung von Befehlszeilenargumenten, wie sie in der Antwort von Ricdesi zu sehen sind .while($i**.5<$n=$argn)echo$i++%~-$n?0:1,"\n"[$i%$n];
oderwhile($i**.5<$n=$argn)echo+!($i++%~-$n),"\n"[$i%$n];
(jeweils 52 Bytes)<?
am Anfang.Python 2 , 93 Bytes
Probieren Sie es online!
quelle
Ruby, 47 Bytes
Es gibt ein Array von Arrays zurück.
Der Code ist ziemlich einfach.
n-1
Array mit1
als erstem Element und den Rest mit0
s (zB[1, 0, 0, 0]
)n
Scheiben vonn
ElementenProbieren Sie es online!
quelle
J, 14 Bytes
Ungolfed:
Probieren Sie es online!
quelle
0=<:|i.@,~
?Python 3, 97 Bytes
Erläuterung
m=[[0+(j==n-i-1)for j in range(n)]for i in range(n)]
Dies ist ein Listenverständnis. Dies ist eine
0+(j==n-i-1)
kürzere Methode zum Konvertierenj==n-i-1
in ein int (im Gegensatz zuint
function) und ist dannm[-1]=m[0]
kürzer als das Erstellen von bottom right 1, da die oberen und unteren Zeilen identisch sind.quelle
Forth,
273 (ohne Kommentare)170 (Golfspiel)(273 Version zur Klarstellung der kommentierten Version:)
(Beachten Sie, dass das Entfernen jedes Wagenrücklaufs keinen Unterschied macht, da Leerzeichen das primäre Begrenzungszeichen in Forth ist. Einrückung natürlich.)
(Kommentiert:)
(Ausführungsbeispiele:)
(Letzte Anmerkung: Funktioniert mit einem Wert, der kleiner als die Bitbreite des Forth-Interpreters ist. Ich habe den obigen Befehl auf gforth, AMD64, ausgeführt. Ein alter 16-Bit-Forth würde nur eine Breite von 15 Bit haben und eine gewisse Modifikation erfordern.)
quelle
C # (.NET Core) , 65 Byte
Probieren Sie es online!
Der Algorithmus unterscheidet sich erheblich von der anderen C # -Antwort, daher habe ich mich entschieden, ihn separat und nicht als Verbesserung zu veröffentlichen. Inspiriert von der bestbewerteten Jelly-Antwort, habe ich vorher etwas weniger Kompaktes gemacht. Die Ausgabe ist ein lineares Array, daher ist eine gewisse Logik erforderlich, um sie außerhalb der eigentlichen Methode in ein 2D-Array zu verpacken. Eine alternative Version benötigt 6 zusätzliche Bytes, um als echtes 2D-Array auszugeben:
Ich habe auch eine interessante nicht konkurrierende Version.
Dies führt zu fast der richtigen Ausgabe, was zu einem
IEnumerable<bool>
mit true / false anstelle von 1/0 führt, und es ist eher eine lineare als eine 2D-Struktur, und obwohl dies für die genaue Codezeile nicht benötigt wird,using System.Collections.Generic
ist es notwendig, etwas Nützliches mit dem zu tun Ausgabe. Wie ich schon sagte, es ist sehr nahe daran, gültig zu sein, aber nicht ganz.quelle
?1:0
Works und ich glaube, eine Reihe des Ergebnisses sollte in Ordnung sein. Die Sammlungen, die auch verwenden, sind für diesen Code nicht erforderlich.w*w
eine Variable festlegen und dieint
Deklaration aus der Schleife entfernen?w*w
durch eine einzelne Zeichenvariable ersetzen, werden 4 Byte gespart. Wenn Sie sichint i=0
außerhalb der Schleife befinden, wird ein Semikolon benötigt, das 1 Byte kostet. Wenn Sie dann,s=w*w
zur Deklaration hinzufügen , werden 6 Byte benötigt.