プログラマーとして、あなたはおそらくスラッシュとバックスラッシュを聞いたことがあるでしょう。しかし、あなたはダウンスラッシュを聞いたことがありますか?それは、あなたがたくさんのスラッシュを取り、それらの端をつなぎ、それらを引き下ろすときです。
今日の課題では、純粋にスラッシュで構成される文字列を受け取り、それらを結ぶ線で下向きに描かれたすべてのスラッシュを出力するプログラムまたは関数を作成する必要があります。例を見ると、これはより明確になります。文字列を指定すると\\\//\/\\
、次を出力する必要があります。
\
\
\
/
/
\
/
\
\
いくつかの説明を次に示します。
行ごとに1つのスラッシュが必要です。
最初の行には、先頭に0個のスペースがあります。
スラッシュの各ペアに対して:
それらが互いに異なる場合、それらは同じ列に描画されます。たとえば、次のように
\/
なります。\ /
それらが同じ文字である場合、下の方が指す方向にあり、バックスラッシュの場合は右に移動し、スラッシュの場合は左に移動します。だから
\\//
与える\ \ / /
出力の視覚的な外観が変わらない限り、各行には余分な末尾の空白があります。最大1つの末尾および先頭の改行も使用できます。余分な先行スペースは使用できません!
これをより簡単に保つために、文字列に含まれるスラッシュが多すぎることはないと想定できます。言い換えると、入力のプレフィックスにはバックスラッシュよりも多くのスラッシュが含まれないため、\\////
またはのような入力//
は与えられません。これは、すべての入力がバックスラッシュで始まることも意味します。
入力が文字列リテラルとして取得される場合、必要に応じて円記号をエスケープできます。また、空の入力や、スラッシュ以外の文字を含む入力を処理する必要はありません。
いつものように、これはコードゴルフの挑戦なので、これがかなり難しい言語を選んだとしても、最短の解決策を可能にするようにしてください。バイトを削除するために使用した興味深いテクニックを説明するためのボーナスポイント!
例
#Input
\\\\\\\\\\\
#Output
\
\
\
\
\
\
\
\
\
\
\
#Input
\\\//\\/\//\\///
#Output
\
\
\
/
/
\
\
/
\
/
/
\
\
/
/
/
#Input
\/\/\/
#Output
\
/
\
/
\
/