treffen:codegolfing:002_gc

CC-BY-SA 3.0 by Chris 73 at Wikimedia Commons. Link

002: Zahlenspirale

Serie CodeGolfings
Von nopx
Datum 06.Januar 2017
Download Aufgabenbeschreibung [pdf]
Schweirigkeit

Eingabe:

<program> <n>

wobei:

0 < n < 1000

Aufgabe: Schreibe ein Programm das eine Zahl als Argument entgegen nimmt und darauß eine Spiralmatrix aufbaut. Alles Zahlen von 1 bis n laufen von oben links spiralförmig im Uhrzeigersinn um die Matrix in deren Zentrum. Allen Spalten müssen über '-' minimal-bündig gemacht werden. Sprich nur soviele '-' damit die jeweilige Spalte bündig wird. Zahlen >n werden nicht ausgegeben und über notwendige '-' gepadded. Die Matrix ist immer quadratisch.

Beispiel:

$python script.py 13
-1--2-3-4
12-13---5
11------6
10--9-8-7
$python script.py 2
1-2
---
$python script.py 5
1-2-3
----4
----5

Abgabe: Samstag 06.Januar 2017 16:00 Uhr im Space

Dort schauen wir uns die Lösungen an.

Bei Fragen: info@vspace.one

Download der Aufgabenbeschreibung

testcasesEchoString = [
  {"name": "1", "n": 1,"result": "1\n"},
  {"name": "2", "n": 2,"result": "1-2\n---\n"},
  {"name": "5", "n": 5,"result": "1-2-3\n----4\n----5\n"},
  {"name": "13", "n": 13,"result": "-1--2-3-4\n12-13---5\n11------6\n10--9-8-7\n"},
  {"name": "16", "n": 16,"result": "-1--2--3-4\n12-13-14-5\n11-16-15-6\n10--9--8-7\n"},
]

Max (Perl) 470B

Beschreibung.pdf

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$/;}
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$/;
}
  • treffen/codegolfing/002_gc.txt
  • Zuletzt geändert: 2021/08/25 08:15
  • von max