如何使用100个随机值在Perl中生成数组,而不使用循环?
我必须避免所有类型的循环,例如"for",foreach",while.这是我的练习,来自我的实验室.我找不到解决这个问题的方法,因为我是Perl的新手.
在C中,生成这个数组非常容易,但我不知道如何在Perl中实现它.
Sin*_*nür 61
为了娱乐价值:
#!/usr/bin/perl
use strict;
use warnings;
$/ = \1;
open 0;
my @r = map rand,<0>;
print "@r\n";
Run Code Online (Sandbox Code Playgroud)
for,while,until:#!/usr/bin/perl
use strict; use warnings;
my @rand;
NOTLOOP:
push @rand, rand;
sleep 1;
goto NOTLOOP if 100 > time - $^T;
print 0 + @rand, "\n";
Run Code Online (Sandbox Code Playgroud)
#!/usr/bin/perl
use strict; use warnings;
my $s = '-' x 100;
$s =~ s/(-)/rand() . $1/eg;
my @rand = $s=~ m/([^-]+)/g;
Run Code Online (Sandbox Code Playgroud)
rand手动复制和粘贴100个调用非常简单:#!/usr/bin/perl
use strict; use warnings;
my $s = '(' . 'rand,' x 100 . ')';
my @rand = eval $s;
Run Code Online (Sandbox Code Playgroud)
/dev/random:#!/usr/bin/perl
use strict; use warnings;
$/ = \1;
my @rand;
seek \*DATA, 0, 0;
NOTLOOP:
scalar <DATA>;
push @rand, rand;
goto NOTLOOP if $. < 100;
__DATA__
Run Code Online (Sandbox Code Playgroud)
goto#!/usr/bin/perl
use strict; use warnings;
use autodie;
$/ = \1;
open my $F, '<', \( 1 x 100 . 0 );
my @rand or ¬loop;
sub notloop {
my $t = <$F>;
$t or return;
push @rand, rand;
goto \¬loop;
}
Run Code Online (Sandbox Code Playgroud)
eval版本:#!/usr/bin/perl
use strict; use warnings; use autodie;
local $/ = \1;
open my $F, '<', \( 1 x 100 . 0 );
my @rand;
eval <<'NOLOOP'
my $self = (caller(0))[6];
<$F> or die;
push @rand, rand;
eval $self;
NOLOOP
;
Run Code Online (Sandbox Code Playgroud)
当然,所有这些实际上都包含循环,但它们不使用您禁止使用的关键字.
注意:这个问题带来了我的怪话,但我必须承认它很有趣.
Sea*_*ean 48
没有比这更简单了!
my @rands = (rand, rand, rand, rand, rand, rand, rand, rand, rand, rand,
rand, rand, rand, rand, rand, rand, rand, rand, rand, rand, rand,
rand, rand, rand, rand, rand, rand, rand, rand, rand, rand, rand,
rand, rand, rand, rand, rand, rand, rand, rand, rand, rand, rand,
rand, rand, rand, rand, rand, rand, rand, rand, rand, rand, rand,
rand, rand, rand, rand, rand, rand, rand, rand, rand, rand, rand,
rand, rand, rand, rand, rand, rand, rand, rand, rand, rand, rand,
rand, rand, rand, rand, rand, rand, rand, rand, rand, rand, rand,
rand, rand, rand, rand, rand, rand, rand, rand, rand, rand, rand,
rand, rand);
Run Code Online (Sandbox Code Playgroud)
tch*_*ist 37
perl -E'say for&{sub{"\U\x{fb01}\x{fb03}"=~/.{0,2}.{0,3}.{0,3}.{0,4}+(?{$_[++$#_]=rand})(*FAIL)/||pop;@_}}'
Run Code Online (Sandbox Code Playgroud)
/e表达式解决方案这个:
($_=(120.44.32)x(2+2*2**2)**2)=~s/\170/114.97.110.100/gee;
s/(.*)/64.95.61.40.$1.41.35.89.65.78.69.84.85.84/ee;
print "@_\n";
Run Code Online (Sandbox Code Playgroud)
无环地产生这个:
0.636939813223766 0.349175195300148 0.692949079946754 0.230945990743699 0.61873698433654 0.940179094890468 0.435165707624346 0.721205126535175 0.0322560847184015 0.91310500801842 0.31596325316222 0.788125484008084 0.802964232426337 0.417745170032291 0.155032810595454 0.146835982654117 0.181850358582611 0.932543988687968 0.143043972615896 0.415793094159206 0.576503681784647 0.996621492832261 0.382576007897708 0.090130958455255 0.39637315568709 0.928066985272665 0.190092542303415 0.518855656633185 0.797714758118492 0.130660731025571 0.534763929837762 0.136503767441518 0.346381958112605 0.391661401050982 0.498108766062398 0.478789295276393 0.882380841033143 0.852353540653993 0.90519922056134 0.197466335156797 0.820753004050889 0.732284103461893 0.738124358455405 0.250301496672911 0.88874926709342 0.0647566487704268 0.733226696403218 0.186469206795884 0.837423290530243 0.578047704593843 0.776140208497122 0.375268613243982 0.0128391627800006 0.872438613450569 0.636808174464274 0.676851978312946 0.192308731231467 0.401619465269903 0.977516959116411 0.358315250197542 0.726835710856381 0.688046044314845 0.870742340556202 0.58832098735666 0.552752229159754 0.170767637182252 0.683588677743852 0.0603160539059857 0.892022266162105 0.10206962926371 0.728253338154527 0.800910562860132 0.628613236438159 0.742591620029089 0.602839705915397 0.00926448179027517 0.182584549347883 0.53561587562946 0.416667072500555 0.479173194613729 0.78711818598828 0.017823873107119 0.824805088282755 0.302367196288522 0.0677539595682397 0.509467036447674 0.906839536492864 0.804383046648944 0.716848992363769 0.450693083312729 0.786925293921154 0.078886787987166 0.417139859647296 0.9574382550514 0.581196777508975 0.75882630076142 0.391754631502298 0.370189654004974 0.80290625532508 0.38016959549288
Run Code Online (Sandbox Code Playgroud)
事实上,如果你打印数组,这样做:
@_=(*100=sub{$_[0]?(rand,(*{--$_[0]}=*{$_[0]})->(@_)):()})->($==100);
Run Code Online (Sandbox Code Playgroud)
第二种解决方案现在可以很容易地获得不同数量的随机数,因为按照上面的分配,你可以做到这样的细节:
print for @42=42->($==42);
Run Code Online (Sandbox Code Playgroud)
是的,这确实是一个名为的函数42().之前的任务是@_创建它以及其他一百个数字命名的函数.
第一个正则表达式解决方案依赖于Unicode匹配的两个字符的棘手外壳.通过添加空格和注释可以(或可能不)更容易理解它:
use 5.010;
say for &{
sub { "\U\x{fb01}\x{fb03}" =~ m((?mix-poop)
#include <stdlib.h>
#include <unistd.h>
#include <regex.h>
#include "perl.h"
#include "utf8.h"
#ifndef BROKEN_UNICODE_CHARCLASS_MAPPINGS
.{0,2}
.{0,3} .{0,3}
.{0,4}
#define rand() (random()<<UTF_ACCUMULATION_SHIFT^random()&UTF_CONTINUATION_MASK)
+(?{ $_ [++$#_] = rand() || rand() || UTF8_TWO_BYTE_LO (*PERL_UNICODE)
#else (*PRUNE)
#define FAIL (*ACCEPT)
}) (*FAIL)
#endif (*COMMIT)
)poop || pop @{ (*_{ARRAY}) }
;#; @{ (*SKIP:REGEX) }
@{ (*_{ARRAY}) }
}
}
Run Code Online (Sandbox Code Playgroud)
了解第二个正则表达式解决方案如何工作的方法是:
\170是"x".e为单个e,然后打印出两次在字符串中留下的内容.我相信你会很感激评论.:)
对于递归解决方案,添加空格可能有点帮助:
(*100 = sub { $_[0]
? ( rand, ( *{ --$_[0] } = *{ $_[0] } )->(@_) )
: ( )
}
)->( $= = 100 );
Run Code Online (Sandbox Code Playgroud)
将变量作为参数传递的需要是由于需要左值的自动递减.我这样做是因为我不想说$_[0] - 1两次,或者有任何命名的临时变量.这意味着你可以这样做:
$N = 100;
print for $N->($N);
Run Code Online (Sandbox Code Playgroud)
当你完成时$N == 0,由于传递隐式引用语义.
对于一些重复的成本,您可以放松对左值参数的需求.
(*100 = sub { $_[0]
? ( rand, ( *{ $_[0] - 1 } = *{ $_[0] } )->( $_[0] - 1 ) )
: ( )
}
)->( 100 );
Run Code Online (Sandbox Code Playgroud)
现在你不再需要左值参数了,所以你可以写:
print for 100->(100);
Run Code Online (Sandbox Code Playgroud)
得到所有100个随机数.当然,您还有其他一百个数字函数,因此您可以通过以下任何方式获取随机数列表:
@vi = 6->(6);
@vi = &6( 6);
$dozen = 12;
@dozen = $dozen->($dozen);
@baker's_dozen = &$dozen(++$dozen);
@_ = 100;
print &0; # still a hundred of 'em
Run Code Online (Sandbox Code Playgroud)
(抱歉'傻傻的颜色.一定是个臭虫.)
我相信这可以解决所有问题.☺
fri*_*edo 31
my @rand = map { rand } ( 1..100 );
Run Code Online (Sandbox Code Playgroud)
但地图只是一个花式装饰的循环.
如果你需要做100次,你需要使用某种迭代结构.
msc*_*cha 27
# I rolled a die, honestly!
my @random = (5, 2, 1, 3, 4, 3, 3, 4, 1, 6,
3, 2, 4, 2, 1, 1, 1, 1, 4, 1,
3, 6, 4, 6, 2, 6, 6, 1, 4, 5,
1, 1, 5, 6, 6, 5, 1, 4, 1, 2,
3, 1, 2, 2, 6, 6, 6, 5, 3, 3,
6, 3, 4, 3, 1, 2, 1, 2, 3, 3,
3, 4, 4, 1, 5, 5, 5, 1, 1, 5,
6, 3, 2, 2, 1, 1, 5, 2, 5, 3,
3, 3, 5, 5, 1, 6, 5, 6, 3, 2,
6, 3, 5, 6, 1, 4, 3, 5, 1, 2);
Run Code Online (Sandbox Code Playgroud)
bri*_*foy 24
太糟糕的大多数解决方案都集中在非循环部分而忽略了随机数部分:
use LWP::Simple;
my @numbers = split /\s+/, #/ Stackoverflow syntax highlighting bug
get( 'http://www.random.org/integers/?num=100&min=1&max=100&col=1&base=10&format=plain&rnd=new' );
Run Code Online (Sandbox Code Playgroud)
这是汤姆等待看到的精神错乱,但我让它更疯狂.此解决方案将问题减少到:
my @numbers = rand( undef, 100 ); # fetch 100 numbers
Run Code Online (Sandbox Code Playgroud)
普通rand通常需要0或1个参数.我给它一个新的原型,允许第二个参数记录要返回多少个数字.
注意到真实的一些差异rand.这不是连续的,因此可用数量少得多,并且它包含在上限.此外,由于这个有两个参数,它与期望真实的程序不兼容,因为这样的语句会在每个语句中进行不同的解析:
my @array = rand 5, 5;
Run Code Online (Sandbox Code Playgroud)
但是,这里没什么特别的CORE::GLOBAL::rand().您不必替换内置的.你可以有点不舒服.
我print在那里留下了一些陈述,所以你可以看到它的工作:
BEGIN {
my @buffer;
my $add_to_buffer = sub {
my $fetch = shift;
$fetch ||= 100;
$fetch = 100 if $fetch < 100;
require LWP::Simple;
push @buffer, split /\s+/, #/ Stackoverflow syntax highlighting bug
LWP::Simple::get(
"http://www.random.org/integers/?num=$fetch&min=1&max=100&col=1&base=10&format=plain&rnd=new"
);
};
my $many = sub ($) {
print "Fetching $_[0] numbers\n";
$add_to_buffer->($_[0]) if @buffer < $_[0];
my @fetched = splice @buffer, 0, $_[0], ();
my $count = @fetched;
print "Fetched [$count] @fetched\n";
@fetched
};
*CORE::GLOBAL::rand = sub (;$$) {
my $max = $_[0] || 1; # even 0 is 1, just like in the real one
my $fetch = $_[1] || ( wantarray ? 10 : 1 );
my @fetched = map { $max * $_ / 100 } $many->( $fetch );
wantarray ? @fetched : $fetched[-1];
};
}
my @rand = rand(undef, 5);
print "Numbers are @rand\n\n";
@rand = rand(87);
print "Numbers are @rand\n\n";
$rand = rand(undef, 4);
print "Numbers are $rand\n\n";
$rand = rand();
print "Numbers are $rand\n\n";
$rand = rand(undef, 200);
print "Numbers are $rand\n\n";
Run Code Online (Sandbox Code Playgroud)
我的随机数源并不重要.如果您愿意,可以从/ dev/random或/ dev/urandom读取以填充缓冲区.
Pet*_* G. 14
sub f {
my $n = shift;
if( $n == 0 ) {
return @_;
}
else {
return f( $n-1, rand, @_ );
}
}
my @random_array = f(100);
Run Code Online (Sandbox Code Playgroud)
map 在这里用作单个值的局部化器,免除循环状态:
my @rand = map&$_($_),sub{@_<=100&&goto&{push@_,rand;$_[0]};shift;@_};
Run Code Online (Sandbox Code Playgroud)
或者有两个潜艇:
my @rand = sub{&{$_[0]}}->(sub{@_<=100&&goto&{(@_=(rand,@_))[-1]};pop;@_});
Run Code Online (Sandbox Code Playgroud)
这两个都是Y-combinator风格的自传子,通过迭代构建列表,但一个明显比另一个快.
你可以用s'g[^}]+'goto&{unshift@_,rand;$_[-1]'它来解决效率低下的问题,但随后它会变得有点长.
或者回避调用堆栈:
my @rand = do{local*_=sub{(push@_,rand)<100?goto&_:@_};&_};
Run Code Online (Sandbox Code Playgroud)
或者使用eval,没有变量赋值,没有外部状态,一个anon sub:
my @rand = eval'sub{@_<100?eval((caller 1)[6]):@_}->(@_,rand)';
Run Code Online (Sandbox Code Playgroud)
但最简洁的是:
my @rand = map&$_,sub{(100^push@_,rand)?goto&$_:@_};
Run Code Online (Sandbox Code Playgroud)
由于任务似乎要么让你使用递归或学习如何以一种不那么简单的形式编写一个简单的循环,所以我谦虚地提交了以下完全可执行的 Perl程序:
#!/usr/bin/perl
''=~('('.'?'
.'{'.( '`'|'%').("\["^
'-').('`'| '!').('`'|',').'"'
.'\\'.'$'. ("\`"| ',').('`'|')').('`'|
'-').'='.('^'^("\`"| '/')).('^'^('`'|'.')).
('^'^('`'|'.')).';'.( '!'^'+').('`'|'&').('`'
|'/').('['^')').'(' .'\\'.'$'.'='.'='.(('^')^(
'`'|'/')).';'. '\\'.'$'.'='.'<'.'='.'\\'.'$'
.('`'|(',')).( '`'|')').('`'|'-').';'.'+'."\+".
'\\'.'$'.('='). ')'.'\\'.'{'.('['^'+').('['^"\.").(
'['^'(').("\`"| '(').('{'^'[').'\\'.'@'.'='.','.("\{"^
'[').('['^')'). ('`'|'!').('`'|'.').('`'|'$').'\\'.'}'.(
'!'^'+').'\\'. '$'.'='.'='.('^'^('`'|'/')).';'.('!'^'+')
.('`'|('&')).( '`'|'/').('['^')').('{'^'[').'('.'\\'.'@'.
'='.')'.('{'^'[').'\\'.'{'.('!'^'+').('*'^'#').('['^'+').(
'['^')').('`'|')').('`'|'.').('['^'/').('{'^'[').'\\'.'"'.(
'['^')').('`'|'!').('`'|'.').('`'|'$').('{'^'[').'\\'.'$'.
'='.('{'^'[').('`'|'/').('`'|'&').('{'^'[').'\\'.'$'.("\`"|
',').('`'|')').('`'|'-').'='.'\\'.'$'.'_'.'\\'.'\\'.(('`')|
'.').'\\'.'"'.';'.('!'^'+').('*'^'#').'\\'.'$'.'='.'+'.'+'
.';'.('!'^'+').('*'^'#').'\\'.'}'.'"'.'}'.')');$:='.' ^((
'~'));$~='@'|'(';$^=')'^'[';$/='`'|'.';$,='('^"\}"; $\=
'`'|'!';$:=')'^'}';$~='*'|'`';$^='+'^'_'; $/="\&"| '@'
;$,='['&'~';$\=','^'|';$:='.'^"\~";$~= '@'|'(' ;$^
=')'^ '[';$/='`'|'.';$,='('^"\}";$\= '`'|'!' ;$:
=')'^'}';$~='*'|'`';$^=('+')^ '_';$/= '&'
|'@';$,= '['&'~';$\ ="\,"^ '|';$: =(
('.'))^ "\~";$~= ('@')| '(';$^ =(
(')'))^ "\[";$/= "\`"| "\."; (
($,))= '('^'}'; ($\) ='`'
|"\!"; $:=(')')^ '}'; ($~)
='*'| "\`";$^= '+'^ '_';
($/)= '&'|'@' ;$,= '['&
'~'; $\=',' ^'|' ;$:=
'.'^ '~' ;$~= '@'|
'('; $^= ')' ^((
'[' )); $/= '`'
|(( '.' )); $,=
'(' ^(( '}' ))
;( ($\))= ((
(( '`')) ))
|+ "\!";$:= ((
')' ))^+ "\}"; $~
=(( '*'))| '`'; $^=
'+'^ "\_";$/= '&' |'@'
;($,)= ('[')&
"\~";$\= ','^'|'
Run Code Online (Sandbox Code Playgroud)
#!/usr/bin/perl
''=~('(?{'.
('`'|'%').(
'['^"\-").(
'`'|"\!").(
'`'|(',')).
'"\\$'.('`'
|',').(
'`'|')'
).('`'|
('-')).
('=').(
'^'^('`'|
('/'))).(
'^'^('`'|
('.'))).(
'^'^(('`')|
'.')).';'.(
'!'^'+').('`'
|'&').(('`')|
'/').('['^')').
'(\\$=='.('^'^(
'`'|'/')).';\\$='
.'<=\\$'.('`'|',').
('`'|')').('`'|"\-").
';++\\$=)\\{'.('['^'+')
.('['^'.').('['^'(').('`'
|'(').('{'^'[').'\\@'.('`'|
'!').('['^')').('['^"\)").(
'`'|'!').('['^'"').','.('{'
^'[').('['^')').('`'|'!').(
'`'|'.').('`'|"\$").'\\}'.(
'!'^'+').'\\$'.('`'|')').'='.("\^"^( '`'|'/')).';'.('!'^('+')).(
'`'|'&').('`'|'/').('['^')').('{'^ '[').'(\\@'.('`'|'!').('['^
')').('['^')').('`'|'!').('['^ '"').')'.('{'^"\[").'\\{'.(
'!'^'+').('*'^'#').('['^'+') .('['^')').('`'|')').("\`"|
'.').('['^'/').('{'^'[') .'\\"'.('['^')').('`'|'!').
('`'|'.').('`'|"\$").( '{'^'[').'\\$'.('`'|"\)").(
'{'^'[').('`'|'/') .('`'|'&').('{'^'[').'\\$'.
('`'|',').("\`"| ')').('`'|'-').'=\\$_\\\\'.
('`'|('.')). '\\";'.('!'^'+').('*'^'#').
'\\$'.('`' |')').'++;'.('!'^'+').('*'^
"\#"). '\\}"})');$:='.'^'~';$~='@'
|'(' ;$^=')'^'[';$/='`'|"\.";$,=
'('^ '}';$\='`'|'!';$:=')'^"\}";
($~) ='*'|'`';$^='+'^'_';$/='&'|
'@'; $,='['&'~';$\=','^('|');$:=
'.'^ '~';$~='@'|'(';$^=')'^"\[";
($/) ='`'|'.';$,='('^'}';$\='`'|
'!'; $:=')'^'}';$~='*'|('`');$^=
'+'^ '_';$/='&'|'@';$,='['&"\~";
($\) =','^'|';$:='.'^'~';$~='@'|
'('; $^=')'^'[';$/='`'|('.');$,=
'('^ '}';$\='`'|'!';$:=')'^"\}";
($~) ='*'|'`';$^='+'^'_';$/='&'|
'@';$,='['&'~';$\=','^'|';$:='.'^'~' ;$~='@'|'(';$^=')'^"\[";$/=
'`'|'.';$,='('^'}';$\='`'|'!';$:=')' ^'}';$~='*'|'`';$^='+'^'_';
Run Code Online (Sandbox Code Playgroud)
#!/usr/bin/perl
'?' =~(
'('.'?' ."\{".(
'`' |'%' ).('['^"\-").( '`'| '!'
).('`'|','). '"'. '\\'.('$').(
'`'|(',')).( '`'| ')').(('`')|
(( '-') )). +( '`' |')' ).
((( '[' ))^+ (( '/') )). '='
.('^'^ ('`'|'/')) .( '^'^("\`"| '.')).
+( '^'^('`'|'.')).';'.('!'^"\+"). ((
'\\')).'$'.('`'|'#').('`'|'/').('['^'.').('`'|'.').(
'['^ '/').'='. (('^')^( '`'|'/') ).(';').( '!'^
'+' ).('['^ '(').( ('[')^ "\.").( '`'
|'"' ).(('{')^ ('[')).( '['^'+') .('['^'.' ).+(
'['^'(').('`'|'(').'_'.('['^')').('`'|'!').('`'|'.')
.( '`'|'$').('{'^'[').'\\'."\{".( ((
'!'))^ '+').('{'^ (( ('[')))).( ('{')^
'[' ).( '{'^ (( '[') )). (((
(( '{') ))) ^+ '[' ).+( ((
'['))^')').( '`'| '%').(('[')^
'/').(('[')^ '.') .('['^')').(
'`' |'.' ).('{'^"\[").( '`'| ')'
).('`'| "\&").(
'{' ^((
'[' )))
.'\\'.+ '$'.'#'
.+( '`'| '!').('['^')') .''. (((
'['))^')').( '`'| '!').(('[')^
'"').('_').( '`'| '/').(('`')|
(( '&') )). (( '_' )).( ((
'[' ))^ ')') .( '`'| '!' ).(
('`')| '.').('`'| (( ('$')))).( ('[')^
(( '('))).'>'.'\\'.'$'.('`'|','). +(
'`'|')').('`'|'-').('`'|')').('['^'/').';'.('!'^'+')
.''. ('{'^'[') .(('{')^ ('[')).( '{'^'['). ('{'
^(( '['))). ("\["^ '+').( '['^'.' ).(
'['^ '(').('`' |"\(").( '{'^'[') .'\\'.'@' .''.
('`'|'!').('['^')').('['^')').('`'|'!').('['^('"')).
(( '_')).('`'|'/').('`'|'&').'_'. +(
('[')^ ')').('`'| (( ('!')))).( ('`')|
'.' ).( '`'| (( '$') )). (((
(( '[') ))) ^+ '(' ).(( ((
',')))).('{' ^'[' ).('['^')').
('`'|"\!").( '`'| '.').(('`')|
'$' ).(( ';')).('!'^'+' ).+( '{'
^'[').( '{'^'['
).( '{'
^(( '['
))).''. (('{')^
'[' ).+( '['^'+').('['^ '.') .+(
'['^('(')).( '`'| '(').('_').(
'['^(')')).( '`'| '!').(('`')|
(( '.') )). +( '`' |'$' ).
'(' .(( ')') ). ';'. ((( '!'
))^'+' ).'\\'.'}' .( '!'^'+').( ('!')^
(( '+'))).('!'^'+').('['^('(')).( ((
'['))^'.').('`'|'"').('{'^'[').('['^'+').('['^')').(
'`'| ')').('`' |"\.").( '['^'/') .'_'.('[' ^')'
).( '`'|'%' ).('`' |'#'). (('[')^ '.'
).+( '['^')'). ('['^'(' ).("\`"| ')').('[' ^'-'
).('`'|'%').('{'^'[').'\\'.'{'.('!'^'+').('{'^'[').(
(( '{'))^'[').('{'^'[').('{'^'[') .+
'\\'.+ '$'.("\["^ (( '/'))).'=' .('['^
'+' ).( '`'| (( '/') )). (((
(( '[') ))) ^+ '+' ).+( ((
'{'))^"\["). '\\' .'@'.'_'.';'
.('!'^'+').( '*'^ '#').(('[')^
'+' ).+( '['^')').('`'| ')') .+(
'`'|'.' ).('['^
'/' ).(
'{' ^((
'['))). ('\\').
'"' .''. ('['^')').('`' |'!' ).(
'`'|('.')).( '`'| '$').(('{')^
'[').('\\'). '$'. ('`'|"\#").(
(( '`') )|+ (( '/' ))). +(
'[' ^(( '.') )) .''. ((( '`'
))|'.' ).('['^'/' ). ('{'^'['). ("\`"|
(( '/'))).('`'|'&').('{'^'[').''. ((
'\\')).'$'.('`'|',').('`'|')').('`'|'-').('`'|')').(
'['^ '/').'='. '\\'.'$' .(('[')^ '/').'\\' .''.
((( '\\'))) .('`'| "\."). ('\\'). '"'
.';' .('!'^'+' ).("\*"^ '#').''. '\\'.'$'. ('`'
|'#').('`'|'/').('['^'.').('`'|'.').('['^'/').('+').
(( '+')).';'.('!'^'+').('*'^'#'). +(
('[')^ '+').('['^ (( (')')))).( ('`')|
')' ).( '`'| (( '.') )). (((
(( '[') ))) ^+ '/' ).(( ((
'_')))).('[' ^')' ).('`'|'%').
('`'|"\#").( '['^ '.').(('[')^
')' ).+( '['^'(').('`'| ')') .+(
'['^'-' ).('`'|
'%' ).+
'(' .((
'\\')). '@'.'_'
.(( ')') ).('{'^"\[").( '`'| ')'
).('`'|'&'). ('{' ^'[').('(').
'\\'.'@'.'_' .')' .';'.(('!')^
(( '+') )). (( ((( '\\' ))
))) .(( '}') ). ('!' ^(( '+'
))).+( '!'^'+').( (( '['))^'+') .('['^
(( '.'))).('['^'(').('`'|'(').'_' .(
'['^')').('`'|'!').('`'|'.').('`'|'$').'('.')'.';'.(
'['^ '+').('[' ^"\)").( '`'|')') .('`'|'.' ).+(
'[' ^"\/"). "\_".( ('[')^ "\)").( '`'
|'%' ).(('`')| ('#')).( '['^'.') .('['^')' ).+(
'['^'(').('`'|')').('['^'-').('`'|'%').'('.'\\'.'@'.
+( '`'|'!').('['^')').('['^')').( ((
'`'))| '!').('['^ (( '"'))).'_' .('`'|
'/' ).( '`'| (( '&') )). '_'
.( '['^ ')' ). ((( '`') )|
'!').(('`')| '.') .('`'|'$').(
'['^'(').')' .';' .'"'.'}'.')'
);( $:)= '.'^'~';$~='@' |'(' ;$^
=(')')^ '[';#;#
;#; #;#
Run Code Online (Sandbox Code Playgroud)
在每种情况下,输出都是这样的:
rand 1 of 100=0.625268682212667
rand 2 of 100=0.30160434879096
...
rand 100 of 100=0.584811321826528
Run Code Online (Sandbox Code Playgroud)
如果你想看到嵌入的循环或递归,你可以使用perl -MO=Deparse martini.pl或perl -MO=Deparse camel.pl等.
只有Perl,对吗???
如果你想生成这些可爱的东西 - 请查看Acme :: Eyedrops
使用匿名子和递归:
use strict;
use warnings;
my @foo;
my $random;
($random = sub {
push @{$_[0]}, rand;
return if @{$_[0]} == $_[1];
goto \&$random;
})->(\@foo, 100);
print "@foo\n";
print scalar @foo, "\n";
Run Code Online (Sandbox Code Playgroud)
使用计算goto,对所有fortran粉丝:
use strict;
use warnings;
sub randoms {
my $num = shift;
my $foo;
CARRYON:
push @$foo, rand;
# goto $#{$foo} < 99 ? 'CARRYON' : 'STOP';
goto ( ('CARRYON') x 99, 'STOP' )[$#$foo];
STOP:
return @$foo;
}
my @foo = randoms(100);
print "@foo\n";
print scalar(@foo)."\n";
Run Code Online (Sandbox Code Playgroud)
2个匿名子和一个arrayref:
use strict;
use warnings;
my @bar = sub { return &{$_[0]} }->
(
sub {
push @{$_[1]}, rand;
goto \&{$_[0]}
unless scalar(@{$_[1]}) == $_[2];
return @{$_[1]};
},
[],
100
);
print "@bar\n";
print scalar(@bar), "\n";
Run Code Online (Sandbox Code Playgroud)
小智 5
#!/usr/bin/perl
use strict;
use warnings;
my $x = 99;
my @rands = (rand,(*x=sub{rand,(map{*x->($x,sub{*x})}($x)x!!--$x)})->($x,*x));
use feature 'say';
say for @rands;
Run Code Online (Sandbox Code Playgroud)
小智 5
另一个愚蠢的方法,如何使用返回随机值的绑定数组?
use strict;
use warnings;
package Tie::RandArray;
use Tie::Array;
our @ISA = ('Tie::StdArray');
sub FETCH { rand; }
package main;
my @rand;
my $object = tie @rand, 'Tie::RandArray';
$#rand=100;
my @a= @somearray;
warn "@a";
Run Code Online (Sandbox Code Playgroud)
当然,绑定数组可以缓存值,这样就不需要第二个数组来获得稳定的值。
| 归档时间: |
|
| 查看次数: |
14612 次 |
| 最近记录: |