Gefakte Münze finden

[QUOTE=Timothy_Truckle;29736]Besser ist, die Menge dritteln:
[ul]
[li]Drei Haufen bilden, von denen 2 die gleiche Mengen beinhalten.
[/li][li]Die beiden Haufen mit gleicher Anzahl auf die Waage legen[LIST]
[/li][li]sind sie gleich schwer ist die gesuchte Münze im Rest
[/li][li]schlägt die Waage aus ist die gesuchte Münze im leichteren haufen
[/li][/ul]wie auch immer: nach der Wäägung muss ich mich nur noch um ein drittel der Münzen kümmern, nicht um die Hälfte…[/LIST]
bye
TT[/QUOTE]

So darf ich’s leider nicht machen :frowning:

Der Computer soll dabei gemäß des Halbierungsverfahrens vorgehen.

Ich hab irgendwie das Gefühl, dass du es dir bei der Berechnung von links- bzw. rechtsMin bzw -Max viel zu schwer machst.

1. Festlegen von Min und Max gesamt
2. Berechnung der Halbierungsstufe Mid = Max + Min / 2
3. lMin = Min; lMax = Mid; rMin = Mid + 1; rMax = Max
4. Wenn Max - Min ungerade, x = rMin; rMin++
   wenn beide Stapel gleich schwer, ist x das Ergebnis.
5. Je nach Antwort, den leichteren Stapel aufteilen:
   a) links leichter: Min = lMin; Max = lMax
   b) rechts leichter: Min = rMin; Max = rMax
6. weiter bei 2.

Ich hätte da mal einen ganz anderen Ansatz:class MuenzeFindenTest { public void leichtereSuchen() { List<Integer> alleMuenzen = new ArrayList<>(); alleMuenzen.addAll(generiereMuenzen(9)); while (1 < alleMuenzen.size()) { alleMuenzen = findLeichtereMenge(alleMuenzen); } JOptionPane.showMessageDialog(null, "Die falsche Münze ist Nr " + alleMuenzen.get(0)); } private List<Integer> findLeichtereMenge(List<Integer> alleMuenzen) { int halbeAnzahl = alleMuenzen.size() / 2; List<Integer> linkeSchale = alleMuenzen.subList(0, halbeAnzahl); alleMuenzen.removeAll(linkeSchale); List<Integer> rechteSchale = alleMuenzen.subList(0, halbeAnzahl); alleMuenzen.removeAll(rechteSchale); String antwort = JOptionPane.showInputDialog("Muenzen links: " + linkeSchale.toString() + "Muenzen rects: " + rechteSchale.toString() + "Welche Schale ist leicher (0=keine, 1=links, 2=rechts)"); switch (antwort) { case "1": return linkeSchale; case "2": return rechteSchale; default: return alleMuenzen; } } private Collection<Integer> generiereMuenzen(int i) { ArrayList<Integer> muenzeListe = new ArrayList<>(); for (int j = 0; j < i; j++) { muenzeListe.add(j + 1); } return muenzeListe; } }
bye
TT

Wo in deinem Beispiel markierst du denn eine Münze als “falsch”? Außerdem ist mir irgendwie nicht klar, wie der User entscheiden soll, welche Waagschale leichter ist!?

