Hallo!
Hier mal eine kleine Knobelaufgabe:
Eine Liste mit Worten, zur Vereinfachung nehme ich Buchstaben, sollen in einer Tabelle mit vier Spalten sortiert werden. Die Einträge sollen in den Spalten abwärts sortiert werden.
Beispiel:
abcdefghijkl soll zu adgj behk cfjl werden
abcdefghi soll zu adg beh cfi werden
abcdefgh soll zu aceg bdfh werden.
Ich habe dafür länger als erwartet gebraucht. Mal sehen wie lange ihr braucht.
thomas
On Thu, 13 Feb 2003 21:14:48 +0100, Thomas Guettler wrote:
Eine Liste mit Worten, zur Vereinfachung nehme ich Buchstaben, sollen in einer Tabelle mit vier Spalten sortiert werden. Die Einträge sollen in den Spalten abwärts sortiert werden.
Da fehlt eine Spezifikation für die verteilung der Worte auf die Spalten. Ist die beliebig? Du hast nur die Reihenfolge innerhalb der Spalten festgelegt.
Beispiel:
abcdefghijkl soll zu adgj behk cfjl werden
OK, Hier sehe ich 4 Spalten. Verteilung in Reihenfolge der Ankunft, eine Spalte füllen bis "Wortanzahl/4" dann nächste Spalte, ist es Zufall, dass die Eingabe bereits sortiert ist?
abcdefghi soll zu adg beh cfi werden
Hier sind nur 3 Spalten entstanden!? Dein Aufgabe ist unlösbar, wenn dieses Beipiel richtig sein soll und die Aufgabe so ist, wie sie oben steht.
abcdefgh soll zu aceg bdfh werden.
Das würde wieder der von mir beim 1. Beispiel gemachten Annahme entsprechen.
Reinhard
On Thu, Feb 13, 2003 at 09:57:02PM +0100, Reinhard Foerster wrote:
On Thu, 13 Feb 2003 21:14:48 +0100, Thomas Guettler wrote:
Eine Liste mit Worten, zur Vereinfachung nehme ich Buchstaben, sollen in einer Tabelle mit vier Spalten sortiert werden. Die Einträge sollen in den Spalten abwärts sortiert werden.
Da fehlt eine Spezifikation für die verteilung der Worte auf die Spalten. Ist die beliebig? Du hast nur die Reihenfolge innerhalb der Spalten festgelegt.
a == Wort1 b == Wort2
abcdefghi soll zu adg beh cfi werden
Hier sind nur 3 Spalten entstanden!? Dein Aufgabe ist unlösbar, wenn dieses Beipiel richtig sein soll und die Aufgabe so ist, wie sie oben steht.
Wenn man Versucht abcdefghi in vier Spalten zu pressen kommt folgendes heraus:
aceg bdfh i
oder
adgi beh cf
Wenn die letzte Zeile nicht gefüllt ist, dann soll die leere Stelle in der rechten Spalte sein. Es darf nur eine Spalte geben in der es leere Stellen gibt. Ggf. sollen drei anstatt vier Spalten verwendet werden.
Ich hoffe alle Unklarheiten sind beseitigt. Der Sonderfall existiert so weit ich weiß nur für 9 Einträge.
thomas
On Thu, 13 Feb 2003 23:01:03 +0100, Thomas Guettler wrote:
abcdefghi soll zu adg beh cfi werden
Hier sind nur 3 Spalten entstanden!? Dein Aufgabe ist unlösbar, wenn dieses Beipiel richtig sein soll und die Aufgabe so ist, wie sie oben steht.
Wenn man Versucht abcdefghi in vier Spalten zu pressen kommt folgendes heraus:
aceg bdfh i
Nicht zwingend. Es geht auch so:
adfh begi c
Du schließt auch sowas nicht aus: abcd efgh ijk
Auch dabei ist innerhalb der Spalten sortiert.
adgi beh cf
Hier ist weder die 2. noch die 3. zeile gefüllt. Warum? Ich denke du willst möglichst gleich auf 4 Spalten verteilen?
Wenn die letzte Zeile nicht gefüllt ist, dann soll die leere Stelle in der rechten Spalte sein. Es darf nur eine Spalte geben in der es leere Stellen gibt. Ggf. sollen drei anstatt vier Spalten verwendet werden.
Dann ist die oberste Regel also gar nicht die Aufteilung auf 4 Spalten sondern das komplette Füllen von Spalten. Dann steckt man also in jede Spalte Anzahl/4 Elemente rein wenn Anzahl%4==0 und Anzahl/4+1 Elemente, wenn Anzahl%4!=0. Damit gehen dir dann in der letzten Spalte genau zum richtigen Zeitpunkt die Wörter aus :-)
Bei 9 Elementen ergibt sich: 9%4=1 also 9/4+1=3 Elemente pro Spalte beginnend mit Spalte 1 bis die Wörter ausgehen. Das ergibt adg beh cfi
Richtig so? Achso: / steht fuer ganzahlige Division und % fuer Modulo.
Ich hoffe alle Unklarheiten sind beseitigt. Der Sonderfall existiert so weit ich weiß nur für 9 Einträge.
Nein, bei z.B. 5 oder 6 Eleemnten auch. Kannst du nicht einfach sagen, worum es wirklich geht? Naja, vielleicht habe ich es diesmal richtig verstanden.
Reinhard
On Fri, Feb 14, 2003 at 12:01:24AM +0100, Reinhard Foerster wrote:
On Thu, 13 Feb 2003 23:01:03 +0100, Thomas Guettler wrote:
Wenn man versucht abcdefghi in vier Spalten zu pressen kommt folgendes heraus:
aceg bdfh i
Nicht zwingend. Es geht auch so:
adfh begi c
Hmmm, stimmt. Das habe ich übersehen.
Du schließt auch sowas nicht aus: abcd efgh ijk
Auch dabei ist innerhalb der Spalten sortiert.
Aber nicht abwärts.
adgi beh cf
Hier ist weder die 2. noch die 3. zeile gefüllt. Warum? Ich denke du willst möglichst gleich auf 4 Spalten verteilen?
Das Beispiel stand auch unter der Überschrift "so sollte es nicht sein".
Wenn die letzte Zeile nicht gefüllt ist, dann soll die leere Stelle in der rechten Spalte sein. Es darf nur eine Spalte geben in der es leere Stellen gibt. Ggf. sollen drei anstatt vier Spalten verwendet werden.
Dann ist die oberste Regel also gar nicht die Aufteilung auf 4 Spalten sondern das komplette Füllen von Spalten. Dann steckt man also in jede Spalte Anzahl/4 Elemente rein wenn Anzahl%4==0 und Anzahl/4+1 Elemente, wenn Anzahl%4!=0. Damit gehen dir dann in der letzten Spalte genau zum richtigen Zeitpunkt die Wörter aus :-)
Ja, stimmt.
[cut]
Nein, bei z.B. 5 oder 6 Eleemnten auch. Kannst du nicht einfach sagen, worum es wirklich geht? Naja, vielleicht habe ich es diesmal richtig verstanden.
Es geht darum, dass multi select Felder in HTML umständlich sind. Mittels Strg-Taste mehrere Einträge zu markieren, ist für viele Anwender "zu viel". Darum sollen mehrere Check-Boxen in einer Tabelle angezeigt werden. Der Anwender kann dann mehrere Einträge auswählen. Die Spalten sollen, wie gesagt, absteigend sortiert werden. Es existiert keine mathematisch-genaue Definition wie das Ergebnis aussehen soll.
Eigentlich wäre Reinhards Vorschlag:
adfh begi c
schöner als meine derzeitige Version:
adg beh cfi
Ich dachte erst, das hat man in fünf Minuten implementiert, hat dann aber etwas länger gebraucht. Desshalb wollte ich euch knobeln lassen.
Gruß,
thomas
Am Donnerstag, dem 13. Februar 2003 um 21:14:48, schrieb Thomas Guettler:
adg beh cfi
Dieser Fall ist merkwürdig, wie bereits Reinhard bemerkt hat. Folgendes perl-Programm reproduziert deine Beispiele:
my $string = 'abcdefghijkl'; #my $string = 'abcdefghi'; #my $string = 'abcdefgh';
my $rows = int((length($string) - 1) / 4) + 1; for(my $i = 0; $i < $rows; $i ++) { for(my $j = $i; $j < length($string); $j += $rows) { print(substr($string, $j, 1)); } print "\n"; }
Torsten
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
Am Donnerstag, 13. Februar 2003 21:14 schrieb Thomas Guettler:
Hallo!
Hier mal eine kleine Knobelaufgabe:
Eine Liste mit Worten, zur Vereinfachung nehme ich Buchstaben, sollen in einer Tabelle mit vier Spalten sortiert werden. Die Einträge sollen in den Spalten abwärts sortiert werden.
Moin ihr da draußen Hier meine C++ Version: Ausgabe: a e i m b f j n c g k d h l Ich hoffe ich hab das Problem richtig erfaßt.
#include <iostream> using namespace std;
int main(){ string liste[]={"a","b","c","d","e", "f","g","h","i","j","k","l","m","n"}; int anz,x=0,y,i=0,z; anz=sizeof(liste)/4; x=anz%4==0?anz/4:anz%3==0?anz/3:anz/4+1; while(anz){ if (anz%4==0){ y=4;z=x; } else if (anz%3==0){ y=3;z=x; } else{ y=4;z=1+i; } for(;i<z;i++,anz-=y){ for(int j=0;j<y;j++) cout<<liste[i+j*x]<<"\t"; cout<<endl; } } }
Tschau Jens
lug-dd@mailman.schlittermann.de