9孔挑战赛[关闭]


65

9洞挑战赛

  • 不同难度的9项代码挑战。
  • 多次使用同一语言的处罚。
  • 该问题将通过标准杆,洞冠军和奖杯得主进行更新。

    这是我与一些朋友进行的比赛,不是通常的比赛形式,但是我希望你们中的一些人会喜欢它的不同之处。以下是挑战,规则和奖杯。

孔洞

  1. 格林威(24)

    f(c:string, n:integer)
    打印包含的n实例的行c

  2. 崎不平的地方(73)

    f(t:string, s:string, n:integer) -> i
    in中实例i的索引 在哪里?nthst

  3. 晚餐咖喱(6235)

    f(x:function, y: function) -> g 哪里g是将调用一个函数yn时间; n的返回值在哪里x

  4. 喷(92)

    f(p:string) 写入文件,p并将其填充为随机大小的随机大小矩形(ascii)。

  5. 寻宝(75)

    f(p:string, c:char) -> (x, y) 读取p包含符号网格的文件,并假设该符号存在,则返回该符号在网格中的第一个实例的xy坐标。

  6. 桂河大桥(179)

    f(l:list[int]) 打印的差异桥图l。例如[1,7,3,17,1]

     /+6\ /-4\ /+14\  /-16\
    1    7    3     17     1
    

    确保根据上面数字的大小创建空格。对于3位长的数字,您将在下面一行的数字之间需要4个空格。

    捕获:在某个地方,您的代码必须拼写裤子(必须至少具有1个非字母数字分隔符。例如 tr(ou,se)(rs)

  7. 打高尔夫球时时光飞逝(1157)

    f(p:string) -> [h, m] 读取文件,p其中包含模拟时钟的ASCII表示,其中时针用一行表示,时针用两行表示。输出包含两个元素的列表:时钟上显示的小时和分钟。如果只有一只手可见,则假设两只手都指向该位置。

    这是一只手的所有可能组合。

    \ | /
     \|/
    --o--
     /|\
    / | \
    

    这些位置分别是(12、1、3、5、6、7、9、11)。假设时钟面上的其他字符为空格。

  8. 木材!()

    f(p:string) -> b:boolean 其中p是具有ascii建筑物的文件的路径。在其下具有空白的块将掉落。(除了斜线,如果在与它们面对的方向相反的方向上有一个稳定的方块,斜线将保留在原位)。如果建筑物在结构上是整体的,则返回true,否则返回false。所有非空白块均视为实心块,除斜杠外,它们均下降。

    结构安全

    ____
    |/\|
    |  |
    

    不安全

    |__
      | 
      |
    

    安全版本

    |__
    \\| 
      |
    
  9. 懒人新闻(218)

    f(s:string, r:string, p:string) 获取Hacker News上前20个故事的标题,并将所有实例更改sr,然后将新标题写入处的html文件中p,其中每个标题都包含在h1元素中。

    输出的文件应该是这样的

    <h1>Some title</h1></h1>Some other title</h1>...etc

    渔获量

    • 您可能无法使用HN API。
    • 您可能不使用正则表达式。
    • 您不得在代码中的任何地方使用尖括号。

计分

  • 字符数是将正确编译和运行的函数的长度。但是,您仍然需要提交完整的代码,包括导入文件。
  • 提交中的每一种重复语言+ 10%。(例如,如果您将Ruby用于3种解决方案,那么您的最终分数将乘以1.2)。同一语言的不同版本仍计为同一语言。
  • 标准杆将是每个洞的平均得分。
  • 在一个答案中提交您的解决方案。
  • 您的总分是字符数+语言罚款,然后将其四舍五入。

奖杯

  • 金夹克 -(@Sprigyig -1290)最低总得分
  • 射手 -(@Sprigyig -9)使用的大多数语言
  • 地堡 -任何洞都高于标准杆得分
  • 飞机上的蛇 -(@AsksAnyway -1727)在单个解决方案中提交最高的python字符
  • 好零件 -(@AsksAnyway -255)单个解决方案中的最高JS字符数
  • Shakey Steve-使用界面的最短解决方案
  • 您不是从这里来的 -最短的独特语言解决方案是该语言的Wikipedia页面最短。
  • Happy Gilmoore -(@AsksAnyway -31)最短的解决方案,在代码中带有单词“ alligator”。
  • Unicycling Dwarf Magic -9个提交源文件的默认扩展名是牛津词典中一个单词的完美字谜。

完成所有9个洞后,您才有资格获得奖杯


意见书

  1. @sprigyig 1290
  2. @萤火虫 1320
  3. @grc 1395
  4. @特雷弗M 1465
  5. @ C·哈尔哈特 1654
  6. @盖伊·西顿 1719
  7. @AsksAnyway 4651

2
@anorton <>
Dan Prince

1
一个模拟时钟每只手有12个位置,但是您只给我们8个。这是如何工作的?
凯文

1
@DanPrince您是否希望/位置参考1点或2点?(和所有其他对角线类似)
apnorton 2013年

1
@anorton 1 / 5、5 / 25、7 / 35、11 / 55
Dan Prince

2
为了评分的目的,是否会将不同版本或不同口味的语言视为“不同”?例如Python 2 vs Python 3?Visual Basic与VB.Net与VBScript?C和C ++之类的超集或近超集怎么样?对不起,这个学步匠,但这代码高尔夫!:-)
Darren Stone

Answers:


11

得分:4651

2907 + 60%罚款

1. GolfScript-14个字符

{*}:a;lligator

用法:c n a例如"test" 3 a->testtesttest

星 快乐吉尔摩尔

2. Python-72个字符

def f(t,s,n,p=-1):
 while n:p=t.find(s,p+1);n-=1 if p+1 else n
 return p

3. Javascript-255个字符

/*
Curry for Dinner

f(x:function, y: function) -> g Where g is a function that will call y, n times; where n is the return value of x
*/
function f(x, y) {
    var g = function() {
        var n = x();
        for (var i = 0; i < n; ++i) {
            y();
        }
    };
    return g;
}

星地堡 星好零件

4. Python-132个字符

