treffen:codegolfing:001_gc

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu der Vergleichsansicht

Nächste Überarbeitung
Vorherige Überarbeitung
treffen:codegolfing:001_gc [2017/12/02 17:36]
max angelegt
treffen:codegolfing:001_gc [2021/08/25 08:14] (aktuell)
max
Zeile 1: Zeile 1:
-====== 001 CodeGolfing - Schlangenlinie ======+{{: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]] 
 + 
 +====== 001Schlangenlinie ====== 
 + 
 +| 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**:  **Eingabe**: 
 <code> <code>
Zeile 17: Zeile 29:
 <code> <code>
 $python script.py 3 106 $python script.py 3 106
-1---5---9------13------17  ... 101---------105--- +1---5---9-------13------17  ... 101---------105--- 
--2-4-6-8-10–12---14--15--  ... ---102---104---106 +-2-4-6-8-10–-12---14--15--  ... ---102---104---106 
---3---7----11------15----  ... ------103---------+--3---7----11-------15----  ... ------103---------
 </code> </code>
  
 **Abgabe**:  **Abgabe**: 
-Samstag 16.Dezember 2017   16:00 Uhr+Samstag 16.Dezember 2017   16:00 Uhr im Space 
 + 
 +Dort schauen wir uns die unterschiedlichen Lösungen an.
  
 Bei Fragen: info@vspace.one Bei Fragen: info@vspace.one
 +
 +{{ :treffen:20171204_codegolfing_001_02.pdf |Download der Beschreibung}}
 +
 +==== Tests ====
 +Die folgenden Testfälle wurden überprüft.
 +<code>
 +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": " \n 2 \n  3\n"},
 + {"name": "3-5", "d": 3, "l": 5,"result": "  5\n 2 4 \n  3  \n"},
 + {"name": "3-10", "d": 3, "l": 10,"result": "     \n 2 4 6 8 10\n  3      \n"},
 +]
 +</code>
 +
 +
 +
 +==== Lösungen ====
 +
 +=== 1. Platz ===
 +Perl von Max mit 187 Bytes. Alle Tests bestanden.
 +<code>
 +$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$/}
 +</code>
 +
 +In sauber:
 +<code>
 +$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$/
 +}
 +</code>
 +
 +
 +=== 2. Platz ===
 +JavaScript von Michael mit 225 Bytes. Hat Probleme mit d=1. Das führt zu einer mehrfachen Ausgabe von NaN.
 +<code>
 +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<d;k++)k!=p&&(r[k]=null==r[k]?" ":r[k]+" ".repeat(j.toString().length));p+=i,p==d-1&&(i=-1),0==p&&(i=1)}for(i in r)console.log(r[i])
 +</code>
 +
 +In sauber:
 +<code>
 +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])
 +}
 +</code>
 +
 +=== 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.
 +<code>
 +#include <stdio.h> 
 +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<k){p=l;while(p!=0){p/=10;w++;}l++;}if(v!=0)printf("%-*c",v,' ');printf("%-*d",w,j);j=k;u++;}printf("\n");h++;}}
 +</code>
 +
 +In sauber:
 +<code>
 +#include <stdio.h>
 +//#inlcude <stdlib.h> 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<k) {
 +                p=l;
 +                
 +                while(p!=0) {
 +                    p/=10;
 +                    w++;
 +                }
 +                l++;
 +            }
 +            
 +            if(v!=0)
 +                printf("%-*c",v,' ');
 +            
 +            printf("%-*d",w,j);
 +            
 +            j=k;
 +            u++;
 +        }
 +        
 +        printf("\n");
 +        h++;
 +    }
 +}
 +</code>
 +
 +
  • treffen/codegolfing/001_gc.1512236161.txt.gz
  • Zuletzt geändert: 2020/10/18 14:01
  • (Externe Bearbeitung)