rekursive Zahlenreihe

CDW

0
Mitarbeiter
Eingereich von xeno:

Errechne den 30 sten Wert einer Zahlenreihe, die wie folgt aufgebaut ist:

start = 1
1 = eine eins = 11
11 = zwei einsen = 21
21 = eine zwei, eine eins = 1211
1211 = eine eins, eine zwei, zwei einsen = 111221
111221 = drei einsen, zwei zweien, eine eins = 312211

xeno:
mich würde interessieren, wie die unterschiedlichen lösungsansätze funktionieren. damit keine copy&paste lösungen rauskommen wäre das eigentliche ziel eine zusätzliche erklärung, wie das ganze angegangen wurde.
 
Ok mal schauen gar nicht so easy

Das ganze sieht mir nach einer altenrativen Darstell8ung von Zahlen aus

sprich man kann entweder sagen xy wobei x angibt wie oft y in der zahl
oder einfach dei Zahl als sich selbst e.g 1 = 1

1 : eine eins oder 11 = 1x1 = 1
11 : zwei einsen oder 21 = 2x1 = 2
21 : eine zwei, eine wins oder 1211 = 1x2+1x1 = 3
1211 : eine eins, eine zwei, zwei einsen oder 111221 = 1x1 + 1x2 + 2 x 1 = 5

Komment wir zu der Reihe selbst sie geht also von
1,2,3,5 ? Irgendwie fehlt mir da die 4 also gehen wir davon aus das es sich um die Reihe der Primzahlen handelt

gut die naechste waere dann wohl 7 aber

111221: eine Eins , eine eins, eine eins, eine zwei, eine zwei, eine eins oder 21112211 = 2x1 + 1x1 + 2x2 + 1x1 = 6 ?

6 ist nicht Prim aber warum haben wir dann 4 uebersprungen eventuell ist die Zahl egal
dann koennten wir also einfach weitermachen und das ergebnis ignorieren

21112211: eine zwei, eine eins, eine eins, eine eins, eine zwei, eine zwei, eine eins, eine eins oder 1221112221 = 1x2 + 2x1 + 1x1 + 2x2 + 2x1 = 11 (braucen wir das ueberhaupt noch)

unsere Zahlen haben immer eine gerade Anzahl von Ziffern und nun koeennen wir etwas schreiben das das mapped

Jetzt ist die Frage wie schreiben wir das am besten es ist ja rekursiv. Schauen wir uns mal unsere cases an

Wir brauchen mal eine funktion die uns eine zahl die naechtfolgende umwandelt

base case: Element 1 = 1 easy

ok jetzt die advanced es gibt 2 haup untershceidungen:
a) a Die Zahl die wir uebergeben haben ist einstellig dann ist under output 1 zahl
b) Die Zahl hat 2 oder mehr stellen:
Wir schauen ist 1. Stelle == 2. Stelle ?
Wenn ja schreiben wir 2 Zahl und haengen das vorne an die konvertirung der Zahl von 3. Stelle aufwaerts e.g original [1 1] 2 1 2= 11 => 2 1 . convert(2 1 2)
Wenn die ungleich sind dann schreiben wir 1 Zahl und haengen die konvertirung der zahl von 2. Stelle+ an. :

1 x Erste Stelle . Konvertierung 2. Stelle +.

Nun koennen wir also eine Zahl basierend auf der vorherigen berechnen