Da müsste meiner Meinung noch eine Methode dazu, wie:

  if (coin.equals(this.fakeCoin))
    return 1;
  else return 2;
}```

Denn irgendwie muss man das gewicht der Münzen ja bestimmen.

Ich hatte irgendwie nen Denkfehler. Ich ging irgendwie davon aus, dass es mehr um den Algorithmus selbst geht und hatte nicht begriffen, dass das in ein „Spiel“ mit Fragen münden soll.

[QUOTE=Natac]Wo in deinem Beispiel markierst du denn eine Münze als “falsch”?[/QUOTE]Es ist die Einzige die über ist.

[QUOTE=Natac;29757]Außerdem ist mir irgendwie nicht klar, wie der User entscheiden soll, welche Waagschale leichter ist!? [/QUOTE]Die Annahme ist, dass unser Programm die Anleitung des Anwenders ist, der das Wiegen dann ausführt und das Ergebnis des Wiegens eingibt. Anders macht es keinen Sinn, dass das Programm den Algorythmus implementiert…

bye
TT

Müsstest du dann nicht noch ausgeben, mit welcher Waagschlate weitergemacht werden soll!? Irgendwie ist mir unklar, was genau das Programm machen soll und was der User.

Das macht ja der Anwender in dem er die Frage beantwortet. Abhängig von der Antwort teilt das Programm die genannte Waagschale erneut auf, oder gibt die Lösung aus.

Mein eigener Zwischenstand ist immernoch:



	/* ----------Hauptmethode---------- */
	public static void main(String[] args) {
		int linksMin = 1;		/* Die niedrigste Münze auf der linken Seite */
		int linksMax = 500;		/* Die höchste Münze auf der linken Seite */
		int rechtsMin = 501;		/* Die niedrigste Münze auf der rechten Seite */
		int rechtsMax = 1000;		/* Die höchste Münze auf der rechten Seite */
		int antw = 0;		/* Variable für die Antworten: 0 = Ja, 1 = Nein */
		int x = 0;		/* Beiseite gelegte Münze */
		boolean gefunden = false;	/* Wurde die falsche Münze gefunden? */
		
		
		System.out.println("1 = Ja, 0 = Nein");
		
		
		do {
			System.out.println("Links liegen die Münzen von "+linksMin+" bis "+linksMax+". Rechts liegen die Münzen von "+rechtsMin+" bis "+rechtsMax+".");
			
			
			antw = IO.readInt("Ist der Münzhaufen rechts schwerer?: ");
			
		
			/* Umverteilung, wenn die falsche Münze auf der linken Seite liegt */
			if (antw == 1) {
				linksMax = linksMax / 2;
				rechtsMin = rechtsMin - linksMax;
				rechtsMax = rechtsMax / 2;
			}
			
			
			/* Umverteilung, wenn die falsche Münze auf der rechten Seite liegt */
			if (antw == 0) {
				linksMin = rechtsMin;
				linksMax = ((rechtsMax - rechtsMin) / 2) + linksMin;
				rechtsMin = linksMax + 1;
			}
			
			
			/* Verteilung, wenn die Zahl der zu verteilenden Münzeng ungerade ist */
			if (linksMax % 2 != 0) {
				switch (antw) {
					/* Wenn die falsche Münze auf der linken Seite liegt */
					case 1:
						x = linksMax;
						linksMax = (linksMax - 1) / 2;
						rechtsMin = rechtsMin - linksMax - 1;
						rechtsMax = rechtsMax - 1;
						System.out.println("Eine Münze wurde beseite gelegt.");
						break;
						
					/* Wenn die falsche Münze auf der rechten Seite liegt */
					case 0:
						x = rechtsMin;
						linksMin = rechtsMin + 1;
						linksMax = ((rechtsMax - rechtsMin) / 2) + linksMin - 1;
						rechtsMin = linksMax + 1;
						System.out.println("Eine Münze wurde beseite gelegt.");
						break;
				}
				
				/* Abfrage, ob beide Münzhaufen gleich schwer sind */
				System.out.println("Links liegen die Münzen von "+linksMin+" bis "+linksMax+". Rechts liegen die Münzen von "+rechtsMin+" bis "+rechtsMax+".");
				antw = IO.readInt("Sind die beiden Münzhaufen gleichschwer?: ");
				
				/* Wenn beide Münzhaufen gleich schwer sind, dann ist die beiseite gelegte Münze "x" die leichtere, das Programm  wird beendet */
				if (antw == 1) {
					System.out.println("Münze Nr. "+x+" ist leichter als die anderen.");
					gefunden = true;
				}
			}
		} while (gefunden == false);
	}
}```


Problem ist immernoch der Fall der ungeraden Zahlen.

So auf den ersten Blick, die berechnest zu erst die neuen “Grenzwerte” aus, überprüfst dann, ob eine ungerade Anzahl an Münzen vorliegt und berechnest dann anhand der bereits manipulierten “Grenzwerte” die “Grenzwerte” neu.
Lass das Programm mal im Debugger laufen oder gib an den verschiedenen Stellen den die “Grenzwerte” inkl. x aus.

