停战日挑战


28

今天,11月11日,被称为纪念日停战日退伍军人节(取决于国家),是对军人及其服役的反思和感激之日,特别是开始反映欧洲敌对行动的结束在第一次世界大战中。让我们用一个简单的ASCII美术输出来反思一下11/11

给定一个输入n,输出的一个ASCII艺术再现11/11n单位高。具体来说,每个字符1由垂直管道||组成,斜线由斜线组成//,并且每个字符相隔两个空格。请注意,这意味着输出宽度会发生变化-例如,在n=3下面的内容中,请查看斜杠的“底部”如何1从左到右两个空格,但1从右到右四个空格,以便斜杠的顶部正确排列,并且1在其右边是两个空格。

n = 1
||  ||  //  ||  ||


n = 2
||  ||   //  ||  ||
||  ||  //   ||  ||


n = 3
||  ||    //  ||  ||
||  ||   //   ||  ||
||  ||  //    ||  ||


n = 4
||  ||     //  ||  ||
||  ||    //   ||  ||
||  ||   //    ||  ||
||  ||  //     ||  ||


n = 5
||  ||      //  ||  ||
||  ||     //   ||  ||
||  ||    //    ||  ||
||  ||   //     ||  ||
||  ||  //      ||  ||

等等。

输入值

任何方便格式的一个正整数,n > 0

输出量

11/11按照上述规则和示例的ASCII艺术形式表示。前导/尾随换行符或其他空格是可选的,前提是这些字符必须正确排列。

规则

  • 完整的程序或功能都是可以接受的。如果是函数,则可以返回输出而不是打印输出。
  • 禁止出现标准漏洞
  • 这是因此所有常用的高尔夫规则都适用,并且最短的代码(以字节为单位)获胜。

Answers:


4

果冻,24 字节

⁾| Ḥẋ2µ,Ṛðj
⁶ẋṖ;⁾//ṙḶÇ€Y

TryItOnline!

怎么样?

⁾| Ḥẋ2µ,Ṛðj - Link 1, join two "11"s with: middle
⁾|          - string literal: "| "
   Ḥ        - double          "||  "
    ẋ2      - repeat twice    "||  ||  "
      µ     - monadic chain separation
       ,    - pair with
        Ṛ   - reversed       ["||  ||  ","  ||  ||"]
         ð  - dyadic chain separation
          j - join with input "||  ||  middle  ||  ||"

⁶ẋṖ;⁾//ṙḶÇ€Y - Main link: n       e.g. 5
⁶            - literal ' '        ' '
 ẋ           - repeat n times     "     "
  Ṗ          - remove last entry  "    "
   ;         - concatenate with
    ⁾//      - literal "//"       "    //"
        Ḷ    - lowered range(n)   [0,1,2,3,4]
       ṙ     - rotate left        ["    //","   // ","  //  "," //   ","//    "]
         Ç€  - call last link (1) as a monad for €ach
           Y - join with line feeds

21

JavaScript(ES6),57个字节

n=>" ".repeat(n).replace(/./g,"||  ||  $'//$`  ||  ||\n")

2
什么...忘记我的答案,这是天才。我应该每次都停止走常规路线:P
ETHproductions

真滑 好答案。
AdmBorkBork,2016年

有人可以在正则表达式中解释$'$`吗?我以前从未见过,很想更好地理解它。
罗伯特·希克曼

1
@RobertHickman它们引用比赛前后的字符串部分($&即比赛本身)。
尼尔

@尼尔,谢谢!你每天学习新的东西 :)
罗伯特·希克曼

7

05AB1E,24字节

<ðׄ//J¹FD"  ||"2׊««,À

在线尝试!

说明

                          # implicit input n
<ð×                       # push n-1 spaces
   „//J                   # join with "//"
       ¹F                 # input times do:
         D                # duplicate top of stack
          "  ||"2×        # push "  ||  ||"
                  Â       # push "||  ||  "
                   Š      # move the top of the stack down 2 places on the stack
                    ««    # concatenate the top 3 elements of the stack
                      ,   # print with newline
                       À  # rotate top of stack left

先前的26字节版本

F"||  "2שð¹N-<ׄ//ðN×®RJ,

在线尝试!


2
太快了!
AdmBorkBork

" "×"//"«.s¦R"|| || "s«vyû}»,事实证明,palndromize不合适,因为现在显而易见的原因……而且无论如何,您都更快地击败了我的字节数。
魔术章鱼缸

6

Perl,45个字节

-9个字节,感谢@Gabriel Benamy

47个字节的代码+ 1个字节的-n标志。

say$@="||  "x2,$"x$_,"//",$"x++$.,$@while$_--

-nE标志运行:

perl -nE 'say$@="||  "x2,$"x$_,"//",$"x++$.,$@while$_--' <<< 5

通过更改"|| ||""|| "x2,然后(2+$_)变成just 来节省4个字节$_
Gabriel Benamy 16-11-11

