ASCII-Sockを編んでください


15

前書き

簡単に言えば、数日前に誤って靴下を編み始めたのですが、プレーンステッチのかなり論理的な構造からアイデアが生まれました。

入力

入力は、範囲内の偶数の整数Nです[2,30]

出力

出力は明らかに靴下です。

構造

プレーンステッチのみを使用するvため、下向きのステッチと>右側のステッチにのみ使用します。以下の例を使用して、完全な構造を説明しN=8ます。

vvvvvvvv
vvvvvvvv
vvvvvvvv
vvvvvvvv
vvvvvvvv
vvvvvvvv
vvvvvvvv
vvvvvvvv
vvvvvvvv
vvvvvvvv
vvvvvvvv
vvvvvvvv
vvvvvvv>>>
vvvvvv>>>>>>
vvvvv>>>>>>>>>
vvvv>>>>>>>>>>>>
vvvv>>>>>>>>>>>>>>>>>>>>>>>>
vvvv>>>>>>>>>>>>>>>>>>>>>>>>>>
vvvv>>>>>>>>>>>>>>>>>>>>>>>>>>
vvvv>>>>>>>>>>>>>>>>>>>>>>>>
  • 最初のブロックは上部です。幅Nと高さがありますN*1.5
  • その後、かかとが始まります。幅になるvまで、右側から行ごとに1を引きますN/2。次にN/2N/2下の幅の行を追加して、下向きのニットを完成させます。N/2 + 1幅を持つ行の合計を与えることに注意してくださいN/2

最初の部分:

vvvvvvvv    //begin with width N
vvvvvvvv
vvvvvvvv
vvvvvvvv
vvvvvvvv
vvvvvvvv
vvvvvvvv
vvvvvvvv
vvvvvvvv
vvvvvvvv
vvvvvvvv
vvvvvvvv    // N*1.5 times
vvvvvvv     // reduce
vvvvvv
vvvvv
vvvv        // till here
vvvv        // repeat N/2 times
vvvv
vvvv
vvvv
  • さて、サイドワードのニットが始まります。最初の縮小された行から始め>、幅ができるまで塗りつぶし、Nさらに2 行追加します。N/2幅を持つ最初の行を含むそのプロセスを続行します
  • そのレベルまでの行を埋め、それにN*1.5時間>を追加します
  • 外側の部分をそのままにして、最初の行の下に追加し、>'s終了するまでさらに2つ追加します

第二部:

vvvvvvvv
vvvvvvv>>>  //fill to N and add two >
vvvvvv>>>>>>     //repeat
vvvvv>>>>>>>>>
vvvv>>>>>>>>>>>>   //till here
vvvv>>>>>>>>>>>>>>>>>>>>>>>>       //fill to the row above and add N*1.5 times >
vvvv>>>>>>>>>>>>>>>>>>>>>>>>>>     //add two more '>' than the row above
vvvv>>>>>>>>>>>>>>>>>>>>>>>>>>     //add two more '>' than the row beneath
vvvv>>>>>>>>>>>>>>>>>>>>>>>>

ルール

末尾の新しい行は問題ありません。

大文字または小文字を選択できますVが、一貫性が必要です。

これはので、バイト単位の最短コードが勝ちです。

テストケース

N=2
vv
vv
vv
v>>>
v>>>>>>

N=4
vvvv
vvvv
vvvv
vvvv
vvvv
vvvv
vvv>>>
vv>>>>>>
vv>>>>>>>>>>>>
vv>>>>>>>>>>>>

N=6
vvvvvv
vvvvvv
vvvvvv
vvvvvv
vvvvvv
vvvvvv
vvvvvv
vvvvvv
vvvvvv
vvvvv>>>
vvvv>>>>>>
vvv>>>>>>>>>
vvv>>>>>>>>>>>>>>>>>>
vvv>>>>>>>>>>>>>>>>>>>>
vvv>>>>>>>>>>>>>>>>>>

N=12
vvvvvvvvvvvv
vvvvvvvvvvvv
vvvvvvvvvvvv
vvvvvvvvvvvv
vvvvvvvvvvvv
vvvvvvvvvvvv
vvvvvvvvvvvv
vvvvvvvvvvvv
vvvvvvvvvvvv
vvvvvvvvvvvv
vvvvvvvvvvvv
vvvvvvvvvvvv
vvvvvvvvvvvv
vvvvvvvvvvvv
vvvvvvvvvvvv
vvvvvvvvvvvv
vvvvvvvvvvvv
vvvvvvvvvvvv
vvvvvvvvvvv>>>
vvvvvvvvvv>>>>>>
vvvvvvvvv>>>>>>>>>
vvvvvvvv>>>>>>>>>>>>
vvvvvvv>>>>>>>>>>>>>>>
vvvvvv>>>>>>>>>>>>>>>>>>
vvvvvv>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
vvvvvv>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
vvvvvv>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
vvvvvv>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
vvvvvv>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
vvvvvv>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

2
末尾の改行でいいのですが?(また、どのように誤って靴下を編み始めるのですか?)
グレッグマーティン

3
@GregMartinは私の祖母を訪問し、彼女は私に尋ねました。彼女にノーと言うのは難しいので、ここで私たちは行きます:) 2日前に最初のものを終えました。かなり良いと思いますが、作業量を過小評価していました。だから誰かがあなたのために靴下を作ったら幸せです。
izlin

使用できますvか、V交換可能ですか?とりあえずそれvが許可されている唯一のものであると仮定しますが、許可Vするとバイト数が影響を受けます
黄金比

@GoldenRatioルールを変更しましたが、現在は両方が許可されています。
izlin

@GurupadMamadapur「入力」で読むことができるように、偶数のみが入力として許可されます。プログラムは奇数を処理する必要はありません
-izlin

回答:


2

Pyth-93バイト

J/Q2K"V"P*s*Q1.5+*QKbVJp*+Q_+1NK*+3*3N">";InQ2VJp*JK*+s*2aaNc-J 1 2c-J 1 2+3*Q3">";IqQ2pK*6">

説明:

J/Q2                             sets J to half of input
K"V"                             sets K to "V"
P                                prevents newline after main block of sock
*                                multiply the next 2 items
s*Q1.5                           rounds up input*1.5 (columns in main block)
+                                adds the next 2 item (this item gets multiplied by the previous item)
*QK                              multiplies "V" by input (resulting in each row)
b                                New line
VJ                               For all the numbers 0-((Q/2)-1) (as represented by N)
p                                print
*                                multiply the next 2 items
+Q_+1N                           input + -1*(1+N)
K                                "V"
*+3*3N">"                        3N+3 many ">"'s
;                                ends for statement
InQ2                             if input is not 2
VJ                               For all the numbers 0-((input/2)-1) (as represented by N)
p                                print
*JK                              input/2 many ">"'s
*+s*2aaNc-J 1 2c-J 1 2+3*Q3">"   int(abs(abs(N-((input/2)-1)/2)-((input/2)-1)/2)))+(input*3)+3 many ">"'s
;                                end of for statement
IqQ2                             if input is 2
pK*6">                           print "V" and 6 ">"'s

ここで試すことができます!


2

Mathematica、104バイト

