icemanhro
Goto Top

Liste nach Zufallsprinzip

Moin moin,

ich möchte eine Liste nach dem Zufallsprinzip erstellen, und zwar aus den Zahlen 500 bis 999 soll er mir 10 Zahlen sagen können. Desweitern zu jeder Zahl einen Zeitraum von 14 Tagen pro Quartal zusammenhängend, aber auch wieder über Zufallsprinzip errechnet. Hoffe ihr habt wieder mal eine zündende Idee für mich. Ich bedanke mich schon im voraus bei euch.

Icemanhro

Content-ID: 21951

Url: https://administrator.de/contentid/21951

Ausgedruckt am: 22.11.2024 um 05:11 Uhr

duddits
duddits 19.12.2005 um 15:12:37 Uhr
Goto Top
Hi,

in welcher Sprache soll das den realisiert werden ?


mfg duddits
icemanHRO
icemanHRO 19.12.2005 um 21:28:00 Uhr
Goto Top
@duddits

Die Sprache ist egal, muss nur funktionieren face-wink Ich bin gerade dabei es in Excel zu realiesieren, ist aber kein muss.
Biber
Biber 21.12.2005, aktualisiert am 17.10.2012 um 16:28:34 Uhr
Goto Top
Moin IceMan, Rostocker,

sind ja zwei Teilfragen, die Du hast, und ich verstehe nur die erste... face-wink

Die erste Frage... eine Zufallszahl zwischen 1 und 500... dafür bieten ziemlich alle Programmier-, Makro- und Skriptsprachen eine Funktion, die meistens Random(), RND() oder ähnlich heißt und die
- entweder einen Zufallswert zwischen 0 und 1 liefert,
- oder einen Zufallswert zwischen zwei Parametern (Untergrenze; Obergrenze) liefert
- oder einen Zufallswert zwischen zwei Zahlen (eigene fest verdrahte Untergrenze; Obergrenze) liefert.

Beispiel Excel: Da ist die Funktion <s>albernerweise</s> eingedeutscht worden und heißt ZUFALLSZAHL().
Um dort eine Zufallszahl zwischen 1 und 500 zu berechnen/zu erhalten, müsstest Du sagen:
=GANZZAHL(ZUFALLSZAHL() *500)
liefert dann 380 oder 37 oder irgendwas Passendes.