我想你也可以去掉+( .. )了左右$@分配。至少可以在我的计算机上使用。
加布里埃尔·贝纳米

@GabrielBenamy我确实可以删除+( .. ),谢谢。但是我不能更改"|| ||"为,"|| "x2因为在之间需要两个空格||
达达

"|| "管道后有两个空格(由于某种原因,它在此处无法正确显示),并且您正在复制该字符串"|| || ",其中包含以下内容的额外两个空格:$"x(2+$_)
Gabriel Benamy

@GabrielBenamy哦,谢谢,那将是SE格式,显示只有两个空格|| 时才显示一个空格。
达达

5

JavaScript(ES6),88 77字节

f=(n,i=n)=>i--?`||  ||  ${" ".repeat(i)}//${" ".repeat(n+~i)}  ||  ||
`+f(n,i):""

递归方法可能不是 最短的


.map 版本(88字节):

n=>[...Array(n)].map((_,i)=>`||  ||  ${" ".repeat(n+~i)}//${" ".repeat(i)}  ||  ||`).join`
`

数组理解(86字节):

n=>[for(_ of Array(i=n))`||  ||  ${" ".repeat(--i)}//${" ".repeat(n+~i)}  ||  ||`].join`
`

for 循环版本(89字节):

n=>{for(a="",i=n;i--;a+=s+" ".repeat(i+2)+`//${" ".repeat(n-i+1)+s}
`)s="||  ||";return a}

.replace 版本(85字节):

n=>`||  ||  q  ||  ||
`[r="repeat"](n).replace(/q/g,_=>" "[r](--i)+"//"+" "[r](n+~i),i=n)

4

视网膜,29字节

.+
$* 
.
xx$'//$`  xx¶
x
||  

我的JavaScript解决方案的端口。注意后面的空格$*和后面的两个空格||


3

V,30个字节

4i||  2Bi//  Àé XÀ«ñÄf/é Elx

在线尝试!

像往常一样,这是一个十六进制转储:

0000000: 3469 7c7c 2020 1b32 4269 2f2f 2020 1bc0  4i||  .2Bi//  ..
0000010: e920 58c0 abf1 c466 2fe9 2045 6c78       . X....f/. Elx

我认为您可以将初始部分更改为5i|| <esc>3b2r/。但是,您所处的位置会稍有不同,我看不懂V,所以不确定是否很重要。
nmjcman101 '16

3

批处理,130字节

@set s=xx//  xx
@set l=@for /l %%i in (2,1,%1)do @call
%l% set s=%%s://= //%%
%l%:l
:l
@echo %s:x=^|^|  %
@set s=%s: //=// %

不是我的JavaScript解决方案的一部分。由于|s在Batch中难以操作,因此我将xs用作占位符并在输出中替换它们,这也方便地减小了我的代码大小。首先,将设置s为所需的输出n=1n在命令行中传递),然后根据需要插入空格以获取的实际值的第一行n,然后循环遍历打印字符串并将斜杠每次左移一个字符。


3

培根,71字节

一行完整的BASIC程序。

INPUT n:FOR x=1 TO n:?"||  ||",SPC$(n-x+2),"//",SPC$(x+1),"||  ||":NEXT

真好!是否可以删除其中的空间1 TO
DLosc '16

3

普通Lisp,216字节

我要马上说,这是对挑战的可怕解决方案。但是,它有效,我很累。

