그래픽 랜덤 생성기


10

좋은 GUI를 가진 리눅스 용 랜덤 생성기가 있습니까?이 GUI는 두 정수 사이의 임의의 정수를 생성하고 큰 글꼴 크기로 표시 할 수 있습니까?


회다? 정신 수학?
BigSack

답변:


36

나는 어떤 소프트웨어도 모른다. 구글도 무언가를 생각해 내지 않았다. 이것이 너무 간단한 문제인 것 같아요. 스크립팅 언어로 작성한 경우 약 30 줄의 코드 여야합니다. 이를 위해 LibreOffice 스프레드 시트를 만들 수도 있습니다. 굉장히 어렵지 않아야합니다.

편집 1 :

의사 난수 생성기-Perl GUI Script

아래는 내가 코딩 한 빠르고 더러운 펄 스크립트입니다. 직접 수정할 수 있어야합니다. 실행 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 gpl 라이센스로 릴리스 할 수 있다면 좋을 것입니다.
Lincity

@Alaukik MIT 라이센스도 괜찮습니다. 더 관대하고 GPL과 호환됩니까?
con-f-use

4

ObsessiveFOSSBlum 등 을 구현하도록 요청했습니다 . 암호로 안전한 의사 난수 생성기. 그 방법에 대한 스케치입니다. 다른 코드는 이전 답변 과 동일하게 유지됩니다 . 서브 루틴바꾸고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. 현재 최소 및 최대 입력은 사용되지 않습니다.


내 스크립트보다 더 나은 CSPRNG 용 Perl 모듈이 있다고 생각합니다.
콘 - F-사용

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다음 과 같이 실행하십시오 .

여기에 이미지 설명을 입력하십시오

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.