Selbst im Batch, am CMD-Prompt gibt es eine %ramdom%-Systemvariable mit einem Zufallswert zwischen 1 und 32767.
Kannst du testen mit "echo %random%" am CMD-Prompt.
Um von %random% auf einen Wert zwischen 1 und 500 zu kommen, kannst Du die Modulo-Funktion nutzen:
Set /a Zufallszahl=%random%%500
(lies: Setze Zufallszahl gleich (Variable Random) Modulo 500, wobei das zweite "%"-Zeichen der Modulo-Operator ist. Siehe Batch Tut IV oder, sehr schön erklärt von dragonL in Gibt es keine arrays in Batch ? anderre möglichkeit ?.

Soweit zu Teil 1.
~~~~~~~~
Teil 2: ?????????????????????????
Wie ist der Zeitraum von 14 Tagen zusammenhängend gemeint?
An beliebigen Wochentagen beginnend?
Immer zwei volle Kalenderwochen?
Was meinst Du mit "je Quartal"? 2 Wochen für Q1, ...Q4?
Bastelst Du per Zufallsgenerator einen "gerechten Schichtplan"?
~~~~~~~

Und: Was passiert mit dem Zwischenergebnis? Das muss doch auch irgendwohin geschrieben werden ODER übergeben werden?
Bewegst Du Dich in einem Excel-Sheet oder wo sind wir grade?

Bitte um mehr Infos.
Grüße Biber
icemanHRO
icemanHRO 23.12.2005 um 10:36:41 Uhr
Goto Top
Es soll ein Tool zur Überwachung sein. Die Nummern von 500 bis 999 sind die Telefonnummern und daher brauch ich pro Nummer immer zwei zusammenhängende Wochen zwischen 1 und 12. Aber die Nummern und die Wochen müssen seperat generiert werden.
Hab es in Excel auch schon hinbekommen, aber das kann ich so meinem Chefchen nicht anbieten. Er möchte ja gern ein "schönes" Programm haben was er nur starten muss und was ihm dann die Liste mit den dazugehörigen Wochen ausgibt. Nach dieser Liste gibt ihm dann die Telefonabteilung die gewählten Nummern raus udn die gehen dann zur Überprüfung an den Vorgesetzten der jeweiligen Nummer. Hintergrund ist, das ja private Gespräche nicht erlaubt sind udn wir den Eindruck habn das sich nicht daran gehalten wird. daher möchten wir 10 zufällige Nummern pro Quatal überprüfen.
Biber
Biber 23.12.2005 um 16:08:46 Uhr
Goto Top
Moin, IceManHRO,

ganz versteh ich die Problematik nicht...
Wenn ich mich 3 Minuten an Excel setze und eine Tabelle zusammenschrote mit 5 Spalten:

- Spalte Endnr (für eine End-TelNr zwischen 500 und 999)
- Spalte Q1-Anfang für den Starttermin in Quartal 1
- Spalte Q1-Ende für den Endetermin in Quartal 1
- Spalte Q2-Anfang für den Starttermin in Quartal 2
- Spalte Q2-Ende für den Endetermin in Quartal 2

(...macht 40 Sekunden...)

...in das erste Feld unterhalb der Spaltenbeschriftung "Endnr" die Formel
=GANZZAHL(ZUFALLSZAHL() *500)+499
...eingebe, markiere, in die 9 Felder darunter kopiere...
( ...Stoppuhr bei 1:25...)

...in das erste Feld unterhalb der Spaltenbeschriftung "Q1-Anfang" die Formel
=MIN(DATUM(2005;1;1)+GANZZAHL(ZUFALLSZAHL() *90);DATUM(2005;3;31)-14)
...eingebe, markiere, in die 9 Felder darunter kopiere...
( ...Stoppuhr bei 1:57...)

...in das erste Feld unterhalb der Spaltenbeschriftung "Q1-Ende" die Formel
={links benachbartes Feld "Q1-Anfang"}+14
...eingebe, markiere, in die 9 Felder darunter kopiere...
( ...Stoppuhr bei 2:22...)

...in das erste Feld unterhalb der Spaltenbeschriftung "Q2-Anfang" die Formel
=MIN(DATUM(2005;4;1)+GANZZAHL(ZUFALLSZAHL() *90);DATUM(2005;6;30)-14)
...eingebe, markiere, in die 9 Felder darunter kopiere...
( ...nochmal eine knappe halbe Minute...)

...in das erste Feld unterhalb der Spaltenbeschriftung "Q2-Ende" die Formel
={links benachbartes Feld "Q2-Anfang"}+14
...eingebe, markiere, in die 9 Felder darunter kopiere...
( ...drei Minuten rum, von daher schenk ich mir Qaurtal3 und 4...)

...dann habe ich schon folgendes Gerüst:

Endnr;Q1-Anfang;Q2-Ende;Q2;Q2-Ende;
539;09.01.2005;23.01.2005;16.06.2005;30.06.2005;
977;17.01.2005;31.01.2005;09.06.2005;23.06.2005;
736;03.02.2005;17.02.2005;29.05.2005;12.06.2005;
753;16.01.2005;30.01.2005;11.04.2005;25.04.2005;
686;11.01.2005;25.01.2005;24.05.2005;07.06.2005;
895;28.02.2005;14.03.2005;06.05.2005;20.05.2005;
921;12.02.2005;26.02.2005;26.04.2005;10.05.2005;
607;23.02.2005;09.03.2005;29.04.2005;13.05.2005;
796;24.01.2005;07.02.2005;30.04.2005;14.05.2005;
872;05.01.2005;19.01.2005;19.04.2005;03.05.2005

...und wenn Du das noch ein bisschen bunt machst, kannst Du es Deinem Chefchen doch morgen so unter den Tannenbaum legen, oder?

HTH Biber
icemanHRO
icemanHRO 24.12.2005 um 11:56:59 Uhr
Goto Top
Stimmt ja, aber er möchte gerne ein von alleine laufendes Programm haben, wo er go sagt und es unten fertig rauskommt... face-wink
So in Art von einer Batch oder Shell....
Biber
Biber 24.12.2005 um 12:15:14 Uhr
Goto Top
Öööhm, Thomas,

wenn er diese Excel-Tabelle einfach nur -statt zu öffnen- drucken lässt, fällt jedes Mal eine andere Zufallsliste raus, wenn ich keinen Denkfehler mache...

Alternativ kannst Du in dieses Excel-Sheet einen "Go"-Button reinsetzen.
Oder in ein beliebiges freies Feld "42" eingeben. Auch das führt zur Neu-Berechnung.

Wenn es noch schlichter sein soll, dann kannst Du den oben skizzierten Algorithmus in *.vbs oder *.js nachbilden.
Von Batch würde ich abraten, da keinerlei Datums(berechnungs)funktionen angeboten werden.

Grüße Biber
Biber
Biber 24.12.2005 um 12:33:49 Uhr
Goto Top
Nachtrag:

Als Batch (oder Shellskript) wäre es natürlich auch machbar über den Umweg einer einmalig erzeugten Liste mit "Datumszeiträumen" in der Form:

01.01.2005-14.01.2005
02.01.2005-15.01.2005
03.01.2005-16.01.2005
usw. usw.

..aus der Du mit der %random%-Funktionalität Deine Zufalls-Zeilen rausholst.

Aber so richtig Charme strahlt diese Behelfslösung nicht aus.
Wenn Du lieber so einen Weg gehen willst, können wir die 5 Zeilen für Batch auch schnell gemeinsam zusammenschroten.
Bei Shellskripten lese ich dann aber tendienziell eher die anderen geposteten Lösungen mit.

Gruß Biber
Biber
Biber 26.12.2005 um 18:16:10 Uhr
Goto Top
Hallo IceManHRO,

weil Weihachten ist, hab ich noch mal ein bissi Zeit zum Rumbätcheln gehabt..

Ich habe mal auf folgendem Weg einen Mini-Batch zusammengeschreddert:

a) in Excel mal drei Formel-Spalten gefüllt, um "alle Tage ab 1.1.2006" zu berechnen.
Also eine "Nebenrechnungs-Spalte" mit dem Feld-Startwert "1.1.2006", in alle Felder darunter einfach die Formel "={Feld-darüber} plus 1"
auf diese Spalte bezugnehmend kann ich mit zwei kleinen Formeln schnell einen 14-Tage-Zeitraum "anzeigen lassen" und in eine weitere Spalte reinschreiben, in welchem Quartal ("Q1...Q4") dieser 14-Tages-Zeitraum liegt.

