感谢Adnan提出了这一挑战。
在我休息之前,我的最后一个挑战。
任务
给定正整数n
,如果n
为奇数,则重复/
多次;如果n
是偶数,则重复\
多次。
(严重的是,这些测试用例比本说明要清楚得多,因此只需看一下这些测试用例即可。)
眼镜
- 任何合理的输入/输出格式。
- 有标准漏洞。
测试用例
n output
1 /
2 \\
3 ///
4 \\\\
5 /////
6 \\\\\\
在我休息之前,我的最后一个挑战。
给定正整数n
,如果n
为奇数,则重复/
多次;如果n
是偶数,则重复\
多次。
(严重的是,这些测试用例比本说明要清楚得多,因此只需看一下这些测试用例即可。)
n output
1 /
2 \\
3 ///
4 \\\\
5 /////
6 \\\\\\
Answers:
n=>"\\/"[n%2].repeat(n)
定义一个匿名函数。
如果仅*
在Javascript中重复字符串。叹气
f=n=>...
,也可以直接调用它:(n=>...)(5)
。(或者,如果您使用的是Node.js REPL,则可以使用this._
,它代表最后输入的内容)
包括+1的 -p
使用STDIN上的输入运行:
squigly.pl <<< 6
squigly.pl
#!/usr/bin/perl -p
$_=$_%2x$_;y;01;\\/
-p
选项吗?我;
之所以使用音译,是因为在代码末尾-p
有一个隐式;
,因此我可以再节省1个字节。自从至少perl 5.6起(可能只要-p
存在该选项就一直有效),此方法就开始起作用
;
通过添加-p
相当棒极了,做得很好。
putchar(92-n%2*45)
长度相同
#'\/'{~2|]
这是一个六列动词,包括:
# ('\/' {~ 2 | ])
这是#
和之间的钩子('\/' {~ 2 | ])
; 钩子(f g) y
扩展为y f (g y)
,因此扩展为y # (... y)
,对于单个字符,它产生一个y
字符列表。
第二部分是5列火车,包括:
'\/' {~ 2 | ]
评估为两个分叉:
'\/' {~ (2 | ])
内叉的2 | ]
模数为二。因此,外叉为:
'\/' {~ mod2
它从字符串中获取({~
)mod2索引(mod2
)/
。
然后,使用上方的挂钩:
y # (apt char)
这样就产生了我们想要的东西,我们完成了。
更新:
param($n)('\','/')[$n%2]*$n
切换到param
,由于timmyd。
"$("\/"[$args[0]%2])"*$args[0]
或更具可读性
("\","/")[$args[0]%2]*$args[0]
测试:
> 1..10 | % { ./run.ps1 $_ }
/
\\
///
\\\\
/////
\\\\\\
///////
\\\\\\\\
/////////
\\\\\\\\\\
param($n)
替换为来剃除一些字节$args
,如下所示为27个字节param($n)('\','/')[$n%2]*$n
"\\"["/"][[#~Mod~2]]~Table~#&
残酷地利用了一个事实,即[[1]]
返回到函数的第一个参数,而[[0]]
返回到函数(头)本身,该事实适用于名为的奇怪有效的函数,该函数"\\"
在处被“求值” "/"
。
a[b]
只是带有head (index )和element (index )的通用表达式,而函数只是特殊类型的表达式时(实际上,说函数不是' t表达式,但它们只是转换通常具有形式的表达式的规则。:)a
0
b
1
f[x...]
void c(int i){for(int x=0;x++<i;)System.out.print(i%2<1?92:'/');}
@ user902383和@SeanBean节省了3个字节。
就像这个答案一样,最短的代码高尔夫球似乎循环并打印。两者都是递归的,而且
void c(int i){System.out.print(new String(new char[i]).replace("\0",i%2<1?"\\":"/"));}
似乎更长。
取消测试代码:
class M{
static void c(int i){
for(int x = 0; x++ < i;){
System.out.print(i % 2 < 1
? 92
: '/');
}
}
public static void main(String[] a){
for(int i = 0; i < 10; i++){
c(i);
System.out.println();
}
}
}
输出:
/
\\
///
\\\\
/////
\\\\\\
///////
\\\\\\\\
/////////
x=-1;++x<i
为x=0;x++<i
,则可以减少一个字节
"\\" : "/"
为92:'/'
;)
n=scan();cat(rep(c("\\","/")[n%%2+1],n),sep="")
在R中,您必须转义反斜杠。该参数sep
也必须完全指定,因为它是紧随其后的...
。因此,几乎没有机会保存字符:(
感谢bouncyball为打高尔夫球而付出的努力。
n=scan();cat(rep(c('\\','/')[n%%2+1],n),sep='')
"\/"@aXa
直截了当。使用模块化索引选择字符并重复字符串以使其相乘。在线尝试!
这个问题提出了Pip,Pyth和Jelly之间的有趣比较,后两个分别得分5个字节。所有这三种语言都有隐式输出,带有单字符运算符用于模块化索引和字符串重复,并且不需要在字符串中转义反斜杠。但是,有两个主要区别:
这些功能都不大可能出现在Pip 1中(我不喜欢不平衡定界符的美感,无点语法或隐式操作数似乎对我的infix表达式解析器来说太陌生了),但是我我可以打第三小提琴 即使“可读性”在打高尔夫球时极为相关,我还是认为这三个额外的字节使Pip程序一目了然变得容易理解-在我的书中,这是一个值得权衡的问题。
1虽然,Pip中的单字符字符串使用单个'
定界符,这受CJam和Lisp中的引用的启发。
code golf
!= golflang design
。现在您可能会争辩说,相同的原则(越短越好)也适用于语言设计。我只是说,对我而言,可用性甚至美观是考虑因素。
{<\ />[$_%2]x$_}
for 1..6 {
say $_, {<\ />[$_%2]x$_}( $_ )
}
1/
2\\
3///
4\\\\
5/////
6\\\\\\
(i,j)->{for(j=i;j-->0;)System.out.print(i%2<1?92:'/');};
我要感谢@Kevin Cruijssen进一步打高尔夫球,进一步回答了我的问题。
public static void main(String[] args) {
BiConsumer<Integer, Integer> consumer = (i, j) -> {
for (j = i; j-- > 0;) {
System.out.print(i % 2 < 1 ? 92 : '/');
}
};
consumer.accept(5, 0);
consumer.accept(1, 0);
consumer.accept(8, 0);
}