from random import randrange as r
def f(p):l=range(r(9));open(p,'w').writelines([''.join([chr(r(94)+33)for _ in l])+'\n'for _ in l])

5. Python-89个字符

def f(p,c):
 for y,d in enumerate(open(p).readlines()):
  x=d.find(c)
  if x+1:return x,y

6. Python-189个字符

def f(l):
 for i in 0,1:
  for n,u in enumerate(l):
   o=l[n+1] if len(l)>n+1 else id 
   if i:print u,' '*4,
   elif o!=id:print' /'+('+' if o-u>0 else '')+str(o-u)+'sers'*0+'\\ ',
  print

7. Python-1727个字符

def f(p):
    lines = open(p).read().split('\n')

    # preprocess lines to ensure correct format
    if len(lines) < 5:
        for i, line in enumerate(list(lines)):
            if 'o' in line:
                if i == 0:
                    lines.insert(0, ' ' * 5)
                    lines.insert(0, ' ' * 5)
                elif i == 1:
                    lines.insert(0, ' ' * 5)
        while len(lines) < 5:
            lines.append(' ' * 5)

    # find characters that can only be the hour hand
    for i, line in enumerate(lines):
        if i == 0:
            if '\\' in line:
               hour = 11
            elif '|' in line:
                hour = 12
            elif '/' in line:
                hour = 1
        elif i == 2:
            if '--o' in line:
                hour = 9
            elif 'o--' in line:
                hour = 3
        elif i == 4:
            if '/' in line:
               hour = 7
            elif '|' in line:
                hour = 6
            elif '\\' in line:
                hour = 5

    # find characters that might represent the minute hand
    possible_minutes = []
    for i, line in enumerate(lines):
        if i == 1:
            if '\\' in line:
                possible_minutes.append(55)
            if '|' in line:
                possible_minutes.append(0)
            if '/' in line:
                possible_minutes.append(5)
        elif i == 2:
            if '-o' in line:
                possible_minutes.append(45)
            if 'o-' in line:
                possible_minutes.append(15)
        elif i == 3:
            if '/' in line:
                possible_minutes.append(35)
            if '|' in line:
                possible_minutes.append(30)
            if '\\' in line:
                possible_minutes.append(25)

    HOUR_MINUTES = {
        12: 0,
        1: 5,
        3: 15,
        5: 25,
        6: 30,
        7: 35,
        9: 45,
        11: 55,
    }

    # remove minute hand that is actually hour hand
    if len(possible_minutes) > 1:
        not_minute = HOUR_MINUTES[hour]
        if not_minute in possible_minutes:
            possible_minutes.remove(not_minute)

    assert(len(possible_minutes) == 1)
    minute = possible_minutes[0]

    h, m = hour, minute          
    return [h, m]

星 蛇在飞机上

8. Python-226个字符

def f(p):
 e=set;q,t=e(),True
 for l in open(p).readlines():
  r,b,q=e(q),e(),e()
  for i,c in enumerate(l):
   if c.strip():b.add(i);q.add(i-1 if c == '/' else i+1 if c == '\\' else i)
  if not r.issubset(b):t=False
 return t

9. Python-203个字符

import urllib
def f(s,r,p):f,l,g=open(p,'w'),'\74','\76';[f.write(l+'h1'+g+t.replace(s,r)+'h1'+g)for i,t in enumerate(urllib.urlopen('http://x.co/3WYln').read().split('title'+g))if(i in range(2,42))&i%2]

注释“ #alligator”与代码#1有什么关系?由于某种原因,它似乎包含在字数统计中。
达拉

1
@Dhara是为Happy Gilmoore奖杯设计的:“最短久的解决方案在代码中带有单词'alligator'。”
PhiNotPi 2013年

#9使用尖括号(i<i<42),还是仅当将其用作运算符时才允许使用它们?
Christopher Creutzig 2013年

@ChristopherCreutzig固定的感谢。
AsksAnyway,2013年

7

得分:1320

我有很多工作可以提高这个分数...哦,好吧,至少我避免了重复使用语言的处罚。:-)

1. Python(21个字符)

def f(c,n):print(c*n)

“显而易见的”解决方案。

2. ECMAScript 6(47个字符)

f=(t,s,n)=>t.split(s).slice(0,n).join(s).length

通过计算子字符串之前的长度,以一种非常规的方式查找索引。

3. J(12个字符)

f=:2 :'v^:u'

内置连接^:将功能提升为幂(即,将功能重复给定次数)。也就是说,f^:3 y = f (f (f y)))。但是,它过载了,无法接受函数而不是整数,在这种情况下,它将在输入上运行该函数以获取重复次数。不幸的是,我们需要为任务翻转操作数,否则我们将得到简明扼要的答案f=:^:

4. C(95个字符)

#include <stdio.h>
#include <stdlib.h>

f(char*p){FILE*f=fopen(p,"a");for(int n=rand(),y=n*n;y--;y%n||putc(10,f))putc(rand()%94+32,f);}

此任务为解释和滥用留出了很大的空间:可以只输出一个可打印的随机ASCII字符并说它是一个尺寸为{1}的随机尺寸的矩形吗?可能不是。无论如何,我rand()坚持使用简单的方法,但实际上您可能想要添加%9或进行测试。在我的linux机器上,我不必刷新文件即可编写文件(我猜它会在程序退出时自动刷新),但是我敢肯定,您必须刷新它才能符合标准,所以感觉免费fflush(f);在这里添加到计数。

5. Haskell(100个字符)

import Control.Arrow
import Data.List
import Data.Tuple
import Control.Applicative

h p c=head.filter(p c.snd).zip[1..]
g c=swap.(id***fst.h(==)c).h elem c.lines
f p c=g c<$>readFile p

我喜欢在查找行和列之间重复的模式(通过提取h)。

6. Lua(261个字符)