""<>{t=Table;c=t[{"v"~t~#,">"~t~#2,"
"},#3]&;h=#/2;c[#,0,3h],c[#-i,3i,z={i,h}],c[h,6h+2Min[i-1,h-i],z]}&

入力として正の偶数の整数を取り、文字列を返す無名の関数(末尾の改行付き)。上記の2行のコードの間の改行はコードの一部であることに注意してください。主な作業はc、その機能が定義されていない

c[#1, #2, #3] = Table[{Table["v", #1], Table[">", #2], "\n"}, #3]

リストの表を作成します。各表は"v"、行に複数のsがあり、その後に複数">"のsが続き、その後に改行が続きます。幸いなことに、#3外部の範囲にはTable変数名を含めることができます。変数名は式#1and で参照できます#2。これにより、c定数と変数の両方の引数で関数を呼び出すことができます。残りは単なる計算であり、文字列結合演算子""<>は無料で生成されるネストされたリストを平坦化します。


2

Python、3.5 183 177バイト

n=int(input())
h=n//2
z=h%2
l=['v'*h+'>'*(2*n-h+3*h+i*2)for i in range(1*z+n//4)]
*map(print,['v'*n]*(3*h)+['v'*i+'>'*(3*(n-i))for i in range(h,n)][::-1]+[l,l[:-1]][z]+l[::-1]),

説明着信。

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


ご存知のように、v2は「初期のアルファステージ」にあるため、現時点ではTIO NexusはTIO v2よりも良好に動作します

1バイトを保存するには、変数の先頭に「v」を割り当てます。
nedla2004

@JackBates Dulyは指摘した。
グルパッドママダプール

@ nedla2004こういう意味n,v=int(input()),'v'ですか?その後、何も保存されません。
グルパッドママダプール


1

バッチ、279バイト

@echo off
set i=for /l %%i in (2,2,%1)do 
set v=
%i%call set v=v%%v%%v
%i%echo %v%&echo %v%&echo %v%
%i%call:a
%i%call set v=%%v%%]]]
%i:,2,=,4,%call:c&if %%i lss %1 call set v=%%v%%]]
%i:2,=4,%call:b
exit/b
:a
set v=%v:~1%]]]]]
:b
set v=%v:~0,-2%
:c
echo %v:]=^>%

注:2行目はスペースで終わります。バッチには>変数のsのエコーに関する問題があるため、a)代替を使用する必要がありますb)サブルーチンを呼び出して、修正された文字列をエコーする必要があります。実際、3つのサブルーチンがあります。

  • aかかとに使用されます。v毎回1つが削除され、3 >が追加されます。>サブルーチンがサブルーチンにフォールスルーできるように、2つの余分なが追加されbます。
  • b足の底に使用されます。>毎回2 が削除されます。次に、サブルーチンはサブルーチンにフォールスルーしcます。
  • c>s が現在の行を印刷し、プレースホルダー文字を置き換えて、sが正しく印刷されるようにします。

4行目は脚の幅を処理し、5行目は脚の長さを処理します。7行目は足の長さを処理し、8行目は>>印刷後に各行に2 を追加して足の高さの上半分を処理します。これは、4の倍数である靴下サイズで機能し、最も長い線が繰り返されないように、他の靴下サイズに対して調整が行われます。


0

PHP、229バイト

かなり怠zyなアプローチ

for($m=$n=$p=$argv[1];$i++<$q=$n*1.5;)echo($d=str_pad)("
",$n+1,v);for(;$p-->$n/2;)echo$s="
".$d($d("",$p,v),$m+=2,">");$r=[$s.=$d("",$q,">")];for($k=$n>>2;--$k;)$r[]=$s.=">>";echo join($r),$n&2?"$s>>":"",join(array_reverse($r));

主要な改行を印刷します。で実行し-nrます。

壊す

// print first part + preparing some variables for later
for($m=$n=$p=$argv[1];$i++<$q=$n*1.5;)echo str_pad("\n",$n+1,v);

// print second part + prepare $s for third part
for(;$p-->$n/2;)echo$s="\n".str_pad(str_pad("",$p,v),$m+=2,">");

// third part: create an array of strings ...
$r=[$s.=str_pad("",$q,">")];
for($k=$n>>2;--$k;)$r[]=$s.=">>";
// ... then print it and its reverse
echo join($r),$n&2?"$s>>":"",join(array_reverse($r));

0

dc、269バイト

1k?d1.5*sadsdsb[[[v]nlb1-dsb0<f]dsfx[]pldsbla1-dsa0<c]dscxldd1-sisb2su[[[v]nlb1-dsbldli-<g]dsgx[[>]nlb1-dsblu+0<t]dstx[]plu2+suli1-dsilddsb2/!>m]dsmxld3*dsdsolidswst[[[v]nlw1-dsw0!>x]dsxx[2-]sa[2+]sy[[>]nlo1-dso0<g]dsgxldltli1+2/<yltli1+2/>adsdsolisw[]plt1-dst0!>f]dsfx

よし、まあ...これは巨大です。それは簡単ではありませんでした、すべてのレジスタ参照、比較、マクロ、文字列操作機能の欠如などについて、それをお伝えします。 ?;)

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

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