{{: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