“クールなS ”

はじめに h2を描く>

私たちは皆、クールなS(Superman S、StüssyS、Super S、Skater S、Pointy S、Graffiti Sなどとしても知られています)を知っています:世界中の何十億もの学童がこのSを描き、すぐに誇りに思いました自分自身の。 「完全にクールでない子供時代を忘れた、または持っていた」場合のために、次のクールなSの画像を示します。

入力としてスケールファクターnを指定すると(\ $ 1 \ leq n \ leq 20 \ $)、CoolSをASCIIアートで出力します。

描画方法

CoolSのウィキペディアページから:

出力

n = 1の場合のクールSは次のとおりです。

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

また、nの値が異なる場合は、出力をn倍大きくするだけです。例:n = 2:

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

垂直セクションは2倍長く、間隔は垂直線の幅は2倍です。

n = 3の場合:

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

注: 必須ではありませんがiredの場合、コードはn = 0:

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

勝利

バイト単位の最短プログラムが優先されます。

コメント

  • 関連:Sを描画-チェーン
  • ASCIIを構築している90 ‘の子供は、ヒントに^の代わりに/ \を使用することを提案したいと考えています。そのようにすっきりと見え、さらに同じ傾斜傾斜を維持します:)
  • @Flaterの唯一の問題は、/ \が2文字を使用するため、中央の垂直線をオフセットする必要があり、非常に乱雑に見えることです
  • @BetaDecay:N = 2およびN = 3(点対称を保持しているため)では問題ないように見えますが、N = 1には同意します。 ‘逆さまのVのオプションもあります:Λ
  • @JacobGarby:私の主張は文体的でした。ゴルフではない:)

回答

木炭 58 53 47 43 41バイト

Nθ≔⊕⊗θδ↗θ/⊗θ↘δ^‖B↓‖M← vMδ⁰⊗θ↗⊕θM⁰δ↗θ/⊗θ⟲T 

オンラインで試す!

別のアプローチを試してみたかったのですが、これは反射を介して外側を描画し(アイデアを拡張してくれたニールに感謝)、次に内側の部分を描画します。 Charcoalは線を引くためのデフォルトの方向として:Leftを持っているので、次のようにSを水平に描くことによって、いくつかのバイトを節約するために可能な限りその方向を利用します。 div id = “938ef2b10f”>

次に、キャンバスを反時計回りに90度回転する必要があります。

コメント

  • そこに何かがあるかもしれません… 22バイトですべての外部を取得できます…
  • @Neilそれはありませんでした’まったく同じように、あなたのアイデアにはマイナーな修正が必要でしたが、実際、これは大きな改善でした!
  • ええ、元の投稿で同様の間違いをしました。 ‘スケーリングの効果を正しく確認しません。
  • 誰かがRotateと言いましたか?それは私にアイデアを与えます…
  • @Neilねえ、あなたはそこでかなりの改善を得ました! 🙂

回答

Python 3 255 249 248 209バイト

-KevinCruijssenのおかげで6バイト

-KevinCruijssenのおかげで1バイト

-RodとJoKingのおかげで39バイト

 n=int(input()) m=2*n a,b,q,c,l="\ \n/|" f=m*b s=q+q.join([f[d:]+c+b*2*d+b+a+f[d:]for d in range(m+1)]+[l+f+l+f+l]*m+[d*b+a+f+a+f[d*2:]+c+d*b for d in range(n)]+[n*b+a+f+a+c+n*b]) print(f,"^"+s+q+s[::-1]+f,"v")  

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

n = 0を処理するようになりました。

コメント

  • o+~dはどちらもm-drange(o)range(m+1)にすることができ、次にo=m+1\nを削除して6バイトを節約できます。いい答えですが、私から+1します。
  • ああ、p(s)\np(s[::-1])p(s+q+s[::-1])に変更して、もう1バイト。 248バイト
  • 単一のprintなどを使用すると6バイト節約できます4 join([...])から[]を削除し、合計238バイト
  • q.joinを変数に格納してバイトを保存することもできます
  • 217 。すべてのq.join、およびその他のいくつかに参加しました

回答

チャコール 47 42 41バイト

Fv^«↓⊗θ↘⊗⊕θ←↓⊗θ↙⊕⊗θ↖ι↖⊕⊗θ→↑⊗θ↗⊕θMθ⁺⊗θ⊕θ⟲⁴ 

オンラインでお試しください!リンクはコードの詳細バージョンへのリンクです。説明:次の線を順番に描画します:

 ^ / \ / \ / \ | 1 | | 1 | \ 2 / \ 2/ 8\ 2 8 \ 2 7 | 3 7 9 3 6 4 6 4 6 4 5 

ここで、5は文字列

。最初のループの終わりに、カーソルはポイント9に配置されます。次に、Cool Sの残りの半分を描画できるように、キャンバス全体が回転します。 (キャンバスは実際には2回回転しますが、これは実装の詳細にすぎません。)

CharcoalはRotateCopy(:Up, 4)をサポートしていませんが、サポートしている場合は、 33バイト:

↖^↖⊕⊗θ→↑⊗θ↗⊕θ‖BM↓↙⊗θ→↓⊗θ⟲C↑⁴J⁰¦⁰v 

コメント

  • @BetaDecay申し訳ありません。バイトも間違っていましたとにかく数えます…
  • いいですね、n = 0も正しくなります

回答

キャンバス 36 32 29 バイト

«|*‼l├/L1^╋;╶╵\∔∔│α╶«├:╵╋:↔↕∔ 

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

スタック操作がたくさんあります。(古い)説明:

«|* an array of input*2 "|"s ‼ cast to a 2D object (needed because bug) : duplicate that (saved for the center line) l├ height+2 / create a diagonal that long L1^╋ and in it, at (width; 1) insert "^" ;∔ append the vertical bars ^ / so far done: / / | | ⁸╵ input+1 \ antidiagonal with that size ∔ appended to the above │ mirror horizontally ^ / \ / \ / \ current: | | | | \ / \ / | α get the 2nd to last popped thing - the antidiagonal | └∔ append it to the vertical line copied way before: \ ⁸«├ input/2 + 2 \ :╵ duplicate + 1 ╋ at (input/2 + 2; input/2 + 3) in the big part insert ^ :↔↕∔ mirror a copy vertically & horizontally and append that to the original 

回答

Python 2 227 208 207 202 196 181バイト

 I=n=2*input() R,L,S,P="/\ |" k=n*[2*(P+S*n)+P] exec"k=[R+S+2*S*I+L]+k+-~I%2*[L+S*n+L+S*I+R];I-=1;"*-~n print"\n".join(t.center(2*n+3)for t in["^"]+k+[a[::-1]for a in k[::-1]]+["v"])  

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

Jo King に1バイト感謝します。次に、合計5バイト(n => 2*n経由)。

n=0でも機能します。

回答

C(gcc) 379 ストライク> 353 ストライク> 344 ストライク> 334バイト

部分式除去にいくつかの#defineを使用しました。内部機能間で通信するためのグローバル。メインループは{0,1,2,3,3,2,1,0}になり、Sを構築します。

提案してくれたJonathanFrechに感謝します。

 #define z(a,b...)printf("%*c%*c%*c\n"+a,b);} #define y(a){for(i=~-a*t;v*i<v*a*!t+t;i+=v) i,n,p,r,t,u,v;a(){z(6,r+2,94+t*24)b()y(-~r)z(3,-i-~r,47+u,i*2+2,92-u)c()y(r)z(0,~r,124,~r,124,~r,124)d()y(-~n)z(0,i+1,92-u,2*(n-t*i)+1,92,2*(n-!t*i)+1,47+u)(*x[])()={a,b,c,d};f(s){r=2*s;for(p=0;p<8;x[7*t-p++*(2*t-1)](n=s))t=p>3,v=2*!t-1,u=t*45;}  

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

コメント

回答

C(gcc) 260 254バイト

ceilingcat のおかげで6バイト。

 f(n){int s=2*n++,t=s+1,I[]={1,t,s,n,n,s,t,1},A[]={s,1,1,1,2*t,1,t,t,1,t,1,n,t,t,1,t,t,1,1,1,t,s,1,1},x;for(s=8;s--;)for(n=0;n<I[s];n++,puts(""))for(t=3;t--;)x=s*3+t,printf("%*c",n*("AAAA?BAAAAC@?ABAAACA@AAA"[x]-65)+A[x],"w!!!0]}}}]]00]]}}}]!0_!!"[x]-1);}  

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

概要

形状を分割できますパーツに:

  ^ Top cap / \ Top slope ||| Sides \\/ Twist, part 1 /\\ Twist, part 2 ||| Sides \ / Bottom slope v Bottom cap  

各部分は、行数、3文字、および各行のフィールド幅を決定する特定の値への3つの関係で記述できます。

最初の反復が行われました。

 #define g(x,s,A,B,C)for(i=0;i<x;i++)printf("%*c%*c%*c\n",A,*s,B,s[1],C,s[2]); f(n) { int s=2*n++,t=s+1,i; g(1, " ^", 1, 1, t-1) g(t, "/ \\",t-i, 1,2*i+1) g(s, "|||", 1, t, t) g(n,"\\\\/",i+1, t,t-2*i) g(n,"/\\\\",n-i, 2*i+1, t) g(s, "|||", 1, t, t) g(t, "\\/ ",i+1,2*t-2*i, 1) g(1, " v", 1, 1, t-1) }  

マクロは、テーブルを作成してループできるように見えます。フィールド幅は、インデックスカウンターに関連する場合と、関連しない場合があります。フィールド幅をF * i + Aに一般化できます。ここで、Fはiを乗算する要素であり、Aは追加する値です。幅に。したがって、上記の4番目の呼び出しの最後の幅は、たとえば-2 * i + tになります。

