Графічний випадковий генератор


10

Чи є генератор випадкових випадків для Linux з приємним графічним інтерфейсом, який може генерувати випадкове ціле число між двома цілими числами і відображати його з великим розміром шрифту?


Що ти будеш робити? Психічна математика?
BigSack

Відповіді:


36

Я не знаю жодного програмного забезпечення. Google теж щось не придумав. Здогадайтесь, це надто проста проблема. Це повинно бути приблизно 30 рядків коду, якщо ви написали його на мові сценаріїв. Ви також можете створити електронну таблицю LibreOffice для цього. Не повинно бути страшенно складно.

Редагувати 1:

Генератор псевдовипадкових чисел - скрипт perl gui

Нижче наведено швидкий і брудний сценарій Perl, який я кодував. Ви повинні мати змогу змінити його самостійно. Якщо запустити його perl nameOfTheScript.plабо зробити його виконуваним, chmod u+x nameOfTheScript.plа потім двічі клацнути по ньому, це буде виглядати як на малюнку вище.

#!/usr/bin/perl
# © 2011 con-f-use@gmx.net. Use permitted under MIT license: http://www.opensource.org/licenses/mit-license.php
use Gtk2 '-init'; # relies on the gnome toolkit bindings for perl

$size = 1e5;   # fontsize in 0.001 pt (only god knows why)

sub randomizeLabel {   #### this does the actual randomisation
    $min = int($entry1->get_text);
    $max = int($entry2->get_text);
    $rand = int(rand($max-$min+1)) + $min;
    $diplabel->set_markup( "<span size=\"$size\">$rand</span>" );
}
#### the rest is gui stuff:
$window = Gtk2::Window->new('toplevel');
$window->set_title('Random Integer Generator');
$window->signal_connect(destroy => sub { Gtk2->main_quit; });
$window->signal_connect(delete_event => sub { Gtk2->main_quit; });
$window->set_border_width(10);
$vbox = Gtk2::VBox->new(0, 5);   $window->add($vbox); $vbox->show;

$diplabel = Gtk2::Label->new;
$diplabel->set_markup("<span size=\"$size\">0</span>");
$vbox->add($diplabel);          $diplabel->show;

$entry1 = Gtk2::Entry->new;     $vbox->add($entry1);    $entry1->show;
$entry2 = Gtk2::Entry->new;     $vbox->add($entry2);    $entry2->show;

$button = Gtk2::Button->new("Generate!");
$button->signal_connect(clicked => \&randomizeLabel, $window);
$vbox->add($button);            $button->show;

$window->show;    Gtk2->main;
exit 0;

Правка2

ObsessiveFOSS попросив мене включити ще один генератор для випадкових чисел (оскільки саме цей сценарій використовує вбудований Perl). Ви можете побачити ескіз того, як це зробити, в іншій моїй відповіді .


9
+1 - вражаючий факт, про який ти піклувався, щоб написати сценарій.
jrg

4
Приємно бачити, що ви витратили час на надання сценарію для цього. Чудово!
самараса

Радий, що тобі подобається.
con-f-use

@ con-f-use було б непогано, якби ви могли випустити його в ліцензії gpl.
Lincity

@Alaukik Чи буде Ліцензія MIT добре і з вами. Це більш дозволений і сумісний з GPL?
con-f-use

4

ObsessiveFOSS просили реалізувати Blum та ін. криптографічно захищений генератор псевдовипадкових чисел. Ось мій нарис про те, як це зробити. Інший код залишається таким же, як і в моїй попередній відповіді . Потрібно просто замінити randomizeLabelпідпрограму і замість цього вставити цей код :

use bigint;

# Kinda large primes
$p = 338047573;   # Any pair of large primes will suffice here...
$q = 4182249941;  #+...as long as they fullfill the congruence check below
$rand = 7;    # Seed for the random number generator (x_0 in the wiki)

sub errMsg {
    $dialog = Gtk2::MessageDialog->new($window, 'destroy-with-parent', 'error', 'ok', $_[0]);
    $dialog->signal_connect (response => sub { exit 1; });
    $dialog->run;
}

# Check congruence 3 mod 4 (for quadratic residue)
if( ($p-3)%4 == 0 ) { errMsg('Error: Variable p is ill choosen.'); }
if( ($q-3)%4 == 0 ) { errMsg('Error: Variable q is ill choosen.'); }
# Note: For large cycle lengths gcd(φ(p-1), φ(q-1)) should also be small,...
#+...where φ is Euler's totient function but this is not checked here

# Compute Modulus in Blum Blum Shub
$M = $p*$q;

sub randomizeLabel { # This does the actual randomization
    $min = int($entry1->get_text); $max = int($entry2->get_text); # Boundaries for the desired random range from the input filed of the GUI (included for convenience when modifying the script - not used here)

    # Blum Blum Shub pseudo random number generator
    $rand = ($rand*$rand) % $M;

    # Here you have to extract the bits and shift them in range
    $randout = $rand & (2**6-1); # Change this line. It's an example and extracts the five least significant bits! To extract the ten LSBs use '(2**11-1)' and so on...
    # $randout = ...$min...$max...; # shift it in the right range (not done here)

    $diplabel->set_markup( "<span size=\"$size\">$randout</span>" );
}

Як вже було сказано, він є неповним. Можна було б використовувати оператори побітового для вилучення корисних випадкових чисел, зрушення і масштаб їх , щоб відповідати між $minі $max. Зараз вхід для мінімуму та максимуму не використовується.


Я підозрюю, що існує модуль Perl для CSPRNG, який робить кращу роботу, ніж мій сценарій.
con-f-use

1

Сьогодні це можна зробити дуже легко з QML:

import QtQuick 2.0
import Ubuntu.Components 0.1

Rectangle {
    id: mainView
    width: units.gu(30) 
    height: units.gu(40)
    Column {
        id: generator
        spacing: units.gu(1)
        anchors.horizontalCenter: mainView.horizontalCenter
        Text {
            id: ramdom_number
            text: "0"
            font.pointSize: 100
            anchors.horizontalCenter: generator.horizontalCenter
        }
        TextField {
            id:min
            text: "0"
        }
        TextField {
            id: max
            text: "100"
        }
        Button {
            text: "Generate!"
            width: generator.width
            onClicked: ramdom_number.text = Math.floor((Math.random()*(max.text-min.text+1))+min.text);
        }
    }
}

Запустіть цей код за допомогою qmlscene:

введіть тут опис зображення

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.