Jetzt brauchen wir nur noch was das unsere Funktion nach und nach aufruft bis wir am base case sind:
angenommen wir wollen das 30 element. Ein Element X ist defniert als reihe(x) = convert(x-1)
e.g
element(30) = konvert(element(29)) = konvert(konvert(element(28)) = konvert(konvert(konvert(element(27))) ..........

nachdem wir eh schon so schoen viel "(" haben und ich mich grade pervers fuehle werden wir das ganze in scheme schreiben :-p

Code:
(define atomic?
  (lambda (it)
    (if (pair? it)
        #f
        #t)))

(define elementat
  (lambda (n)
    (if (eq? n 1)
        (convert (list 1))
        (convert (elementat (- n 1))))))

(define convert
  (lambda (number)
    (if (null? number)
         '()
         (if (null? (cdr number))
         (cons 1 number)
         (if (eq? (car number) (cadr number))
            (cons 2 (cons (car number) (convert (cddr number))))
             (cons '1 (cons (car number) (convert (cdr number)))))))))

Code:
(elementat 30)

1221112221221112212221221221112221221221112211122122111221222122122111221221112221222122122111221112212212211122212211122122212212211122212212211122111221221221112221221112212221221221112211122122212212211122122111222122111221222122122111221221112221222122122111221112212212211122212211122122212212211122122111222122111221222122122111222122122111221112212221221221112211122122122111222122111221222122122111221112212221221221112212211122212212211122212211122122212212211122212212211122111221221112212221221221112212211122212221221221112211122122122111222122111221222122122111222122122111221112212212211122212211122122212212211122111221222122122111221221112221221221112221221112212221221221112221221221112211122122111221222122122111221221112221222122122111221112212212211122212211122122212212211122111221222122122111221221112221222122122111221112212212211122212211122122212212211122122111222122111221222122122111222122122111221112212211122122212212211122122111222122212212211122111221221221112221221112212221221221112212211122212211122122212212211122212212211122111221222122122111221112212212211122212211122122212212211122111221222122122111221221112221221221112221221112212221221221112221221221112211122122111221222122122111221221112221222122122111221112212212211122212211122122212212211122122111222122111221222122122111222122122111221112212211122122212212211122122111222122212212211122111221221221112221221112212221221221112221221221112211122122122111222122111221222122122111221112212221221221112212211122212221221221112211122122122111222122111221222122122111221112212221221221112212211122212212211122212211122122212212211122212212211122111221221112212221221221112212211122212221221221112211122122122111222122111221222122122111221112212221221221112212211122212221221221112211122122122111222122111221222122122111221221112221221112212221221221112221221221112211122122122111222122111221222122122111222122122111221112212211122122212212211122122111222122212212211122111221221221112221221112212221221221112221221221112211122122122111222122111221222122122111221112212221221221112212211122212211122122212212211122122111222122212212211122111221221221112221221112212221221221112212211122212211122122212212211122212212211122111221222122122111221112212212211122212211122122212212211122111221222122122111221221112221221221112221221112212221221221112221221221112211122122111221222122122111221221112221222122122111221112212212211122212211122122212212211122212212211122111221221221112221221112212221221221112211122122212212211122122111222122122111222122111221222122122111222122122111221112212211122122212212211122122111222122212212211122111221221221112221221112212221221221112211122122212212211122122111222122212212211122111221221221112221221112212221221221112212211122212211122122212212211122212212211122111221221221112221221112212221221221112221221221112211122122111221222122122111221221112221222122122111221112212212211122212211122122212212211122212212211122111221221221112221221112212221221221112211122122212212211122122111222122111221222122122111221221112221222122122111221112212212211122212211122122212212211122122111222122111221222122122111222122122111221112212221221221112211122122122111222122111221222122122111221112212221221221112212211122212212211122212211122122212212211122212212211122111221221112212221221221112212211122212221221221112211122122122111222122111221222122122111221112212221221221112212211122212221221221112211122122122111222122111221222122122111221221112221221112212221221221112221221221112211122122212212211122111221221221112221221112212221221221112211122122212212211122122111222122122111222122111221222122122111222122122111221112212211122122212212211122122111222122212212211122111221221221112221221112212221221221112212211122212211122122212212211122212212211122111221221112212221221221112212211122212221221221112211122122122111222122111221222122122111222122122111221112212212211122212211122122212212211122111221222122122111221221112221
 
zur überprüfung auf korrektheit kann übrigens die länge der 30. zahl angeschaut werden, die sollte im optimalfall 5808 sein ;)

gruß und viel spaß, xeno
 
Sicher @ Xeno ?
Ich komm nur auf 3945 bei 30

koennen wir mal outpout vergleichen bis 14 pls

Code:
(derive 14)
((2 1 2 2 1 2 2 1 1 1 2 2 1 1 1 2 2 1 2 2 1 2 2 1 1 1 2 2 2 1 2 2 1 1 1 2 2 1 2 2 2 1 2 2 1 2 2 1 1 1 2 2 1 1 1 2 2 1 2 2 2 1 2 2 1 2 2 1 1 1 2 2 1 2 2 1 1 1 2 2 2 1)
 (1 1 2 2 2 1 1 1 2 2 1 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 2 1 1 1 2 2 1 2 1 1 2 2 1 1 2 2 2 1 1 1 2 2 2 1 1 1 2 2 1 1)
 (1 2 2 1 1 1 2 2 2 1 2 2 1 1 1 2 2 1 2 2 2 1 2 2 1 2 2 1 1 1 2 2 2 1 2 2 1 2 2 1 1 1 2 2 1 1 1 2 2 1)
 (2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 2 1 1 1 2 2 1 2 1 1)
 (1 1 1 2 2 1 2 2 2 1 2 2 1 2 2 1 1 1 2 2 1 2 2 1 1 1 2 2 2 1)
 (1 2 1 1 2 2 1 1 2 2 2 1 1 1 2 2 2 1 1 1 2 2 1 1)
 (2 1 2 2 1 2 2 1 1 1 2 2 1 1 1 2 2 1)
 (1 1 2 2 2 1 1 1 2 2 1 2 1 1)
 (1 2 2 1 1 1 2 2 2 1)
 (2 1 1 1 2 2 1 1)
 (1 1 1 2 2 1)
 (1 2 1 1)
 (2 1)
 (1 1))
 
du hast leider fehler im code ;)

111221 = drei einsen, zwei zweien, eine eins = 312211

sorry ;)

@CDW: editierst du diese erste reihe mit einer drei mal in den first post rein?
 
Sorry hab die Zeile mit der "3" nicht gesehen ich stand under der Annahme das das System nur 1 und 2 kennt. Werd mich spaetr nochmal dran setzen.

MFG
 
Sicher, dass der 30. Wert nicht 4462 Stellen hat und erst der 31. 5808? ("1" ist ja der 1. Wert...)
Und die "Erklärung" kann man sich doch sparen. Einfach ein String der rekursiv erstellt wird. Immer die gleichen Zeichen zählen und dann Zeichen und Anzahl ausgeben...
 
stimmt, hab mich verzählt. beginnt man mit der 1, dann hat der 31. wert eine länge von 5808 und der 30. 4462.
 
Code:
// Language: Delphi Language/Pascal
// Typ: Iterativ / nicht Rekursiv!
var
  i, j,
  k, xLen: integer;
  x, y: String;
  FirstChar: Char;
  
const
  Iterations = 10;
  
begin
  x := '1';
  xLen := 1;
  for i := 0 to Iterations - 1 do
  begin
    Writeln( IntToStr(i+1):2, '. ', x );
    y := '';
    j := 1;
    while j <= xLen do
    begin
      k := 1;
      if j + k <= xLen then
      begin
        FirstChar := x[j];
        while (x[j+k] = FirstChar) and (j+k<=xLen) do
          inc(k);
      end;
      y := y + IntToStr(k) + x[j];
      inc(j, k);
    end;
    x := y;
    xLen := Length(x);
  end;
  Writeln;
  Writeln('Done!');
  Readln;
end.

Gehe alle Elemente unserer Zahl (String, da angenehmer zu handhaben) durch; zähle ab, wie oft sich ein Zeichen (Character) wiederholt; erweitere den neuen String (neuer Wert -> y) um den Faktor k und das eigentliche Zeichen; wiederhole das, bis man zum Ende der Zeichenkette (der Zahl) ankommen ist....

1. 1
2. 11
3. 21
4. 1211
5. 111221

Done!
 
wow... das muss ewig her sein, dass ich hier mal was gepostet habe. Erklaerung haengt imho hinreichend in den kommentaren. Anm: effizienztechnisch noch nicht so der burner, und es koennte eine WEITAUS einfachere loesung mit ner gramatik geben. Ich guck mir das mal nochmal an...



Code:
% recursive predicate. generates the first Y rows from the
% initial row X.
gen(X,Y) :- 
				Y >= 0,
				rrow(X,Z),
				write(Z),nl,
				Y2 is Y - 1,
				gen(Z,Y2).


% recursion anchor. these two might be redundant. Cuts to
% save some inferences.
rrow([],[]) :- !.

rrow([X|[]],[1,X]) :- !.

% main generation predicate. 
rrow([X1,X2|Rx],[Y1,X1|Ry]) :-
				% first possibility: two prefixes are identical. might
				% be more. so: count, and add to the list.
				(
					X1 == X2,
					countf([X1,X2|Rx],NRX,Y1,X1),
					rrow(NRX,Ry),
					!
				 );
				(
				% or they are not. so just put in one and go on.
					X1 \== X2,
					Y1 is 1,
					rrow([X2|Rx],Ry),
					!
				).

% count anchor for words with only one letter.
countf([X|[]],[],1,X) :- !.

% anchor for everything else
countf([X|R],[X|R],0,Y) :- 
				X \== Y,
				!.

% simple recursive count
countf([X|Rx],Ry,Acc,X) :-
				countf(Rx,Ry,Acc2,X),
				Acc is Acc2 + 1.


Mfg Tobias
 
Code:
same(Char,Count+1)   --> [Char],same(Char,Count),!.                             %parse gleiche Zeichen, zaehle Schritte
same(_,1)-->[].                                                                 %Jedes Zeichen kommt min. 1 mal vor

step([Num,C|Tokens]) --> [C], same(C,Count),                                    %zaehle gleiche Zeichen, wiederhole schritt für Rest
                              step(Tokens),!,                                   %Count ist 1+1+...+1 Form, also sollte man den Ausdruck
                              {Expr is Count, number_codes(Expr,[Num])}.        %in eine Zahl umwandeln -> Zahl in ASCII Code
step([]) --> [].
                                                                                %Suchtiefe einschränken
steps(Depth,Res,Res) :- Depth=<1.
steps(Depth,Act,Res):-  step(Step,Act,[]),
                        steps(Depth-1,Step,Res).
Aufruf:
Code:
12 ?- steps(30,"1",Res),length(Res,Len).
Res = [51, 49, 49, 51, 49, 49, 50, 50, 50|...],
Len = 4462 
13 ?- steps(5,"1",Res),atom_codes(A,Res).
Res = [49, 49, 49, 50, 50, 49],
A = '111221'

Ob das allerdings wirklich einfacher ist, wäre eine andere Frage ;)
 
juhuu :) got it :)
ist zwar nicht sauber, aber mir ist es zu spät, dass in ne saubere rekursion umzusetzen ;)
quick n dirty ;)
in php

Code:
<?php
  
  ini_set('memory_limit', '2048M');
  
  class lol {
      
      private $str = '1';
      private $pos = 0;
      private $count = 1;
      private $newstr = '';
      private $i = 0;
      
      public function __construct() {
          
          $this->check(0);
      }
      
      private function check() {
          
          $char = $this->str[$this->pos];

          while($this->checkNext($char,$this->pos + $this->count)) $this->count++;
          
          $this->newstr .= $this->count . $char;
          $this->pos += $this->count;
          $this->count = 1;
          if ($this->pos >= strlen($this->str)) {
              $this->i++;
              echo "run {$this->i} [length: ". strlen($this->newstr) ."]\n";
              echo $this->str = $this->newstr;
              echo "\n";
              if ($this->i >= 30) die();
              $this->newstr = '';
              $this->pos = 0;
              
          }
          $this->check();
      }
      
      private function checkNext($char,$pos) {
          if (!isset($this->str[$pos])) return false;
          if ($char === $this->str[$pos]) return true;
          return false;
      }
  }

  new lol();
?>

hatte erst bis 50 in erinnerung undmich gefragt, wieso soviel speicher drauf geht :D daher das memory limit ;D
dann is mir eingefallen, das das php 32bit ist und daher recht schnell versagt....

-> und zwar genau beim 50ten run, aber mehr als 2gb kann ich dem php ja nicht geben...

Code:
run 49 [length: 894810]

Code:
PHP Fatal error:  Out of memory (allocated 2009333760) (tried to allocate 261900 bytes) in D:\coding\zahlenreihe.php on line 37

Fatal error: Out of memory (allocated 2009333760) (tried to allocate 261900 bytes) in D:\coding\zahlenreihe.php on line 37

own3d ;D

ansonst das erg:

Code:
run 30 [length: 5808]
132113213221133112132123123112111311222112132113311213211231232112311311222112111312211311123113322112132113212231121113112221121321132132211231232112311321322112311311222113111231133221121113122113121113221112131221123113111231121
123222112132113213221133122112231131122211211131221131112311332211213211321322113311213212322211231232112311321322112311311222113311213212322211231131122211311123113321112131221123113111231121123222112111312211312111322212321121113
122113221113122112132113121113222112311311221112131221123113112211322112211213322112132113213221133112132123123112111312111312212231131122211311123113322112111312211312111322111213122112311311123112112322211213211321322113311213212
312311211131122211213211331121321122112133221123123211231132132211231131122211331121321232221123113112221131112311322311211131122211213211331121321122112133221123113112221131112311332111213122112311311123112111331121113122112132113
121113222112311311221112131221123113112211322112211213322112111312211312111322212321121113121112131112132112311321322112111312211312111322211322111312211312111322211213211321322123211211131211121332211231131122211311122122111312211
213211312111322211231131122211311122113222123122113222122211211232221121321132132211331121321231231121113112221121321133112132112312321123113112221121113122113111231133221121321132122311211131122211213211321322112312321123113213221
123113112221131112311332211211131221131211221321123113213221121113122113121113222123113221132122212231131122211311123113321112131221123113111231121113311211131221121321131211132221123113112211121312211231131122113221122112133221121
113122113121113222123211211131211121311121321123113213221121113122113121113222113221113122113121113222112132113213221232112111312111213322112311311222113111221221113122112132113121113222112311311222113111221132221231221132221222112
112322211211131221131211132221232112111312111213111213211231132132211211131221232112111312211213111213122112132113213221123113112221133112132123222112111312211312112213211231132132211211131221131211132221121311121312211213211312111
322211213211321322113311213212322211231131122211311123113223112111311222112132113311213211221121332211211131221131211132221231122212213211321322112311311222113311213212322211211131221131211132221231132212312311211132132212312211322
212221121123222112132113213221133112132123123112111311222112132113311213211231232112311311222112111312211311123113322112132113212231121113112221121321132132211231232112311321322112311311222113111231133221121113122113121113221112131
221123113111231121123222112132113213221133112132123123112111311222112132113311213211221121332211322132113213221133112132123123112111311222112132113311213211221121332211231131122211311123113321112131221123113112221132231131122211211
131221131112311332211213211321223112111311222112132113212221132221222112112322211211131221131211132221232112111312111213111213211231131112311311221122132113213221133112132123222112311311222113111231132231121113112221121321133112132
112211213322112111312211312111322212321121113121112131112132112311311222113221321123123211231131122211211131221133112132113221321123113121113221112131122211332113221122112133221123113112221131112311332111213122112311311123112111331
121113122112132113121113222112311311221112131221123113112221121113311211131122211211131221131211132221121321132132212321121113121112133221123113112221131112212211131221121321131211132221123113112221131112311332211211133112111311222
112111312211311123113322112111312211312111322212321121113121112133221121321132132211331121321132213211231132132211211131221232112111312212221121123222112311311222113111231133211121321321122111312211312111322211213211321322123211211
131211121332211231131122211311123113321112131221123113111231121123222112111331121113112221121113122113111231133221121113122113121113221112131221123113111231121123222112111312211312111322212321121113121112131112132112311321322112111
312212321121113122122211211232221121321132132211331121321231231121113112221121321132132211322132113213221123113112221133112132123222112111312211312112213211231132132211211131221131211322113321132211221121332211231131122211311123113
321112131221123113111231121113311211131221121321133112132113212221221113122113121113222123211211131211121332211213211321322113311213211322132112311321322112111312212321121113122122211211232221123113112221131112311332111213122112311
311123112111331121113122112132113121113222112311311221112131221123113112211322112211213322112111331121113112221121113122113111231133221121113122113121113221112131221123113111231121123222112111312211312111322212321121113122113221113
122112132113121113222112311311221112131221123113112211322112211213322112111312211312111322212321121113121112131112132112311321322112111312212321121113122112131112131221121321132132211231131122211331121321232221121113122113121122132
112311321322112111312211312113221133211322112211213322112132113213221133112132123123112111311222112132113311213211231232112311311222112111312211311123113322112132113212231121113112221121321132132211231232112311321322112311311222113
111231133221121113122113121113221112131221123113111231121123222112132113213221133112132123123112111312111312212231131122211311123113322112111312211312111322111213122112311311123112112322211211131221131211132221232112111312111213111
213211231131122211322132112312321123113112211322112211213322112111312211312111322212321121113121112133221132213211321322113311213212312311211131122211213211331121321122112133221123113112221131112311332111213122112311311123112111331
121113122112132113121113222112311311222113111221221113122112132113121113222112132113213221133122211332111213322112132113213221132231131122211311123113322112111312211312111322212321121113122123211231131122113221123113221113122112132
113213211121332212311322113212221
 
Damn it, hätte zuerst guggen sollen, ob ich es schonmal gelöst habe.
Wie auch immer, hier mein second run

[delphi]
Code:
program Project1;

{$APPTYPE CONSOLE}

var
  i: Integer;
  s: String;

function IntToStr(const I: Integer): String;
begin
  Str( I, Result );
end;

function Max(const A, B: Integer): Integer;
begin
  if A > B then
    Result := A
  else
    Result := B;
end;

function Convert(const lpNumber: String): String;
var
  i, Len,
  j, k: Integer;
begin
  Result := '';
  Len := Length( lpNumber );
  if Len > 0 then
  begin
    i := 1;
    repeat
      k := 1;
      if i + 1 <= Len then
      begin
        j := 1;
        while j <= Len - i do
        begin
          if lpNumber[i+j] = lpNumber[i] then
            inc( k )
          else
            break;
          inc( j );
        end;
      end;
      Result := Result + IntToStr( k ) + lpNumber[i];
      inc( i, Max( 1, j ) );
    until i > Len;
  end;
end;

begin
  s := '1';
  for i := 1 to 30 do
    s := Convert( s );
  Writeln( s );
  Readln;
end.
[/delphi]

Resultat (5810 Charakter)
Code:
132113213221133112132123123112111311222112132113311213211231232112311311222112111312211311123113322112132113212231121113112221121321132132211231232112311321322112311311222113111231133221121113122113121113221112131221123113111231121123222112132113213221133122112231131122211211131221131112311332211213211321322113311213212322211231232112311321322112311311222113311213212322211231131122211311123113321112131221123113111231121123222112111312211312111322212321121113122113221113122112132113121113222112311311221112131221123113112211322112211213322112132113213221133112132123123112111312111312212231131122211311123113322112111312211312111322111213122112311311123112112322211213211321322113311213212312311211131122211213211331121321122112133221123123211231132132211231131122211331121321232221123113112221131112311322311211131122211213211331121321122112133221123113112221131112311332111213122112311311123112111331121113122112132113121113222112311311221112131221123113112211322112211213322112111312211312111322212321121113121112131112132112311321322112111312211312111322211322111312211312111322211213211321322123211211131211121332211231131122211311122122111312211213211312111322211231131122211311122113222123122113222122211211232221121321132132211331121321231231121113112221121321133112132112312321123113112221121113122113111231133221121321132122311211131122211213211321322112312321123113213221123113112221131112311332211211131221131211221321123113213221121113122113121113222123113221132122212231131122211311123113321112131221123113111231121113311211131221121321131211132221123113112211121312211231131122113221122112133221121113122113121113222123211211131211121311121321123113213221121113122113121113222113221113122113121113222112132113213221232112111312111213322112311311222113111221221113122112132113121113222112311311222113111221132221231221132221222112112322211211131221131211132221232112111312111213111213211231132132211211131221232112111312211213111213122112132113213221123113112221133112132123222112111312211312112213211231132132211211131221131211132221121311121312211213211312111322211213211321322113311213212322211231131122211311123113223112111311222112132113311213211221121332211211131221131211132221231122212213211321322112311311222113311213212322211211131221131211132221231132212312311211132132212312211322212221121123222112132113213221133112132123123112111311222112132113311213211231232112311311222112111312211311123113322112132113212231121113112221121321132132211231232112311321322112311311222113111231133221121113122113121113221112131221123113111231121123222112132113213221133112132123123112111311222112132113311213211221121332211322132113213221133112132123123112111311222112132113311213211221121332211231131122211311123113321112131221123113112221132231131122211211131221131112311332211213211321223112111311222112132113212221132221222112112322211211131221131211132221232112111312111213111213211231131112311311221122132113213221133112132123222112311311222113111231132231121113112221121321133112132112211213322112111312211312111322212321121113121112131112132112311311222113221321123123211231131122211211131221133112132113221321123113121113221112131122211332113221122112133221123113112221131112311332111213122112311311123112111331121113122112132113121113222112311311221112131221123113112221121113311211131122211211131221131211132221121321132132212321121113121112133221123113112221131112212211131221121321131211132221123113112221131112311332211211133112111311222112111312211311123113322112111312211312111322212321121113121112133221121321132132211331121321132213211231132132211211131221232112111312212221121123222112311311222113111231133211121321321122111312211312111322211213211321322123211211131211121332211231131122211311123113321112131221123113111231121123222112111331121113112221121113122113111231133221121113122113121113221112131221123113111231121123222112111312211312111322212321121113121112131112132112311321322112111312212321121113122122211211232221121321132132211331121321231231121113112221121321132132211322132113213221123113112221133112132123222112111312211312112213211231132132211211131221131211322113321132211221121332211231131122211311123113321112131221123113111231121113311211131221121321133112132113212221221113122113121113222123211211131211121332211213211321322113311213211322132112311321322112111312212321121113122122211211232221123113112221131112311332111213122112311311123112111331121113122112132113121113222112311311221112131221123113112211322112211213322112111331121113112221121113122113111231133221121113122113121113221112131221123113111231121123222112111312211312111322212321121113122113221113122112132113121113222112311311221112131221123113112211322112211213322112111312211312111322212321121113121112131112132112311321322112111312212321121113122112131112131221121321132132211231131122211331121321232221121113122113121122132112311321322112111312211312113221133211322112211213322112132113213221133112132123123112111311222112132113311213211231232112311311222112111312211311123113322112132113212231121113112221121321132132211231232112311321322112311311222113111231133221121113122113121113221112131221123113111231121123222112132113213221133112132123123112111312111312212231131122211311123113322112111312211312111322111213122112311311123112112322211211131221131211132221232112111312111213111213211231131122211322132112312321123113112211322112211213322112111312211312111322212321121113121112133221132213211321322113311213212312311211131122211213211331121321122112133221123113112221131112311332111213122112311311123112111331121113122112132113121113222112311311222113111221221113122112132113121113222112132113213221133122211332111213322112132113213221132231131122211311123113322112111312211312111322212321121113122123211231131122113221123113221113122112132113213211121332212311322113212221

Edit: Easteregg - es gibt ne Kollision :P
 
Damn it, hätte zuerst guggen sollen, ob ich es schonmal gelöst habe.
Wie auch immer, hier mein second run

Resultat (5810 Charakter)
Code:
132113213221133112132123123112111311222112132113311213211231232112311311222112111312211311123113322112132113212231121113112221121321132132211231232112311321322112311311222113111231133221121113122113121113221112131221123113111231121123222112132113213221133122112231131122211211131221131112311332211213211321322113311213212322211231232112311321322112311311222113311213212322211231131122211311123113321112131221123113111231121123222112111312211312111322212321121113122113221113122112132113121113222112311311221112131221123113112211322112211213322112132113213221133112132123123112111312111312212231131122211311123113322112111312211312111322111213122112311311123112112322211213211321322113311213212312311211131122211213211331121321122112133221123123211231132132211231131122211331121321232221123113112221131112311322311211131122211213211331121321122112133221123113112221131112311332111213122112311311123112111331121113122112132113121113222112311311221112131221123113112211322112211213322112111312211312111322212321121113121112131112132112311321322112111312211312111322211322111312211312111322211213211321322123211211131211121332211231131122211311122122111312211213211312111322211231131122211311122113222123122113222122211211232221121321132132211331121321231231121113112221121321133112132112312321123113112221121113122113111231133221121321132122311211131122211213211321322112312321123113213221123113112221131112311332211211131221131211221321123113213221121113122113121113222123113221132122212231131122211311123113321112131221123113111231121113311211131221121321131211132221123113112211121312211231131122113221122112133221121113122113121113222123211211131211121311121321123113213221121113122113121113222113221113122113121113222112132113213221232112111312111213322112311311222113111221221113122112132113121113222112311311222113111221132221231221132221222112112322211211131221131211132221232112111312111213111213211231132132211211131221232112111312211213111213122112132113213221123113112221133112132123222112111312211312112213211231132132211211131221131211132221121311121312211213211312111322211213211321322113311213212322211231131122211311123113223112111311222112132113311213211221121332211211131221131211132221231122212213211321322112311311222113311213212322211211131221131211132221231132212312311211132132212312211322212221121123222112132113213221133112132123123112111311222112132113311213211231232112311311222112111312211311123113322112132113212231121113112221121321132132211231232112311321322112311311222113111231133221121113122113121113221112131221123113111231121123222112132113213221133112132123123112111311222112132113311213211221121332211322132113213221133112132123123112111311222112132113311213211221121332211231131122211311123113321112131221123113112221132231131122211211131221131112311332211213211321223112111311222112132113212221132221222112112322211211131221131211132221232112111312111213111213211231131112311311221122132113213221133112132123222112311311222113111231132231121113112221121321133112132112211213322112111312211312111322212321121113121112131112132112311311222113221321123123211231131122211211131221133112132113221321123113121113221112131122211332113221122112133221123113112221131112311332111213122112311311123112111331121113122112132113121113222112311311221112131221123113112221121113311211131122211211131221131211132221121321132132212321121113121112133221123113112221131112212211131221121321131211132221123113112221131112311332211211133112111311222112111312211311123113322112111312211312111322212321121113121112133221121321132132211331121321132213211231132132211211131221232112111312212221121123222112311311222113111231133211121321321122111312211312111322211213211321322123211211131211121332211231131122211311123113321112131221123113111231121123222112111331121113112221121113122113111231133221121113122113121113221112131221123113111231121123222112111312211312111322212321121113121112131112132112311321322112111312212321121113122122211211232221121321132132211331121321231231121113112221121321132132211322132113213221123113112221133112132123222112111312211312112213211231132132211211131221131211322113321132211221121332211231131122211311123113321112131221123113111231121113311211131221121321133112132113212221221113122113121113222123211211131211121332211213211321322113311213211322132112311321322112111312212321121113122122211211232221123113112221131112311332111213122112311311123112111331121113122112132113121113222112311311221112131221123113112211322112211213322112111331121113112221121113122113111231133221121113122113121113221112131221123113111231121123222112111312211312111322212321121113122113221113122112132113121113222112311311221112131221123113112211322112211213322112111312211312111322212321121113121112131112132112311321322112111312212321121113122112131112131221121321132132211231131122211331121321232221121113122113121122132112311321322112111312211312113221133211322112211213322112132113213221133112132123123112111311222112132113311213211231232112311311222112111312211311123113322112132113212231121113112221121321132132211231232112311321322112311311222113111231133221121113122113121113221112131221123113111231121123222112132113213221133112132123123112111312111312212231131122211311123113322112111312211312111322111213122112311311123112112322211211131221131211132221232112111312111213111213211231131122211322132112312321123113112211322112211213322112111312211312111322212321121113121112133221132213211321322113311213212312311211131122211213211331121321122112133221123113112221131112311332111213122112311311123112111331121113122112132113121113222112311311222113111221221113122112132113121113222112132113213221133122211332111213322112132113213221132231131122211311123113322112111312211312111322212321121113122123211231131122113221123113221113122112132113213211121332212311322113212221

Edit: Easteregg - es gibt ne Kollision :P

nope :P

zur überprüfung auf korrektheit kann übrigens die länge der 30. zahl angeschaut werden, die sollte im optimalfall 5808 sein ;)

gruß und viel spaß, xeno
 
Kleine, aber meiner Meinung nach, sehr schöne Lösung in Haskell:
Code:
series :: Int -> [[Int]]
series n = take (n+1) $ iterate (next) [1]
    where next = concatMap (\xs -> [length xs, xs !! 0]) . group

main :: IO ()
main = let (xs0, xs1) = (take 5 xs, length . last $ xs)
       in mapM_ (print) [show xs0, show xs1]
    where xs = series 30
"[[1],[1,1],[2,1],[1,2,1,1],[1,1,1,2,2,1]]"
"5808"
Gruß
Felix
 
Python mit RegEx :)
PHP:
import re

def expander(numstring, steps):
    numparser = re.compile('1+|2+|3+|4+|5+|6+|7+|8+|9+')
    
    for step in range(steps):
        result = []
        for group in numparser.findall(numstring):
            result.extend((str(len(group)), group[0]))
            
        numstring = "".join(result)
        
    return numstring
Interaktion:
Code:
>>> expander("1",1)
'11'
>>> expander("1",2)
'21'
>>> expander("1",3)
'1211'
>>> expander("1",4)
'111221'
>>> expander("1",5)
'312211'
>>> len(expander("1",30))
5808
>>> expander("1",30)[:60] # die ersten 60 Stellen
'132113213221133112132123123112111311222112132113311213211231'
>>> len(expander("1",50))
1166642
>>> expander("1",50)[:60] # die ersten 60 Stellen
'311311222113111231133211121312211231131112311211133112111312'
 
Lösung in VB

Meine Lösung in VB
Als erster Wert wird hier die 11 ausgegeben - also der erste "umgewandelte", wodurch hierbei nach 30 Durchläufen die Zahl mit 5808 Stellen angegeben wird.

Code:
Module Module1

    Sub Main()

        Dim a As String = "1", b As String = ""
        Dim x As Integer

        For x = 1 To 30
            Do While a.Length > 0
                Select Case a.Length

                    Case Is > 2
                        If a.Substring(0, 1) = a.Substring(1, 1) And a.Substring(1, 1) = a.Substring(2, 1) Then
                            b &= "3" & a.Substring(0, 1)
                            If a.Length > 3 Then
                                a = a.Substring(3)
                            Else
                                a = ""
                            End If
                        ElseIf a.Substring(0, 1) = a.Substring(1, 1) Then
                            b &= "2" & a.Substring(0, 1)
                            a = a.Substring(2)
                        Else
                            b &= "1" & a.Substring(0, 1)
                            a = a.Substring(1)
                        End If

                    Case Is > 1
                        If a.Substring(0, 1) = a.Substring(1, 1) Then
                            b &= "2" & a.Substring(0, 1)
                            If a.Length > 2 Then
                                a = a.Substring(2)
                            Else
                                a = ""
                            End If
                        Else
                            b &= "1" & a.Substring(0, 1)
                            a = a.Substring(1)
                        End If

                    Case Is = 1
                        b &= "1" & a
                        a = ""

                End Select
            Loop
            a = b
            b = ""
            Console.WriteLine(x)
            Console.WriteLine(a)
            Console.WriteLine(a.Length.ToString)
            Console.WriteLine()
        Next
        
        Console.ReadLine()

    End Sub

End Module
 
Habe das Problem mit einer funktionalen Programmiersprache gelöst, Standard ML.
fun literally' n c nil = (Int.toString n) ^ (Char.toString c)
| literally' n c (c'::cs) = if c=c' then literally' (n+1) c cs else (Int.toString n) ^ (Char.toString c) ^ (literally' 1 c' cs)
fun literally str = case (explode str) of nil => "" | (c::cs) => literally' 1 c cs

