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
Nächste Überarbeitung Beide Seiten, nächste Überarbeitung
treffen:codegolfing:001_gc [2017/12/10 20:55]
max
treffen:codegolfing:001_gc [2020/10/18 14:01]
127.0.0.1 Externe Bearbeitung
Zeile 19: Zeile 19:
 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>
  
Zeile 30: Zeile 30:
  
 {{ :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