Losowanie z prawdopodobieństwem

Losowanie z prawdopodobieństwem
  • Rejestracja: dni
  • Ostatnio: dni
0

W tym programie po prostu ustaw, by po wykonaniu skryptu wpisal to, co jest w schowku.

ST
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 57
0

Kurde jednak nie kopiuje takie coś mam
Myślałem , że kopiuje , ale teraz jak kilka razy uruchomilem to nie kopiuje jednak , ale bledow nie ma.

Kopiuj

public class Program
{
    public static void Main()
 
    {
        var keyManager = new System.Collections.Generic.Dictionary<string, double>();
        keyManager.Add("F3", 0.3);
        keyManager.Add("F4", 0.3);
        keyManager.Add("F5", 0.4);
 
        var rnd = new System.Random();
 
        var rndValue = rnd.NextDouble();
        foreach (var key in keyManager.Keys)
        {
            var value = keyManager[key];
            if (value > rndValue)
            {
         System.Windows.Forms.Clipboard.SetText(key);
                break;
            }
        }
    }
}

Przecież na stronie dokumentacji, którą podałem są kody dla F'ów....
{F1} {F2} itd. https://msdn.microsoft.com/en[...]dows.forms.sendkeys.send.aspx
A Wy ciągle macie wpisane bez klamerek.

Kolega napisał coś takiego tylko nie wiem jak mam się do tego zastosować.

ST
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 57
0

Moze ktos Wie co jest nie tak ?

Spine
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 6967
0

