Sチェーンを描く


27

バックグラウンド

私が若かったとき、私は奇妙な「S」の形を描く方法を教えられ、私は(クラスメートと一緒に)魅力的だと感じました。今日、私はそれを再発見し、それを描くための定型的なアプローチのために、興味深い挑戦につながる可能性があると考えました:P

「S」を描く

Sは、次の簡単な手順に従って描画できます。

まず、次のように3つの垂直線を2行描画します

| | |

| | |

次に、左上の線を下の中央線に接続し、上の中央を右下の線に接続して、

| | |
 \ \
| | |

最後に、現在描画されている画像の上と下を描画して、最終的に次のようにします。

  ^
 / \
| | |
 \ \
| | |
 \ /
  v

ご覧のとおり、これにより「S」字型になります。ただし、拡張すると(2行以上で描画)、非常に興味深いパターンが生成されます。あなたの仕事はこの興味深いパターンを再現することです。

仕事

整数whereを指定するとn >= 2、Sから出力nされる行を含むSを出力します。関数から出力が返され、標準メソッドで入力が取得される場合があります。画像全体と各行の両方の末尾/先頭の空白は問題ありません。ただし、「」が壊れないように、先頭の行スペースは一貫している必要があります。行のリストとして出力できます。

テストケース

input
output
---

2

  ^
 / \
| | |
 \ \
| | |
 \ /
  v

---

8
  ^
 / \
| | |
 \ \
| | |
 \ \
| | |
 \ \
| | |
 \ \
| | |
 \ \
| | |
 \ \
| | |
 \ \
| | |
 \ /
  v

---

10

  ^
 / \
| | |
 \ \
| | |
 \ \
| | |
 \ \
| | |
 \ \
| | |
 \ \
| | |
 \ \
| | |
 \ \
| | |
 \ \
| | |
 \ \
| | |
 \ /
  v

これはので、最短のコードが勝ちます!がんばろう、


13
ウィキペディアは呼び出すクールSを、とANの無限バージョンを呼び出すSS Chain
スティーブン・

行のリストとして出力できますか?
ミスターXcoder

@ Mr.Xcoderあなたは
共和党を率いる

@Stephen 10分間のグーグル検索で、これは表示されませんでした。私は質問の名前を編集します
coinheringaahing caird

P:私はそれをされている可能性がある画像、検索@cairdcoinheringaahing
スティーブン・

回答:



10

C#(.NET Core)73 69 66 64 62バイト

Barodusのおかげで、バイトが2つ少なくなり、perlのような外観になりました。intの使用を考えていませんでしたか?ヌルの場合。

n=>$@"  ^
 / {string.Join(@"\
| | |
 \ ",new int?[++n])}/
  v"

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


1
これが既存のC#の答えのゴルフであった場合、私はそれを知ることができなかったでしょう。よくやった:
ETHproductions

何ができるのか説明できますnew string[n+1]か?今まで見たことがありません。
イアンH.

空の文字列の配列を作成します。文字列でハックを使用しました。Join、別名join {""、 ""、 ""、 ""}をセパレータ "\ \ n | | | \ n \"
私の代名詞はmonicareinstate

@someone Woah、私は以前にこのトリックを認めたことはありません。すごくかっこいい!(また、私の悪いことです new string[n+1]が、配列宣言ではなく、ある種のトリッキーな文字列コンストラクターでした-.-)
Ian H.

6

Pythonの3、48の 56 59 61 バイト

lambda k:'  ^\n / %s/\n  v'%('\\\n| | |\n \ '*k)

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


単一のバックスラッシュをエスケープ解除することにより、2バイトを節約できます。
L3viathan

@ L3viathan更新するだけ
ミスターXcoder


@ L3viathanそれは正しくありません。余分\ \
ミスターXcoder

TIO:はい。私の端末では:いいえ。
L3viathan

6

05AB1E27 26バイト

…^
/ð"\
| | |
\ "I×…/
vJ.c

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

代替27バイトバージョン

'^…/ \©IF…| |û…\ \}\®R'v».c

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

説明

'^                             # push "^"
  …/ \©                        # push "/ \" and store a copy in register
       IF                      # input times do:
         …| |û                 # push "| | |"
              …\ \             # push "\ \"
                  }            # end loop
                   \           # discard top of stack (the extra "\ \")
                    ®R         # push "/ \" reversed = "\ /"
                      'v       # push "v"
                        »      # join stack on newlines
                         .c    # center each row

5
あなたのコードは私には少し象のように見えます:)
Wojowu

