休戦の日チャレンジ


28

今日、11月11日は、追memの日休戦の日、または退役軍人の日(国によって異なります)として知られ、軍隊のメンバーとそのサービスに対する反省と感謝の日です。第一次世界大戦で。の単純なASCIIアート出力を使用して、それについて考えてみましょう11/11

入力与えられn、出力のASCII技術の演出11/11即ちn単位身長。具体的には、それぞれ1が垂直パイプ||で構成され、スラッシュがスラッシュで構成され//、各文字が2つのスペースで区切られています。これは、出力幅を変えることを意味することに注意してください。たとえば、n=3以下のように、スラッシュの「下」は1左から2スペースですが、1右から4スペースであるため、スラッシュの上部が適切に整列し、1その右側に2つのスペースがあります。

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


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


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


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


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

等々。

入力

単一の正の整数、任意の便利な形式でn > 0

出力

11/11上記の規則と例に従って、のASCIIアート表現。文字が適切に整列している場合、先頭または末尾の改行またはその他の空白はオプションです。

ルール

  • 完全なプログラムまたは機能のいずれかが受け入れられます。関数の場合、出力する代わりに出力を返すことができます。
  • 標準的な抜け穴は禁止されています。
  • これはので、通常のゴルフルールがすべて適用され、最短のコード(バイト単位)が勝ちます。

回答:


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

誰かが正規表現で$'とを説明できますか$`?私は前にそれを見たことがなく、それをよりよく理解したいと思います。
ロバートヒックマン

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û}»、palendromizeは今ではより明白な理由で、適切ではないことがわかりました...そして、とにかく私のバイトカウントを速く打ちました。
魔法のタコUr

6

Perl、45バイト

@Gabriel Benamyのおかげで-9バイト

コードの47バイト+ -nフラグ用の1バイト。

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

-nEフラグを指定して実行:

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

変更することにより、4バイトの保存"|| ||""|| "x2、次に回す(2+$_)だけに$_
ガブリエルBenamy

割り当ての+( .. )周りにドロップすることもできると思います$@。少なくとも私のコンピューターで動作します。
ガブリエルベナミー

@GabrielBenamy確かに、ドロップできます+( .. )、ありがとう。しかし、私は変更することはできません"|| ||""|| "x2、私が間に2つのスペースを必要とするので||
ダダ

"|| "(それはいくつかの理由でここに正しくレンダリングではないです)、そしてあなたにその文字列複製しているパイプの後に二つのスペースを持っている"|| || "から余分な2つのスペースの世話をしている$"x(2+$_)
ガブリエルBenamy

@GabrielBenamyああ、それはSEフォーマットで、2つのスペース|| があったときに1つのスペースしか表示されませんでした。
ダダ

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ソリューションの移植。後のスペースと後の$*2つのスペースに注意してください||


3

V、30バイト

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

オンラインでお試しください!

いつものように、これはhexdumpです:

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

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はバッチで操作するのは難しいです、私が使用するxプレースホルダとしてSを出力時にそれらを交換、これは、好都合に私のコードのサイズを縮小します。sの目的の出力に設定することから開始しn=1nコマンドラインで渡されます)、必要に応じてスペースを挿入して、実際の値の最初の行を取得しn、文字列を印刷して、スラッシュを1文字ずつ左にシフトします。


3

BaCon、71バイト

1行の完全なBASICプログラム。

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

いいね!でスペースを削除することは可能1 TOですか?
DLosc

3

Common 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コール内のループでこれにアプローチすることにしました。このループは、最後の6つの要素を削除して(最後のsで)、最後にある他の実際のループ構造によって返されたコンテンツを反復処理しbutlastます。このループ構造によって返される値の内容は、スラッシュの前のパディングカウント、パディング文字(スペース)、スラッシュの後ろのパディングカウント、および最後に同じパディング文字で構成されます。

私はLispを初めて使いますが、ここには間違いなく改善の余地があることを理解しています。


あなたのソリューションをゴルフで試してみてください(不要な空白を削除し、識別子を短縮します)
cat

PPCGへようこそ!
AdmBorkBork

3

Python 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

@ mbomb007 1ではなく11の間に2つのスペースが必要です。これにより、等しくなります。
ケード

それはSEが台無しにしただけです。まだ1バイト短いです。repl.it/EViJ
mbomb007

@ mbomb007そのrepl.itページによると//、最後の行には3つのスペースがあり//、最初の行には2つのスペースがあります。どちらの場合も2つのスペースが必要です。
ケード

それからあなたの現在のプログラムは間違っています。
mbomb007

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

where SNスペースに対応します。

;{:`x
||  ||

ここで起こっている2つのことがあります。;{:文字列の変更に失敗するまで、この段階と最後の段階をループで実行する必要があることを示します。:このステージの結果は、各反復の後に印刷する必要があることを;示し、ループの(したがってプログラム全体の)最終結果を印刷しないことを示します。ステージ自体は、最初の反復でxsを置き換えるだけで|| ||(その後は何もしません)、必要な出力の最初の行が得られます(そして印刷します)。

   //
  // 

最後に、これ//は、の左に少なくとも3つのスペースが残っている場合、1文字を左にシフトし//ます。その後、前の段階(現在はxs がないため、現在の行のみを印刷する)に戻り、それから繰り返します。


2

ルビー、60バイト

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


1

ルビー、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

@ nedla2004評判が1,000に達すると(完全に卒業したサイトの場合は2,000)、完全な編集特権が得られます。それまでは、すべての編集は少なくとも6文字である必要があり、他のユーザーがより多くの担当者にレビューされます。私は1,000人以上の担当者を抱えているため、小さな編集をすぐに送信することができます。
DJMcMayhem

PPCGへようこそ!あなたは、の代わりに、コマンドライン入力を取ることによって、カップルのバイトを保存することができますread-host-param($a)1..$a|%{$s="|| ";$s*2+" "*($a-$_)+"// "+" "*$_+$s*2}
AdmBorkBork

ようこそ、編集、およびコマンドラインの提案に感謝します!
ベン

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文字/バイト

匿名のクロージャーと単純なループを使用してASCIIアートを標準出力に出力する、Groovyでの私の試みを次に示します。

{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))また、あなたは置き換えることによって、2つのバイトを保存することができます(e+1)-~e
ETHproductions
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.