¿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?
¿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?
Respuestas:
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.
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.pl
o lo hace ejecutable con chmod u+x nameOfTheScript.pl
y luego hace doble clic en él, se verá como en la imagen de arriba.
#!/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;
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 .
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 randomizeLabel
subrutina 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 $min
y $max
. En este momento, la entrada para mínimo y máximo no está en uso.
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
: