Danke an @CKothenschulte für die letzte Code Kata.
Ich habe mal etwas im Netz gestöbert und bin auf diese schöne Kata hier gestoßen: Wonderland number
Übersetzt lautet die Aufgabe wie folgt. Gesucht wird eine Zahl, die folgende Eigenschaften hat:
sie besteht aus 6 Ziffern
wenn man sie mit 2,3,4,5 oder 6 mutlipliziert, so hat die berechnete Zahl die gleichen Ziffern wie die ursprüngliche Zahl. Der einzige Unterschied besteht in der Position der Ziffern.
Viel Vergnügen bei der Suche nach der Lösung.Natürlich ist wie immer alles an SAS Mitteln erlaubt: Datastep, Makro, proc fcmp, proc lua, usw.
Wer seine Lösung vergleichen möchte oder zu ungeduldig ist, kann hier spicken:
data result; keep i multiple:; array multiples[6] $6; array multiples_sorted[6] $6; array digits[6] _temporary_; do i=100000 to 999999 / 6; /* nach der Multiplizierung mit größtem Wert muss die Zahl immer noch 6 stellig sein. Daher größtmöglicher Wert geteilt durch 6 */ multiples[1] = put(i , 6.); multiples[2] = put(i * 2 , 6.); multiples[3] = put(i * 3 , 6.); multiples[4] = put(i * 4 , 6.); multiples[5] = put(i * 5 , 6.); multiples[6] = put(i * 6 , 6.); do multi=1 to 6; /* Sortierung aller Ziffern in aufsteigender Reihenfolge */ do digpos=1 to 6; digits[digpos] = substr(multiples[multi], digpos,1); end; call sortn(of digits[*]); multiples_sorted[multi] = cats(of digits[*]); end; /* Vergleich ob alle sortierten Ziffern gleich sind */ if multiples_sorted[1] = multiples_sorted[2] and multiples_sorted[1] = multiples_sorted[3] and multiples_sorted[1] = multiples_sorted[4] and multiples_sorted[1] = multiples_sorted[5] and multiples_sorted[1] = multiples_sorted[6] then output; end; run;
... View more