丘の中腹の小さな箱


13

もともとマルヴィーナ・レイノルズによるリトル・ボックスという風刺的な歌があり、次のような歌詞があります。

丘の中腹にある
小さな箱、カチカチの粘着性のある
小さな箱、丘の中腹にある
小さな箱、小さな箱はすべて同じ。
緑のものとピンクのもの、
そして青のものと黄色のものがあり、
それらはすべて、ベトベトした粘着性で作られており
、すべて同じように見えます。

ここでの仕事は、n>1家のサイズを表す整数入力が与えられ、次の色を使用して4つの「小さな箱」を出力することです(0xRRGGBB表記)。

Green -- 0x00FF00
Pink --- 0xFF00FF (technically magenta)
Blue --- 0x0000FF
Yellow - 0xFFFF00

特定のコンソールにこれらの正確な色がない場合は、最も近いものを使用できます(たとえば、ANSIエスケープコード)。

家はn _、床と屋根を表すように構築されています。それらは、壁を表すn/2(端数切り上げ)|文字で囲まれています。屋根は常に2高く/、左端に2つ\、右端に2つありn-2 -、屋根の頂点を表しています。家が大きくなると、屋根の比較サイズは小さくなります。これは意図されたものです。

これがサイズの家です2

 /\
/__\
|__|

サイズは3次のとおりです。

 /-\
/___\
|   |
|___|

サイズは7次のとおりです。

 /-----\
/_______\
|       |
|       |
|       |
|_______|

したがって、入力が与えられると、上記7のサイズの4つの家を出力します。7最初の家は緑、2番目はピンク(マゼンタ)、3番目は青、4番目は黄色です。その順序で色を出力することが重要です。

サイズの写真例3

ここに画像の説明を入力してください

ルール

  • 明確な分離がある限り、家は水平でも垂直でもかまいません。
  • 家が適切に並んでいれば、先頭/末尾の改行やその他の空白はオプションです。
  • 完全なプログラムまたは機能のいずれかが受け入れられます。関数の場合、出力する代わりに出力を返すことができます。
  • 出力はコンソールに出力したり、画像として保存したりできます。
  • 標準的な抜け穴は禁止されています。
  • これはので、通常のゴルフルールがすべて適用され、最短のコード(バイト単位)が勝ちます。

回答:


5