Sieht dann als Copy & Paste-Text (oder *.csv-Datei) so aus:
snipp Hilfsdatei 14days.txt
Q1; 01.01.06-14.01.06
Q1; 02.01.06-15.01.06
Q1; 03.01.06-16.01.06
Q1; 04.01.06-17.01.06
Q..........(usw. usw)
...
Q4; 14.12.06-27.12.06
Q4; 15.12.06-28.12.06
Q4; 16.12.06-29.12.06
Q4; 17.12.06-30.12.06
Q4; 18.12.06-31.12.06
snapp Hilfsdatei 14days.txt

b) So, nach dieser lästigen Vorarbeit (geht bestimmt irgendwie auch einfacher, aber ich bin Weihnachten immer so träge...*gg) kann ich endlich einen kleinen Kasper-Batch drüberjagen, der mir in anmutig verschlungenen FOR..IN..DO..-Anweisungen Für 10 Zufalls-Telefonnummer zwischen -500 und -999 für 4 Quartale jeweils einen 14-Tages-Zeitraum ausgibt.

Der Batch-Schnipsel:
::----------- snipp RandomWeeks.bat --------------------------------------
@echo off & Setlocal & set "weeklist=d:\temp\icemanHRO\14days.txt"  
set "QZZ=:..Quartals-Zufallszeile:" && Rem kleiner Debugdisplay..  
(FOR /L %%a IN (1,1,10) do call :ZehnZufallsNummern) & goto :eof
:ZehnZufallsnummern ...zwischen 500 und 999 über alle Quartale
Set /a "RandomTel=%random% %%500+499"  
(FOR /L %%x IN (1,1,4) do call :QuartalsLoop "Q%%x" ) & goto :eof  
:Quartalsloop ...Vier Quartale Q1..Q4 abfackeln
set /a "line=0" & set /a "Random2Weeks=%random% %% 76"  
(FOR /F "tokens=2 delims=;" %%i in ('Find %1 %weeklist%') do call :Get2Weeks %%i %1) & goto :eof  
~~~~~
:Get2Weeks ...je Quartal eine Zeile aus allen des Quartals Q1...Q4
Set /a "Line+=1"   
IF [%line%]==[%random2weeks%] ( echo Tel: -%randomTel%: %~2 :%1 %QZZ% %line%) & goto :eof
::--------------snapp RandomWeeks.bat -----------
Der Output:
$cmd$ d:\temp\icemanHRO\RandomWeeks.bat
Tel: -664: Q1 :11.03.06-24.03.06 :..Quartals-Zufallszeile: 70
Tel: -664: Q2 :25.04.06-08.05.06 :..Quartals-Zufallszeile: 38
Tel: -664: Q3 :23.07.06-05.08.06 :..Quartals-Zufallszeile: 36
Tel: -664: Q4 :28.11.06-11.12.06 :..Quartals-Zufallszeile: 72
Tel: -788: Q1 :24.01.06-06.02.06 :..Quartals-Zufallszeile: 24
Tel: -788: Q2 :24.05.06-06.06.06 :..Quartals-Zufallszeile: 67
Tel: -788: Q3 :16.08.06-29.08.06 :..Quartals-Zufallszeile: 60
Tel: -788: Q4 :22.09.06-05.10.06 :..Quartals-Zufallszeile: 5
Tel: -979: Q1 :18.02.06-03.03.06 :..Quartals-Zufallszeile: 49
Tel: -979: Q2 :29.03.06-11.04.06 :..Quartals-Zufallszeile: 11
Tel: -979: Q3 :11.08.06-24.08.06 :..Quartals-Zufallszeile: 55
Tel: -797: Q1 :09.03.06-22.03.06 :..Quartals-Zufallszeile: 68
Tel: -797: Q2 :19.03.06-01.04.06 :..Quartals-Zufallszeile: 1
Tel: -797: Q3 :01.08.06-14.08.06 :..Quartals-Zufallszeile: 45
Tel: -797: Q4 :14.10.06-27.10.06 :..Quartals-Zufallszeile: 27
Tel: -652: Q1 :08.01.06-21.01.06 :..Quartals-Zufallszeile: 8
Tel: -652: Q2 :28.05.06-10.06.06 :..Quartals-Zufallszeile: 71
Tel: -652: Q3 :19.07.06-01.08.06 :..Quartals-Zufallszeile: 32
Tel: -652: Q4 :09.10.06-22.10.06 :..Quartals-Zufallszeile: 22
Tel: -888: Q1 :04.02.06-17.02.06 :..Quartals-Zufallszeile: 35
Tel: -888: Q2 :15.04.06-28.04.06 :..Quartals-Zufallszeile: 28
Tel: -888: Q3 :24.06.06-07.07.06 :..Quartals-Zufallszeile: 7
Tel: -888: Q4 :23.11.06-06.12.06 :..Quartals-Zufallszeile: 67
Tel: -688: Q1 :17.02.06-02.03.06 :..Quartals-Zufallszeile: 48
Tel: -688: Q2 :19.05.06-01.06.06 :..Quartals-Zufallszeile: 62
Tel: -688: Q3 :03.07.06-16.07.06 :..Quartals-Zufallszeile: 16
Tel: -688: Q4 :13.10.06-26.10.06 :..Quartals-Zufallszeile: 26
Tel: -787: Q1 :26.02.06-11.03.06 :..Quartals-Zufallszeile: 57
Tel: -787: Q2 :04.04.06-17.04.06 :..Quartals-Zufallszeile: 17
Tel: -787: Q4 :29.11.06-12.12.06 :..Quartals-Zufallszeile: 73
Tel: -714: Q1 :06.01.06-19.01.06 :..Quartals-Zufallszeile: 6
Tel: -714: Q2 :22.03.06-04.04.06 :..Quartals-Zufallszeile: 4
Tel: -714: Q3 :15.07.06-28.07.06 :..Quartals-Zufallszeile: 28
Tel: -714: Q4 :21.11.06-04.12.06 :..Quartals-Zufallszeile: 65
Tel: -745: Q1 :18.02.06-03.03.06 :..Quartals-Zufallszeile: 49
Tel: -745: Q2 :04.04.06-17.04.06 :..Quartals-Zufallszeile: 17
Tel: -745: Q3 :28.07.06-10.08.06 :..Quartals-Zufallszeile: 41
Tel: -745: Q4 :28.09.06-11.10.06 :..Quartals-Zufallszeile: 11