[QUOTE=Natac]Müsstest du dann nicht noch ausgeben, mit welcher Waagschlate weitergemacht werden soll!? Irgendwie ist mir unklar, was genau das Programm machen soll und was der User.[/QUOTE]Eigentlich kann es doch nur so sein: Das Proramm gibt Anweisungen, der Anwender führt die aus und gibt das Ergebnis ein.
Genau so stehts in der Aufgabe.

bye
TT

Also ich habe dem ganzen noch eine Variable n hinzugefügt, die aktuelle Länge des Münzbereichs. Mit der kannst du immer checken, ob die Stapel eine gerade oder ungerade Länge haben, nach jedem durchlauf kannst du sie einfach halbieren (unbedingt als int! Dann gibt dir nämlich wegen z.B. 125/2=62 n immer die richtige (kleinere) Länge aus).

Außerdem solltest du nochmal die Berechnung der neuen Grenzen anschauen. Hier macht es einen Unterschied, welche der Grenzen du zuerst setzt.

**Tipp: **Wenn die linke Seite leichter ist, was ist dann der neue Wert für rechtsMax? Du brauchst hier gar nicht rechnen, den Wert hast du schon! Die mittleren Grenzen kriegst du dann locker über die äußeren.

Ich krig hier gleich ein Knoten ins Hirn… :o)


public final class SchwererLeichter {
	public static void main(String[] args) {
		int min = 1;
		int max = 1000;
		int mid, lMin, lMax, rMin, rMax;
		while(true) {
			if(min - max == 0) {
				System.out.println("Also ist " + max + " die Fälschung.");
				break;
			}
			mid = (min + max) / 2;
			lMin = min;
			lMax = mid;
			rMin = mid + 1;
			rMax = max;
			if((max - min + 1) % 2 != 0) {
				if(yesNo("Ist " + rMin + " die Fälschung?")) {
					break;
				}
				rMin++;
			}
			System.out.println("Links liegt " + lMin + " bis " + lMax + ",");
			System.out.println("rechts liegt " + rMin + " bis " + rMax + ".");
			if(yesNo("Ist der linke Stapel leichter?")) {
				min = lMin;
				max = lMax;
			} else {
				min = rMin;
				max = rMax;
			}
		}
	}

