{{:treffen:schlangenlinie.jpg?400|}}
[[https://creativecommons.org/licenses/by-sa/3.0/|CC BY-SA 3.0]] by [[https://de.wikipedia.org/wiki/M%C3%A4ander#/media/Datei:Nowitna_river_retusche.jpg|Oliver Kurmis]]
====== 001: Schlangenlinie ======
| Serie | [[treffen:codegolfing|CodeGolfings]] |
| Von | [[user:nopx|nopx]] |
| Datum | 16.Dezember 2017 |
| Download | {{ :treffen:20171204_codegolfing_001_02.pdf |Aufgabenbeschreibung [pdf]}} |
| Schweirigkeit | {{:treffen:problemsolving:progress1.png?nolink&160 |}} |
**Eingabe**:
wobei
0 < d < 100
0 < l < 10.000
**Aufgabe**:
Schreibe ein Programm das zwei Zahlen als Argumente entgegen nimmt und eine Schlangenlinie ausgibt. Die Schlangenlinie läuft über d Zeilen. Wobei die Zahlen von 1 bis l sich durch die Zeilen schlängeln. Dabei muss der Whitespace so angepasst werden dass die Zahlen spaltentechnisch betrachtet direkt an einander anschließen. Für die Zahl l besteht außer der genannten keine Beschränkung. Sie muss also nicht auf die Anzahl Zeilen (d) aufgehen. Die Zeilen müssen alle bündig enden.
**Beispiel**:
Wobei ‘-’ = Space
$python script.py 3 106
1---5---9-------13------17 ... 101---------105---
-2-4-6-8-10–-12---14--15-- ... ---102---104---106
--3---7----11-------15---- ... ------103---------
**Abgabe**:
Samstag 16.Dezember 2017 16:00 Uhr im Space
Dort schauen wir uns die unterschiedlichen Lösungen an.
Bei Fragen: info@vspace.one
{{ :treffen:20171204_codegolfing_001_02.pdf |Download der Beschreibung}}
==== Tests ====
Die folgenden Testfälle wurden überprüft.
testcasesEchoString = [
{"name": "1-1", "d": 1, "l": 1,"result": "1\n"},
{"name": "1-11", "d": 1, "l": 11,"result": "1234567891011\n"},
{"name": "2-3", "d": 2, "l": 3,"result": "1 3\n 2 \n"},
{"name": "2-11", "d": 2, "l": 11,"result": "1 3 5 7 9 11\n 2 4 6 8 10 \n"},
{"name": "3-3", "d": 3, "l": 3,"result": "1 \n 2 \n 3\n"},
{"name": "3-5", "d": 3, "l": 5,"result": "1 5\n 2 4 \n 3 \n"},
{"name": "3-10", "d": 3, "l": 10,"result": "1 5 9 \n 2 4 6 8 10\n 3 7 \n"},
]
==== Lösungen ====
=== 1. Platz ===
Perl von Max mit 187 Bytes. Alle Tests bestanden.
$d=$ARGV[0];$l=$ARGV[1];for(1..$d){$r=$_;for(1..$l){$z=$d==1?1:($_+(($_-1)/(2*$d-2)))%(2*$d-1);$z=$z>$d?$d-($z-$d):$z;if($z==$r){print$_;}else{print(" "x(1+(log($_)/log(10))));}}print$/}
In sauber:
$d=$ARGV[0];$l=$ARGV[1];
for (1..$d) {
$r=$_;
for (1..$l){
$z=$d==1?1:($_+(($_-1)/(2*$d-2)))%(2*$d-1);
$z = $z>$d?$d-($z-$d):$z;
if($z==$r){print$_;}
else{print($"x(1+(log($_)/log(10))));}
}
print$/
}
=== 2. Platz ===
JavaScript von Michael mit 225 Bytes. Hat Probleme mit d=1. Das führt zu einer mehrfachen Ausgabe von NaN.
for(x=process.argv,d=x[2],l=x[3],r=new Array(d).fill(0),p=0,i=j=1;j<=l;j++){for(r[p]+=j,k=0;k
In sauber:
x = process.argv
d = x[2]
l = x[3]
r = new Array(d).fill(0)
p = 0
i = 1
for (j = 1; j <= l; j++) {
r[p] += j
for (k = 0; k < d; k++) {
if (k != p) {
r[k] = r[k] == null ? ' ' : r[k] + ' '.repeat(j.toString().length)
}
}
p += i
if (p == d - 1) {
i = -1
}
if (p == 0) {
i = 1
}
}
for (i in r) {
console.log(r[i])
}
=== 3. Platz ===
C von Robin mit 337 Bytes. Hat Probleme mit d=1. Das führt zu einer endlosen Ausgabe von einsen. Außerdem stimmen die Enden der Zeilen nicht bündig.
#include
int main(int b,char *a[]){int h,i,j,k,l,m,n,p,u,v,w,x,y;x=atoi(a[1]);y=atoi(a[2]);h=1;for(i=1;i<=x;i++){j=h;u=0;while(j<=y){m=(x-1)*2;n=(x-i)*2;n=u%2==0?n:m-n;n=n==0?m:n;v=j<=x?i-1:0;w=0;k=j+n;l=j;while(l
In sauber:
#include
//#inlcude kann weg
int main(int b,char *a[]) {
int h,i,j,k,l,m,n,p,u,v,w,x,y;
x=atoi(a[1]);
y=atoi(a[2]);
h=1;
for(i=1;i<=x;i++) {
j=h;
u=0;
while(j<=y) {
m=(x-1)*2;
n=(x-i)*2;
n=u%2==0?n:m-n;
n=n==0?m:n;
v=j<=x?i-1:0;w=0;
k=j+n;
l=j;
while(l