Ein gekreuztes Quadrat erstellen
Sie müssen eine ganze Zahl oder mehrere eingeben und ein Quadrat aus einem beliebigen druckbaren Zeichen Ihrer Wahl mit einem diagonalen Kreuz durch die Mitte ausgeben.
Die allgemeine Idee ist, dass die Ausgabe ein hohles Quadrat ist, durch das ein diagonales Kreuz verläuft:
Input: 7
Output:
*******
*# #*
* # # *
* # *
* # # *
*# #*
*******
Im obigen Beispiel repräsentieren die '*' den äußeren Rahmen und die '#' das diagonale Kreuz.
Beachten Sie, dass im obigen Beispiel zwei verschiedene Zeichen verwendet werden, damit Sie besser sehen können, wie die Ausgabe aussieht. Ihr Programm sollte nur ein Zeichen verwenden.
Eingang
Eine ganze Zahl von 1 oder mehr ist garantiert ungerade.
Ausgabe
Ein Quadrat, das sich aus einem Charakter Ihrer Wahl mit einem Kreuz durch die Mitte zusammensetzt.
- Das Kreuz muss diagonal sein
- Das Quadrat kann über die Funktion ausgegeben oder in die Ausgabe geschrieben werden
- Nachgestellte Zeilenumbrüche sind in Ordnung
- Kann auf Wunsch auch als Grafik, Diagramm oder Bild ausgegeben werden
Beispiele
Input: 1
Output:
*
Input: 3
Output:
***
***
***
Input: 5
Output:
*****
** **
* * *
** **
*****
Input: 7
Output:
*******
** **
* * * *
* * *
* * * *
** **
*******
Technische Daten
- Funktionen oder Vollprogramme sind erlaubt
- Sie können Eingaben auf Ihre bevorzugte Weise erhalten
- Standardlücken sind nicht zulässig
- Programme müssen ohne zusätzliche Anweisungen funktionieren, dh
using
s inC#
, sie müssen im Eintrag enthalten sein - Sie können eine Funktion ausgeben oder das Ergebnis ausdrucken
Dies ist Codegolf, also gewinnt die kürzeste Lösung.
0,1,2,3,...
?n
und ein Quadrat drucken kann2n+1
.*
es Eingang 1, aber für ihn wird es Eingang 0 sein?1
würde Ihr Beispiel für ergeben3
.Antworten:
MATL ,
20 -19 -17 BytesSie können es in MATL online experimentell ausprobieren . Möglicherweise müssen Sie die Seite aktualisieren, wenn dies nicht funktioniert.
Probelauf:
ASCII-Version: 19 Byte
Probieren Sie es online!
quelle
VBA Excel, 168 Bytes
Anweisung:
Ich finde, Excel mit Hilfe von VBA ist ein effektives und ausreichendes Werkzeug für diese Herausforderung. Stellen Sie das Arbeitsblatt von Excel wie folgt ein
Ja, wir verwenden die kleinen, klassischen quadratischen Pixel wie in früheren Zeiten, indem wir die Zellen in einem Arbeitsblatt als Pixel verwenden. Haha...
Hier verwende ich die Zelle A1 als Eingabe und ändere ihre Schriftfarbe in Rot. Warum rot? Da Rot aus drei Buchstaben besteht, eignet es sich auch zum Golfen. Schreiben Sie den folgenden Code und führen Sie ihn im Direktfenster aus:
Ungolfed den Code:
Schritt für Schritt Erklärung:
Durch die Diagonale der Entfernungszellen gehen:
Cells(i, i).Interior.Color = vbRed
Letzter Schritt und Ausgabe:
Cells(i, N + 1 - i).Interior.Color = vbRed
quelle
Cells.RowHeight=48:set r=[A1]:r.Resize(r,r).Interior.Color=0:[B2].Resize(r-2,r-2).Clear:For i=1To[A1]:set r=Union(r,Cells(i,i),Cells(i,r-i+1)):Next:r.Interior.Color=0
JavaScript (ES6), 96 Byte
quelle
Python 2, 65 Bytes
Verwendet Jonathan Allans Idee, Binärzahlen wie folgt auszugeben:
Die Zeilen werden mit Bitarithmetik erstellt und binär dargestellt. Jeder Teil ging in den Rest ein. Die Teile werden durch Potenzen von 2
n
(fest) undi
(fallend) über erzeugt1
n
i
undn/i
n-1
wanni==1
oderi==n
.Tatsächlich werden (1) und (4) kombiniert, indem
1
wann1<i<n
und aufn-1
andere Weise produziert wird.quelle
Python,
114 110 9690 BytesTotal verändert:
Gibt eine Liste von Zeichenfolgen, Zeichen mit
1
und zurück0
.-6 Bytes dank TheBikingViking
Teste es bei ideone
Vorheriges Python 2 @ 110
Teste es auf ideone
quelle
lambda n:[bin(sum(2**p for p in[range(n),{0,n-1,r,n-1-r}][0<r<n-1]))[2:]for r in range(n)]
.Java 7,
131130128125124122 Bytes3 Bytes gespart dank @LeakyNun ;
1 Byte gespart dank @ OliverGrégoire in meiner Antwort für das Zeichnen eines hohlen Quadrats von # mit gegebener Breite Herausforderung;
2 Bytes gespart dank @cliffroot .
Ungolfed & Testcode:
Probieren Sie es hier aus.
Ausgabe:
quelle
String c(int n){String r="";for(int i=-1,j;++i<n;r+="\n")for(j=0;j<n;r+=i<1|j<1|n-i<2|n-j<2|i==j|i==n-++j?"*":" ")return r;}
4 Bytes gespeichert;
hinter der inneren for-Schleife brauchen .i-->0
eher sein alsn-->0
und Sie können auchi*j<1
anstelle voni<1|j<1
2 Bytes verwendenMatlab,
68 66 6458 BytesDa die grafische Ausgabe auch erlaubt ist:
Welche Ausgänge z
Die ASCII-Versionen wären:
Dies nutzt die Indizierung
0,1,2,3,...
Alternativ mit der Indizierung
1,3,7,...
:quelle
C #,
112101 BytesVielen Dank an TheLethalCoder, der mich daran erinnert hat, dass diese anonymen Lambda-Anweisungs- und -Normal-Ausdrücke in C # zulässig sind.
Wer hat gesagt, dass C # keine unterhaltsame Golfsprache ist?
quelle
Logo, 155 Bytes
Grafische Lösung, als Funktion implementiert
Ich habe meine Antwort für Alphabet Triangle umgerüstet und die Winkel ein wenig geändert. Zeichnet nach wie vor
r
eine Zeichenreihe. Diesmal zeichnet dieb
Funktion eine Box, indem sie eine gerade Kante und eine Diagonale zeichnet, sich dreht und viermal wiederholt. Dies führt dazu, dass die Diagonalen zweimal (übereinander) gezeichnet werden, aber es war weniger Code als das separate Behandeln. Diese Antwort behandelt auch gerade Zahlen richtig. Ich musste eine spezielle Behandlung für eine Eingabe von hinzufügen1
, um zu verhindern, dass es vorwärts geht.Ich habe es als eine Funktion implementiert,
b
die die Größe als Argument nimmt:Probieren Sie es mit dem Logo-Interpreter von Calormen.com aus . Um es aufzurufen, hängen Sie eine Zeile an und rufen Sie
b
im folgenden Format auf:... oder probieren Sie den Sampler-Plattenteller, der vier Proben in den Größen 5, 7, 9 und 11 zeichnet und dazwischen um 90 Grad dreht:
quelle
R, 102 Bytes
Beachten Sie, dass es effizienter ist, die Bedingung mit% in% auszudrücken, als mit i == 1 | j == 1 | ...
quelle
n=scan();for(i in n:1){for(j in n:2){z=" ";if(i%in%c(1,n,n-j+1)|j%in%c(i,n))z="*";cat(z)};cat("*\n")}
Haskell,
102100969187 Bytesany
any
mitelem
Ungolfed-Version:
Ich bin mir sicher, dass dies noch verbessert werden kann, aber das habe ich mir erst einmal ausgedacht.
Alte Version:
quelle
[1..s]
zweimal, ich denke, Sie könnten das in definierenwhere
.c s=unlines$(\m->(m#)<$>z)<$>z where z=[1..s];m#n|or((==)<$>[n,m]<*>[1,s])||n==m||n==s-m+1='*'|1>0=' '
<$>[1..s]
in eine Funktion packen , richtig? Likec s=unlines$f(\m->f(m#))where m#n|or((==)<$>[n,m]<*>[1,s])||n==m||n==s-m+1='*'|1>0=' ';f=(<$>[1..s])
c s=unlines$f$f.(#)where f=(<$>[1..s]);m#n|or((==)<$>[n,m]<*>[1,s])||n==m||n==s-m+1='*'|1>0=' '
Java, 130 Bytes
Testprogramm
quelle
int
vorj
und Nutzungint i=0,j;
statt. Sie können auch alle||
durch ersetzen|
und die Klammern im Ternary-Check entfernen. Außerdem verwenden Sies-1
vier Mal, also würde ich dies in eine Variable einfügen. Sie können auch die==0
zu ändern<1
. Insgesamt wird es alsos->{for(int i=0,j,x=s-1;i<s;i++)for(j=0;j<s;j++)System.out.print(x-i==j|i==j|i<1|j<1|i==x|j==x?j==x?"*\n":"*":" ");}
( 116 Bytes ) ein bisschen kürzer als meine Java 7 Antwort , also netter Ansatz!C
140121114 Bytes19 Bytes danke an Quentin.
7 Bytes gespart durch Umschalten von einer doppelt verschachtelten Schleife auf eine Schleife.
Golfen Vorschläge willkommen.
quelle
int i,j;for(i=0;
zufor(int i=0,j;
int i,j;
nach dem setzenscanf
!n+~i-j
usw.#include
vollständigen Entfernen .PowerShell (133)
Klobig, aber es funktioniert gut genug.
Golfvorschläge sind definitiv willkommen, es ist zu lange her, seit ich PowerShell habe.
quelle
SILOS , 212 Bytes
Probieren Sie es online!
quelle
GNU sed,
117114 + 1 (r Flag) = 115 BytesDa sed keine native Unterstützung für Zahlen hat, wird die Eingabe basierend darauf in unary angegeben Konsens . Die zweite Hälfte des Quadrats ist die erste Hälfte, die in umgekehrter Reihenfolge im Laderaum gespeichert wurde.
Lauf:
Ausgabe:
quelle
Python, 89 Bytes
Das war ein Rückschritt! Ich habe Pythons Turtle-Modul verwendet.
Hier ist das Ergebnis, wenn n = 200 ist:
quelle
Scala,
141137 BytesLauf:
$ scala cross.scala 10
Technisch könnte ich das Druckmaterial entfernen und auf sowas gehen
Dies würde 135 oder 121 Bytes ergeben, je nachdem, ob Sie die Funktionssyntax-Informationen zählen.
Lesbare Version:
quelle
Pyth,
2725 BytesProbieren Sie es online!
Wahrscheinlich golfen.
quelle
Python 2, 83 Bytes
Ändert eine Liste der Zeichen der Zeile, um a
*
an die erste, letzte, i-te und i-te bis letzte Stelle zu setzen. Die erste und letzte Reihe beginnen wie alle*
, der Rest wie alle Leerzeichen. Funktioniert auch für Events. Einlambda
Ausdruck ist wahrscheinlich kürzer als eine Änderung, aber ich mag diese Methode.quelle
Pyke,
282423 BytesProbieren Sie es hier aus!
quelle
Mathematica, 81 Bytes
Erstellt ein Koordinatensystem mit dem Ursprung in der Mitte und berechnet, wohin das
*
s gehen soll. Gibt ein Array von Zeichenfolgen aus, eine pro Zeile.quelle
Javascript (
289.270Byte)Ungolfed:
EDIT: Dank Philipp Flenker 19 Bytes gespeichert.
quelle
size==1
Perl, 83 +1 = 84 Bytes
Laufen Sie mit der
-n
Flagge.Die Literal Newline speichert 1 Byte über
\n
oder$/
.Lesbar:
Der Code druckt die oberste Zeile und speichert sie in
$c
. Anschließend werden eine Reihe von Leerzeichen mit den entsprechenden Slots durch ersetzta
s ersetzt werden, und druckt dann die oberste Zeile erneut.Die Zuweisung zu der
$\
Variablen weist den Interpreter an, den Inhalt (ein Sternchen, eine neue Zeile und ein anderes Sternchen) nach jedem Ausdruck zu drucken.print
Dies geschieht jedoch NICHT nach einemsay
.quelle
SmileBASIC, 46 Bytes
(Nein, SB verwendet KEINE 1-indizierten Grafiken ...)
quelle
Kohle, 8 Bytes (nicht konkurrierend; Sprachnachbereitung)
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung: Zeichnet als Parameter für den
PolygonHollow
Befehl+
ein Kästchen und erstellt dann mit den Pfeilen die Diagonalen. Es gibt einige andere Verknüpfung Zeichen , aber sie müssten neu definiert werden als nützlich zBY
entspricht↖↗↓
aber wenn es eqivalent war↗↓↖
dannY+
ausreichen würde.quelle
SHELL ( 135 Bytes ):
Tests:
quelle
Kotlin ,
123116 Bytesändere wenn mit \ n zu println
Probieren Sie es online!
quelle