fun sequence' n str = if n=0 then str else sequence' (n-1) (literally str)
fun sequence n = sequence' n "1"

> sequence 30;
val it : string = "13211321322113311213212312311211131122211213211331121321123123211231131122211211131221131112311332211213211321223112111311222112\..."

> List.length (explode (sequence 30));
val it : int = 5808
 
Zuletzt bearbeitet:
RegEx mit Perl:
Code:
#!/usr/bin/perl -w

$t = "1";

for (1 .. 30) { $t =~ s/((.)\2*)/length ($1). $2/ge }

print "$t\n";
die ersten 50 Ziffern
Code:
13211321322113311213212312311211131122211213211331 ...
 
Bin gerade auf das Forum gestoßen, der Teil hier gefällt mir schon mal sehr! 8)
Meine Lösung in Java

package rekursiveZahlenreihe;

import java.util.ArrayList;
import java.util.List;

public class RekursiveZahlenreihe {

class Section {
char c;
int count = 1;

Section(Character c) {
this.c = c;
}

void inc() {
count++;
}
}

private String newNumber;
private String lastNumber;

public void start(int value) {
lastNumber = "1";
for (int i = 0; i < value - 1; i++) {
List<Section> sections = new ArrayList<Section>();
char lastChar = ' ';
for (Character c : lastNumber.toCharArray()) {
if (!c.equals(lastChar)) {
sections.add(new Section(c));
} else {
sections.get(sections.size() - 1).inc();
}
lastChar = c;
}

// die newNumber wird für jede section die Länge des Strings und der Wert dessen
StringBuilder sb = new StringBuilder();
for (Section s : sections) {
sb.append(s.count).append(s.c);
}
newNumber = sb.toString();
lastNumber = newNumber;
}
ausgabe(value);
}

private void ausgabe(int value) {
System.out.println("Wert" + value + ": " + newNumber);
System.out.println("Länge von Wert" + value + ": " + newNumber.length());
}

public static void main(String[] args) {
new RekursiveZahlenreihe().start(30);
}
}