	private static boolean yesNo(String question) {
		System.out.println(question);
		@SuppressWarnings("resource")
		Scanner sc = new Scanner(System.in);
		char c;
		while(true) {
			c = sc.nextLine().charAt(0);
			if(c == 'y' || c == 'Y' || c == 'j' || c == 'J') {
				return true;
			} else if(c == 'n' || c == 'N') {
				return false;
			}
		} 
	}
}```

Ohman und ich habe gedacht meines wäre schon schön kurz :(. Dafür kann ich am Anfang die Anzahl der zu prüfenden Münzen selber eingeben :stuck_out_tongue:

import java.util.*;

public class Aufgabe_11 { 
	public static void main(String[] args) { 
		//Anzahl der Münzen
		int n;		
				
		int lMin = 0;
		int lMax = 0;
		int rMin = 0;
		int rMax = 0;
						
		//Mittlere Münze
		int m=0;
		
		boolean gefunden = false;
		
		//Antworten
		System.out.println("Bei Fragen schreiben sie bitte j für JA und n für NEIN");
		String antwort;
		
		Scanner sc = new Scanner(System.in);   
		System.out.println("Wieviele Münzen haben Sie?");
		n = sc.nextInt();
		
		//Anfangswerte für die zwei Waagschalen festlegen
		lMin 	= 1;
		lMax 	= n/2;		
		rMax 	= n;
		
		switch(n%2){
		case 0:
			rMin = n/2 + 1;
			break;
		case 1:
			m 		= n/2 + 1;
			rMin 	= n/2 + 2;
		}		
		ausgabe(lMin, lMax, rMin, rMax, m);
		
		//Schleife zum Finden der gefälschten Münze
		while(!gefunden){
			System.out.println("Es sind noch " + n + " Münzen im Spiel");			

			//Ungerade Anzahl von Münzen
			switch(n%2){
			case 1:
				System.out.println("Sind die Stapel gleich schwer?");
				antwort = sc.next();
				if(antwort.equals("j")){
					gefunden = true;	
					break;
				}
			//Gerade Anzahl von Münzen
			case 0:
				m=0;
				System.out.println("Ist der linke Stapel leichter?");
				antwort = sc.next();
				
				//Stapel neu aufteilen
				n=n/2;
				
				if(antwort.equals("j")){
					rMax = lMax;
				}
				else{					
					lMin = rMin;
				}
				switch(n%2){
				case 1:
					m = lMin + n/2;
				case 0:
					lMax = lMin + n/2 - 1;
					rMin = rMax - n/2 + 1;			
				}
				ausgabe(lMin, lMax, rMin, rMax, m);
			}
			if(lMin == rMax)
				gefunden = true;
		}
		//Nummer der falschen Münze ausgeben
		System.out.println("Münze Nr."+ m + " ist gefälscht!");
		
	}
	
	public static void ausgabe(int lMin, int lMax, int rMin, int rMax, int m){
		System.out.println("| " + lMin + " - " + lMax + " |     | " + rMin + " - " + rMax + " |  + " + m);
		System.out.println("///////////////////////////////////////////////");
	}
}

ich finde, dass [QUOTE=Timothy_Truckle;29748][ mein OO-Ansatz][/QUOTE]zu unrecht ignoriert wird…
:mad:

bye
TT

[QUOTE=Timothy_Truckle;29871]ich finde, dass zu unrecht ignoriert wird…
:mad:

bye
TT[/QUOTE]Liegt wohl daran, dass dein Ansatz erst interessant wird, wenn man tatsächlich Objekte hat, mit denen man kaum rechnen kann (z.B. Coin). Erst dann macht es Sinn Objekte gleicher Klassen in ein Array oder eine List zu mappen, diese(s) dann anhand einer Eigenschaft (z.B. weight) zu sortieren und anschliessend ein spezielles Objekt zu finden bzw. finden zu lassen. Für Beispiele nur mit Zahlen genügt jedoch der simple Algo.

Ich würde ihn ja schon deshalb interessant finden weil er mit nur 40 Zeilen auskommt.
Und lesbarerer ist er auch.

Aber das prozedurale Ansätze bevorzugt werden bin ich ja noch vom JF gewöhnt…

bye
TT

Hm. Unter prozedural verstehe ich nichts, was nicht auch auf deinen Ansatz zutreffen würde (und Arrays sind auch Objekte :smiley: ). Die Collections entsprechend zu verwenden hat sicher was , aber echt objektorientiert® wäre eher sowas wie

interface Coin { ... }
interface Scale { ... }
interface CoinSelectionCriterion { ... }
interface CoinSelectionCriterionFactory { ... }
interface ScaleBasedCoinSelectionCriterion { ... }

:o)

In einer entsprechenden Listen-Orientierten Sprache (oder auch sowas wie Scala) wäre das wahrscheinlich ein Einzeiler…

Dein Ansatz hat ein paar Probleme.

Du erzeugst sehr viele Objekte. Bei 1000 Münzen, 1000 Instanzen, bei 1 Mrd. Münzen 1 Mrd. Instanzen.
Das hat Elementare Nachteile, wenn so etwas tatsächlich mal eingesetzt werden sollte.

Bei deinem Ansatz wird der User gefragt, was nun schwerer wiegt. Würde man dies umstellen und den Rechner die Gewichte aufsummieren lassen, um den schwereren Haufen zu finden, dann würde er bei 1 Mrd. Objekte sehr viel aufsummieren müssen um dann einen Vergleich zu ziehen.

Es gibt Fälle in denen dies nötig oder unvermeidlich ist. Hier ist das allerdings nicht der Fall.

Meiner Meinung nach kann man aber dennoch etwas Objektorientierung sinnvoll hineinbringen.

public class Scale {

    public enum Result {
        A_HEAVIER, B_HEAVIER, EQUAL, ERROR;
    }

    private final int target;

    public Scale(int target) {
        this.target = target;
    }

    public Result weigh(int minA, int maxA, int minB, int maxB, boolean rest) {
        System.out.printf("Comparing [%d - %d], [%d - %d]%s%n",minA,maxA, minB,maxB, (rest)? " and Rest "+(maxB+1):"");
        int a = maxA - minA;
        int b = maxB - minB;

        if (a != b) {
            System.out.println("Unequal Number of Elements");
            return Result.ERROR;
        } else if (minA <= target && target <= maxA) {
            System.out.printf("Set A [%d - %d] is heavier%n", minA, maxA);
            return Result.A_HEAVIER;
        } else if (minB <= target && target <= maxB) {
            System.out.printf("Set B [%d - %d] is heavier%n", minB, maxB);
            return Result.B_HEAVIER;
        } else {
            System.out.println("Sets weight equal!");
            return Result.EQUAL;
        }
    }
}

Eine Waage, die die lästigen Benutzereingaben ersetzt.
Hierbei bekommt die Waage die Info, in welcher Schale sich die schwerere Münze befindet.
Zum Wiegen werden zwei Bereiche übergeben. Sowie die Info, ob es noch eine zusätzliche Münze gibt (Für eine passende Ausgabe).

Man kann sich auch vorstellen in dieser Waage die Nutzereingaben zu kapseln.

public enum CoinAlgorithms {
    ITERATIV {
        @Override
        public int search(int minX, int maxX, Scale scale) {
            int min = minX;
            int max = maxX;
            while (min != max) {
                int size = max - min + 1;
                int half = size / 2;
                int minA = min;
                int maxA = minA + half - 1;
                int minB = maxA + 1;
                int maxB = minB + half - 1;
                boolean rest = maxB < max;

                Scale.Result weighResult = scale.weigh(minA, maxA, minB, maxB, rest);

                switch (weighResult) {
                    case A_HEAVIER:
                        max = maxA;
                        break;
                    case B_HEAVIER:
                        min = minB;
                        max = maxB;
                        break;
                    case EQUAL:
                        min = max;
                        break;
                    case ERROR:
                    default:
                        return -1;
                }
            }
            return max;
        }
    }, REKURSIV {
        @Override
        public int search(int min, int max, Scale scale) {
            if (min == max) {
                return min;
            }
            int size = max - min + 1;
            int half = size / 2;

            int minA = min;
            int maxA = minA + half - 1;

            int minB = maxA + 1;
            int maxB = minB + half - 1;

            Scale.Result weighResult = scale.weigh(minA, maxA, minB, maxB, maxB < max);

            switch (weighResult) {
                case A_HEAVIER:
                    return search(minA, maxA, scale);
                case B_HEAVIER:
                    return search(minB, maxB, scale);
                case EQUAL:
                    return maxB + 1;
                case ERROR:
                default:
                    return -1;
            }
        }
    };

    public abstract int search(int min, int max, Scale scale);

}

Nun kann man ein (Strategy-Pattern?) anwenden, dass die Algorithmen bereithält. Einmal Rekursiv und einmal Iterativ. Wobei es doch sehr schwer wird hier einen Stackoverflow zu erhalten.

import java.util.Random;

public class Coins {

    private final Scale scale;

    private final int nrCoins;
    private final CoinAlgorithms algorithm;

    public Coins(Scale scale, int nrCoins, CoinAlgorithms algorithm) {
        this.scale = scale;
        this.nrCoins = nrCoins;
        this.algorithm = algorithm;
    }

    public int search() {
        return algorithm.search(1, nrCoins, scale);
    }

    public static void main(String[] args) {
        int nrCoins = 1000;
        int target = new Random().nextInt(nrCoins + 1);

        System.out.printf("Target is %d %n", target);

        Scale scale = new Scale(target);

        for(CoinAlgorithms algorithm : CoinAlgorithms.values()){
            System.out.println(algorithm);
            Coins coins = new Coins(scale, nrCoins, algorithm);
            int result = coins.search();
            System.out.println("Found false coin " + result);
        }
    }
}```