したがって、次のようになります。

 f(n){int s=2*n++,t=s+1, s = size of "side" parts, t = size of top and bottom slopes I[]={1,t,s,n,n,s,t,1}, The number of lines per part. A[]={...},x; A[] holds the values to add to each field-width. for(s=8;s--;) Loop through the parts. for(n=0;n<I[s];n++,puts("")) I[s] decides how many lines to the part. Ends with newline. for(t=3;t--;) Go through the three chars of each line. x=s*3+t, Calculate offset. printf("%*c", Print the char. n*("..."[x]-65)+A[x], Build field-width. The string holds the index factor, A[] holds the offset part. "..."[x]-1);} The char itself is grabbed from the string. Shifted by 1 to eliminated double backspaces.  

最終的には、g()の引き締めバージョンよりもそれほど短くはありませんでした。呼び出しますが、短いほど短くなります。

コメント

  • @ceilingcat乾杯。
  • @ceilingcat関数の未定義の評価順序引数を指定すると一時停止します。

回答

Java、435バイト

関数自体435バイトかかります。どのキャラクターをどこに配置するかについてのルールを分析することによる「高レベル」(最終的にはSは点対称)、および古典的なゴルフによる「低レベル」(おそらく別の変数を引き出すか、 2つのforループを組み合わせます)。しかし、それは「このやや不格好な言語での最初のショットです:

import static java.util.Arrays.*; import static java.lang.System.*; public class CoolS { public static void main(String[] args) { print(1); print(2); print(3); } static void print(int n){int i,r,d=3+6*n,w=3+n*4,h=6+n*10,m=n+n,v=w/2,k=h-1,j=w-1;char t[],S="/",B="\\",P="|",s[][]=new char[h][w];for(char x[]:s)fill(x," ");s[0][v]="^";s[k][v]="v";for(i=0;i<1+m;i++){r=i+1;t=s[r];t[v-r]=S;t[v+r]=B;t=s[k-r];t[v-r]=B;t[v+r]=S;}for(i=0;i<m;i++){r=2+m+i;t=s[r];t[0]=t[v]=t[j]=P;t=s[k-r];t[0]=t[v]=t[j]=P;}for(i=0;i<1+n;i++){r=2+m+m+i;t=s[r];t[i]=t[i+1+m]=B;t[j-i]=S;t=s[d-i];t[i]=S;t[v-i]=t[j-i]=B;}for(char x[]:s)out.println(x);} } 

コメント

  • こんにちは。インポートはバイトカウントの一部であるため、’恐れています。したがって、現在の回答は実際には 478バイトです。ただし、ゴルフの基本的なことをいくつか含めて、現在の 435バイトまでゴルフすることができます(偶然にも十分です)。
  • いくつかの変数を削除し、t=... divを使用することで、 405バイトまでもう少しゴルフをすることができます。 >バイトを節約する場所が少し少なくなります。私が行った変更について質問がある場合は、お知らせください。 🙂
  • @KevinCruijssenに感謝します。残念ながら、現在ここにこれ以上時間を投資することはできません。これは単なる娯楽であり、”冗長性を考慮しています” Javaの、とにかく深刻な競争相手ではありません;-)独自の答えとしてソリューションを追加することを検討してください。ただし、-その後少なくとも言語内の競争があります:-)

回答

PHP 378 374 378 377 376 335 331 328バイト

-manatworkのおかげで3バイト

-4バイト、str_repeatの代わりにstr_padを使用

-manatworksのおかげで41バイト”提案

-1バイト、2つの増分を+ = 2にマージ

-1バイト、余分な\

を削除-エコーによって4バイト文字列を関数に渡す必要があったので、これはより多くのバイトになります

n = 0でも機能します。

  

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

コメント

回答

Python 3 321 307バイト

14バイトを節約してくれた@EsolangingFruitに感謝します

 n=int(input()) b,f="\/" c,l=4*n+3,10*n+6 r=range h=c//2 L=[c*[" "]for _ in r(l)] L[0][h],L[-1][h]="^v" for i in r(h):a=L[h-i];a[i],a[c+~i]=f,b for i in r(2*n):L[h-~i][0::h]="|"*3 for i in r(n+1):a=L[h+h+i];a[c+~i],a[i:c-1:h]=f,b*2 for i in r(1,l//2):L[l+~i]=L[i][::-1] print("\n".join("".join(i)for i in L))  

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

Python 2 、303バイト

 n=int(input()) b,f="\/" c,l,r=4*n+3,10*n+6,range h=c/2 L=[c*[" "]for _ in r(l)] L[0][h],L[-1][h]="^v" for i in r(h):a=L[h-i];a[i],a[c+~i]=f,b for i in r(2*n):L[h-~i][0::h]="|"*3 for i in r(n+1):a=L[h+h+i];a[c+~i],a[i:c-1:h]=f,b*2 for i in r(1,l/2):L[l+~1]=L[i][::-1] print"\n".join("".join(i)for i in L)  

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

コメント

  • 2行目の'\\','/'*'\/'に置き換えると、3バイト節約できます。
  • 307バイト:オンラインでお試しください!
  • ありがとうございます! @EsolangingFruit! Pythonでのビット演算を知りませんでした。また、print
  • Python 2では、input()は自動的に文字列をeval()するので、int()呼び出しもスキップできます。
  • Pythonの場合3、最後の行をfor l in L:print(*l,sep="")に変更できます(’ Python 2に同等のものがあるとは思いません)。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です