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 = "";
bist die Anzahl der Spalten, Bist die Anzahl der Zeilen und Cist eine Variable, die für die Verwendung in forSchleifen vorgesehen ist.
cist 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 cauf ein einzelnes Stück ound fahren dann mit der Aussage fort, dass System.out.printdas Stück ist, wenn dies der Fall ist.
for (; C-- > 0; C)
c += "_";
Hier fügen wir (integerValueOfA[0] * 2) + 3Unterstriche 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) + 3dem Stück Bindestriche hinzu. Dies ist die Reihe ganz unten unter allen Löchern.
Das 4x4-Teil, mit dem ich die forSchleife 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!