Das Programm Coins bekommt im Konstruktor eine Waage die die Münze "erkennt", sowie die maximale Anzahl an Münzen übergeben und einen Algorithmus nachdem es vorgehen soll.
Danach wird einer der beiden Algorithmen mit den anfänglichen Grenzen aufgerufen.

Das könnte man sich nun auch mit den entsprechenden Interfacen und Factories ausstatten, sowie ausreichend dokumentieren
 @Timothy_Truckle  ausserdem sorgt, deine Objektorientierte Version durch das Nutzen von subList in Verbindung mit dem Remove für eine ConcurrentModification Exception.

Exception in thread “main” java.util.ConcurrentModificationException
at java.util.ArrayList$SubList.checkForComodification(ArrayList.java:1129)
at java.util.ArrayList$SubList.listIterator(ArrayList.java:1009)
at java.util.AbstractList.listIterator(AbstractList.java:299)
at java.util.ArrayList$SubList.iterator(ArrayList.java:1005)
at java.util.AbstractCollection.toString(AbstractCollection.java:442)
at MuenzeFindenTest.findLeichtereMenge(MuenzeFindenTest.java:22)
at MuenzeFindenTest.leichtereSuchen(MuenzeFindenTest.java:11)
at MuenzeFindenTest.main(MuenzeFindenTest.java:44)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)