私の答えがあなたのものにどれほど近づいたかは、文字通り恐ろしいことです'^…/ \©IF„| ûû„\ û}\®R'v).C
魔法のタコUr

6

Japt34 25 23バイト

" ^ /{ç'\²i|³1}/ v"¬¸ò5

オンラインでテストしてください!行の配列として出力。-R改行に参加するためにフラグが追加されました。(@Shaggyに感謝)

最初の 2 目の試みは、改善可能かもしれません...

使い方

" ^ /{ ç'\²  i |³  1}/ v"¬ ¸  ò5
" ^ /{Uç'\p2 i'|p3 1}/ v"q qS ò5   Ungolfed
                                   Implicit: U = input number
        '\p2                       Repeat a backslash twice, giving "\\".
             i     1               Insert at index 1
              '|p3                   3 vertical bars. This gives "\|||\".
      Uç                           Make U copies of this string. U = 2: "\|||\\|||\"
" ^ /{              }/ v"          Insert this into this string.    " ^ /\|||\\|||\/ v"
                         q qS      Split into chars; join on spaces."  ^   / \ | | | \ \ | | | \ /   v"
                              ò5   Split into rows of length 5.    ["  ^  "," / \ ","| | |"," \ \ ","| | |"," \ / ","  v"]
                                   Joining on newlines gives "  ^  
                                                               / \ 
                                                              | | |
                                                               \ \
                                                              | | |
                                                               \ /
                                                                v"

木炭を破ってSOGLを結ぶ?すばらしい仕事です!
シャギー

ちなみに、行の配列を出力できるので、最後の2文字を捨てることができます。
シャギー

@Shaggyそれはすごいです、今は勝ちです!
ETHproductions

私たちは最近うまくやっています:)
シャギー

6

SOGL V0.1226の 25 18 バイト

°I-‘*"∑ūCƨΩ)¹‘@∑5n

ここで試してみてください!

ETHproductionsのJapt回答と同じ戦略を使用します

説明:

..‘           push "\|||\"
   *          repeat input times
    "..‘      push " ^ /ŗ/ v ", with ŗ replaced with POP. The reason why there's a trailing
              space is because otherwise it didn't have enough repeating characters to compress
        @∑    join with spaces
          5n  split to line lengths of 5

2
push "|" and " "一体何なのか
スティーブンH.

1
@StevenHewittこれらは、実際には2つの組み込み関数ですが、私はそれがすぐに一緒に使用されます別のものへの必要はありませんとは思わないので、私は(私は他のものとそうであるように)、それらを一緒に参加しました
dzaima

5

JavaScript(ES6)、60バイト

n=>`  ^
 / \\
${`| | |
 \\ \\
`.repeat(n-1)}| | |
 \\ /
  v`

テストスニペット


1
57:(n=>' ^\n /${' \\ \\\n| | |\n'.repeat(n).slice(2)} \\ /\n v'バック
ティック

5

27 26 25バイト

カルロス・アレホのおかげで-1バイト。ASCIIのみのおかげで-1バイト。

  ^⸿ / ×\⸿| | |⸿ \ N/⸿  v

オンラインでお試しください!リンクは詳細バージョンです。#charcoal-verbose-obfucation


1
(文字列を追加する代わりに)Printを呼び出して、次を使用するだけで1バイトを保存できます\r: `^⸿/×\⸿| | |⸿\ Iθ /⸿v`。詳細バージョン
チャーリー

ああ... \r改行を正しく取得する方法として覚えておく必要があります。ありがとう!
完全に人間の




3

実際には、49バイト

"| | |"@α;lD" \ \"@α@Z♂ii"  v"" \ /"))" / \""  ^"

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

説明:

"| | |"@α;lD" \ \"@α@Z♂ii"  v"" \ /"))" / \""  ^"
"| | |"@α                                          push a list containing n copies of the vertical lines
         ;lD" \ \"@α                               push a list containing n-1 copies of the diagonal connections
                    @Z♂i                           interleave
                        i                          flatten
                         "  v"" \ /"))             make the bottom
                                      " / \""  ^"  make the top

3

05AB1E、38バイト

…| |ûU"  ^
 / \"XI<F„ \2×X}" \ /
  v"»

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

…| |                         # Push "| |"
    û                        # Palindromize
     U                       # Store in X
      "..."X                 # Push the top three rows
            I<F      }       # One less than input times do:
               „ \           #   Push " \"
                  2×         #   Concatenate that with itself
                    X        #   Push "| | |"
                      "..."  # Push the last two rows
                           » # Join stack with newlines


