Grafik rastgele jeneratör


10

İki tamsayı arasında rastgele bir tamsayı oluşturabilen ve büyük bir yazı tipi ile görüntüleyebilen güzel bir GUI'ye sahip linux için rastgele bir jeneratör var mı?


Ne yapacaksın? Zihinsel Matematik?
BigSack

Yanıtlar:


36

Hiç yazılım bilmiyorum. Google da bir şey bulamadı. Sanırım bu çok basit bir problem. Bir betik dilinde yazdıysanız, yaklaşık 30 satırlık bir kod olmalıdır. Bunu yapmak için bir LibreOffice e-tablosu da oluşturabilirsiniz. Çok zor olmamalı.

Düzenleme 1:

sözde rastgele sayı üreteci - perl gui script

Aşağıda kodladığım hızlı ve kirli bir perl betiği var. Bunu kendiniz değiştirebilmelisiniz. İle çalıştırdığınızda perl nameOfTheScript.plveya çalıştırılabilir hale getirip chmod u+x nameOfTheScript.plçift ​​tıkladığınızda, yukarıdaki resimde olduğu gibi görünecektir.

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

Edit2

ObsessiveFOSS , rastgele sayılar için başka bir jeneratör eklememi istedi (çünkü bu komut dosyası Perl'in yerleşik olanını kullanıyor). Diğer cevabımda nasıl yapılacağına dair bir taslak görebilirsiniz .


9
+1 - bunu yapmak için bir senaryo yazmak için yeterince önemsediğiniz gerçeği şaşırtıcı.
jrg

4
Bunun için bir senaryo sağlamak için zaman harcadığınızı görmek güzel. Harika!
samarasa

Beğendiğine sevindim.
con-f-use

@ con-f-use gpl lisansında yayınlayabilirseniz iyi olur.
Lincity

@Alaukik MIT Lisansı sizinle de iyi olur. Daha izinli ve GPL uyumlu mu?
con-f-use

4

ObsessiveFOSS , Blum ve ark. kriptografik olarak güvenli sahte rasgele sayı üreteci. İşte nasıl yapılacağına dair taslağım. Diğer kod, önceki cevabımdakiyle aynı kalır . Biri sadece altyordamını değiştirmek randomizeLabelve bunun yerine bu kodu eklemek zorundadır :

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

Belirtildiği gibi eksiktir. Bir kullanışlı rastgele sayılar, vardiya ayıklamak için bitsel operatörleri kullanabilirsiniz arasında uyacak şekilde ölçekleriz zorunda kalacak $minve $max. Şu anda minimum ve maksimum girişleri kullanılmıyor.


CSPRNG için senaryomdan daha iyi bir iş yapan bir Perl modülü olduğundan şüpheleniyorum.
con-f-use

1

Bugün QML ile çok kolay bir şekilde yapılabilir:

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

Bu kodu şununla çalıştır qmlscene:

resim açıklamasını buraya girin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.