...oder, wenn Du es lieber sortiert magst (neuer Aufruf, neue Zufallswerte):

$cmd$ d:\temp\icemanHRO\RandomWeeks.bat|sort
Tel: -503: Q1 :01.01.06-14.01.06 :..Quartals-Zufallszeile: 1
Tel: -503: Q2 :12.04.06-25.04.06 :..Quartals-Zufallszeile: 25
Tel: -503: Q3 :16.08.06-29.08.06 :..Quartals-Zufallszeile: 60
Tel: -503: Q4 :22.11.06-05.12.06 :..Quartals-Zufallszeile: 66
Tel: -531: Q1 :12.01.06-25.01.06 :..Quartals-Zufallszeile: 12
Tel: -531: Q2 :23.04.06-06.05.06 :..Quartals-Zufallszeile: 36
Tel: -531: Q3 :23.07.06-05.08.06 :..Quartals-Zufallszeile: 36
Tel: -531: Q4 :13.10.06-26.10.06 :..Quartals-Zufallszeile: 26
Tel: -609: Q1 :16.03.06-29.03.06 :..Quartals-Zufallszeile: 75
Tel: -609: Q2 :01.04.06-14.04.06 :..Quartals-Zufallszeile: 14
Tel: -609: Q3 :25.06.06-08.07.06 :..Quartals-Zufallszeile: 8
Tel: -609: Q4 :25.10.06-07.11.06 :..Quartals-Zufallszeile: 38
Tel: -728: Q1 :13.01.06-26.01.06 :..Quartals-Zufallszeile: 13

