treffen:codegolfing:002_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:002_gc [2018/04/04 20:29]
127.0.0.1 Externe Bearbeitung
treffen:codegolfing:002_gc [2021/05/05 07:36]
max
Zeile 1: Zeile 1:
-====== 002 CodeGolfing - Zahlenspirale ======+{{:treffen:codegolfing:nautiluscutawaylogarithmicspiral.jpg?400|}} 
 + 
 +[[https://creativecommons.org/licenses/by-sa/3.0/deed.de|CC-BY-SA 3.0]] by [[https://commons.wikimedia.org/wiki/User:Chris_73|Chris 73]] at Wikimedia Commons. [[https://de.wikipedia.org/wiki/Datei:NautilusCutawayLogarithmicSpiral.jpg|Link]] 
 + 
 +====== 002Zahlenspirale ====== 
 + 
 +| Serie | [[treffen:codegolfing|CodeGolfings]] | 
 +| Von | [[user:nopx|nopx]] | 
 +| Datum | 06.Januar 2017 | 
 +| Download | {{ :treffen:20171216_codegolfing_002.pdf |Aufgabenbeschreibung [pdf]}} | 
 +| Schweirigkeit | 3/5 |  
 **Eingabe**:  **Eingabe**: 
 <code> <code>
Zeile 47: Zeile 58:
 ] ]
 </code> </code>
 +
 +
 +==== Lösungen ====
 +=== Max (Perl) 470B ===
 +{{ :treffen:document.pdf |Beschreibung.pdf}}
 +<code>
 +use POSIX;$n=$ARGV[0];$d=ceil sqrt$n;sub v($$){$_[$_[0]<$_[1]]}sub c($$){$_[$_[0]>$_[1]]}sub len{1+length@_[0]}sub g{($x,$y)=@_;$s=0;$l=c(c($x,$y),$d-v($x,$y)-1);$s+=v(1,4*$d-8*$_-4)for 0..$l-1;$u=$d-2*$l;$a=$y-$l;$b=$x-$l;$s+=$a==0?($b+1):$b==$u-1?($u+$a):$a==$u-1?(3*$u-$b-2):$b==0?(4*$u-$a-3):0;$s>$n?0:$s;}for(0..$d-1){$z=$_;for(0..$d-1){$q=$_;$m=0;$g=g($q,$_),$m = $g>$m?$g:$m for 0..$d-1;$j=g($_,$z);print"-"x(($_!=0)+len($m)-len($j));print$j!=0?$j:'-';}print$/;}
 +</code>
 +
 +<code>
 +use POSIX;
 +
 +$n=$ARGV[0];
 +$d=ceil sqrt$n;
 +
 +sub v($$){$_[$_[0]<$_[1]]}
 +sub c($$){$_[$_[0]>$_[1]]}
 +sub len{1+length@_[0]}
 +
 +sub g {
 + ($x,$y)=@_;
 + $s=0;
 + $l=c(c($x,$y),$d-v($x,$y)-1);
 + $s+=v(1,4*$d-8*$_-4) for 0..$l-1;
 +
 + $u=$d-2*$l;
 + $a=$y-$l;
 + $b=$x-$l;
 +
 + $s+=$a==0?($b+1):$b==$u-1?($u+$a):$a==$u-1?(3*$u-$b-2):$b==0?(4*$u-$a-3):0;
 + $s>$n?0:$s;
 +}
 +
 +for(0..$d-1) {
 + $z=$_;
 + for(0..$d-1) {
 + $q=$_;
 + $m=0;
 + $g=g($q,$_),$m = $g>$m?$g:$m for 0..$d-1;
 + $j=g($_,$z);
 + print"-"x(($_!=0)+len($m)-len($j));
 + print$j!=0?$j:'-';
 + }
 + print$/;
 +}
 +</code>
 +
 +
  • treffen/codegolfing/002_gc.txt
  • Zuletzt geändert: 2021/08/25 08:15
  • von max