为我生成一些合适的车牌!


15

场景:您是一家在政府开办的公司工作的软件设计师,该公司为汽车和其他车辆设计车牌。您被要求开发可生成车牌的软件。在开始工作之前,您的老板制定了这些基本规则。


车牌不能包含:

  • ASS
  • 666
  • 69<any number here>
  • <any number here>69
  • KKK
  • SHT

规则和要求:

  • 车牌必须随机生成。
  • 一旦生成了随机牌照,就不能再次生成相同的牌照。
  • 您必须输出至少200个唯一的车牌。如果需要,您可以生成更多。
  • 您可以将生成的板存储在文件中以“记住”它们。
  • 车牌分为两部分,一个部分仅包含三个字母,一个部分仅包含三个数字,中间用破折号分隔,例如:233-ADFADF-233
  • 您只能使用数字和大写字母。
  • 车牌可以写入标准输出或文件。
  • 车牌的每个“侧面”将包含三个数字或字母。
  • 这是一个,因此最短,最受欢迎。7天后将选出优胜者。

通用规则

  • 答案包括但不限于以下内容。
  • 语言名称。
  • 字符数。
  • 文件大小。
  • 代码如何运行。
  • 代码本身。
  • 示例:Python 234个字符Python 23mb

如果我需要澄清任何其他细节,请在评论中提及它,并将其添加到我的帖子中。无论如何,祝您好运,并为我生成一些合适的车牌!


更新1:优胜者将被提前选择。

事实证明,我必须很快去旅行,所以我将在7月25日世界标准时间00:00左右选择一位获奖者。选定获奖者之后,您仍然可以提交全部作品,只知道已经选择了一位获奖者。白


更新2:优胜者!

我们有赢家!好极了!奶酪和美酒给参加的每个人!这是谁赢了。

  • 第一名:Àngel-Bash(95个字符)
  • 第二名:MartinBüttner-Mathematica(182字节)
  • 第二名:Emilio M Bumachar-Pyg(92?)
  • 第二名:Peter Taylor-Golfscript(98个字符)
  • 第三名:马克·托马斯-鲁比(127个字符)

哇,三个亚军。哇。比赛结束了,但是如果您愿意,可以随时提交参赛作品。白!



2
一旦生成了随机车牌,就无法再次生成相同的车牌。 ”非随机车牌怎么办?
彼得·泰勒

4
这样做的明显方法(可能是现实生活中的工作方式)是按顺序生成数字。
彼得·泰勒

5
“随机生成”是不精确的。我认为您的意思是“从未使用的合法车牌中随机选择”,而不是从开头的合法车牌中随机选择AAA-
Peter Taylor

1
请告诉我们每个车牌中应包含多少个数字,以及哪些字符有效-各个国家/地区有所不同
骄傲的haskeller 2014年

13
我现在有点动心写一个程序生成包含一些淫秽或其他不适当的字符串随机牌照在列表中找到。
Ilmari Karonen 2014年

Answers:


12

bash(95个字符)

将脚本另存为mPATH文件夹中的执行位已设置。

运行为bash m。印版存储在文件p中

l(){ tr -dc $1</dev/urandom|head -c3;};egrep -ve"ASS|666|69|KKK|SHT" -fp>>p<<<`l 0-9`-`l A-Z`;m

这等效于运行以下命令:

# Print three random numbers and three random letters
echo $(tr -dc 0-9 < /dev/urandom | head -c3)-$(tr -dc A-Z < /dev/urandom | head -c3) |

# Print only plates not matching the blacklist or any line of p
# Append the plates ton p
egrep -v -e "ASS|666|69|KKK|SHT" -f p >> p

# Execute itself again
m 

警告:最终m实际上应该是exec m(+5个字符),以避免使进程等待完成(但是您可以有成千上万个,而不会有太大问题)

幸得 http://www.cyberciti.biz/faq/linux-random-password-generator/使用的想法tr -dc


对我来说还是唯一性要求缺失?
Cristian Ciupitu 2014年

1
@ Cristian-Ciupitu:grep -v既排除了黑名单,又排除了我们已经生成的板块列表(grep期望p 每行包含一个模式,但是由于板块不包含正则表达式元字符,它们只能匹配自己)。我们每次迭代仅生成一个或零个板块,因此在每次迭代后,grep将读取要排除的板块的完整(更新)列表。:d
安赫尔

