Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Neznáte program, který umí vytvářet takto náhodné kombinace čísel?

Ahoj,

hledám program nebo stránku, která by uměla vytvořit 4 000 náhodných kombinací čísel 1 a 2 v délce 34 znaků za sebou. Samozřejmě neopakujících se kombinací. Na něco podobného jsem narazil a myslím, že to bylo hned na první stránce Googlu. Ale at dělám co dělám, nemůžu to už najít. Radši dodám, že jakýkoliv generátor čehokoliv co neumí přesně to co chci nebo generuje menší počet kombinací je mi k ničemu. Je to pro mě docela důležité.

Děkuji.

Řešení:

Napr Excel (ale pár minút to trvá - počet vygenerovaných, na duplicitu odkontrolovaných kombinácií sa zapisuje do bunky B2)

Sub Komb()

Dim Komb As String
Dim Prvok As String


Columns("A:A").NumberFormat = "@"

MinValue = 1
MaxValue = 2

Randomize

For j = 1 To 4000
Range("B1") = j
    
Opakuj:
    For i = 1 To 34
        Prvok = Format(Int((MaxValue - MinValue + 1) * Rnd) + MinValue, "@")
        Komb = Komb & Prvok
    Next i
    
    Range("A" & j) = Komb
    
    If j > 1 Then
        For k = 1 To j - 1
            If Range("A" & j) = Range("A" & k) Then GoTo Opakuj
        Next k
    End If
    
        Komb = ""
Next j

MsgBox "Hotovo"

End Sub

P.S. určite existujú rafinované, na rýchlosť vykonania neporovnateľne lepšie algoritmy, ale keďže ich nepoznám, tak som napísal postup, akým by to manuálne robil normálny človek :-)

V C# např:

class Program
{
    static void Main(string[] args)
    {
        var random = new Random();
        var numbers = new HashSet<long>();
        using (var sw = new StreamWriter("numbers.txt"))
        {
            for (var i = 0; i < 4000; i++)
            {
                long number;
                do
                {
                    number = (long)(17179869184 * random.NextDouble());
                }
                while (numbers.Contains(number));
                numbers.Add(number);
                sw.WriteLine(Convert.ToString(number, 2).Replace('0', '2').PadLeft(34, '2'));
            }
        }
    }
}
Předmět Autor Datum
Napr Excel (ale pár minút to trvá - počet vygenerovaných, na duplicitu odkontrolovaných kombinácií s…
robert13 03.12.2016 18:37
robert13
Pres PowerShell by to slo mozna na jeden radek, tusim ze s apepplet Get-Random :-)
XoXoChanel 03.12.2016 18:50
XoXoChanel
Tak čo ma necháš trápiť?!?!?!?! :-D To si nemohol napísať skôr? 3-[:-D:beer:
robert13 03.12.2016 18:51
robert13
Nevim, tusim ze prikaz na zaklade typu Get-Random (Dej-nahodny) jako : Get-Random -min -max -count…
XoXoChanel 03.12.2016 18:53
XoXoChanel
nepoznám, ale? Je tam kontrola duplicity? Je tam, že kombínácií o dĺžke 34 znakov má byť 4000? Asi…
robert13 03.12.2016 18:57
robert13
V C# např: class Program { static void Main(string[] args) { var random = new Random(); var numbers…
Wikan 03.12.2016 19:05
Wikan
Skvělé! Přesně co jsem potřeboval, děkuji moc. Děkuji všem za rady a pomoc.
UživatelM 05.12.2016 12:31
UživatelM
Tak si prosíme fajočku za vyriešený problém ;-) poslední
robert13 05.12.2016 15:02
robert13
Pokud je to pro Tebe docela důležité, měl bys napsat, jak by Ti měl programátor výsledek odevzdat. N…
hynajs 03.12.2016 22:02
hynajs

Napr Excel (ale pár minút to trvá - počet vygenerovaných, na duplicitu odkontrolovaných kombinácií sa zapisuje do bunky B2)

Sub Komb()

Dim Komb As String
Dim Prvok As String


Columns("A:A").NumberFormat = "@"

MinValue = 1
MaxValue = 2

Randomize

For j = 1 To 4000
Range("B1") = j
    
Opakuj:
    For i = 1 To 34
        Prvok = Format(Int((MaxValue - MinValue + 1) * Rnd) + MinValue, "@")
        Komb = Komb & Prvok
    Next i
    
    Range("A" & j) = Komb
    
    If j > 1 Then
        For k = 1 To j - 1
            If Range("A" & j) = Range("A" & k) Then GoTo Opakuj
        Next k
    End If
    
        Komb = ""
Next j

MsgBox "Hotovo"

End Sub

P.S. určite existujú rafinované, na rýchlosť vykonania neporovnateľne lepšie algoritmy, ale keďže ich nepoznám, tak som napísal postup, akým by to manuálne robil normálny človek :-)

Nevim, tusim ze prikaz na zaklade typu Get-Random (Dej-nahodny) jako :

Get-Random -min -max -count

* A jeste to hodit do Input .TXT nebo proc né HTML
" minimum maximum kolikrat opakovat" by mohlo stacit, z hlavy nevim, tva odpoved neni spatna a navic kvalitnejsi ;-) .

V C# např:

class Program
{
    static void Main(string[] args)
    {
        var random = new Random();
        var numbers = new HashSet<long>();
        using (var sw = new StreamWriter("numbers.txt"))
        {
            for (var i = 0; i < 4000; i++)
            {
                long number;
                do
                {
                    number = (long)(17179869184 * random.NextDouble());
                }
                while (numbers.Contains(number));
                numbers.Add(number);
                sw.WriteLine(Convert.ToString(number, 2).Replace('0', '2').PadLeft(34, '2'));
            }
        }
    }
}

Zpět do poradny Odpovědět na původní otázku Nahoru