Pythonの2123 121 119 111 109 108バイト

  • caird coinheringaahingのおかげで2バイト節約されました。エスケープする代わりに実際の印刷不可能なASCII文字を使用する(\33
  • input()関数を定義する代わりにを使用してプログラム全体を記述することにより、バイトを保存できました(そしてしました)。
  • ElPedroのおかげで7バイト節約されました。事実使用str(90+n)して0<=n<=9いるが"9%s"%n
  • セーブ2文字列の連結ではなく、文字列のフォーマットを使用して 3バイトを

N=input()
for(n)in"2543":Z="_"*N;print"[9%sm /"%n+~-~-N*"-"+"\ \n/%s\\\n"%Z+~-N/2*("|%s|\n"%" "*N)+"|%s|"%Z

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

家の着色にANSIエスケープコードを使用します。



1
112「2543」をループし、文字列フォーマットを使用して- オンラインで試してみてください!
エルペドロ

2
@ElPedroありがとう。私がそれ902,5,4,3要約したのは事実上連結ではありませんでした。
ジョナサンフレッチ

4

JavaScript(ES6)、Chrome / Firefox、156 148 151 150バイト

@Shaggyのおかげで8バイトを節約@Neilの
おかげで1バイトを節約

n=>['0f0','f0f','00f','ff0'].map(c=>console.log(`%c /${'-'[r='repeat'](n-2)}\\
/${s='_'[r](n)}\\
${(`|${' '[r](n)}|
`)[r](~-n/2)}|${s}|`,'color:#'+c))

デモ

ブラウザのコンソールを開いて、色付きの出力を取得してください。


ブラウザのコンソールを開いた状態で、スニペットとして私には問題なく動作します。3桁の16進コードを使用して、8バイトを節約します:tio.run
Shaggy

@Shaggy提案をありがとう!
アーナウルド

主要0なものは必要ですか?
ジョナサンフレッチ

@JonathanFrechはい。先行ゼロがないと、有効な#RGBCSSカラーコードにはなりません。
アーナウルド

幅の広い家では高さが間違っていると思います。
ニール

3

Excel VBA、243バイト

A1範囲との間で入力および出力を行う匿名VBEイミディエイトウィンドウ関数A2:A5

[C1]=vbLf:For i=1To 4:Cells(i+1,1)=[" /"&Rept("-",A1-2)&"\"&C1&"/"&Rept("_",A1)&"\"&C1&Rept("|"&Rept(" ",A1)&"|"&C1,A1/2)&"|"&Rept("_",A1)&"|"]:Cells(i+1,1).Font.Color=Array(32768,&HFF00FF,rgbBlue,65535)(i-1):Next:Cells.Font.Name="Courier New"

出力

出力


2

Japt79 76 74 73 72バイト

3#²¤r1'f ò3 w £Ol"%c /{ç- ¤}\\
/{ç'_}\\
{/2-½ ç"|{ç}|
"}|{ç'_}|"Xi`¬l:#

試してみてください(「実行」を押す前にブラウザのコンソールを開きます)。

昨晩、携帯電話でテスト中にテストを手伝ってくれたETHに感謝します。


説明

整数の暗黙的な入力 U

3#²¤r1'f ò3 w

最初に、3桁の16進数の色の配列を作成してマップします。の文字コード²は178 なので、3178が3#²得られます。これをbase-2文字列に変換し、¤すべての出現を1で置き換えますfò3文字列を長さ3の文字列の配列に分割し、wその配列を逆にします。
(どうにかしてそれを短くする方法を見つけ出す必要があります。)

£Ol

を使用して配列をマッピングします £して- Xと-現在の要素であることOlコンソールにログインします。これに2つの文字列を渡します。1つは家を含み、もう1つはCSSを含みます。

Xi`¬l:#

2番目の文字列はi、先頭に追加するために使用されますX、圧縮された文字列れますcolor:#

"%c /{ç- ¤}\\

%cCSSとして2番目の文字列を使用するためのコンソールに指示します。家の一番上の行はç-キャラクターを()繰り返すことで構築されますU回てから、それを2番目の要素(0インデックス付き)からスライスすることで作成されます¤。中括弧は、文字列の連結のショートカットとして機能します。

/{ç'_}\\

2行目も同様の方法で作成され、今回は _文字のU回数をます。

{/2-½ çRi|²iUç 1}

家の体は、最初に|キャラクターを2回繰り返し、²次にスペースを挿入して構築されますUインデックス1の文字列にます。結果の文字列は改行(R)の前に追加され、その文字列は繰り返しU/2-0.5ます。

|{ç'_}|"

最後に、最後の行は2行目と同じ方法で作成されます。


1

Python 2、120バイト

n=input()
for i in'2543':s='_'*n;print'[1;3'+i+('m /'+'-'*(n-2)+'\ \n/%s\\\n'%s+(-~n/2-1)*('|'+' '*n+'|\n')+'|%s|\n'%s)

オンラインでお試しください!(ローカル端末でテストされた実際の色の代わりにエスケープ文字を表示します)


あなたの家はのような入力には高すぎると思いますn=2
ジョナサンフレッチ

@JonathanFrechうん、修正します...間違った天井アプローチどうやら編集:修正済み
Erik the Outgolfer

質問はuse the closest available、明るい色の代わりに通常の色を使用しているようですが、と言います。ただし、明るい色は、私が思うに、希望の色に近いと思います。
ジョナサンフレッチ

@JonathanFrechうーん、あなたのものも普通の色を使っているようですが、ええ明るい色は近いです。
エリックアウトゴルファー

1
@ElPedroとにかく彼は私のものより良くなった:p
エリック・ザ・アウトゴルファー

1

Yabasic、220バイト

入力を整数としてn受け取り、4色のホームを端末に出力する匿名関数。

yabsicに専用の文字列の繰り返しまたは置換関数がないため、この応答は本当に痛いです。

Clear Screen
Input""n
b$="__"
c$="|  "
For i=1To n-2
a$=a$+"-"
b$=b$+"_"
c$=c$+" "
Next
c$=c$+"|\n"
For i=1To n-4
d$=d$+c$
Next
For i=0To 3
?Color(Mid$("gremagbluyel",1+3*i,3))" /"+a$+"\\\n/"+b$+"\\\n"+d$+"|"+b$+"|"
Next

このバージョンではグラフィックモードが必要であるため、TIOでは機能しません。

出力

以下の入力値はn=7です。

出力


1

SmileBASIC、115バイト

INPUT N
H.H 6H 4H 2DEF H C
COLOR C+5?" /";"-"*(N-2);"\
?"/";"_"*N;"\
FOR I=3TO N?"|";" "*N;"|
NEXT?"|";"_"*N;"|
END

同じく115バイトである別のもの:

INPUT N
FOR J=0TO 3COLOR!!J*8-J*2+5?" /";"-"*(N-2);"\
?"/";"_"*N;"\
FOR I=3TO N?"|";" "*N;"|
NEXT?"|";"_"*N;"|
END

(4ビットRGBIで)必要なカラーコード!!J*8-J*2+513-J*25、11、9、7 です。これは、Jが0でない場合に生成され、これは(11,9,7を与える)、そうである場合、結果はちょうど5。

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