Java, 318 312 297 294 260 258 Bytes
Dank Cliffroot 15 Bytes gespart !
interface a{static void main(String[]A){int b=Byte.valueOf(A[0]),B=Byte.valueOf(A[1]),C=3+b*2;String c="";if(b<2&B<2)c="o";else{for(;C-->0;)c+="_";for(;B-->0;){c+="\n|";for(C=b;C-->0;)c+=" o";c+=" |";}c+="\n";for(C=3+b*2;C-->0;)c+="-";}System.out.print(c);}}
Es funktioniert mit Kommandozeilenargumenten.
Ungolfed In einer für Menschen lesbaren Form:
interface a {
static void main(String[] A) {
int b = Byte.valueOf(A[0]),
B = Byte.valueOf(A[1]),
C = 3 + b*2;
String c = "";
if (b < 2 & B < 2)
c = "o";
else {
for (; C-- > 0;)
c += "_";
for (; B-- > 0;) {
c += "\n|";
for (C = b; C-- >0;)
c += " o";
c += " |";
}
c += "\n";
for(C = 3 + b*2; C-- >0;)
c += "-";
}
System.out.print(c);
}
}
Ja, es ist immer noch schwer zu verstehen, was los ist, auch wenn das Programm nicht voll ist. Hier folgt eine schrittweise Erklärung:
static void main(String[] A)
Die ersten beiden Befehlszeilenargumente -die wir bekommen ABMESSUNGEN können verwenden werden , wie im Programm verwendet werden A[0]
und A[1]
(jeweils).
int b = Byte.valueOf(A[0]),
B = Byte.valueOf(A[1]),
C = 3 + b*2;
String c = "";
b
ist die Anzahl der Spalten, B
ist die Anzahl der Zeilen und C
ist eine Variable, die für die Verwendung in for
Schleifen vorgesehen ist.
c
ist das Legostück. Wir fügen Zeilen hinzu und drucken sie am Ende.
if (b < 2 & B < 2)
c = "o";
else {
Wenn das zu druckende Stück 1x1 ist, sollten sowohl b
(Anzahl der Spalten) als auch B
(Anzahl der Zeilen) kleiner als 2 sein. Deshalb setzen wir einfach c
auf ein einzelnes Stück o
und fahren dann mit der Aussage fort, dass System.out.print
das Stück ist, wenn dies der Fall ist.
for (; C-- > 0; C)
c += "_";
Hier fügen wir (integerValueOfA[0] * 2) + 3
Unterstriche an c
. Dies ist die oberste Reihe vor allen Löchern.
for (; B > 0; B--) {
c += "\n|";
for(C = b; C-- > 0;)
c+=" o";
c += " |";
}
Dies ist die Schleife, in der wir das Stück zeilenweise konstruieren. Was im Inneren vor sich geht, ist ohne Beispiele nicht zu erklären. Nehmen wir an, das Stück ist 4x4:
Before entering the loop, c looks like this:
___________
After the first iteration (\n denotes a line feed):
___________\n
| o o o o |
After the second iteration:
___________\n
| o o o o |\n
| o o o o |
After the third iteration:
___________\n
| o o o o |\n
| o o o o |\n
| o o o o |
.
c += "\n";
for (C = 3 + b*2; C-- > 0;)
c += "-";
Hier fügen wir (integerValueOfA[0] * 2) + 3
dem Stück Bindestriche hinzu. Dies ist die Reihe ganz unten unter allen Löchern.
Das 4x4-Teil, mit dem ich die for
Schleife erklärt habe, in der das Teil tatsächlich aufgebaut ist, sieht jetzt so aus:
___________\n
| o o o o |\n
| o o o o |\n
| o o o o |\n
| o o o o |\n
-----------
System.out.print(c);
Und zum Schluss drucken wir das Stück!