弯曲的序列


29

感谢Adnan提出了这一挑战。

我休息之前,我的最后一个挑战。

任务

给定正整数n,如果n为奇数,则重复/多次;如果n是偶数,则重复\多次。

(严重的是,这些测试用例比本说明要清楚得多,因此只需看一下这些测试用例即可。)

眼镜

测试用例

n output
1 /
2 \\
3 ///
4 \\\\
5 /////
6 \\\\\\

Answers:


17

Javascript,22个字节

n=>"\\/"[n%2].repeat(n)

定义一个匿名函数。

如果仅*在Javascript中重复字符串。叹气


1
终于,您找到了正确的操作员
Leaky Nun

@LeakyNun你在说什么?
DanTheMan '16

您正在使用三元运算符选择字符,不是吗?
Leaky Nun

@LeakyNun最初是的,但是如果您看聊天,大约一分钟后我也会发布此消息。
DanTheMan '16

2
@Jordumus您可以将函数分配给变量:f=n=>...,也可以直接调用它:(n=>...)(5)。(或者,如果您使用的是Node.js REPL,则可以使用this._,它代表最后输入的内容)
DanTheMan



9

Perl,20个字节

包括+1的 -p

使用STDIN上的输入运行:

squigly.pl <<< 6

squigly.pl

#!/usr/bin/perl -p
$_=$_%2x$_;y;01;\\/

它可能只是我的Perl版本(我仍在5.10上),但这会引发错误,除非我添加了额外的内容;到最后。我认为这是因为您正在使用分号作为y的分隔符,并且您还需要一个来完成该语句(如果您之后有更多代码行,则需要两个)
TheLambGoat

@theLambGoat确定要使用该-p选项吗?我;之所以使用音译,是因为在代码末尾-p有一个隐式;,因此我可以再节省1个字节。自从至少perl 5.6起(可能只要-p存在该选项就一直有效),此方法就开始起作用
Ton Hospel

@theLambGoat嗯,我在perl 5.10中发现了一个旧的redhat,但实际上它不起作用。这是一个Redhat补丁,还是确实无法在5.10左右使用(我相信它可以在较旧的Perls中使用,并且也可以在较新的Pers中使用)
Ton Hospel

我正在SUSE Enterprise Server 11上运行,因此这不仅仅是redhat的事情。但是我认为,只要它在某些版本中有效,它仍然是一个有效的答案。(我也刚刚签到5.08,这是我目前可以访问的唯一其他版本,并且在那里也无法使用)
theLambGoat

1
用那招;通过添加-p相当棒极了,做得很好。
达达


7

C#,42个字节

string f(int n)=>new string("\\/"[n%2],n);

选择正确的字符,然后创建一个由该字符重复组成的新字符串n


7

PHP,38字节

for(;$i++<$a=$argv[1];)echo'\/'[$a%2];

(38个字节)

while($i++<$a=$argv[1])echo'\/'[$a%2];

(38个字节)

<?=str_pad('',$a=$argv[1],'\/'[$a%2]);

(可变40个字节)

<?=str_repeat('\/'[($a=$argv[1])%2],$a);



6

J,10个字节

#'\/'{~2|]

这是一个六列动词,包括:

# ('\/' {~ 2 | ])

这是#和之间的钩子('\/' {~ 2 | ]); 钩子(f g) y扩展为y f (g y),因此扩展为y # (... y),对于单个字符,它产生一个y字符列表。

第二部分是5列火车,包括:

'\/' {~ 2 | ]

评估为两个分叉:

'\/' {~ (2 | ])

内叉的2 | ]模数为二。因此,外叉为:

'\/' {~ mod2

它从字符串中获取({~)mod2索引(mod2/

然后,使用上方的挂钩:

y # (apt char)

这样就产生了我们想要的东西,我们完成了。


6

Haskell,25个字节

f n=cycle"\\/"!!n<$[1..n]

-1字节感谢Damien与cycle


1
f n=cycle"\\/"!!n<$[1..n]
达米安

@Damien Wow,我怎么忘记了周期。
xnor

我不知道。但我很高兴有机会“击败”您一次:)
Damien


5

Powershell,30 27字节

更新:

param($n)('\','/')[$n%2]*$n

切换到param,由于timmyd


"$("\/"[$args[0]%2])"*$args[0]

或更具可读性

("\","/")[$args[0]%2]*$args[0]

测试:

> 1..10 | % { ./run.ps1 $_ }
/
\\
///
\\\\
/////
\\\\\\
///////
\\\\\\\\
/////////
\\\\\\\\\\

3
欢迎来到PPCG!很高兴在这里看到另一个PowerShell用户。您可以通过将输入param($n)替换为来剃除一些字节$args,如下所示为27个字节param($n)('\','/')[$n%2]*$n
AdmBorkBork

5

Mathematica,29个字节

"\\"["/"][[#~Mod~2]]~Table~#&

残酷地利用了一个事实,即[[1]]返回到函数的第一个参数,而[[0]]返回到函数(头)本身,该事实适用于名为的奇怪有效的函数,该函数"\\"在处被“求值” "/"


当您认为某种形式的形式a[b]只是带有head (index )和element (index )的通用表达式,而函数只是特殊类型的表达式时(实际上,说函数不是' t表达式,但它们只是转换通常具有形式的表达式的规则。:)a0b1f[x...]
马丁·恩德

2
我在该站点上看到了许多滥用语言,但是我认为这是我所见过的第一次滥用Mathematica。做得好!
DanTheMan'8

4

Ruby,15个字节

->n{'\/'[n%2]*n}

在eval.in上查看:https ://eval.in/632030



4

Brachylog,15个字节

:2%:"\/"rm:?jbw

在线尝试!

说明

:2%                Input mod 2…
   :"\/"rm         …is the index of the element in string "\/",…
          :?j      …element that we juxtapose Input times to itself…
             bw    …and print to STDOUT after removing one slash/backslash

4

CJam,9个字节

ri_"\/"=*

在线尝试!

说明

ri     e# Read input and convert to integer N.
_      e# Duplicate N.
"\/"=  e# Use N as cyclic index into "\/", giving '\ for even and '/ for odd inputs.
*      e# Repeat N times.

4

> <>(鱼),30字节

:2%?'/'o1-:?!;30.
30.  >'\'50p

第一次使用这种语言,但我认为我至少通过有条件地将/用作输出的一部分或使用镜像来重定向流来节省了一点空间。虽然可能效率仍然很差,但我觉得至少可以减少一点。

输入是初始堆栈,输出是 stdout

在线尝试!


欢迎来到编程难题和代码高尔夫球!
丹尼斯

@丹尼斯谢谢!感谢您的光临。
卡鲁姆·克尔

4

Dyalog APL,11 个字节

要求⎕IO←0在许多系统上是默认设置。

⊢⍴'\/'⊃⍨2|⊢

论点

重塑(重复)

'\/'⊃⍨ 由选择的字符串“ /”

2|⊢ 参数除以2时的除法余数

在线尝试APL!


凉!非常相似,J.
康纳尔奥布莱恩

@ ConorO'Brien是的,唯一的区别是J中的2列是钩子,而在Dyalog中则是顶峰,因此需要显式的左齿。
2013年

啊,我想知道为什么有争论。
科纳·奥布莱恩

1
最后一个APL答案,所有字符都为我正确呈现!
Cyoce

@Cyoce是的,我希望我们可以在SE上指定(并嵌入)字体。
2013年

3

Java 7,68 65字节

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();
    }
  }
}

输出:

/
\\
///
\\\\
/////
\\\\\\
///////
\\\\\\\\
/////////

嗨,凯文。为什么不使用Lambda表达式?
维尔

@Vale Hi Vale。因为我是老式Java 7程序员。:)如果您的Java 8或9答案与我的答案略有不同,请随时发布。
凯文·克鲁伊森

2
@Vale(他很奇怪:P)
肖恩·

1
我认为如果您更改x=-1;++x<ix=0;x++<i,则可以减少一个字节
user902383 '16

1
您也可以替换"\\" : "/"92:'/';)
肖恩·怀尔德

3

R,47 46字节

n=scan();cat(rep(c("\\","/")[n%%2+1],n),sep="")

在R中,您必须转义反斜杠。该参数sep也必须完全指定,因为它是紧随其后的...。因此,几乎没有机会保存字符:(

感谢bouncyball为打高尔夫球而付出的努力。


1
使用索引节省一个字节:n=scan();cat(rep(c('\\','/')[n%%2+1],n),sep='')
bouncyball '16

3

T-SQL 50字节

当然STDIN这里没有,所以让我们假设这样的硬编码INT变量:DECLARE @ INT那么解决方案是:

PRINT IIF(@%2=0,REPLICATE('\',@),REPLICATE('/',@))

3

,8字节

"\/"@aXa

直截了当。使用模块化索引选择字符并重复字符串以使其相乘。在线尝试!


这个问题提出了Pip,PythJelly之间的有趣比较,后两个分别得分5个字节。所有这三种语言都有隐式输出,带有单字符运算符用于模块化索引和字符串重复,并且不需要在字符串中转义反斜杠。但是,有两个主要区别:

  1. 在某些情况下,Pyth和Jelly只需一个定界符即可定义字符串。
  2. Pyth和Jelly的语法使得不需要在代码中明确表示输入(尽管由于非常不同的原因,正如Maltysen向我解释的那样))。

这些功能都不大可能出现在Pip 1中(我不喜欢不平衡定界符的美感,无点语法或隐式操作数似乎对我的infix表达式解析器来说太陌生了),但是我我可以打第三小提琴 即使“可读性”在打高尔夫球时极为相关,我还是认为这三个额外的字节使Pip程序一目了然变得容易理解-在我的书中,这是一个值得权衡的问题。

1虽然,Pip中的单字符字符串使用单个'定界符,这受CJam和Lisp中的引用的启发。


我不确定代码高尔夫球会增加可读性吗?不以字节为代价!
GreenAsJade '16

@GreenAsJade我希望很多人有同样的感觉。我只作一个区分:code golf!= golflang design。现在您可能会争辩说,相同的原则(越短越好)也适用于语言设计。我只是说,对我而言,可用性甚至美观考虑因素。
DLosc '16

制作高尔夫语言的专业提示:请勿使用infix
Cyoce's


pyth没有隐式的无点语法。它的工作方式与python几乎相同,因此可读性强但简短。另一方面,您对不平衡分隔符的评论是正确的
Maltysen




2

SpecBAS-28个字节

1 INPUT n: ?"\/"(ODD(n)+1)*n

ODD如果number为奇数,则返回1,然后将其用作索引以打印n次正确的字符。SpecBAS字符串必须从字符1开始添加1。


2

Java 8,56字节

(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);
}

2

其实是10个位元组

欢迎打高尔夫球。在线尝试!

;'\'/2(%I*

怎么运行的

       Implicit input of n
;      Duplicate n
'\'/   The strings "/" and "\"
2(%    n mod 2
I      If n mod 2, then "/", else "\"
*      Multiply by n. Implicit print at the end.
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.