Gerador aleatório gráfico

10

Existe um gerador aleatório para o linux com uma boa GUI, que pode gerar um inteiro aleatório entre dois inteiros e exibi-lo com um tamanho grande de fontes?

    
por student 29.05.2011 / 17:48

3 respostas

36

Eu não conheço nenhum software. O Google também não inventou nada. Acho que isso é um problema muito simples. Deve ser de cerca de 30 linhas de código, se você escreveu em uma linguagem de script. Você também pode criar uma planilha do LibreOffice para fazer isso. Não deve ser terrivelmente difícil.

Editar 1:

Abaixo está um script perl rápido e sujo que eu codifiquei. Você deve poder modificá-lo você mesmo. Quando você executá-lo com perl nameOfTheScript.pl ou torná-lo executável com chmod u+x nameOfTheScript.pl e, em seguida, clique duas vezes nele, será semelhante à imagem acima.

#!/usr/bin/perl
# © 2011 [email protected]. 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;

Editar2

ObsessiveFOSS me pediu para incluir outro gerador de números aleatórios (já que este script usa o build-in de Perl) . Você pode ver um esboço sobre como fazer isso em minha outra resposta .

    
por con-f-use 13.04.2017 / 14:24
4

ObsessiveFOSS pediu para implementar o Blum, et al. gerador de números pseudo-aleatórios criptograficamente seguro. Aqui está meu esboço sobre como fazer isso. O outro código permanece o mesmo da minha resposta anterior . É preciso apenas substituir a sub-rotina randomizeLabel e inserir este código :

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>" );
}

Como mencionado, está incompleto. Seria necessário usar operadores bit a bit para extrair números aleatórios úteis, deslocá-los e dimensioná-los para caber entre $min e $max . No momento, a entrada para mínimo e máximo não é usada.

    
por con-f-use 13.04.2017 / 14:23
1

Isso pode ser feito facilmente com a QML hoje:

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);
        }
    }
}

Execute este código com qmlscene :

    
por Sylvain Pineau 28.04.2014 / 23:27