Tuhuolongan:感谢20分,专此帖纠错之前回复你的“字母排列”帖

prototyper 2011-01-17 11:03:50

<script type=text/javascript>
String.prototype.Pusharr = function() {
var K = {}, R = [];
var A = this.split(""), M = A.length;
while (R.length < M) {
var Q = M * Math.random() >> 0;
! K[Q] && R.push(A[Q]) && (K[Q] = !0);
}
try {return R.join("")} finally {R.length = 0}
}
String.prototype.Arrange = function() {
var I = J = 0, K = {}, R = [], A = this.split(""), M = A.length;
var O = A.join("‖").match(/(\b[^‖]+\b)(?!.*‖\1\b)/gi).length;
var X = function(i){return i > 0 ? arguments.callee(i - 1) * i : 1}(O);
while (I ++ < M) {
! K[A[I]] && (K[A[I]] = !0) || J ++;
}
var N = X + J;
while (R.length < N) {
var Q = this.Pusharr();
! K[Q] && R.push(Q) && (K[Q] = !0);
}
return R
}
alert("abb".Arrange());
alert("abc".Arrange());
alert("abbbb".Arrange());
alert("abbde".Arrange());
alert("abcde".Arrange());
</script>
...全文
84 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
prototyper 2011-01-20
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 charrys 的回复:]

提示这行错误 :var O = A.join("‖").match(/(\b[^‖]+\b)(?!.*‖\1\b)/gi).length;
"未结束的字符串常量"
[/Quote]

哦,可能编码问题,中间有特殊字符“‖”,我贴的是UTF-8。再简化并改编码为编码为ANSI贴如下。效率怎么提高呢?下面还只到7个不同字母组成的单词全排5040种组合,就较慢了。


<script type=text/javascript>

String.prototype.Arrange = function() {
var Q = I = 0, K = {}, R = [], A = this.split(""), M = A.length;
var O = A.join("‖").match(/(\b[^‖]+\b)(?!.*‖\1\b)/gi).length;
var X = function(i){return i > 0 ? arguments.callee(i - 1) * i : 1}(O);
var N = O > 1 ? X + M - O : 1;
while (R.length < N) {
Q = A.sort(function(){return Math.random() > .5 ? 1 : -1}).join("");
! K[Q] && R.push(Q) && (K[Q] = !0);
}
return R.join("\n")
}

alert("a".Arrange());
alert("aaa".Arrange());
alert("abb".Arrange());
alert("abc".Arrange());
alert("abbb".Arrange());
alert("abcd".Arrange());
alert("abbbb".Arrange());
alert("abbde".Arrange());
alert("abcdefg".Arrange());

</script>
86y 2011-01-19
  • 打赏
  • 举报
回复
提示这行错误 :var O = A.join("‖").match(/(\b[^‖]+\b)(?!.*‖\1\b)/gi).length;
"未结束的字符串常量"
86y 2011-01-19
  • 打赏
  • 举报
回复
对哦。aaa就无法输出了!
86y 2011-01-18
  • 打赏
  • 举报
回复
很好。。。
prototyper 2011-01-18
  • 打赏
  • 举报
回复
还不好,如果输入单词“aaa”就出问题了。昨晚上想完善但回帖不能连续3次,刚看到连续已打断就补上来。

<script type=text/javascript>
String.prototype.Pusharr = function() {
var K = {}, R = [];
var A = this.split(""), M = A.length;
while (R.length < M) {
var Q = M * Math.random() >> 0;
! K[Q] && R.push(A[Q]) && (K[Q] = !0);
}
return R.join("")
}
String.prototype.Arrange = function() {
var I = 0, K = {}, R = [], A = this.split(""), M = A.length;
var O = A.join("‖").match(/(\b[^‖]+\b)(?!.*‖\1\b)/gi).length;
var X = function(i){return i > 0 ? arguments.callee(i - 1) * i : 1}(O);
var N = O > 1 ? X + M - O : 1;
while (R.length < N) {
var Q = this.Pusharr();
! K[Q] && R.push(Q) && (K[Q] = !0);
}
return R.join(",")
}
alert("aaa".Arrange());
alert("abb".Arrange());
alert("abc".Arrange());
alert("abbb".Arrange());
alert("abcd".Arrange());
alert("abbbb".Arrange());
alert("abbde".Arrange());
alert("abcde".Arrange());
</script>
prototyper 2011-01-17
  • 打赏
  • 举报
回复

<script type=text/javascript>
String.prototype.Pusharr = function() {
var K = {}, R = [];
var A = this.split(""), M = A.length;
while (R.length < M) {
var Q = M * Math.random() >> 0;
! K[Q] && R.push(A[Q]) && (K[Q] = !0);
}
return R.join("")
}
String.prototype.Arrange = function() {
var I = 0, K = {}, R = [], A = this.split(""), M = A.length;
var O = A.join("‖").match(/(\b[^‖]+\b)(?!.*‖\1\b)/gi).length;
var X = function(i){return i > 0 ? arguments.callee(i - 1) * i : 1}(O);
var N = X + M - O;
while (R.length < N) {
var Q = this.Pusharr();
! K[Q] && R.push(Q) && (K[Q] = !0);
}
return R.join(",")
}
alert("abb".Arrange());
alert("abc".Arrange());
alert("abbb".Arrange());
alert("abcd".Arrange());
alert("abbbb".Arrange());
alert("abbde".Arrange());
alert("abcde".Arrange());
</script>
prototyper 2011-01-17
  • 打赏
  • 举报
回复
简化:

<script type=text/javascript>
String.prototype.Pusharr = function() {
var K = {}, R = [];
var A = this.split(""), M = A.length;
while (R.length < M) {
var Q = M * Math.random() >> 0;
! K[Q] && R.push(A[Q]) && (K[Q] = !0);
}
try {return R.join("")} finally {R.length = 0}
}
String.prototype.Arrange = function() {
var I = 0, K = {}, R = [], A = this.split(""), M = A.length;
var O = A.join("‖").match(/(\b[^‖]+\b)(?!.*‖\1\b)/gi).length;
var X = function(i){return i > 0 ? arguments.callee(i - 1) * i : 1}(O);
var N = X + M - O;
while (R.length < N) {
var Q = this.Pusharr();
! K[Q] && R.push(Q) && (K[Q] = !0);
}
return R
}
alert("abb".Arrange());
alert("abc".Arrange());
alert("abbbb".Arrange());
alert("abbde".Arrange());
alert("abcde".Arrange());
</script>

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