Tel: -900: Q3 :03.07.06-16.07.06 :..Quartals-Zufallszeile: 16
Tel: -900: Q4 :01.10.06-14.10.06 :..Quartals-Zufallszeile: 14
Tel: -906: Q1 :18.01.06-31.01.06 :..Quartals-Zufallszeile: 18
Tel: -906: Q2 :03.04.06-16.04.06 :..Quartals-Zufallszeile: 16
Tel: -906: Q3 :03.07.06-16.07.06 :..Quartals-Zufallszeile: 16
Tel: -906: Q4 :08.10.06-21.10.06 :..Quartals-Zufallszeile: 21
Tel: -915: Q1 :28.01.06-10.02.06 :..Quartals-Zufallszeile: 28
Tel: -915: Q2 :26.05.06-08.06.06 :..Quartals-Zufallszeile: 69
Tel: -915: Q3 :05.07.06-18.07.06 :..Quartals-Zufallszeile: 18
Tel: -915: Q4 :19.11.06-02.12.06 :..Quartals-Zufallszeile: 63
Tel: -993: Q1 :01.03.06-14.03.06 :..Quartals-Zufallszeile: 60
Tel: -993: Q2 :21.03.06-03.04.06 :..Quartals-Zufallszeile: 3
Tel: -993: Q3 :23.06.06-06.07.06 :..Quartals-Zufallszeile: 6
Tel: -993: Q4 :23.11.06-06.12.06 :..Quartals-Zufallszeile: 67


Was Du natürlich anpassen musst, ist Pfad und Name der Hilfsdatei.
Das, was bei mir set "weeklist=d:\temp\icemanHRO\14days.txt" heißt.

Wenn Du das Ganze in eine Datei schreiben willst, dann eben noch ein ">output.txt" dahinter.

HTH Biber

P.S. Sind nun doch 14 Zeilen statt 5 geworden, habe ich aber nur aus Gründen der Lesbarkeit gemacht, glaub mir... face-wink
icemanHRO
icemanHRO 28.12.2005 um 14:10:47 Uhr
Goto Top
Vielen dank Frank,

das war genau das was ich gesucht hab... face-smile
Biber
Biber 28.12.2005 um 19:28:26 Uhr
Goto Top
Moin Thomas,
freut mich, wenn es passt - auch wenn es als Weihnachtsgeschenk für Dein Chefchen ein bisschen zu spät kam.. face-wink

Den Batch und die Datei 14days.txt kann ich Dir auch mailen bei Bedarf. Und auf diesen Thread werde ich bestimmt noch mal querverweisen, wenn es um geschachtelte FOR..IN..DO-Anweisungen, %random% oder Modulo-Funktion geht.

Grüße nach Rostock
Frank / der Biber aus Bremen