[QUOTE=Majora]Dein Ansatz hat ein paar Probleme.

Du erzeugst sehr viele Objekte. Bei 1000 Münzen, 1000 Instanzen, bei 1 Mrd. Münzen 1 Mrd. Instanzen.
Das hat Elementare Nachteile, wenn so etwas tatsächlich mal eingesetzt werden sollte.[/QUOTE]In der Aufgabe ist der zu erwartende Wertebereich klar genannt. Auserdem ist es ein akademisches Beispiel zum erlernen von Java. Und ich denke da sind Performaz-Spekulationen nicht angebracht.

[QUOTE=Majora;59237]Bei deinem Ansatz wird der User gefragt, was nun schwerer wiegt.[/QUOTE]Ja, dass steht so in der Aufgabe.

[QUOTE=Majora;59237]Würde man dies umstellen und den Rechner die Gewichte aufsummieren lassen, um den schwereren Haufen zu finden, dann würde er bei 1 Mrd. Objekte sehr viel aufsummieren müssen um dann einen Vergleich zu ziehen.[/QUOTE]In diesem Fall würde der Rechner aber nicht wissen, welche die leichtere Münze ist, und dann kommt an der Münzobjekte-Lösung nur unter schmerzen vorbei. Man kann sich nur noch überlegen, ob man es schafft, nur die Münzen im Speicher zu halten, die auf eine Schale müssen. Weniger geht nicht.

[QUOTE=Majora;59237]Es gibt Fälle in denen dies nötig oder unvermeidlich ist. Hier ist das allerdings nicht der Fall.[/QUOTE]Da es offensichtich eine Übungsaufgabe ist sehe ich das anders.

[QUOTE=Majora;59237]Eine Waage, die die lästigen Benutzereingaben ersetzt. [/QUOTE]Damit erfüllt Deine Lösung nicht mehr die (Übungs-)Anforderungen.

[QUOTE=Majora;59237] @Timothy_Truckle ausserdem sorgt, deine Objektorientierte Version durch das Nutzen von subList in Verbindung mit dem Remove für eine ConcurrentModification Exception.


Exception in thread "main" java.util.ConcurrentModificationException
	at java.util.ArrayList$SubList.checkForComodification(ArrayList.java:1129)
	at java.util.ArrayList$SubList.listIterator(ArrayList.java:1009)
	at java.util.AbstractList.listIterator(AbstractList.java:299)
	at java.util.ArrayList$SubList.iterator(ArrayList.java:1005)
	at java.util.AbstractCollection.toString(AbstractCollection.java:442)
	at MuenzeFindenTest.findLeichtereMenge(MuenzeFindenTest.java:22)
	at MuenzeFindenTest.leichtereSuchen(MuenzeFindenTest.java:11)
	at MuenzeFindenTest.main(MuenzeFindenTest.java:44)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:606)
	at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)

[/QUOTE]Ich verstehe nicht wo die her kommt. Ich iteriere ja nicht selbst über die Liste und das die JVM sublist() oder removeAll() asynchron im Hintergrund abarbeitet halte ich für unwahrscheinlich.
Komische Sache das…:frowning:

bye
TT