3

C#(.NET Core)101 77 73バイト

i cri everytimのおかげで24バイト節約できました!Kevin Cruijssenの
おかげで4バイト節約できました

n=>{var s="  ^\n / ";for(;n-->0;s+="\\\n| | |\n \\ ");return s+"/\n  v";}

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

通常どおり、C#での文字列の繰り返しは苦痛です。



@icrieverytimああ、もちろん、それはましだ。
イアンH.

およびに変更--n>=0してn-->0、いくつかのバイトを保存できます。s+="/\n v";return s;return s+"/\n v";
ケビンCruijssen

1
@KevinCruijssenありがとう、修正!
イアンH.

3

網膜、38バイト

.+
$*
1
¶|||¶x\\
^
 ^¶x/\
.$
/¶ v
x?
 

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

各行の先頭のスペースと末尾のスペースの列を印刷します。

説明

主なバイト節約は、すべてのリテラル部分のスペースを省略し、最後にスペースを挿入することから得られます。この図は、2つの非スペースが隣り合わせにならないように構成されているため、すべてを削除するだけで、最後にすべての位置にスペースを挿入することで形状をほぼ修正できます。

^
/\
|||
\\
|||
\/
v

になる:

 ^ 
 / \ 
 | | | 
 \ \ 
 | | | 
 \ / 
 v 

インデントを除いて、それはほとんど正しいです。二つのスペースが不足しています。実際に修正するのは簡単です。それぞれの前に明示的なスペースを挿入すると、最後に2つのスペースが追加されるためです。スラッシュが含まれる行は、追加のスペースが1つだけ必要なため、扱いにくいです。これを修正するために、プレースホルダー文字を挿入します()。末尾にスペースを挿入するとき、空の一致ごとにスペースを挿入するだけでなく、オプションでそれを一致させます。つまり、の前にスペースを挿入する代わりに、それ自体が置き換えられます。そして、その後もまだ空の一致があります。つまり、すべて^vxxxxxx何も変更せずに、スペースを1つだけ追加します。したがって、設定したいのはこれです:

 ^
x/\
|||
x\\
|||
x\/
 v

望ましい結果が得られます。コードは次のとおりです。

.+
$*

入力を単項に変換します。

1
¶|||¶x\\

and (および先頭の改行)でそれぞれ1を2行に変換します。|||x\\

^
 ^¶x/\

最初の二行Inser ^x/\

.$
/¶ v

x\\最後\をに変更/し、で行を追加することにより、最終を修正しvます。

x?
 

xマッチまたは空のマッチをスペースに置き換えます。


きちんとしたアプローチ。私は自分のPipソリューションにスペースで結合を使用する方法を見つけようとしていましたが、異なる行の先頭スペースの数が異なるため、うまくいきませんでした。
DLosc


2

Pyth、40バイト

K" / \ ""  ^"Kj+b+*2+d\\b*Q]*3"| "_K"  v

スティーブン・ヒューイットのものとかなり似ていますが、独立して開発されました。

オンラインで試す

説明

K" / \ ""  ^"Kj+b+*2+d\\b*Q]*3"| "_K"  v
K" / \ ""                                 Set K = " / \ "
        "  ^"                       "  v  Draw the end points.
             K                    _K      Draw the slants.
                         *Q]*3"| "        Draw the vertical bars...
              j+b+*2+d\\b                 ... interspersed with slants.


2

網膜、45バイト

これは非常にシンプルなソリューションです。

.+
$*
^1
  ^¶ /x
$
 \ /¶  v
1
 \x
x
 \¶| | |¶

オンラインで試す

代わりにアートのインデックスを1にすることができる場合、少し短くなります(44バイト):

.+
  ^¶ /x$0$*1
$
 \ /¶  v
1
 \x
x
 \¶| | |¶

2

ピップ45 42 33バイト

"  ^
 / "."\
| | |
 \ "Xa."/
  v"

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

説明

コードは本当にシンプルですが、改行があるため読みにくくなっています。構造を確認するより良い方法は次のとおりです。

"prefix" . "repeated" X a . "suffix"

Sチェーンで繰り返される要素は

   \
| | |
 \

これをリテラル文字列として取得し、それをa何回も繰り返します(a最初のコマンドライン引数です)。次に、プレフィックスを追加します。

  ^
 /

そしてサフィックスを追加します:

   /
  v

そして印刷。

(> <>プログラムのように見える結果が好きです。)


