Für meine CS-Klasse hat uns mein Kursleiter den Auftrag gegeben, ein Rechteck aus Sternchen mit diagonalen Linien in Java zu erstellen.
Er sagte uns auch, wir sollten es in so wenigen Bytes wie möglich schreiben. Ich habe es auf 190 Bytes reduziert, aber ich muss ein paar finden, um diesen Code noch weiter zu vereinfachen und die Bytes zu verringern. Kann mir jemand dabei helfen?
Dieser Code ist funktionsfähig:
interface d{static void main(String[]a){for(int z=0,w=new Byte(a[0]),h=new Byte(a[1]);z<h*w;){int y=z/w,x=z++%w;System.out.print((x>w-2)?"*\n":(y%(h-1)*x*((y-x)%3)==0)?"*":" ");}}}
Eingabe ist 10 10
.
Ausgabe:
**********
** * * *
* * * **
* * * *
** * * *
* * * **
* * * *
** * * *
* * * **
Antworten:
logischerweise sollte es jedes Mal Asterik ("*") geben
i == j
&i+j==w-1
(für Diagonalen),i == 0
&j == 0
(für obere und linke Seite) undj == w-1
&i==h-1
(für rechte und untere Seite) ein ) geben.quelle
System.out.println()
und alle nutzlosen Leerzeichen zwischen den OR-Pipes (||
) und dem ternären Operator.Der von Ihnen angegebene Code könnte folgendermaßen reduziert werden:
Der resultierende Code wäre:
Hinweis: In der Beispielausgabe der Frage fehlt die letzte Zeile! Die Ausgabe des Beispielcodes ist unterschiedlich.
quelle
Ich habe kein Java auf meinem Computer, daher kann ich das nicht testen, aber ich denke, es sollte für 174 Bytes funktionieren und könnte fast definitiv mehr Golf spielen
Leerraum zur Verdeutlichung eingefügt:
print "* \ n" für das letzte Zeichen in jeder Zeile, "*" für alle ersten und letzten Zeilen und die erste Spalte und "*" für alle Zeiten, in denen die Summe aus Zeile und Spalte gerade ist, andernfalls wird gedruckt ""
quelle