• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Zahlenreihe fortsetzten in 12 Reihen,skript

Hallo, habe folgende Zahlenreihe:

1
11
21
1112
3112
211213
312213

Ich hab zwar das prinzip bzw. die Funtkionsweise verstanden, doch ich hab keine Idee wie ich sol etwas realsieren soll in einem shellskript?
 
Hallo,

intergo schrieb:
Ich hab zwar das prinzip bzw. die Funtkionsweise verstanden...
Denkst Du dass wir jetzt zuerst unsere Zeit verschwenden um "das prinzip bzw. die Funtkionsweise" zu verstehen? Ich jedenfalls nicht. :D

Gruss,
Roland
 
Ich wollte es nur sagen, dass es nicht ums Prinzip geht wie der Algorithmus geht, sondern ,das mir das schwer fällt so etwas als shellskript zu realisieren.
:)
 
A

Anonymous

Gast
Für sowas gibts Schleifen. Allerdings sehe ich in deine Zahlenkolonne auf Anhieb auch keinen Algorithmus, desshalb hier mal ein ganz simples Beispiel, Enstsprechend dem Algorithmus muss man dann sehen was für eine Schleife man am besten verwenden kann.
Code:
Z=1
for i in 1 2 3 4 5 6 7 8 9 
do
    Z=$(($Z * $i))
    echo $Z
done

robi
 
ok , danke werde ich versuchen

es ist eine art von algorithmus, da in der ersten Zeile ja nur ne 1 sthet in der zweiten 11, und das heißt es gibt eine 1 in der ersten 1
dan 21 , das sagt 2mal1 in der zweiten zeile.
 
A

Anonymous

Gast
intergo schrieb:
es ist eine art von algorithmus, da in der ersten Zeile ja nur ne 1 sthet in der zweiten 11, und das heißt es gibt eine 1 in der ersten 1
dan 21 , das sagt 2mal1 in der zweiten zeile.

und wie gehts dann weiter?
wie kommt man von 21 auf 1112 und mit der selben Methode dann auf 3113 ?

robi
 
wie man von 21 auf 1112 :
1112 sagt ich habe ein in der oberen Zeile also bei 21 , 1mal die 1 und 1mal die 2 deshalb 1112.Dann kommt 3112 d.h. habe dreimal die 1 und einaml die 2. Dann kommt 211213 .d.h habe im bezug zu 3112 habe 2x1 , 1x2 und 1X3.
das soll ich für 12 reihen fortsetzen. :D
 

framp

Moderator
Teammitglied
Code:
for i in {1..10}; do
...
   for digit in {1..9}; do
      count=$((`echo $line|sed "s/[^\$digit]//g"|wc -m`-1))
...
   done
...
done
EDIT: Habe eben die vollständige Lösung wieder gelöscht. Ist ja nicht Sinn der Aktion gleich die Lösung zu präsentieren :roll:
 
Da bin ich dergleichen Meinung, ich frage hier in dem Forum, um etwas zu Lernen und nicht um komplette Lösung zu bekommen.

Danke framp, woher kannst du es so gut
 
Code:
#!/usr/bin/perl
use warnings;
use strict;

my $line = "1";
my $i;
for ($i = 0; $i < 12; $i ++) {
    print $line . "\n";
    $line = countNum($line);
}

sub countNum {
    my $a = shift;
    my $newLine = "";
    my %h = ();
    my $i;
    for ($i = 0; $i < length($a); $i++) {
        my $b = substr($a, $i, 1);
        if (exists($h{$b})) {
            $h{$b} ++;
        } else {
            $h{$b} = 1;
        }
    }
    my $hlen = keys(%h);
    for ($i = 1; $i <= $hlen; $i++) {
        $newLine .= $h{$i} . $i;
    }
    return $newLine;
}
Viel Spaß damit in bash! Wär' mir echt zu anstrengend.

@framp: Krasser Ansatz; war es derselbe Output?
 
Ok, werde werde ich haben, ich muss zuerst vestehenm was die einzelenn Befehle machen .
Ich finde es halt nur Schade, dass ich nicht so schenll auf solche Lösungen komme.
 

framp

Moderator
Teammitglied
intergo schrieb:
Ok, werde werde ich haben, ich muss zuerst vestehenm was die einzelenn Befehle machen .
Ich finde es halt nur Schade, dass ich nicht so schenll auf solche Lösungen komme.
Ein jeder hat mal angefangen. Je länger Du Dich mit der Materie beschäftigst desto besser und schneller geht es ;)
 
Da hast du recht, ich lerne es halt in deruni, und meistens muss man sich selbst alles beibringen.
Aber wenn man sich beschäfzigt, macht es auch spaß damit.
Ich find es echt toll, dass es so ein tolles forum gibt, man lernt richtig viel bei euch.
Ihr seid echt Profis.
 
Eine Frage, aknn man eine EIngabe von stdin in mehrern zeilen splitten?

Ich habe es mit split versucht , aber er macht mir separate Dateien und das möchte ich nicht.
 

framp

Moderator
Teammitglied
intergo schrieb:
Eine Frage, aknn man eine EIngabe von stdin in mehrern zeilen splitten? ...
Mir ist nicht klar was Du erreichen willst. Vielleicht gibst Du ein Beispiel. Ausserdem solltest Du das nächste Mal einen neuen Thread aufmachen ;)
 
framp schrieb:
Code:
for i in {1..10}; do
...
   for digit in {1..9}; do
      count=$((`echo $line|sed "s/[^\$digit]//g"|wc -m`-1))
...
   done
...
done
EDIT: Habe eben die vollständige Lösung wieder gelöscht. Ist ja nicht Sinn der Aktion gleich die Lösung zu präsentieren :roll:


Wenn ich richtig verstanden habe, ist die erste For-Schleife für die Zeilen
und die zweite , um die Zahlen der Zeile zu zählen, oder hBE ICH ES FALSCH VERSTANDEN?
 
Oben