Generador aleatorio gráfico

10

¿Existe un generador aleatorio para Linux con una buena GUI, que puede generar un entero aleatorio entre dos enteros y mostrarlo con un tamaño de fuente grande?

estudiante
fuente
¿Lo que vas a hacer? Matemáticas Mentales?
BigSack

Respuestas:

36

No conozco ningún software. A Google tampoco se le ocurrió algo. Supongo que este es un problema demasiado simple. Debería tener unas 30 líneas de código si lo escribió en un lenguaje de script. También puede crear una hoja de cálculo de LibreOffice para hacerlo. No debería ser terriblemente difícil.

Editar 1:

generador de números pseudoaleatorios - gui gui perl

A continuación se muestra un script perl rápido y sucio que codifiqué. Debería poder modificarlo usted mismo. Cuando lo ejecuta perl nameOfTheScript.plo lo hace ejecutable con chmod u+x nameOfTheScript.ply luego hace doble clic en él, se verá como en la imagen de arriba.

#!/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;

Edit2

ObsessiveFOSS me pidió que incluyera otro generador de números aleatorios (ya que este script usa el incorporado de Perl). Puedes ver un boceto sobre cómo hacerlo en mi otra respuesta .

con-f-use
fuente
99
+1: el hecho de que te importara lo suficiente como para escribir un guión para hacerlo es increíble.
Jrg
44
Es bueno ver que pasaste tiempo proporcionando un script para esto. ¡Excelente!
samarasa
Me alegra que te guste.
con-f-use
@ con-f-use sería bueno si pudiera liberarlo en la licencia gpl.
Lincity
@Alaukik ¿La licencia MIT también estaría bien contigo? ¿Es más permisivo y compatible con GPL?
con-f-use
4

ObsessiveFOSS solicitó implementar Blum, et al. generador de números pseudoaleatorios criptográficamente seguro. Aquí está mi boceto sobre cómo hacerlo. El otro código permanece igual que en mi respuesta anterior . Uno solo tiene que reemplazar la randomizeLabelsubrutina e insertar este código en su lugar:

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 se mencionó, está incompleto. Uno tendría que usar operadores bit a bit para extraer números aleatorios útiles, desplazarlos y escalarlos para ajustarlos entre $miny $max. En este momento, la entrada para mínimo y máximo no está en uso.

con-f-use
fuente
Sospecho que hay un módulo Perl para CSPRNG que hace un mejor trabajo que mi script.
con-f-use
1

Se puede hacer muy fácilmente con QML hoy:

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

Ejecute este código con qmlscene:

ingrese la descripción de la imagen aquí

Sylvain Pineau
fuente