6

PYG -92

Pe(Se(Re.sub(".*(666|69|ASS|KKK|SHT).*","",J(RSm(STuc*3,3)+[j]+RSm(STd*3,3)))for j in'-'*K))

现在能够从所有未使用的印版中统一选择,并保持OP的规格,但又要短1个字符。

从理论上讲,999个板块的列表中可能包含足够的重复项,以使修剪后的集合少于200个。但这样的几率很小。在十次试验中,我得到的最小长度是994。

编辑:将999更改为K(1000为pyg),以在bitpwner的建议下保存两个字符。


1
您是否过滤掉了不允许的值?在任何地方都看不到任何KKK或666。
2014年

5
@bitpwner:我仅使用0到5之间的数字和A到J之间的字母,因此不会出现不允许的值。
Emilio M Bumachar 2014年

非常聪明!没有人说过必须使用其他人。真好
Kjeld Schmidt 2014年

1
OP同意随机性是“从未使用的合法车牌中随机选择的”。查看有问题的评论。除非您对“统一”的定义意味着任何范围内的统一。您可以将999更改为K,从而节省2个字符。
2014年

3
不知道如果有无法生成的有效板块,我
会将

5

Mathematica,182个字节

嗯,这很长

l={};While[Length[l=Union@Pick[l,StringFreeQ[l,"ASS"|"666"|"69"|"KKK"|"SHT"]]]<200,AppendTo[l,RandomSample[FromCharacterCode/@{48+9~(r=RandomInteger)~3,65+25~r~3}]~Riffle~"-"<>""]];l

不打高尔夫球

l = {};
While[
  Length[
    l = Union@
      Pick[l, StringFreeQ[l, "ASS" | "666" | "69" | "KKK" | "SHT"]]
  ] < 200,
  AppendTo[l, 
   RandomSample[
      FromCharacterCode /@ {48 + 9~(r = RandomInteger)~3, 
        65 + 25~r~3}]~Riffle~"-" <> ""]
  ];
l

非常简单。生成随机平板,并过滤出重复和禁止的平板,直到找到200个。


5

GolfScript(98个字符)