これはアドベンチャータイムのランピースペースプリンセスのように見えます:)
YSC




1

PowerShellの83、57のバイト

"  ^
 / \"
1..--$args[0]|%{"| | |
 \ \"}
"| | |
 \ /
  v"

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

@AdmBorkBorkの提案によると、

  • for番号範囲を使用して簡略化されています。
  • を置き換え;、文字列を結合しました。
  • 不要な変数定義を削除しました。

forを使用してループをたくさんゴルフできます1..--$args[0]|%{ }
AdmBorkBork

また、隣接する文字列の間にリテラルの改行を使用して節約することができ";"$s完全に削除する方が安価です。57バイト
AdmBorkBork

スリック。改行の保存が好きです。おかしなことに、1..$args機会を逃しました。このサイトに正しいエチケットがあるかどうかはわかりません。回答に変更を加えてクレジットしますか、それとも別の回答としてソリューションを投稿しますか?
ルート

変更の編集とクレジットの付与は適切なエチケットです。PPCGへようこそ。
AdmBorkBork


1

ゼリー、32バイト

LynnのPythonソリューションの退屈なポート。

“\¶| | |¶ \ ”ẋṭ“  ^¶ / ”;“/¶  v”

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

説明:

“\¶| | |¶ \ ”ẋṭ“  ^¶ / ”;“/¶  v”    Example input: 5
“\¶| | |¶ \ ”                       Literal string "\¶| | |¶ \ " (¶ = newline). Result: "\¶| | |¶ \ "
             ẋ                      Repeat as many times as the (implicit) input. Result: "\¶| | |¶ \ \¶| | |¶ \ \¶| | |¶ \ \¶| | |¶ \ \¶| | |¶ \ "
              ṭ                     Tack that on the end of...
               “  ^¶ / ”            ...the string "  ^¶ / ". Result: "  ^¶ / \¶| | |¶ \ \¶| | |¶ \ \¶| | |¶ \ \¶| | |¶ \ \¶| | |¶ \ "
                        ;           Append...
                         “/¶  v”    The string "/¶  v". Result: "  ^¶ / \¶| | |¶ \ \¶| | |¶ \ \¶| | |¶ \ \¶| | |¶ \ \¶| | |¶ \ /¶  v"
                                    Implicit print

1

実際には、30バイト

これはETHproductionsのJapt answerと同じ原理で機能します。この場合、余分なスペースが後で追加され、暗黙的な印刷のために文字列全体が5行に分割されます。オンラインでお試しください!

"\|||\"*" ^ /"+"/ v"@+#' j5@╪i

アンゴルフ

            Implicit input.
"\|||\"*    Add the middle portion and multiply that by the input.
" ^ /"+     Append the top.
"/ v"@+     Append the bottom.
#           Convert into a list of strings
' j         Join with spaces.
5@╪         Split into a list of length-5 strings.
i           Flatten list onto the stack for implicit printing with newlines.

Megoを自分の言語でアウトゴルフする素晴らしい仕事です!

1

ゼリー25 23バイト

これは次と同じ原理で機能します ETHproductionsのJapt answer場合、余分なスペースが後で追加され、文字列全体が長さ5の文字列に分割されてから印刷されます。オンラインでお試しください!

編集: Sチェーンの上部と下部をゴルファーのように結合する方法があることを知っていました。-2バイトのOutgolferのErikに感謝します。

“\|||\”ẋ“ ^ /“/ v”jKs5Y

アンゴルフ

                Left argument: n
“\|||\”ẋ        Repeat the middle portion n times.
“ ^ /“/ v”j     Append the top and bottom.
K               Join with spaces.
s5              Split into a list of length-5 strings.
Y               Print the strings with linefeeds.

“\|||\”ẋ“ ^ /“/ v”jKs5Y
エリックアウトゴルファー

1

、25バイト

↘^\¶/¶G→⁵↓⊕⊗N←⁵|¶ \↗¶\¶v/

オンラインでお試しください!リンクは、コードの詳細バージョンです。


面白いのは、完全に異なるアプローチを使用して、他のチャコールの答えが同じバイトカウントであるということです。しかし、私はあなたのものがより好きです。もう1つはハードコーディングに近いですが、実際には炭の強さを使用しています。
ケビンCruijssen

@KevinCruijssenあなたは強さを言いますが、それは本当に斜めに印刷されるはずです。悲しいことに、私ができる最高のことは29バイト↘^\|¶/|\|¶|F⊖N↘\|\|¶|↘\|/¶|\v
ニール


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.