4 unterschiedliche Random Zahlen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • 4 unterschiedliche Random Zahlen

    Hallo Leute,
    bin ein Neuling in Swift, hab jedoch schon Erfahrung im Bereich Java und C#.

    Nun zu meinem Problem, ich arbeite an einer App die ein Multiple Choice Quiz beinhalten soll.
    Die Antwort Möglichkeiten sollen immer an einer anderen Stelle stehen.

    Genau da ist mein Problem, ich brauche 4 Nummern, zwischen 1 und 4, jedoch darf keine doppelt vorkommen.

    Mein Code sieht so aus:

    repeat{
    zahl1 = randomIntFrom(start: 1, to: 4)
    zahl2 = randomIntFrom(start: 1, to: 4)
    zahl3 = randomIntFrom(start: 1, to: 4)
    zahl4 = randomIntFrom(start: 1, to: 4)
    } while( zahl1 == zahl2 && zahl1 == zahl3 && zahl1 == zahl4 &&
    zahl2 == zahl1 && zahl2 == zahl3 && zahl2 == zahl4 &&
    zahl3 == zahl1 && zahl3 == zahl2 && zahl3 == zahl4 &&

    zahl4 == zahl1 && zahl4 == zahl2 && zahl4 == zahl3)

    bin über jede Hilfe Dankbar. :D :D
  • Michael schrieb:

    Nimm ein Array uns sortiere das zufällig:

    C-Quellcode

    1. let numbers = [1, 2, 3, 4]
    2. let shuffledNumbers = numbers.sorted { (_, _) -> Bool in arc4random() < arc4random() }
    Elegant. Gefällt mir!

    Es geht noch einen kleinen Tacken kürzer, wenn man will:

    Quellcode

    1. let shuffledNumbers = (1...4).sorted { _ in arc4random() < arc4random() }
    Das iPhone sagt: "Zum Antworten streichen". Wie? Echt Jetzt? Muß ich erst die Wohnung streichen!?
  • torquato schrieb:

    Es geht noch einen kleinen Tacken kürzer, wenn man will:

    Quellcode

    1. let shuffledNumbers = (1...4).sorted { _ in arc4random() < arc4random() }

    Ürgs. Ich sehe gerade durch Zufall (nomen est omen ;) ), daß das so nicht ganz korrekt sein muß. IdR teste ich meinen Code, den ich hier poste. So auch in diesem Fall. Allerdings bin ich meist auf einer Development Toolchain. In dem Fall Swift 3.1. Jetzt habe ich sowas selber in einem Release Build (Swift 3.0.2) verwendet und prompt fliegt es mir um die Ohren. Das (_, _) in nach _ in ist anscheinend nicht in jeder Swit 3 Version möglich.
    Stellt sich jetzt die Frage, ob das ein (regression) Bug oder Feature ist. Hat hier nicht letztens jemand was von 'Pizza für Bugs' geschrieben? Ich nehme eine Capricciosa. :)
    Das iPhone sagt: "Zum Antworten streichen". Wie? Echt Jetzt? Muß ich erst die Wohnung streichen!?
  • Michael schrieb:

    Nimm ein Array uns sortiere das zufällig:

    C-Quellcode

    1. let numbers = [1, 2, 3, 4]
    2. let shuffledNumbers = numbers.sorted { (_, _) -> Bool in arc4random() < arc4random() }
    Wer kann mir das mal bitte erklären. Also so wenn man keine Ahnung hat von Swift. Angeblich muss das ja ganz einfach sein. Wenn ich mir das jetzt aber so ansehen verstehe ich nur:

    Benutze die Methode sorted eines Array (_, _) könnten die PArameter eines Enclosures sein (Vielleicht) ergebnis wäre dann aber Bool aus einer Zufallszahl die aus einer Zufallszahl kommt?
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • Thallius schrieb:

    Benutze die Methode sorted eines Array (_, _) könnten die PArameter eines Enclosures sein (Vielleicht) ergebnis wäre dann aber Bool aus einer Zufallszahl die aus einer Zufallszahl kommt?
    Die zwei underlines drücken wohl aus dass die Parameter nicht benötigt werden.
    Das boolsche Ergebnis wird wohl aussagen dass der erste parameter kleiner als der zweite ist (oder eben nciht).
    Es wird keine Zufallszahl aus einer Zufallszahl erstellt sondern zwei Zufallszahlen verglichen.

    Ich frage mich nur gerade ob das so wirklich korrekt funktioniert?
    Das Ergebnis hängt ja komplett vom verwendeten sort-algo ab denn die Wahrscheinlichkeit dass die "1" an der letzten Stelle ist, sollte meiner Meinung nach 25% betragen. Abhängig vom sort-algo wären es aber zb 50% * 50% * 50% = 12,5 %

    Ist es noch zu früh für mich???
  • Die Abschätzung der Zufallsqualität wird bei den Divide-And-Conquer-Verfahren wahrscheinlich richtig haarig, wenn beim Zusammenfügen der Teilergebnisse wieder Vergleiche (z. B. Merge-Sort) gebraucht werden. Bei Quicksort sollte die Wahrscheinlichkeit, dass eine Zahl an einer bestimmten Position erscheint, gleichverteilt sein.
    „Meine Komplikation hatte eine Komplikation.“
  • macmoonshine schrieb:

    Die Abschätzung der Zufallsqualität wird bei den Divide-And-Conquer-Verfahren wahrscheinlich richtig haarig, wenn beim Zusammenfügen der Teilergebnisse wieder Vergleiche (z. B. Merge-Sort) gebraucht werden. Bei Quicksort sollte die Wahrscheinlichkeit, dass eine Zahl an einer bestimmten Position erscheint, gleichverteilt sein.
    Man sollte aber keine Annahmen über verwendete Algorithmen machen und sich nur darauf verlassen was dokumentiert ist (und soweit ich weiß ist dazu nix dokumentiert).
    Die Lösung würd ich also eher als "quick, dirty and erroneous" bezeichnen ;)