zamiast keyManager.Add("F3",... napisz keyManager.Add("{F3}",...

i tak dla wszystkich Fów.

ST
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 57
0

Mam napisane takie coś , ale nie klika :(

Kopiuj
public class Program
{
    public static void Main()
 
    {
        var keyManager = new System.Collections.Generic.Dictionary<string, double>();
        keyManager.Add("{F3}", 0.3);
        keyManager.Add("{F4}", 0.5);
        keyManager.Add("{F5}", 0.2);
 
        var rnd = new System.Random();
 
        var rndValue = rnd.NextDouble();
        foreach (var key in keyManager.Keys)
        {
            var value = keyManager[key];
            if (value > rndValue)
            {
        System.Windows.Forms.SendKeys.Send(key);
                break;
            }
        }
    }
}
  • Rejestracja: dni
  • Ostatnio: dni
0
Kopiuj
public class Program
{
    public static void Main()
 
    {
        var keyManager = new System.Collections.Generic.Dictionary<string, double>();
        keyManager.Add("F3", 0.7);
        keyManager.Add("F4", 0.2);
        keyManager.Add("F5", 0.1);
 
        var rnd = new System.Random();
 
        var rndValue = rnd.NextDouble();
        foreach (var key in keyManager.Keys)
        {
            var value = keyManager[key];
            if (value > rndValue)
            {
                System.Windows.Forms.SendKeys.SendWait("{" + key + "}");
                break;
            }
        }
    }
}
ST
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 57
0

Bledow teraz juz nie ma.
Nie chce jedynie cos skubaniec kliknac.

  • Rejestracja: dni
  • Ostatnio: dni
0

Wpisz to:

Kopiuj
public class Program
{
	public static void Main()
	{
		System.Windows.Forms.SendKeys.SendWait("test");
	}
}

I ustaw wszystko tak samo jak ja to zrobilem:
title

Czy wtedy chociaz "klika"?

ST
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 57
0

Odplillem notatnik i wpoisalem komende z gory napisalo tekst w notatniku test tylko ze to napisalo tekst a ma kliknac F3 a nie napisac moze to roznica jakas?

  • Rejestracja: dni
  • Ostatnio: dni
0

A czy to zadziala?

Kopiuj
public class Program
{
    public static void Main()
 
    {
        var keyManager = new System.Collections.Generic.Dictionary<string, double>();
        keyManager.Add("{F3}", 0.7);
        keyManager.Add("{F4}", 0.2);
        keyManager.Add("{F5}", 0.1);
 
        var rnd = new System.Random();
 
        var rndValue = rnd.NextDouble();
        foreach (var key in keyManager.Keys)
        {
            var value = keyManager[key];
            if (value > rndValue)
            {
                System.Windows.Forms.SendKeys.SendWait(key);
                break;
            }
        }
    }
}
ST
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 57
0

Nie chce dziad nacisnąć :)

  • Rejestracja: dni
  • Ostatnio: dni
0
Stranek napisał(a):

Nie chce dziad nacisnąć.

A skąd wiesz, ze nie naciska?

  • Rejestracja: dni
  • Ostatnio: dni
0

Wejdz na ta strone: http://www.keyboardtester.com/tester.html
I sprawdz, czy naciska te F3 itd.

ST
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 57
0

Bo jak sam nacisne f3 to mam hotkery ustawiony w programiku , ktory zmienia rozdzielczosc.
Moge pokazac teamviewer albo cos takiego jesli ma Pan chwile czy cos

ST
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 57
0

Wyswietlaja sie na tej stronie ze naciska F3 ale tez CRTL SHIFT

ST
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 57
0

I tez caly czas losuje F3 a przeciez ma losowac rozne ?

  • Rejestracja: dni
  • Ostatnio: dni
0

U mnie z tym kodem:

Kopiuj
public class Program
{
    public static void Main()
 
    {
        var keyManager = new System.Collections.Generic.Dictionary<string, double>();
        keyManager.Add("{F3}", 0.7);
        keyManager.Add("{F4}", 0.2);
        keyManager.Add("{F5}", 0.1);
 
        var rnd = new System.Random();
 
        var rndValue = rnd.NextDouble();
        foreach (var key in keyManager.Keys)
        {
            var value = keyManager[key];
            if (value > rndValue)
            {
                System.Windows.Forms.SendKeys.SendWait(key);
                break;
            }
        }
    }
}

działa to tak:title

  • Rejestracja: dni
  • Ostatnio: dni
0

żeby działało z wszystkimi klawiszami zmień z:
if (value > rndValue)
na
if (value < rndValue)

ST
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 57
0

O teraz zaczelo klikac.
Tylko ze jakby nie łapie jak sam nacisne na f3 to zmienia rozdzielczosc a tutaj f3 nie zmienia a w tym co Pan pokazal tej stronie dziala zmienianie.
Jest roznica miedzy systemowa klawiatura a ta co sam naciskam :D ?
I teraz już daje różne wyniki jest okej.

  • Rejestracja: dni
  • Ostatnio: dni
0

Hmm widocznie jest. W tym juz nie pomoge

ST
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 57
0

Mimo wszystko bardzo dziekuje.
Kopiowanie tekstu działa wysmienicie zreszta klawiatura też , ale jak widać to jest roróżnienie jakieś tych klawiatur.
I te 0.7 to jest 70% tak ?

ST
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 57
0

Sory za podbicie

Spine
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 6967
1

Coś mi się wydaje, że prawdopodobieństwo jest źle zaimplementowane. Przedziały na siebie nachodzą.

Mamy do podziału 1.0. Więc trzeba przydzielić odpowiednią część liczby każdemu klawiszowi.
od 0 do 0.7 jednemu = 0.7
od 0.7 do 0.9 drugiemu = 0.2
od 0.9 do 1.0 trzeciemu = 0.1

I nie wiem jak z kolejnością kluczy w słowniku....

ST
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 57
0

keyManager.Add("F3", 0.7);
keyManager.Add("F4", 0.2);
keyManager.Add("F5", 0.1)

Jest tak czyli ok.

A slyszeliscie o czyms takim jak rozpoznanie klawiatury systemowej i programowej.
Bo klikajac samemu na klawiaturze f4 zmieniam rozdzielczosc tutaj klika bo widac to na stronie http://www.keyboardtester.com/tester.html
Jedynie w samym windows jakby nie klika.
Da sie moze cos z ytm zrobic?

Co do rotacji chyba jest okej sprawdzalem i by sie to zgadzalo dosyc.

ST
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 57
0

Teraz jak odpaliłem kilkanaście tych skryptow to w sumie bylo piec razy f3 cztery razy f4 i dwa razy f5.
A ma byc niby 70% f3 20% f4 i 10%

Kopiuj
 F4 F4 F4 F4 F4 F3 F3 F4 F4 F3 F4 F3 F4 F4 F5 F3 F3 F3 F4 F4 F4 F4 F3 F3 F4 F5 F5 F4 F4 F4 F4 F4 F4 F3 F3 F5 F4 F4 F3 F4 F4 F5 F4 F4 F3 F4 F4 F4 F4 F3 F3

Za duzo F4 skoro ma byc tylko 20%

  • Rejestracja: dni
  • Ostatnio: dni
0

Moze cos tam zamieszalem z tym prawdopodobienstwem. Tak powinno byc ok:

Kopiuj
class Propability
    {
        public double Ratio { get; private set; }

        public Propability(double ratio)
        {
            if (ratio < 0) ratio = 0;
            if (ratio > 1) ratio = 1;
            this.Ratio = ratio;
        }
    }

    class KeyMenager
    {
        public string KeyValue { get; private set; }
        public int Occurences { get; private set; }
        public Propability Propability { get; private set; }

        public KeyMenager(string keyValue, double propability)
        {
            this.KeyValue = keyValue;
            this.Occurences = 0;
            this.Propability = new Propability(propability);
        }

        public void AddOccurence() => Occurences++;

        public override string ToString()
        {
            return $"Klawisz {KeyValue} z szansa {Propability.Ratio} wystapil {Occurences} razy";
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            var keys = new KeyMenager[]
            {
                new KeyMenager("F3", 0.7),
                new KeyMenager("F4", 0.2),
                new KeyMenager("F5", 0.1),
            };

            var rnd = new Random();

            for (int i = 0; i < 1000000; i++)
            {
                var randomValue = rnd.NextDouble();
                double sum = 0;

                foreach (var key in keys)
                {
                    sum += key.Propability.Ratio;

                    if (sum > randomValue)
                    {
                        key.AddOccurence();
                        break;
                    }
                }
            }

            keys.ToList().ForEach(x => Console.WriteLine(x));
        }
    }

Na wyjsciu otrzymamy:
title

ST
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 57
0

A kod od kopiowania gdzies mozna tutaj uzyc i podstawic go pod nasz kod?
Okazalo sie ze macro udostepnia if clipboard value i teraz uzywam sobie tego kopiowania i dziala elegancko.
Jedynie uzylbym lepszego randomowania skoro i tak już Pan podal

  • Rejestracja: dni
  • Ostatnio: dni
0
Stranek napisał(a):

A kod od kopiowania gdzies mozna tutaj uzyc ?

Wstaw go miedzy key.AddOccurence(); a break

ST
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 57
0

Wklejal Pan może ten kod w te macro ?
Bo ja mam ze trzeba kod przerobic a od tych szlaczkow to juz mnie oczy bolą podziwiam Was :P

ST
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 57
0

Nie dam rady tego osadzić w macro :(

Pana poprzedni kod mi teraz działa super bo uzywam komendy if clipboard equlas szukam mi tego co trzeba i jest super.
Gdyby był Pan tak miły to mógłby jedynie podać nowy kod już gotowy do tego macro , z którego korzystaliśmy bo nie mogę to za chiny tam umieścić poprawnie a fajnie by było gdyby losowanie było w 100% dziaająca i widzę tam jeszcze jakąś konsole może mógłby Pan ja usunąć a wstawić kopiowanie do clipboard ?

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.