(defun arm (n) (format t "~{||  || ~v,,,vA//~v,,,vA ||  ||~%~}" (butlast (butlast (butlast (butlast (butlast (butlast (loop for i from 1 to (+ n 1) append `(,(- (+ n 1) i) #\Space #\Space ,i #\Space #\Space))))))))))

用法:

* (arm 4)
||  ||     //  ||  ||
||  ||    //   ||  ||
||  ||   //    ||  ||
||  ||  //     ||  ||

由于某种原因,我没有理智地做任何事情,而是决定在format调用内部使用循环来实现。此循环在最后循环遍历其他实际循环构造返回的内容,并删除了最后六个元素(因此重复butlast s)。此循环构造返回的值的内容包括斜杠前面的填充计数,填充字符(空格),斜杠后面的填充计数,最后是相同的填充字符。

我对Lisp相当陌生,我知道这里肯定有很多改进的空间。


你应该尝试打高尔夫球解决方案(消除uneeded空白,缩短标识符)

欢迎来到PPCG!
AdmBorkBork

3

蟒蛇2,76 75 71字节

仍在使用较短的版本,虽然还不错。

n=input()
k='||  ||'
for i in range(n):print k,(n-i)*' '+'//'+' '*-~i,k

感谢mbomb007遇到错误!


缩短1个字节:x='|| '*2;print x+(n-i)*' '+'//'+' '*i+x[::-1]
mbomb007 '16

@ mbomb007在11s之间需要两个空格,而不是1。这将使其相等。
卡德,2016年

那只是SE搞砸了。还短一个字节。repl.it/EViJ
mbomb007 '16

@ mbomb007根据该repl.it页//,在最后一行之前有三个空格,在//第一行之后有两个空格。在两种情况下都应为两个空格。
卡德,2016年

那么您当前的程序是错误的,因为那是您的工作。
mbomb007 '16

2

R,86个字节

只是一个简单的for循环方法:

x="||  ||";n=scan();for(i in 1:n)cat(x,rep(" ",2+n-i),"//",rep(" ",1+i),x,"\n",sep="")

2

视网膜,40字节

.+
x $&$* //  x
;{:`x
||  ||
   //
  // 

在线尝试!

说明

.+
x $&$* //  x

这将输入N变成

x S//  x

其中S对应于N空格。

;{:`x
||  ||

这里发生两件事。;{:指示此阶段和最后一个阶段应循环运行,直到它们无法更改字符串为止。:表示此阶段的结果应在每次迭代之后被打印和;表示循环的最终结果(并因此整个程序的)应该被打印。该阶段本身在第一次迭代时仅将替换为xs || ||(之后不执行任何操作),因此我们现在有了所需输出的第一行(并打印出来)。

   //
  // 

最后,//如果仍至少剩余三个空格,则这会将一个字符向左移动//。之后,我们返回上一个阶段(由于没有更多xs ,现在仅显示当前行),然后重复。


2

Ruby,60个字节

->n{n.times{|i|puts (a='||  || ')+' '*(n-i)+'//  '+' '*i+a}}


1

Ruby,76 74 73字节

x="||  ||";n=gets.to_i;puts (1..n).map{|i|x+" "*(n-i+2)+"//"+" "*(i+1)+x}

作为一个函数,它占用73 72个字节,包括定义:

def f n,x="||  ||";(1..n).map{|i|x+" "*(n-i+2)+"//"+" "*(i+1)+x}*?\n;end

1

Powershell,66个字节

$a=read-host;1..$a|%{$s="||  ";$s*2+" "*($a-$_)+"// "+" "*$_+$s*2}

欢迎光临本站!
DJMcMayhem

@DrMcMoylex我只是想知道,我看到了这个答案,打算做与您相同的事情,但是它说我在编辑中没有做足够的修改。您如何做到的?
nedla2004 '16

@ nedla2004一旦您拥有1,000个信誉(或者对于完全毕业的网站,则为2,000个),您将获得完整的编辑特权。在此之前,您所有的编辑必须至少包含6个字符,并且其他代表还会对其进行复审。由于我的代表人数超过1000,因此我可以立即提交小的修改内容。
DJMcMayhem

欢迎来到PPCG!你可以通过命令行输入,而不是保存几个字节read-host-param($a)1..$a|%{$s="|| ";$s*2+" "*($a-$_)+"// "+" "*$_+$s*2}
AdmBorkBork

感谢您的欢迎,编辑和命令行建议!
2016年

1

C#,150字节

打高尔夫球:

string A(int n){string a="",b= "||  ||";for(int i=0;i<n;i++)a+=b+"  //  ".PadLeft(5+n-i,'\0')+string.Concat(Enumerable.Repeat(" ",i))+b+"\n";return a;

取消高尔夫:

public string A(int n)
{
  string a = "", b = "||  ||";
  for (int i = 0; i < n; i++)
    a += b + "  //  ".PadLeft(5 + n - i, '\0') + string.Concat(Enumerable.Repeat(" ", i)) + b + "\n";
  return a;
}

测试:

Console.WriteLine(new ArmisticeDayChallenge().A(11));

输出:

||  ||            //  ||  ||
||  ||           //   ||  ||
||  ||          //    ||  ||
||  ||         //     ||  ||
||  ||        //      ||  ||
||  ||       //       ||  ||
||  ||      //        ||  ||
||  ||     //         ||  ||
||  ||    //          ||  ||
||  ||   //           ||  ||
||  ||  //            ||  ||

1

Groovy,63个字符/字节

这是我对Groovy的尝试,使用匿名闭包和简单循环将ASCII艺术作品打印到标准输出:

{n->n.times{println'|| '*2+' '*(n-it-1)+'//'+' '*it+' ||'*2}}

您可以在这里在线尝试。只需单击“在控制台中编辑”,然后单击“执行脚本”。

尝试做同样的事情并返回一个字符串而不是打印,我无法得到少于71个字节的信息:

{n->a='';n.times{a+='|| '*2+' '*(n-it-1)+'//'+' '*it+' ||'*2+'\n'};a}


0

Python 3,78个字节

a="||  ||"
def m(n):
    for e in range(n):print(a," "*(n-e),"//"," "*(e+1),a)

仍在尝试缩短...


欢迎来到PPCG!您是否可以将移到for与同一行上def?(就像这样:def m(n):for e in range(n):print(a," "*(n-e),"//"," "*(e+1),a))此外,还可以通过更换节省两个字节(e+1)-~e
ETHproductions 2016年
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.