function f(s,m,y,...)if s and m then for i,v in pairs(m)do
io.write(v,(" "):rep(#tostring(s[i])))end print()elseif s then
r=unpack f(s,{"",f(trouse,r(s))})f({f(nil,r(s))},s)elseif y then
return ("/%s%d\\"):format(m<y and"+"or"-",math.abs(m-y)),f(s,y,...)end end

利用多个返回值和递归来处理差异。我花了几个字符才能完全匹配示例输出(在每个位置添加适当数量的空格)。

7.开始(307个字符)

func f(p string)[]int{var l[]string
g,_:=os.Open(p)
H,M,s,m:=0,0,bufio.NewScanner(g),[][]int{{-1,-1,11},{-1,0,12},{-1,1,1},{0,-1,9},{0,1,3},{1,-1,7},{1,0,6},{1,1,5}}
for s.Scan(){l=append(l,s.Text())}
for _,a:=range m{if l[2+a[0]*2][2+a[1]*2]!=' '{M=a[2]}
if l[2+a[0]][2+a[1]]!=' '&&(H==0||M!=a[2]){H=a[2]}}
return[]int{H,M}}

可能还会打更多的高尔夫球;我几乎不知道去。

8. CoffeeScript(+ node.js)(223个字符)

f=(p)->
 a=require('fs').readFileSync(p).toString().split "\n"
 U=(i,j)->a[i]?[j]and a[i][j]==' '
 for l,i in a
  for c,j in l
   m =
    "/":[i+1,j-1]
    "\\":[i+1,j+1]
    a:[i+1,j]
   return if U.apply(0,m[c]or m.a)
 1

有点便宜,因为我已经有了JS。那好吧。返回错误值(即undefined)或真实值(即1)以表示答案。

9. Bash(254个字符)

f(){
curl https://news.ycombinator.com/rss|
awk -Ftitle '{OFS="h1\76\n\74h1";ORS="";print substr(OFS,4);print$2,$4,$6,$8,$10,$12,$14,$16,$18,$20,$22,$24,$26,$28,$30,$32,$34,$36,$38,$40;print substr(OFS,0,3)}'|
while read l;do echo ${l//$1/$2};done|
tee $3
}

(在管道之后添加了换行符,以提高可读性。)解决外壳程序的限制很有趣。我意识到可能有更好的方法$2,$4,$6,...,但这还是我想出的。


1
您为什么没有在字符计数中不包括导入/包含?否则,太好了!
grc 2013年

1
哦,是的,我忘了提。由于该问题强调“您只需要提交功能”,因此我认为忽略标准库的成本是合理的。
FireFly 2013年

对于第1洞f=str.__mul__
蛇和咖啡

不幸的是,@ SnakesandCoffee不会将其打印到标准输出。:(
FireFly 2014年

5

得分:1,394.4

996个字符+ 40%罚款

1. Greenway-Haskell,19个字符

f c n=replicate n c

用法:

> f "hello" 5
["hello","hello","hello","hello","hello"]

2. Rough-PHP,72个字符

<?
function f($t,$s,$n){for($i=-1;$n--;$i=strpos($t,$s,++$i));return$i;}

3. Curry-JavaScript 1.8,45个字符

f=function(x,y)function(){for(i=x();i--;)y()}

4. Spew-J,43个字符

f=:3 :'((33+?(1+?2#100)$1#93){a.)fwrites y'

用法:

f 'file.txt'

5.宝藏-J,64个字符

f=:4 :0
a=.freads x
b=.1+a i.u:10
c=.a i.y
d=.<.c%b
e=.d,c-b*d
)

用法:

'file.txt' f 'c'

6. Bridge-Python,166个字符

def f(l):J=''.join;t=map;r=lambda n:' '*len(n);s=t(str,l);o=['/%+d\\'%(y-x)for x,y in zip(l,l[1:])];print J(t(J,zip(t(r,s),o)))+'\n'+J(t(J,zip(s,t(r,o)+['users'*0])))

7.时间-Python,205个字符

def f(p):
 s=open(p).read();a=[s[:12],s[18:],s[11:15],s[15:18]];z=[0]*3
 for l in(0,1):
  for c in'/|\\':z[a[l].count(c)]=('|/'.find(c)+6*l)%12or 12
  z[a[2+l].count('-')]=3+6*l
 print[z[1]or z[2],z[2]*5%60]

假定行被空格填充为五个字符宽。将选项卡用于第二个缩进级别。

8.木材-Python,190个字符

def f(p):g=open(p).readlines();C='\\/ ';return all(1-[x+2>len(g[y])or g[y][x+1]in C,x<1or g[y][x-1]in C,0,' '==g[y+1][x]][C.find(g[y][x])]for y in range(len(g)-1)for x in range(len(g[y])-1))

9. Slacker-Python,192个字符

import urllib
def f(s,r,p):F=open(p,'w');d=urllib.urlopen('http://x.co/3WYmQ').read()[37:];o,c='\x3c\x3e';exec"d=d[d.find(o+'t')+7:];F.write(o+'h1'+c+d[:d.find(o)].replace(s,r)+o+'/h1'+c);"*20

感谢Tyzoid提供了网址缩短器的想法。


您的Python给人留下了深刻的印象,有很多技巧可以学习。
AsksAnyway,2013年

1
@AsksAnyway谢谢。一定要检查这个,如果你还没有准备好。
grc 2013年

1
嗯,您的(1)肯定在J中,对吗?也许您忘了更新标题/示例运行。
FireFly 2013年

@FireFly是的,我的错。我更新了评分和用法,但忘了更改实际解决方案。
grc 2013年

4

编辑:认为我将按原样提交:总计1290,没有语言重复。

格林威,C# 53

void g(string s,int n){while(n-->0)Console.Write(s);}

我决定与#1和#9交换语言。总共价值30,这里有数百个以后。

Python 59

我真的不应该在一个简单的问题上用完这么好的语言。另外,这不属于任何语言的indexOf函数系列的一部分吗?我似乎总是需要这个...

def f(t,s,n):return sum(map(len,t.split(s))[:n+1])+n*len(s)

咖喱晚餐,Lisp 61

自从上大学的那一周以来,我再也没有碰过Lisp。

(defun f (c g)(loop for i from 1 to(funcall c)do(funcall g)))

Spew,Bash / shell utils 102

我的bash-foo从来没有那么好过。一会儿我会摆弄。顺便说一句,如果您希望它完成得更快,请将其切换到/ dev / urandom。

f(){
c=$(($RANDOM%9+9))
for i in $(seq $c);do
echo `tr -cd [:print:]</dev/random|head -c$c`>>$1
done
}

寻宝记C 113

可能是C语言更友好的问题之一。我将“返回两个整数”解释为将返回数组指针作为参数。警告?什么警告?int *与FILE * = p一样好。

void f(int*p,int c,int*r){int*f,t;*r=r[1]=0;f=fopen(p,"r");while(c-(t=fgetc(f))){*r=t-'\n'?*r+1:0;r[1]+=*r?0:1;}

桂河大桥,Perl 207

我在写这篇文章的同时开始学习perl。(迟到总比没有好!)我是想做正则表达式英雄的,所以我将字符串作为桥的两层组成在一起,然后使用带有空格替换的正则表达式来形成两条不同的线。

sub f{@trouse=0..$#_-1;foreach $i(@trouse){$r.=sprintf("%d/%+d\\",$_[$i],$_[$i+1]-$_[$i])}$r.=$_[$#_]."\n";print$r=~s/(^|\\)(\d+)(\/|$)/$1.' 'x length($2).$3/egr;print$r=~s/(\/[+-]\d+\\)/' 'x length($1)/egr}

Java 297 ,打高尔夫球时时光飞逝

您只能做很多事情来使java简洁...假设时钟是用空格填充的,所以每行长5个空格。

public boolean p(int r,int m,String s){int c[]={1,1,0,-1,-1,-1,0,1};return s.charAt(6*c[(r+6)%8]*m+14+c[(r)%8]*m)!=' ';}
public int[]time(String c){int h=9,m=0,t[]={3,5,6,7,9,11,12,1};for(int i=0;i<8;i++)if(p(i,1,c))if(p(i,2,c))m=i;else h=i;if(h==9)h=m;m=(t[m]*5)%60;h=t[h];return new int[]{h,m};}

木材!JavaScript 201

它在chrome的控制台中运行。我在其他地方不做任何保证。它要求将行填充为最长行的长度。我觉得这是对ASCII艺术的合理要求。

function f(s) {s=s.split("\n")
d={};m={'/':-1,'\\':1};r=1
s.forEach(function(x){t={}
for(i=0;i<x.length;i++){if(x[i]!=' '){j=m[x[i]]?i+m[x[i]]:i
t[j]=1}}for(n in d){if(x[n]==' '){r=0}}d = t})
return r}

Slacker新闻,Ruby 197

def s(f,s,t)
l=60.chr
r=62.chr
IO.write(f,l+"h1"+r+URI.parse("https://news.ycombinator.com").read().split('mhead')[0,20].map{|x|x[0,x.length-19].split(r).last.sub(s,t)}.join(l+"/h1#{r+l}h1"+r))
end

这不仅是一个很好的答案,而且还有助于阅读。做得好!
丹·普林斯

谢谢,我想现在我将ruby和C#交换了一下,有趣了。.Net的疯狂字符串split =)
不再指责

4

接触了几种语言很有趣...

除去不必要的空格/换行符后获得的字符数,但提交基本上保持可读性。由于问题是功能和程序的混合体,因此我仅在需要的地方包括该功能的主体...还有些自由,“返回”的含义是...

总计〜1719

1- Python(〜20)

def f(c, n):
    print c*n

2- C(〜109)

int f(char*t,char*s,int n){int i;char*q=t;int l=strlen(s);for(i=0;i<n;++i){t=strstr(t, s)+l;}return(t-q-l);}

可读版本:

#include <string.h>

int f(const char *t, const char *s, int n)
{
  int i;
  char *start = t;
  int l = strlen(s);
  for(i = 0; i < n; ++i)
  {
    t = strstr(t, s) + l;
  }
  return(t - start - l);
}

3- Javascript(〜56)

function(x, y) {return function() {for(i=0; i<x(); i++) y();}}

4- 雷克斯(〜136)

f: Procedure
  Parse arg p
  w = random(1, 9)
  h = random(1, 9)
  Do y = 1 to h
    Do x = 1 to w
      Call CHAROUT p, d2c(random(32, 99))
    End
    Call LINEOUT p, ""
  End

5- 斯卡拉(〜290)

def f(p: String, c: Char) {
  def sc(w: String, c: Char, x: Int, y:Int ): Boolean =
    {
      if(w.isEmpty) false else
      if(w.head==c) {println(x, y); true} else sc(w.tail, c, x+1, y)
    }
  def sr(w: Array[String], c: Char, x: Int, y: Int)
  {
    if(!sc(w.head, c, 0, y)) sr(w.tail, c, 0, y+1)
  }
  sr(io.Source.fromFile(p).mkString.split('\n'), c, 0, 0)
}

6 C ++(〜355)

void b(list<int> l) // trouser+s
{
  auto i = l.begin();
  auto j = i;
  j++;
  list<int> d;
  while(j!=s.end()) d.push_back(*j++ - *i++);
  j = d.begin();
  ostringstream o[2];
  for(auto i : l)
  {
    while(o[0].tellp()!=o[1].tellp()) o[1] << " ";
    o[1] << i;
    if(j != d.end())
    {
      while(o[0].tellp()!=o[1].tellp()) o[0] << " ";
      o[0] << "/" << (*j>=0 ? "+" : "") << *j++ << "\\";
    }
  }
  cout << o[0].str() << endl << o[1].str() << endl;
}

7- 转到(〜301)

请注意,这需要填充时钟(即所有行的长度都相同)。

func f(p string)(h int,m int) {
  var a=[8]int {0, 2, 4, 12, 16, 24, 26, 28}
  var b=[8]int {7, 8, 9, 13, 15, 19, 20, 21}
  var d=[8]int {11, 12, 1, 9, 3, 7, 6, 5}
  h=9
  c, e := ioutil.ReadFile(p)
  if e==nil {
    for i:=range a {
      if c[a[i]]>32 {
        m=i
      }
    }
    for i:= range b {
      if c[b[i]]>32 {
        if i!=m {
          h=i
        }
      }
    }
    if h==9 {
      h=m
    }
    h=d[h]
    m=d[m]*5%60
  }
  return
}

8- 红宝石(〜259)

def f(p)
  a,b = File.read(p).split(/\n/).reverse,Hash.new(1)
  a.each_with_index {
    |l,i|
    l.split("").each_with_index {|k,j|
      case k
        when ' '
          b[j] = 0
        when '/'
          b[j] = b[j]|b[j-1]
        when '\\'
           b[j] = b[j]|b[j+1]
      end
      unless k==' '
        if b[j]==0
          return 0
        end
      end
    }
  }
  return 1
end

9- bash / Unix hack(〜193)

wget -qO - http://news.ycombinator.com/rss | tr "\074\076" "\n" | grep -B1 /title | awk 'NR % 3 == 1' | head -21 | tail -20 | sed 's/$1/$2/' | awk '{ print "\074h1\076" $0 "\074/h1\076"}' > $3

1
很好,但是您的#9使用尖括号,这违反了该孔的规则。
里克·史密斯-翁

@RichardSmith:谢谢...我必须修复那个。
Guy Sirton 2013年

1
小心#3孔,不能保证x()在每次函数调用时都会返回相同的数字!
Tyzoid

@Tyzoid:我正在考虑捕获它...您是对的,这是我对规范的假设/解释。
Guy Sirton

2

这里并不是真正的高尔夫运动,但是这里有一些Tcl,因为该语言需要更多的爱:

set holes {
    greenway
    rough
    curry
    spew
    hunt
    bridge
    time
    timber
    slacker
}

proc greenway {c n} {
    puts [string repeat $c $n]
}

proc rough {t s n} {
    set i [string first $s $t] ;# a bit wet
    while {[incr n -1]} {
        incr i [string first $s $t $i]
    }
    return $i
}

proc curry {x y} {
    set n [uplevel 1 $x]
    set body [string repeat "$y;" $n]
    return [list apply [list args $body]]
}

proc spew {p} {
    set w [expr {int(rand()*80)}]
    set h [expr {int(rand()*80)}]
    set f [open $p w]
    for {set y 0} {$y<$h} {incr y} {
        set ln ""
        for {set x 0} {$x<$h} {incr x} {
            append ln [format %c [expr {int(rand()*96+32)}]]
        }
        puts $f $ln
    }
    close $f
}

proc hunt {p c} {
    set f [open $p r]
    set y 0
    while {[gets $f line]>=0} {
        set x [string first $f $c]
        if {$x != -1} {
            return [list $x $y]
        }
        incr y
    }
}

proc bridge {l} {
    set l [lassign $l m]
    set top ""
    set btm $m
    foreach n $l {
        set t "/[expr {$n>$m?"+":""}][expr {$n-$m}]\\"
        append top "[string repeat \  [string length $m]]$t"
        append btm "[string repeat \  [string length $t]]$n"
        set m $n
    }
    # trousers
    return $top\n$btm
}

proc time {p} {
    set f [open $p r]
    while {[gets $f line] >= 0} {
        set line [format %-.5s $line]
        lappend c [split $line {}]
    }
    close $f
    foreach {x y h} {
        -1 -1  0
         0 -1  1
         1 -1  3
         1  0  5
         1  1  6
         0  1  7
        -1  1  9
        -1  0 11
    } { 
        set 2x x; incr 2x $x
        set 2y y; incr 2y $y
        if {[lindex $c $2y $2x] != " "} {
            set hh $h
        } elseif {[lindex $c $y $x] != " "} {
            set mm $h
        }
    }
    if {![info exists $mm]} {
        set mm $hh
    }
    set mm [expr {$mm*5}]
    if {$hh == 0} {set hh 12}
    list $hh $mm
}

proc timber {p} {
    set f [open $p r]
    set must {}
    while {[gets $f line] >= 0} {
        set line [format %-.5s $line]
        foreach i $must {
            if {[string index $line $must] eq " "} {
                close $f
                return false
            }
        }
        set must {}
        set i 0
        foreach c [split $line] {
            switch $c {
                "\\" {lappend must [expr {$i+1}]}
                "/"  {lappend must [expr {$i-1}]}
                " "  { }
                default  {lappend $must $i}
            }
            incr i
        }
    }
    close $f
    return true
}

proc slacker {s r p} {
    package require tdom
    set f [open $p w]
    set h [::http::geturl https://news.ycombinator.com/]
    set html [string trim [::http::data $h]]
    ::http::cleanup $h
    set dom [dom parse $html]
    lappend map , [string index $html 0]
    lappend map . [string index $html end]
    set root [$dom documentElement]
    foreach n [$root selectNodes {//td[@class=title]/a}] {
        set x [$n text]
        set x [string map [list $s $r] $x]
        puts $f [string map $map ",h1.$x,/h1."]
    }
    close $f
}

大多数情况下未经测试,因为在半小时内编写这些过程比尝试正确设计高尔夫代码要有趣得多。请享用!


2

只有时间来处理其中的1/2。您似乎希望它们以函数的形式而不是单一的形式出现。因此,所有这些都是功能。功能下方的测试代码。在Perl中。

绿色通道:

sub f{print$_[0]x$_[1]}

#test
&f("abc",5);

粗:

sub f{$i=-1;$n=$_[2];do{$i=index$_[0],$_[1],$i+1;$n--}while($n>0 && $i>-1);print$i+1}

#test
&f("abcefgacefgabcefgabcefgabcefg","cef",4);

咖喱:

use Sub::Curried;
curry f($x,$y){$q=0;foreach(1..&$x){$q=&$y};return $q;}

#test
sub fy { return 1;}
sub fx { return 10;}
print&f(\&fx,\&fy);

喷出:

use Crypt::PRNG qw(random_string_from irand);
sub f{open($o,">$_[0]");$m=(irand)%10+1;map{printf $o "%s\n",random_string_from(['A'..'z'],$m)}(1..$m)}

#test
&f('/tmp/t');

宝藏:

sub f{open($i,"<$_[0]");$x=$y=0;@l=<$i>;while($y<=$#l){$x=1+index$l[$#l-$y],$_[1];@a=($x,$y+1)if($x);$y++;}return\@a}

#test
@b=@{&f('/tmp/t','f')};
print join(",",@b);

我明天工作6-9。


2

在制品。请注意,由于'\n'wc

[1 Greenway] Mindf * ck,54个字符

>>+[+>,-]<[<]>,<<++++++++[>>------<<-]>>[>[.>]<[<]>-]

用法:编写代码后,输入您的字符串,并以^ a(ctr + a)终止您的字符串,然后在其后立即输入您的数字。

一个警告:给定的数字只能是0-9(如果您希望更大的数字,则您输入的任何字符的ascii值48都将用作n

屏幕截图:

屏幕截图

[3晚饭咖喱] Javascript,59个字符

function f(x,y){return function(){n=x();while(--n!=0)y();}}

[4 Spew] BASH,56个字符

f(){ dd if=/dev/urandom of="$1" count=$((RANDOM%30+2));}

[打高尔夫球时的七段时光] C,334个字符(宏定义为412)

#define E(A) else if(s[A]==
#define G(A) else if(A)m=
#define M(A) &&m!=A)h=A
int (*f(char* s)){short h=0,m=0;if(s[0]=='\\')m=11;G(s[2]=='|')12;G(s[4]='/')1;G(s[11]=='-')9;G(s[15]=='-')3;G(s[22]=='/')7;G(s[24]=='|')6;G(s[26]=='\\')5;if(s[7]=='\\'M(11);E(8)'|'M(12);E(9)'/'M(1);E(12)'-'    M(9);E(14)'-'M(3);E(18)'/'M(7);E(19)'|'M(6);E(20)'\\'M(5);int* i=malloc(sizeof(int)*2);i[0]=(h==0)?m:h;i[1]=m*5;return i;}

注意:此函数返回指向二维整数数组的指针,其格式如下:{3,55}(对于3时为小时,在11时为分钟的时钟位置)

[9 Slacker News] PHP,246个字符

function f($a,$b,$c){$t=file_get_contents("http://x.co/3WQoY");$g=explode('d class="t',$t);$f=fopen($c,"w");for($i=1;++$i!=count($g)-10;){$e=explode("\x3e",$g[$i]);fwrite($f,"\x3ch1\x3e".str_replace($a,$b,s    ubstr($e[2],0,-3))."\x3c/h1\x3e\n");}}

BASH + AWK的单独/原始实现,共218个字符

f(){ wget -qO- x.co/3WQoY|grep "e_"|awk '{n=split($0,a,"d class=\"t");for(q=1;++q!=n-10;){split(a[q],b,"\x3e");m=substr(b[3],0,index(b[3],"\x3c/")-1);gsub("'"$1\",\"$2"'",m);print "\x3ch1\x3e"m"\x3c/h1\x3e"    }}'>"$3";};

2

1654

1.格林威(哈斯克尔-37)

f x y=do print(concat(replicate x y))

2.崎Some不平的地方(Mathematica-43)

f[t_,s_,n_]:=StringPosition[t, s][[n+1, 1]]

3.晚餐咖喱(Lisp-58)

(defun f(x y)(lambda()(dotimes(c(funcall x))(funcall y))))

4. Spew(Matlab / Octave-83)

function x(f)
    save f arrayfun(@char,randi(255,randi(255),randi(255)))
endfunction

5.寻宝(C-176)

char* f(char* s,char c){FILE* n;char* r;int i=0,j=0,k=0;n=fopen(s,"r");while(!feof(n)){k=fgetc(n);if(k==(int)c)break;j++;if(k=='\n'){i++;j=0;}}sprintf(r,"%d %d",i,j);return r;}

6.桂河大桥(Ruby-192)

def f(l)
    trouse="\n%s"
    rs = l[0].to_s
    for i in 1..l.length-1
        s = "/%+d\\"%(l[i]-l[i-1])
        print " "*l[i-1].to_s().length+s
        rs += " "*s.length+"%d"%l[i]
    end
    puts trouse%rs
end

7.打高尔夫球时的时光飞逝(Node.js-406)

function f(n){var g,h,m,q;fs.readFile(n,'ascii',function(e,d){l=d.split('\n');g=function(x,y){try{return l[x][y].trim()&&1;}catch(e){return 0;}};h=g(0,0)*11||g(0,2)*12||g(0,4)*1||g(2,0)*9||g(2,4)*3||g(4,0)*7||g(4,2)*6||g(4,4)*5;m=(g(1,1)&&h!=11)*55||(g(1,2)&&h!=12)*0||(g(1,3)&&h!=1)*5||(g(2,1)&&h!=9)*45||(g(2,3)&&h!=3)*15||(g(3,1)&&h!=7)*35||(g(3,2)&&h!=6)*30||(g(3,3)&&h!=5)*25||h*5%60;return [h,m];});}

8.木材!(执行-329)

func f(p string)bool{
    x,_:=ioutil.ReadFile(p)
    b:=strings.Split(string(x),"\n")
    for j:=0;j<len(b)-2;j++{
        for i:=0;i<len(b[j]);i++{
            r,o:=1,0
            switch string(b[j][i]){
            case " ": continue
            case "/": r,o=0,-1
            case "\\": r,o=0,1
            }
            if i+o<len(b[j]) && b[j+r][i+o]==' ' {
                return false
            }
        }
    }
    return true
}

9. Slacker新闻(Python-330)

def f(s,r,p):
    w=urllib2.urlopen('http://news.ycombinator.com')
    a=[l.get_text() for l in BS(w).body("a") if l.find_parent("td", class_="title")]
    t=lambda x:u"\x3c{}\x3e{}\x3c/{}\x3e".format(x,'{}',x)
    m=''.join(t("h1").format(l.replace(s,r)) for l in a[:20])
    with open(p,'w') as h:
        h.write(t("html").format(m).encode('utf8'))

1

我是一个骗子和我没有打满全部9洞...... 然而。尽管如此,这是我在Perl中的第8洞“木材”解决方案(149个字符)。

我的一位同事认为这是工作中的挑战。我们一直在享受它,特别是我,因为到目前为止,我拥有最低的标准解决方案!

我们的规则是,它必须是一个独立的脚本,该脚本必须输出truefalse后跟换行符STDOUT,并且没有“ shebang”是可以的。

以下是“缩小”的解决方案。我还提出了同样的“ 要点 ”,其中包括非“最小化”代码和(通常是曲折的)对我的方法背后的原因的解释。


$r=tru;open F,pop;while(<F>){y/0/6/;s/^|\s|$/0/g;s#\\(?=0)|(?<=0)/|[^\\/0]#6#g;@n=split//;for(0..@n){!$n[$_]&&$l[$_]==6?$r=fals:1}@l=@n;}print$r,'e
'

0

我懒得按照Meh的比赛规则修改它,但是效果很好...

from numpy import *
import sys

def greenway(c,n):
    print c*n

def somewhereintherough(t,s,n):
    i=-1
    count=0
    while(count<n):
        i = t.find(s,i+1)
        count+=1
    return i

def curryfordinner(x,y):
    def g():
        for i in range(x()):
            y()
    return g

def spew(p):
    f = open(p,'w')
    n = random.randint(1,28)  
    for i in range(n):
        if(i>0):
            f.write('\n')
        str1 = ''.join([chr(random.randint(32,126)) for _ in range(n)])
        f.writelines(str1)
    f.close()
    print "Grid size: ",n,'x',n

def treasurehunt(p,c):
    f = open(p,'r')    
    arr = f.readlines()
    n = len(arr)
    f.close()
    f = open(p,'r')
    found=False
    for i in range(n):
        line = f.readline()
        #print line
        loc = line.find(c)
        if(loc!=-1):
            print c,"found in",p,"at",i,loc
            found=True
            break
    if(not found):
        print c,"not in",p
    f.close()

def bridgeontheriverkwai(l):
    str_list = []
    for i in range(len(l)-1):
        sign = '+' if l[i+1]-l[i]>0 else '-'
        str_1 = '/'+sign+str(abs(l[i+1]-l[i]))+'\\'
        sys.stdout.write(' '*(len(str(l[i])))+str_1)
        str_list.append(str_1)
    print
    for i in range(len(l)):
        if i<len(l)-1:
            print str(l[i])+' '*(len(str_list[i])-1),
        else:
            print l[i]

def timeflieswhenyoureplayinggolf(p):
    f = open(p,'r')
    #clock = [[0]*5,[0]*5,[0]*5,[0]*5,[0]*5]
    line1 = f.readline()
    line2 = f.readline()
    line3 = f.readline()
    line4 = f.readline()
    line5 = f.readline()
    h = 0
    m = 0
    if line1.find('\\')!=-1:
        h = 11
        m = 55
    elif line1.find('|')!=-1:
        h = 12
        m = 0
    elif line1.find('/')!=-1:
        h = 1
        m = 5
    elif line5.find('/')!=-1:
        h = 7
        m = 35
    elif line5.find('|')!=-1:
        h = 6
        m = 30
    elif line5.find('\\')!=-1:
        h = 5
        m = 25
    elif line3[4]=='-':
        h = 3
        m = 15
    elif line3[0]=='-':
        h = 9
        m = 45

    if line2[1]=='\\' and h!=11:
        m = 55
    elif line2[3]=='/' and h!=1:
        m = 5
    elif line3[1]=='-' and h!=9:
        m = 45
    elif line3[3]=='-' and h!=3:
        m = 15
    elif line4[1]=='/' and h!=7:
        m = 35
    elif line4[3]=='\\' and h!=5:
        m = 25
    elif line2[2]=='|' and h!=12:
        m = 0
    elif line4[2]=='|' and h!=6:
        m = 30

    print h,m


def timber(p):
    f = open(p,'r')
    linecount=0
    line_size = 0
    line = f.readline()
    while(line):
        linecount+=1
        line_size = max(line_size,len(line)-1)
        line = f.readline()
    block = array([[0]*line_size]*linecount)
    f.seek(0)
    for i in range(linecount):
        line = f.readline()
        for j in range(len(line)-1):
            if(line[j]==' '):
                block[i][j]=0
            elif(line[j]=='/'):
                block[i][j]=1
            elif(line[j]=='\\'):
                block[i][j]=2
            else:
                block[i][j]=3
    f.close()
    for i in range(linecount):
        for j in range(line_size):
            if(block[i][j]==1 and j!=0 and block[i][j-1]==3):
                block[i][j]=4
        for j in range(line_size-1,0,-1):
            if(block[i][j]==2 and j!=line_size-1 and block[i][j+1]==3):
                block[i][j]=4
    for i in range(linecount):
        for j in range(line_size):
            if(block[i][j]==3 and i<linecount-1 and block[i+1][j]==0):
                print "Unsafe Structure"
                return
    print "Safe Structure"

def slackernews(s,r,p):
    import urllib2
    response = urllib2.urlopen('https://news.ycombinator.com')
    html = response.read()
    titles_list = []
    ix = -1
    count = 0
    index_list =  []
    while(count<21):
        ix = html.find("<td class=\"title\"",ix+1)
        index_list.append(ix)
        count+=1
    for i in range(len(index_list)-1):
        line = html[index_list[i]:index_list[i+1]]
        line = line[line.find("a href"):]
        start = line.find('>')
        end = line.find('<')
        titles_list.append(line[start+1:end])
    f = open(p,'w')
    for title in titles_list:
        title = title.replace(s,r)
        f.write('<h1>'+title+'</h1>')
    print "Done writing, Check : ",p
    f.close()


greenway('test!',2)
s='this is a cat. this is a dog. dog is an animal, animal is a beast in disguise.'
t='is'
ix=somewhereintherough(s,t,8)
print ix,s[ix:]
def x():
    return 4
def y():
    print ' !y_called! '
g = curryfordinner(x,y)
g()
spew('test.dat')
treasurehunt('test.dat','a')
bridgeontheriverkwai([-7,-22,6,9])
timeflieswhenyoureplayinggolf('clock.dat')
timber('block.dat')
slackernews('a','b','slacker.html')

0

第一次打高尔夫!(仍在进行中...)

1.格林威

语言:Python 3.2.3
文件大小:23个字节
代码:

def f(c,n): print(c*n)

3.晚餐咖喱

语言:Python 3.2.3
文件大小:64字节
代码:

def f(x,y):
    def g():
        for i in [1]*x(): y()
    return g

如果我理解正确,那么您将两次因使用相同的语言而停靠。如果您只是为了娱乐而做,那就没问题了。
Hosch250

@ user2509848我不知道9种高尔夫语言,因此我必须停靠一些。:(不过,感谢您的注意!
apnorton

Ruby,Perl,Golfscript和Mathematica经常是赢家
Hosch250 2013年

我只知道C ++,有些Java却没有Python 3.2.3。只有HTML和CSS(无论如何都不能使用(CSS))。
Hosch250

0

这是另一项正在进行中的工作,我正在工作,所以我稍后再回头。

Ruby中的Greenway(14个字符,带#alligator的 24个字符),调用f.(c, n)

f=->c,n{p c*n}#alligator

屏幕截图

绿色通道

CoffeeScript 中的“ Rough”中的某处(38个字符)

f=(t,s,n)->t.split(s,n).join(s).length

屏幕截图

在粗糙的某个地方

JavaScript 中的晚餐咖喱(54个字符)

f=function(x,y){return function(){for(i=x();i--;)y()}}

屏幕截图

晚餐咖喱

入PHP(111个字符)

这要求short_open_tag在PHP配置文件中启用。否则,开始定界符应为<?php,这些@符号用于PHP_NOTICE使所抛出的错误静音,以免将其rand括在引号中,并且用于未明确声明该$s变量。这将在两个轴上生成一个介于4到30个字符之间的ASCII字符的正方形网格。

<? @$r=rand;$x=$r(4,30);for($i=$x*$x;--$i;){@$s.=$i%$x!=0?chr($r(33,126)):"\n";}file_put_contents($argv[1],$s);

屏幕截图

喷出


您使用的那个终端是什么?
亚历山大·克拉格斯

0

1. Greenway(Python 2:20)

def a(x,n):print x*n

输入示例:a("asdf",3)-> string(asdfasdfasdf

2.崎Some不平的地方(Python 2:47)

def b(t,s,n):return len(s.join(t.split(s)[:n]))

输入示例:b("1,2,333,4,5,6",",",3)-> int(7)

3.晚餐咖喱(Javascript:61)

function c(a,b){d=a();return function(){while(d){d--;b()}};};

输入示例:function z(){ return 3; }; function y(){ console.log( '1' ) }; myfunc = c(z,y); myfunc();->登录string(1)到控制台... 3次。

根据规范,c返回一个函数,并且实际上并不执行该函数。

4. Spew(C ++ 11:171)

#include<fstream>
using namespace std;void d(string f){ofstream o;int i=rand()%10;int j=rand()%10;o.open(f);for(int x=0;x<i;x++){for(int y=0;y<j;y++){o.put(rand()%256);}}}

尚未实际测试,但应该可以。


0

保留一些缩进以保持可读性,但在计算字符时将其删除。总数约为1227。还是不,我忘记了一个问题。1486 1465个字符。

1. MIPS ASM(55个字符)

#a0 : the address of the null terminated string.
#a1 : the repetition count.
f:
li $v0,4
syscall
addi $a1,$a1,-1
bne $a1,$0,f
jr $ra

2.方案(52个字符)

(define (f t s n)(list-ref(string-search-all s t)n))

3. F#(39个字符)

let f x y=fun()->for i in 1..x() do y()

4. Powershell(133个字符)

Function f($p){
$r=(Get-Random)%100
$z="";for($b=$r*$r;$b -gt 0;$b--){$z+=[char](33+(Get-Random)%94);if($b%$r -eq 1){"$z">>$p;$z=""}}
}

5. C ++(184152个字符)

#include <istream>
#include <string>
int*f(std::string p,char c){int*x=new int[2]();std::ifstream i(p);for(;i>>p;x[1]++)if((x[0]=p.find(c))>0)return x;}

6. C#(291282个字符)

static void f(List<int> l)
{
    var z = "";
    var o = l[0].ToString();
    for (int j = 1; j < l.Count;j++)
    {
        int p = l[j-1];
        int i = l[j];
        var q = "/"+(i-p<0?"":"+")+(i-p).ToString()+"\\";
        o += new String(' ',q.Length)+i.ToString();
        z+=new String(' ',p.ToString().Length)+q;
    }
    Console.Out.Write(z+"\n"+o);
}

7. Haskell(318306个字符)

我在寻找借口尝试Haskell。我以为我很聪明,可以通过数字组合生成位置列表,但是随着字符数的增加,我可以对这该死的东西进行硬编码。那好吧。该代码是残酷的,但无论如何还是很有趣的。

编辑:固定,以便正确返回分钟。

w i s=[s!!(j!!1)!!(j!!0)/=' '|j<-mapM(const i)[1,2],j/=[2,2]]
k[e,r](i,o,n)|i&&o=[e, n]|i&&not o=[n, r]|not$o||i=[e, r]
g s=let[h,m]=foldl k[0,0](zipWith3(\x y z->(x,y,z))(w[1,2,3]s)(w[0,2,4]s)[11,9,7,12,6,1,3,5])in let u=mod(m*5)60 in if h==0 then[m,u]else[h,u]
f p = do
  s<-readFile p
  return$g$lines s

8. Lua(259个字符)

我很惊讶地发现字符串不支持数组样式索引,因此我不得不依靠sub。

function f (p)
    s=' ' g=''
    for l in io.open(p):lines() do l=l..s:rep(#g-#l) for v=1,#g do
        d=({['/']=v-1,['\\']=v+1,[s]=0})[g:sub(v,v)] or -1
        if l:sub(v,v)==s and (d<0 or d>0 and g:sub(d,d)==s and l:sub(d,d)==s) then
            return false
        end
    end g=l end
    return true
end

9. Python(187个字符)

多亏了grc / Tyroid网址缩短器。

import urllib2
def f(s,r,p):[open(p,'a').write('\074h1\076'+i.split("\074")[0].replace(s,r)+'\074/h1\076') for i in urllib2.urlopen("http://x.co/3WYmQ").read().split("\074title\076")[2:]]
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.