treffen:codegolfing:001_gc

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
Letzte Überarbeitung Beide Seiten, nächste Überarbeitung
treffen:codegolfing:001_gc [2017/12/14 13:54]
max
treffen:codegolfing:001_gc [2021/05/05 07:34]
max ↷ Seitename wurde von treffen:codegolfing:001 auf treffen:codegolfing:001_gc geändert
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 | 1/5 |  
 + 
 **Eingabe**:  **Eingabe**: 
 <code> <code>
Zeile 30: Zeile 42:
  
 {{ :treffen:20171204_codegolfing_001_02.pdf |Download der Beschreibung}} {{ :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.txt
  • Zuletzt geändert: 2021/08/25 08:14
  • von max