首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >快速Topswops计算

快速Topswops计算
EN

Code Golf用户
提问于 2011-01-27 23:00:59
回答 4查看 760关注 0票数 14

来自AZSPCS

假设你有一副包含n张卡片的牌。每一张卡片包含一个从1到n的数字,每个数字都出现在一张卡片上。你看上面卡片上的数字--让我们说它是k --然后反转最上面k卡的顺序。您继续这个过程--读取最上面的数字,然后反转相应的卡数--直到上面的卡片是1。

编写最快的程序来计算给定甲板的反转次数。请注意,如果您正在参加竞赛,则不允许您发布代码(因此,我还不会发布我的代码)。

EN

回答 4

Code Golf用户

回答已采纳

发布于 2011-04-30 23:18:30

JavaScript

代码语言:javascript
复制
function(d){for(t=0;x=(n=d[0])-1;t++)for(i=0;i<n/2;i++){m=d[x-i];d[x-i]=d[i];d[i]=m}return t}

你把它递给甲板,就像这样:

代码语言:javascript
复制
f([3, 2, 1]) // 1
f([2, 3, 1]) // 2
f([1, 2, 3]) // 0
票数 5
EN

Code Golf用户

发布于 2011-05-01 23:57:04

Scala:(这不是高尔夫-是吗?)

代码语言:javascript
复制
def transform (l: List[Int], sofar: Int = 0) : Int =
  if (l(0) == 1) sofar else transform (l.take (l(0)).reverse ::: l.drop (l(0)), sofar + 1)

有测试箱和秒表的完整应用,包括甲板的洗牌:

代码语言:javascript
复制
object DeckReverse extends Application {

  def transform (l: List[Int], sofar: Int = 0) : Int = 
    if (l(0) == 1) sofar else transform (l.take (l(0)).reverse ::: l.drop (l(0)), sofar + 1)

  def stopwatch (count: Int, size: Int) = {
    val li = (1 until size).toList 
    val r = util.Random 
    
    val start = System.currentTimeMillis ()
    (0 until count).foreach (_ => transform (r.shuffle (li)))
    val stop = System.currentTimeMillis ()
    
    println ("count: " + count + "\tsize: " + size + "\tduration: " + (stop - start) + " msecs") 
  }

  stopwatch (1000, 100)
}

计数: 1000大小: 100持续时间: 1614毫秒机器:单奔腾M_2 2Ghz

票数 3
EN

Code Golf用户

发布于 2011-07-03 04:50:48

Python,84个字符

无论如何打高尔夫球..。我用的是数字0到n-1。假设数组存储在变量x中,则需要84个字符的Python。

代码语言:javascript
复制
while x[0]:x[:x[0]+1]=x[x[0]::-1]

但是,由于内存滥用,性能非常差。

票数 2
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/46

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档