260{3?}:^~,{.10^+`-3>'-'+\10^/26^+26base(;{65+}%+.-1%}%{'ASSKKKSHT66669'3/{1$\?)!},*},{,^^rand}$n*

这会使用一些丑陋的基本转换并随后过滤,以随机顺序生成所有可能的车牌。它们很多,所以不要指望它能快速执行,但是这个问题并没有对执行时间造成任何限制。


4

JavaScript(ES6)-213

它可能可以改进。在Firefox控制台上测试。

console.log()如果要测试,请将警报更改为

r=x=>~~(Math.random()*x)+'';l=x=>[...'ABCDEFGHIJKLMNOPQRSTUVWXYZ'][r(26)];a=[];while(a.length<200)p=r(10)+r(10)+r(10)+'-'+l()+l()+l(),!/ASS|666|69|KKK|SHT/.test(p)&&a.indexOf(p)<0&&a.push(p);a.forEach(x=>alert(x))

哇,那一定是我见过的最长的单行代码。
DatEpicCoderGuyWhoPrograms 2014年

2
@DatEpicCoderGuyWhoPrograms您显然还没有看过我的400多字符char单行JS正则表达式;)
Eric Lagergren 2014年

@eric_lagergren听起来好像写起来很痛苦……
DatEpicCoderGuyWhoPrograms 2014年

3
您可以在多行中编写@DatEpicCoderGuyWhoPrograms,然后删除不必要的空格。有多个在线服务提供商提供该功能以及其他缩写功能(替换功能/ var等名称),以减少js文件的大小并节省带宽。
SBoss 2014年

1
@DatEpicCoderGuyWhoProgram之后会进行优化。我想出了如何正确解决问题的方法,然后尝试查找快捷方式,然后最终优化了代码:P简单得多
Eric Lagergren 2014年

4

红宝石- 136 133 129个字符

可怕。但是,认为仍有改进的空间。只需将代码放入irb或中,pry然后按Enter键即可运行:

f=->*t{[0,1,2].map{t.sample}*''}
g=->l{(a=f[*?A..?Z]+?-+f[*?0..?9];l|=[a]if/69|666|ASS|SHT|KKK/!~a)until l.size>199;l}
puts g[[]]

4

Ruby,127个字符

我尝试使用“可读的” Ruby版本:

a=[]
until a.size==200 do
  p="#{rand(899)+100}-#{('A'..'Z').to_a.sample(3).join}"
  a<<p unless p=~/69|666|ASS|SHT|KKK/
end
puts a

请注意,这会生成兼容的车牌,但不会生成整个可能的车牌集(与大多数此类答案一样)。这似乎不是必需的。
马克·托马斯

4

Python 2.7-258个字符

我不是专业程序员,也不是任何人,所以我会对结果感到满意。

import random as o
r=o.randint
t,j,k=[],0,""
b=["SHT","KKK","ASS","69","666"]
for i in range(200):
 l,j=b[0],b[4]
 while any(w in l for w in b):
  l,j="",""
  for i in range(3):
   l+=chr(r(65,90))
   j+=str(r(0,9))
 t.append(l+'-'+j)
print "\n".join(set(t))

文件大小为4.0 K,使用python file.py


难道不应该passcontinue?您也可以通过用1个空间缩进,而不是4.节省一些字符
克里斯蒂安Ciupitu

for i in range(0,200):可以用替换for i in range(200):
Cristian Ciupitu 2014年

@CristianCiupitu使用continue.. 时我无法让它完成200个操作pass。另外,它更短。当我尝试时for i in range(200),它只执行了199 ^^,之后我通过创建一个duplicates变量并将其放在列表/字符串中并在其中duplicates += 1进行pass计数来对它们进行计数-
亚当

@CristianCiupitu range(200)毕竟可以工作-代码块中的4个空格实际上是实际的\t,用1个空格替换它们不会更改字符数...感谢您的建议!
亚当

1
用户在建议的编辑中建议删除if k in t: pass,因为它什么都不做。
门把手

3

蟒蛇-208

嗨,这是我在车牌生成方面的突破。此解决方案与@bitpwner的解决方案类似,但没有字符串模块,没有选择车牌列表,而是选择使用集合,并且它还允许首先输入数字。

import random as r,re
f=r.randint
l=lambda x:chr(f(65, 90))if x else`f(0,9)`
d=set()
while len(d)<200:
 k=f(0,1);j=1-k;c=l(k)+l(k)+l(k)+'-'+l(j)+l(j)+l(j)
 if not(re.search("666|69|ASS|KKK|SHT",c)):d.add(c)

样本输出:

set(['DQJ-641', '086-QRY', '981-GAZ', 'UHN-718', '114-VMI', 'GLO-887',  ...

3

Python,252个字节

这是我的贡献。我对此印象深刻,但是我知道其他人在python方面做得更好。

from random import randint as r
f=()
while len(f)<200:
 t=str(r(0,999))
 if not("666" in t or "69" in t):
  u=''.join(chr(r(65,90)) for _ in [1,2,3])
  if not("KKK" in u or "SHT" in u or "ASS" in u):f+=("%s-%s"%(t.zfill(3),u),)
 f=tuple(set(f))
print f

2

蟒蛇-165

那些进口...

import random as r,re
j="666|69|ASS|KKK|SHT"
t=r.randint
while len(j)<2e3:
 exec"x="+"chr(t(0,25)+65)+"*3+"'-'"+"+`t(0,9)`"*3
 if not re.search(j,x):print x;j+='|'+x

如果需要随机以数字或字母开头(我认为并不需要),则为190。

import random as r,re
j="666|69|ASS|KKK|SHT"
t=r.randint
while len(j)<2e3:
 exec"x="+"chr(t(0,25)+65)+"*3+"'-'"+"+`t(0,9)`"*3
 x=x[::r.choice((-1,1))]
 if not re.search(j,x):print x;j+='|'+x

字符还是字节?
DatEpicCoderGuyWhoPrograms 2014年


我计算了208个字符,您的解决方案是否首先允许数字?
威廉2014年

@willem缩进的四个空格实际上是制表符,并且仅字母是第一个。
2014年

2

PHP 341 324 320

是我能做的最好的。

<?$a="p";$b=fopen($a,'a+');while($c<200){$d=rand(100,999);$e='';for($f=0;$f<3;++$f)$e.=chr(rand(65,90));$g=(rand(1,2)==1)?"$d-$e":"$e-$d";$h=array('ASS','666','69','kkk','SHT');$i=1;foreach($h as $j)!preg_match("/$j/",$g)?:++$i;if($i==1){$k=fread($b,filesize($a));if(!strpos($k,$g)){fwrite($b,$g);echo"$g<br />";++$c;}}}

要运行代码,只需将其另存为.php文件,然后在任何Web服务器上浏览至该文件即可。如果尚不存在黑名单文件p.txt,它将尝试创建该文件。但是,如果您没有root用户访问权限,则可能需要使用完整的服务器路径定义它。

代码本身在高尔夫之前:

<?
// create random plate
// check it does not break rules
// check is not on all time blacklist file
// Add to blacklist file
// Output to screen

// open file handle
$file = "p"; // filename and path if not root access
$fh = fopen($file, 'a+');

// do 200
while($x<200) {

    // get random number
    $rand_number = rand(100,999);

    // get random letters
    $letters = '';
    for($y=0; $y<3; ++$y) $letters .= chr(rand(65,90));


    // mix up combination
    $string = (rand(1,2)==1) ? "$rand_number-$letters" : "$letters-$rand_number";

    // assume is ok
    $ok = 1;

    // Set checks to be excluded on new plates.
    $checks = array('ASS','666','69','kkk','SHT');

    // do the exclusions
    foreach ($checks as $check) !preg_match("/$check/", $string) ? : ++$ok;


    // if all ok, check is not on the blacklist
    if($ok == 1) {

        // read blacklist
        $blacklist = fread($fh, filesize($file));

        // if not on blacklist, add it to file, echo it to output, increment counter
        if (!strpos($blacklist, $string)) {
            fwrite($fh, $string);
            echo "$string<br />";
            ++$x;
        }
    }
}

尽我所能::(

样本输出

XWU-888
PUD-534
355-QXG
WDE-402
113-QID
362-YBW
TBK-594
939-XDT
148-ARZ
838-ICY
723-ZDA
.... does exactly 200 new plates.

编辑:整理了一些if语句以使用短格式。


如果板没有不被混合起来-即可以是数字那么字母而已,我可能会失去这条线 $string = (rand(1,2)==1) ? "$rand_number-$letters" : "$letters-$rand_number";
保罗德拉维特

1
您可以使用单个字符的文件名(例如,用p代替p.txt)并自己保存4个字符。
2014年

@Mark我不知道你能做到。经过测试,效果很好。阅读文件扩展名,它们不能完全按照我认为的方式工作。谢谢,这很有趣。
Paul Drewett

1

Delphi,161字节

这是我的看法。它将牌照输出到标准输出,而它们之间没有换行。如果需要LF(规则中未指定),则将添加额外的4个字节。

高尔夫球版:

var S,L:string;begin repeat Str(100+Random(69),S);S:=S+'-';while Length(S)<7do S:=S+Chr(65+Random(10));if Pos(S,L)=0then L:=L+S;until Length(L)>1393;Write(L)end.

取消高尔夫:

var
  S, L: string;
begin
  repeat
    Str(100 + Random(69), S); // generate and add first three numbers
    S := S + '-'; // add dash
    while Length(S) < 7 do // generate and add last three letters
      S := S + Chr(65 + Random(10));
    if Pos(S, L) = 0 then // check if its not in the L string and add it
      L := L + S;
  until Length(L) > 1393; // exit loop once L string has more than 1393 chars (199 * 7 = 1393)
  Write(L); // output L to stdout
end.

如何运行:

app.exe > plates.txt

1

PHP,267

这大约是我能得到的。

<?php $g=file("p",2)?:[];$b=["ASS","666","KKK","SHT"];for($i=0;$i<200;){$m="A";$n=rand(702,18277);for($j=0;$j<$n;$j++){$m++;}$m.=-rand(100,999);if(!(strpos($m,"69")|in_array($m,$b)|in_array($m,$g))){$g[]=$m;echo"$m\n";$i++;}}file_put_contents("p",implode("\n",$g));?>

板存储在文件“ p”中。

<?php
$g=file("p",2)?:[]; // Read existing plates
$b=["ASS","666","KKK","SHT"]; // Don't generate these
for($i=0;$i<200;){ // 200 plates
    $m="A"; // Base letter
    $n=rand(702,18277); // 3 random letters
    for($j=0;$j<$n;$j++){$m++;} // Increment until letters are reached (SLOW, but short)
    $m.=-rand(100,999); // Add a dash and three numbers
    if(!(strpos($m,"69")|in_array($m,$b)|in_array($m,$g))){ // Check that it's valid and unused
        $g[]=$m;echo"$m\n";$i++; // Echo it, add it to used array and increment counter
    }
}
file_put_contents("p",implode("\n",$g)); // Save the plates
?>

1

R,229个字符

我相信这可以改善:

l=function(x)paste0(sample(x,3,r=T),collapse="")
a=function()c(l(LETTERS),l(0:9))
A=list()
for(i in 1:200)while(any(sapply(c("ASS","666","69","KKK","SHT"),grepl,A[[i]]<-a()))|A[i]%in%A[-i])A[[i]]=a()
lapply(A,paste,collapse="-")

在控制台中运行,打印牌照列表。


1

眼镜蛇-198

class P
    def main
        l,r=[],Random()
        while l.count<200
            a,b=r.next(1000),''
            for i in 3,b+='[r.next(65,91)to char]'
            if not ('69'in'[a]'or 666==a or b in'ASS KKK SHT'),l+=['[a]-'+b]
        print l

1

ECMAScript 6- 155 168 158

警告:200个警报对话框(变化alertconsole.log测试)

for(i=0,s={},r=Math.random,l=x=>String.fromCharCode(65+r()*26);i<200;)/ASS|666|69|KKK|SHT/.test(p=(r()+'-'+l()+l()+l()).slice(-7))?0:s[p]=s[p]||(alert(p),i++)

编辑:糟糕。原始版本印有副本...

编辑2:现在更接近原始分数-从一组转换为一个关联数组,并进行一些重复的检查,使其能够随心所欲地打印

在Firefox控制台中测试。


恭喜您改善了我的解决方案
William Barbosa 2014年

我在上收到“语法错误” l=x=>String.fromCharCode(65+r()*26);。我想我不知道这是怎么回事l=x=>...
Kevin Fegan 2014年

@KevinFegan-我猜您没有使用Firefox ...这f=a=>b是ES6功能,基本上是简写形式function f(a) { b },目前仅受Firefox支持。
Alconja 2014年

是的,我使用的是IE 9,它在这里肯定无法正常工作。我将在Firefox上尝试。谢谢。
凯文·费根

1

JavaScript(ES6)184

与往常一样,在FireFox控制台中进行测试,然后更改alertconsole.log或准备按escape200次。

R=x=>Math.random()*++x|0
for(l='ABCDEFGHIKJLMNOPQRSTUVWXYZ',i=0,u={};i<200;)
!(/69|666|ASS|SHT|KKK/.test(k=l[R(25)]+l[R(25)]+l[R(25)]+'-'+R(9)+R(9)+R(9))&u[k])&&alert(k,u[k]=++i);

我不知道控制台,但是在Firefox开始提供禁用网页之前,网页仅允许5个免费警报:mxr.mozilla.org/mozilla-central/…–
Neil

@Neil当然,但是提供禁用功能不是禁用功能。您不应该享受200个(或更多codegolf.stackexchange.com/a/32278/21348)弹出窗口吗?
edc65

1

Python3,257个字符

import string as X,re,random as R
I=[0,1,2]
s={}
while len(s)<200:
 L=R.sample([[R.choice(X.digits) for i in I],[R.choice(X.ascii_uppercase) for i in I]],2);L=''.join(L[0]+['-']+L[1])
 if re.search('ASS|KKK|SHT|69|666',L) or L in s:continue
 print(L);s[L]=0

样本输出:

# python3 shortened.py
EUN-215
546-SIL
464-ZTR
XIX-794

1
您可以通过分离线5和6保存一个字节;代替\n
地下

@undergroundmonorail,您是对的,谢谢!
Cristian Ciupitu 2014年

1

167菲律宾比索

while(count($a)<200){$c="";for(;++$y&3;)$c.=chr(rand(65,90));$d=rand(100,999);$c=rand()&1?"$d-$c":"$c-$d";preg_match("/ASS|666|69|KKK|SHT/",$c)||$a[$c]=1;}print_r($a);

比目前的PHP最好的少100个字符:)

while(count($a)<200)
{
    $c="";
    for(;++$y&3;) $c.=chr(rand(65,90));
    $d=rand(100,999);
    $c=rand()&1?"$d-$c":"$c-$d";
    preg_match("/ASS|666|69|KKK|SHT/",$c)||$a[$c]=1;
}
print_r($a);

希望你喜欢。如果允许的话:

while(count($a)<200){$c="";for(;++$y&3;)$c.=chr(rand(65,90));$c.=-rand(100,999);preg_match("/ASS|666|69|KKK|SHT/",$c)||$a[$c]=1;}print_r($a);

仅为141个字符,但不会随机排列字符和数字。任何建议欢迎:)


1

F#,264个字符

并不是一种真正为高尔夫而设计的语言,但是我敢肯定,这是可以改进的。将Seq.exists与lambda一起使用非常令人讨厌,因为许多paren和缺少隐式转换也是如此。

使用递归,永远持续下去。

let g=System.Random()
let c()=char(g.Next(65,90))
let k(i:string)l=Seq.exists(fun e->i.Contains(e))l
let rec p d:unit=
 let l=sprintf"%i-%c%c%c"(g.Next(100,999))(c())(c())(c())
 if k l d||k l ["ASS";"666";"69";"KKK";"SHT"]then p d else
  printfn"%s"l
  p(l::d)
p[]

可以在FSI中运行。


1

Python 203

我不确定这在技术上是否很重要,但是我喜欢它,所以无论如何我都会发布它。尽管我确实像其他所有人一样伪随机地生成了答案,但我还是从策略上选择了随机种子,以使无效答案不会最终出现在输出中。因此,我的答案实际上不能生成整个有效答案集,而又不能生成无效答案。

from random import*;seed(1);L='ABCDEFGHIJKLMNOPQRSTUVWXYZ';D='0123456789';C=choice
for i in 'x'*200:s=randint(0,1);a=''.join(C(L)for _ in'000');b=''.join(C(D)for _ in'000');i=[a,b];print i[s-1]+'-'+i[s]

1

Perl-123个字符

while(@p<200){$l=(AAA..ZZZ)[int rand 999]."-".(100+int rand 899);@p=grep!/ASS|666|69|KKK|SHT|$l/,@p;push@p,$l}$,=$/;print@p

取消高尔夫:

while(@p < 200){ # Repeat until we get 200 plates
    $l = (AAA..ZZZ)[int rand 999]."-".(100+int rand 899); # generate the license plate
    @p = grep !/ASS|666|69|KKK|SHT|$l/, @p; # remove disallowed license ones and duplicates
    push @p, $l # add a license plate
}
$,=$/; # so they print with newlines
print @p # print the plates

如果有人有进一步打高尔夫球的想法,请告诉我,我很感兴趣。如果您想进一步解释部分代码,请发表评论,我也乐于解释更多。


1

Javascript- 283327个字符

编辑:

实施Alconja的建议后,这是我的新版本:

m=Math.random;function y(v){return "ASS|KKK|SHT|666".indexOf(v)<0&&v.indexOf("69")<0?0:!0}function c(){return String.fromCharCode(m()*26+65)}for(i=0;i<200;i++){do {do {n=(m()+"").slice(2,5)}while(y(n));do {l=c()+c()+c()}while(y(l));r=l+"-"+n}while(o.indexOf(r)>=0);o+=r+"\n"}alert(o)
/* 1 line - 283 Characters */

1)删除Variable:s并使用文字:“ \ n” [-4] [323]
2)删除“ var o =“”,i,r,n,l,“ [-17] [306]
3)删除变量:t并使用文字:“ ASS | KKK | SHT | 666” [-4] [302]
4)设置m = Math.random并使用“ m”代替[-7] [296]
5)使用(m( )+“”)而不是m()。toString()[-6] [290]
6)删除不需要的“;” [-7] [283]



旧版本:Javascript-327个字符

我敢肯定,还有一些改进的余地。。。我对代码高尔夫缺乏经验:

var o="",s="\n",i,r,n,l,t="ASS|KKK|SHT|666";function y(v){return t.indexOf(v)<0&&v.indexOf("69")<0?0:!0;}function c(){return String.fromCharCode(Math.random()*26+65);}for(i=0;i<200;i++){do {do {n=Math.random().toString().slice(2,5);}while(y(n));do {l=c()+c()+c();}while(y(l));r=l+"-"+n;}while(o.indexOf(r)>=0);o+=r+s;}alert(o);    
/* 1 line - 327 Characters */


这是带有“未缩小”变量/函数名称的格式化“ Ungolfed”版本:

var outp="",lsep="\n",ndx,res,nbr,ltr,tbl="ASS|KKK|SHT|666";
function fnvfy(vinp){
  return tbl.indexOf(vinp)<0&&vinp.indexOf("69")<0?0:!0;
}
function fnchr(){
  return String.fromCharCode(Math.random()*26+65);
}
for(ndx=0;ndx<200;ndx++){
  do {
    do {
      nbr=Math.random().toString().slice(2,5);
    }
    while(fnvfy(nbr));
    do {
      ltr=fnchr()+fnchr()+fnchr();
    }
    while(fnvfy(ltr));
    res=ltr+"-"+nbr;
  }
  while(outp.indexOf(res)>=0);
  outp+=res+lsep;
}
alert(outp);



这是一个“调试”版本,可以粘贴到浏览器收藏夹/书签的URL中。输出放置在新“窗口”的“ TEXTAREA”中,而不是“ alert()”中:

javascript:(function(){var outp="",lsep="\n",ndx,res,nbr,ltr,tbl="ASS|KKK|SHT|666";function fnvfy(vinp){return tbl.indexOf(vinp)<0&&vinp.indexOf("69")<0?0:!0;}function fnchr(){return String.fromCharCode(Math.random()*26+65);}for(ndx=0;ndx<200;ndx++){do {do {nbr=Math.random().toString().slice(2,5);}while(fnvfy(nbr));do {ltr=fnchr()+fnchr()+fnchr();}while(fnvfy(ltr));res=ltr+"-"+nbr;}while(outp.indexOf(res)>=0);outp+=res+lsep;}var x=window.open();x.document.write('<head>\n</head>\n<body>\n<form name=sa><textarea name=t rows=25 cols=80 wrap>'+outp+'</textarea><br />\n</body>\n');x.document.close();})()
/* */

这是格式的“调试”版本:

javascript:
(function(){
  var outp="",lsep="\n",ndx,res,nbr,ltr,tbl="ASS|KKK|SHT|666";
  function fnvfy(vinp){
    return tbl.indexOf(vinp)<0&&vinp.indexOf("69")<0?0:!0;
  }
  function fnchr(){
    return String.fromCharCode(Math.random()*26+65);
  }
  for(ndx=0;ndx<200;ndx++){
    do {
      do {
        nbr=Math.random().toString().slice(2,5);
      }
      while(fnvfy(nbr));
      do {
        ltr=fnchr()+fnchr()+fnchr();
      }
      while(fnvfy(ltr));
      res=ltr+"-"+nbr;
    }
    while(outp.indexOf(res)>=0);
    outp+=res+lsep;
  }
  var x=window.open();
  x.document.write('<head>\n</head>\n<body>\n<form name=sa><textarea name=t rows=25 cols=80 wrap>'+outp+'</textarea><br />\n</body>\n');
  x.document.close();
}
)()

2
在不涉及实际算法的情况下,这里有一些通用的javascript技巧:Javascript本质上是宽容的,因此语法很差,因此您无需使用var(只需赋值即可,323),;除非后面有另一条语句,否则无需s (例如,在最后一个字符的线条,或之前}316),手表什么,需要更多的空间来声明/使用不仅仅是内联(例如您的s变量,312如果事情是使用超过),同上,用于反向。一次(例如Math.random(...)r=Math.random ... r(...)307(x+"")短于x.toString()300
Alconja

@Alconja-感谢您的帮助。我能够将大小减少44个字符。
凯文·费根
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.