Wert30: 3113112221131112311332111213122112311311123112111331121113122112132113121113222112311311221112131221123113112221121113311211131122211211131221131211132221121321132132212321121113121112133221123113112221131112212211131221121321131211132221123113112221131112311332211211133112111311222112111312211311123113322112111312211312111322212321121113121112133221121321132132211331121321132213211231132132211211131221232112111312212221121123222112311311222113111231133211121321321122111312211312111322211213211321322123211211131211121332211231131122211311123113321112131221123113111231121123222112111331121113112221121113122113111231133221121113122113121113221112131221123113111231121123222112111312211312111322212321121113121112131112132112311321322112111312212321121113122122211211232221121321132132211331121321231231121113112221121321132132211322132113213221123113112221133112132123222112111312211312112213211231132132211211131221131211322113321132211221121332211231131122211311123113321112131221123113111231121113311211131221121321131211132221123113112211121312211231131122211211133112111311222112111312211312111322211213211321223112111311222112132113213221133122211311221122111312211312111322212321121113121112131112132112311321322112111312212321121113122122211211232221121321132132211331121321231231121113112221121321132132211322132113213221123113112221133112132123222112111312211312112213211231132132211211131221131211322113321132211221121332211213211321322113311213212312311211131122211213211331121321123123211231131122211211131221131112311332211213211321223112111311222112132113213221123123211231132132211231131122211311123113322112111312211312111322111213122112311311123112112322211213211321322113312211223113112221121113122113111231133221121321132132211331222113321112131122211332113221122112133221123113112221131112311332111213122112311311123112111331121113122112132113121113222112311311221112131221123113112221121113311211131122211211131221131211132221121321132132212321121113121112133221123113112221131112311332111213122112311311123112112322211322311311222113111231133211121312211231131112311211232221121113122113121113222123211211131221132211131221121321131211132221123113112211121312211231131122113221122112133221121321132132211331121321231231121113121113122122311311222113111231133221121113122113121113221112131221123113111231121123222112132113213221133112132123123112111312211322311211133112111312211213211311123113223112111321322123122113222122211211232221121113122113121113222123211211131211121311121321123113213221121113122123211211131221121311121312211213211321322112311311222113311213212322211211131221131211221321123113213221121113122113121113222112131112131221121321131211132221121321132132211331121321232221123113112221131112311322311211131122211213211331121321122112133221121113122113121113222123112221221321132132211231131122211331121321232221121113122113121113222123211211131211121332211213111213122112132113121113222112132113213221232112111312111213322112132113213221133112132123123112111311222112132113311213211221121332211231131122211311123113321112131221123113112221132231131122211211131221131112311332211213211321223112111311222112132113212221132221222112112322211211131221131211132221232112111312111213111213211231131112311311221122132113213221133112132123222112311311222113111231132231121113112221121321133112132112211213322112111312211312111322212321121113121112131112132112311321322112111312212321121113122122211211232221121311121312211213211312111322211213211321322123211211131211121332211213211321322113311213211322132112311321322112111312212321121113122122211211232221121321132132211331121321231231121113112221121321133112132112312321123113112221121113122113111231133221121321132122311211131122211213211321222113222122211211232221123113112221131112311332111213122112311311123112111331121113122112132113121113222112311311221112131221123113112221121113311211131122211211131221131211132221121321132132212321121113121112133221123113112221131112311332111213213211221113122113121113222112132113213221232112111312111213322112132113213221133112132123123112111312211322311211133112111312212221121123222112132113213221133112132123222113223113112221131112311332111213122112311311123112112322211211131221131211132221232112111312111213111213211231132132211211131221131211221321123113213221123113112221131112211322212322211231131122211322111312211312111322211213211321322113311213211331121113122122211211132213211231131122212322211331222113112211
Länge von Wert30: 4462
 
Zurück
Oben