チャレンジ
ハート形を描く
... ASCIIアートとして!
あなたのアートは私のもののように見える必要はありませんが、ハートの形に見える必要があります。
心の内側には「愛」という言葉が少なくとも20回含まれている必要があります
ルール
- プログラムはコンソールにアートを書き込む必要があります。
- 最短のコード(バイト単位、任意の言語)が優先されます。
優勝者はバレンタインデーの2月14日に選ばれます
:D
popularity-contest
ハート形を描く
... ASCIIアートとして!
あなたのアートは私のもののように見える必要はありませんが、ハートの形に見える必要があります。
心の内側には「愛」という言葉が少なくとも20回含まれている必要があります
優勝者はバレンタインデーの2月14日に選ばれます
:D
popularity-contest
回答:
次のコードは、フォーマットされていない160バイトのようです。
('l2v2l6v2'+ 'e1l1v3l2'+
'v3e1v7e1v7e1v7e1l2v6e1l4v5'+
'e1l6v4e1l8v3e1l7l3v2e1l9l3v1')
.replace(/[lve]\d/g,function
(c){return Array(-~c[1]).
join({l:' ',v:'Love'
,e:'\n'}[c[0
]])})
ブラウザコンソール(FirebugやChrome Dev Toolsなど)でこれを実行するだけです。
/[lve]\d/
に/../
と、アレイ使用['','Love','\n']
につながる別の10バイトの節約になります代わりに、オブジェクトのを150バイトの合計を、しかし、元の心はそのほか、もはや形ではありません:)
function(c){return
しc=>
て削除し}
ます。短いバージョンを投稿してください!
:)
ましょう。しかし、指摘してくれてありがとう!ゴルフの問題でJavaScriptがPerlやPythonとすぐに競合し、誰もがそれを試せるようになることを願っています。
4 1.5\.5,+{.5\-\2*\0.}/]4/{[32'LOVE']2*]zip{(*}%''+}%~
出力:
LOVE LOVE
LOVELOVELOVELOVE
LOVELOVELOVELOVELOVE
LOVELOVELOVELOVE
LOVELOVELOVE
LOVELOVE
LOVE
または、いくつかの追加された愛、および空白の重要性の義務的な濫用(84文字):
5 1 .8\
.)...5 ,{.5\-\3
*\0.}/]4 /{[32[9829
:x.'LOVE'\]''+]2
*[@;]zip{(*}%
''+}%~' '15
*x[]+
+
出力:
♥LOVE♥ ♥LOVE♥
♥LOVE♥♥LOVE♥ ♥LOVE♥♥LOVE♥
♥LOVE♥♥LOVE♥♥LOVE♥♥LOVE♥♥LOVE♥
♥LOVE♥♥LOVE♥♥LOVE♥♥LOVE♥
♥LOVE♥♥LOVE♥♥LOVE♥
♥LOVE♥♥LOVE♥
♥LOVE♥
♥
勝者ではなく、たくさんの愛。仕組みを理解できますか?
#include <stdio.h>
#define C(a) ((a)*(a)*(a))
int main(){int x,y;for(y=9;y>-6;y--){for(x=-8;x<9;x++)putchar(C(x*x+y*y-25)<25*x*x*y*y*y?"LOVE"[(x+10)%4]:'-');putchar('\n');}return 0;}
出力:
-----------------
--LOVE-----OVEL--
-ELOVEL---LOVELO-
-ELOVELO-ELOVELO-
-ELOVELO-ELOVELO-
-ELOVELOVELOVELO-
--LOVELOVELOVEL--
--LOVELOVELOVEL--
---OVELOVELOVE---
----VELOVELOV----
----VELOVELOV----
------LOVEL------
-------OVE-------
--------V--------
-----------------
V
一番下に置くいい仕事。
もちろん、これはコードゴルフなので勝てませんが、私は創造的になりたかったので、ソースコードでこの言葉を使用していませんLove
。
import gzip
print(gzip.decompress(b'\x1f\x8b\x08\x00\x95\x10\xe0R\x02\xffSPP\xf0\xc9/KU\x80\x03\x10\x8f\x0bB\xa1c.l\x82dJ\xe0\xb0\x01\xe6\x02\x0cATa.T\xf7\x02\x00\xd9\x91g\x05\xc5\x00\x00\x00').decode('ascii'))
これは出力です:
Love Love
LoveLoveLoveLoveLove
LoveLoveLoveLoveLoveLove
LoveLoveLoveLoveLoveLove
LoveLoveLoveLoveLoveLove
LoveLoveLoveLoveLove
LoveLoveLoveLove
LoveLoveLove
Love
まあ、私は確かに簡潔さで勝つことを期待していませんが、私はScalaでそれができるかどうかを見たかったです。賢いゴルファーならおそらく数バイト削る可能性がありますが、私が得たものは次のとおりです。
type D=Double;def w(x:D,y:D,a:D)={val(i,j)=(x-a,y-8);Math.sqrt(i*i+j*j)< 8};val l:Stream[Char]="love".toStream#:::l;val c=l.toIterator;def p(b:Boolean)=print(if(b)c.next else' ');for(y<-0 to 24){for(x<-0 to 32){if(y>7)p((16-x).abs< 24-y)else p(w(x,y,8)|w(x,y,24))};println}
または、必要に応じて(まだ有効なコード!)
type D= Double
def w(x:D, y:D,a:D)=
{val(i,j)= (x-a,y -8);
Math.sqrt(i* i+j*j)< 8};
val l : Stream [Char] =
"love".toStream#:::l;val
c= l .toIterator;def p
(b:Boolean) =print(if
(b)c.next else' ');
for (y <-0 to 24)
{ for (x<- 0 to
32){if(y >7)
p((16-x).
abs <
24-y)
else
p(w
(x,
y,
8
)
|
w(
x,
y,
24)
)}
println}
画面に2つの半円と1つの三角形を印刷し、かなりまともな心の複製を作成します。
scalaインタープリターを使用して実行する必要があります(コンパイルには追加のクラフを追加する必要がありますがobject Main { def main(args: Array[String]) = { ... } }
、私はそのどれもありません。
正確に20 love
秒水平に印刷します。
x="love";print" x x\nx xx x\nx x x".replace("x",x)
for i in range(5):print" "*i+x+" "*(9-i*2),x
print" "*6,x
出力:
love love
love lovelove love
love love love
love love
love love
love love
love love
love love
love
replace()
してから、3行目のprint
1 +
を1 に,
、9を10に変更します。最後の行では、変数xの値を使用します。pastebin.com/i1TSEZfE
love
水平方向をずらして得た右側の3つの垂直方向の数を数えていますlove
か?
love
。それらを含めると、love
カウントは23:D
open 0;s
/\S.?/Lo.ve
/ge,print
, , for
<0>
出力:
LoveLove LoveLove
LoveLoveLoveLoveLoveLove
LoveLoveLoveLoveLove
LoveLoveLoveLove
LoveLove
これはちょっとしたごまかしです。Love
ソースコード内の2つの非空白文字ごとに1回印刷されます。ハート型を作成するために必要な空白を使用すると、コードの長さは61バイトになります。フラット化すると、36バイトになります。
open 0;s/\S.?/Lo.ve/ge,print,,for<0>
print$"x(15&ord),Love,$/x/\D/for'3h112a05e0n1l2j4f6b9'=~/./g
以下を出力します。
Love Love
Love Love Love Love
Love Love Love
Love Love
Love Love
Love Love
Love Love
Love Love
Love
まさに20 Love
。
リクエストによる簡単な説明
for'3h112a05e0n1l2j4f6b9'=~/./g
/./
明らかに1文字に一致し、リストコンテキスト/./g
では文字列内のすべての文字のリストを返します。これを記述するより一般的ですが、少し長い方法はになりますfor split//,'3h112a05e0n1l2j4f6b9'
。print$"x(15&ord),Love,$/x/\D/
$"
デフォルトはスペースです。ORD各文字のinal値が16店舗を国防省各間に必要な数のスペースLove
文字列の繰り返しを介して(x
)。最後に、文字が数字(/\D/
)でない場合、$/
デフォルトのの値が"\n"
最後まで追加されます。-e
)
$"
と' '
:perl -e "print' 'x(15&ord),Love,$/x/\D/for'3h112a05e0n1l2j4f6b9'=~/./g"
with(Math){s="";for(k=800;k--;)
x=abs(1.25-k%40/16),y=k/320-1.25,
s+=.75>x+abs(y)|.5>sqrt(x*x-x+y*y-y+.5)
?"Love"[k%4]:39==k%40?"\n":" "}s
注:私は別の答えを投稿しましたが、これは異なるアプローチを使用し、ハートは異なる形をしています。
使い方 :
まず、ダイヤモンド(式は|x|+|y|
)をレンダリングし、次に上部の2つの円を結合します。x値はミラーリングされます(したがって、必要な円は1つだけです)。
0
前の浮動数値を削除Math.abs
して変数に割り当てることにより、コードを短縮できます。
겤뙡늆굚넰밌各긂밀❷거雙復냄뭖끐❸갰右거雙復겠⓸걠右復終
出力:
LOVE LOVE
LOVELOVELOVELOVE
LOVELOVELOVELOVELOVE
LOVELOVELOVELOVE
LOVELOVELOVE
LOVELOVE
LOVE
긢꼙겱딧꽔밂各감啃갰啃긂밀⓶復냄뭖끐⓷復겠⓸復終
—しかし、これは、啃
このチャレンジが投稿された後に追加した指示を使用するため、カウントされません。)
s="";for(k=800;k--;)
x=1.25-k%40/16,y=k/320-1.25,
s+=Math.pow(x*x+y*y-1,3)<x*x*y*y*y
?"Love"[k%4]:39==k%40?"\n":" ";s
実行するには:ブラウザコンソールに貼り付けをコピーします(例:ChromeまたはFirefox)
["L","o","v","e"] => "Love"
11バイトを節約します。
(これがハート型であるかどうかはわかりません...出力を生成するために3つの円の内側を塗りつぶします。)
i = 192, x, y;
main(t) {
for (; i--; putchar(i % 16? y : 10))
y = i / 16 - 8,
x = i % 16 - 8,
t = x*x + y*y,
y = " Levo"[ (t < 64 & y < 0 | t < 8*abs(x)) * (i % 4 + 1) ];
}
出力:
veLov veLov
oveLove oveLove
oveLove oveLove
oveLove oveLove
oveLoveLoveLove
oveLoveLoveLove
oveLoveLoveLove
veLoveLoveLov
veLoveLoveLov
eLoveLoveLo
oveLove
ゴルフのプロセスの初期、定数式を置き換える前に(M
サイズを調整するために変更します):
#define M 4
i = 3*M * 4*M, x, y;
main(t) {
for (; i--; putchar(i % (4*M)? x : '\n')) {
y = i / (4*M) - 2*M, x = i % (4*M) - 2*M,
t = x*x + y*y, x = " Levo"[ (t < 4*M*M & y < 0 | t < abs(2*M*x)) * (1 + i % 4) ];
}
}
私もこれをやらなければならないと感じました。:P
#define F for
#define M main
/*## ####
####*/i =192,x
,y;M(t) {F(;i--
;putchar(i %16?
y:10))y=i/16-8,
x=i%16-8,t=x*x+
y*y,y=" Levo"[(
t<64&y<0|t<8*
abs(x))*(i%
4+1)];}
All variables in C are typed
en.wikibooks.org/wiki/C_Programming/Variables
int
、ANSI-C以前から借用されたレガシー機能です。clang foo.c
またはgcc -std=c99 foo.c
(十分な警告が表示されます)でコンパイルできます。エラーが発生しましたか?Cは、未定義の動作に依存しないことを保証するほど十分には知りませんが、私はそうしないと信じています。
l=->a,b=28,c=1{puts (("Love"*a).center(b))*c};l.call(2,14,2);l.call(3,14,2);[7,7,7,6,5,4,3,2,1].map{|x|l.call(x)}
出力:
1.9.3p448 :811 > l=->a,b=28,c=1{puts (("Love"*a).center(b))*c};l.call(2,14,2);l.call(3,14,2);[7,7,7,6,5,4,3,2,1].map{|x|l.call(x)}
LoveLove LoveLove
LoveLoveLove LoveLoveLove
LoveLoveLoveLoveLoveLoveLove
LoveLoveLoveLoveLoveLoveLove
LoveLoveLoveLoveLoveLoveLove
LoveLoveLoveLoveLoveLove
LoveLoveLoveLoveLove
LoveLoveLoveLove
LoveLoveLove
LoveLove
Love
より明確にするために
Perl-159文字
大規模なゴルフではありません...
printf"%-14s%14s\n",$_,~~reverse for map{($.,$i,$c)=split',';($"x$i).($.x$c)}qw(L,5,3 o,3,8 v,1,11 e,0,13 L,1,13 o,3,11 v,5,9 e,7,7 L,8,6 o,10,4 v,12,2 e,13,1)
読みやすくするために空白を追加した場合も同じです...
printf "%-14s%14s\n", $_, ~~reverse
for map {
($.,$i,$c) = split',';
($"x$i).($.x$c)
} qw(
L,5,3
o,3,8
v,1,11
e,0,13
L,1,13
o,3,11
v,5,9
e,7,7
L,8,6
o,10,4
v,12,2
e,13,1
)
出力は...
LLL LLL
oooooooo oooooooo
vvvvvvvvvvv vvvvvvvvvvv
eeeeeeeeeeeee eeeeeeeeeeeee
LLLLLLLLLLLLLLLLLLLLLLLLLL
oooooooooooooooooooooo
vvvvvvvvvvvvvvvvvv
eeeeeeeeeeeeee
LLLLLLLLLLLL
oooooooo
vvvv
ee
完全な単語「愛」は(垂直方向に)22回以内に含まれ、さらに多数のパーシャルが含まれます。
{h]<[<]< [<}>>-->
-3>->-3>+9>+9>+>-7>+>->-5>+>->->
-3>+>+>>4->->6+>5+>>4+[-<4+>]<[-
<4+<5+<5+<5+4>&h++]>[-[-[<10+.[-]
>-[[-]3<[-]]>[<4+3<[[->>
+<<]<]]]>[[>]>[.>&h]<<++
>]]>[<<4+[->8+<]
>....[-]<<+>>]>]
に変わる:
>>-->->> >->->>>+
>>>>>>>> >+>>>>>>
>>>+>->>>>>>>+>->->>>>>+>->->->>>
+>+>>---->->++++++>+++++>>++++[-<
++++>]<[-<++++<+++++<+++++<+++++>
>>>]<[<]<[<++]>[-[-[<++++++++++.[
-]>-[[-]<<<[-]]>[<++++<<<
[[->>+<<]<]]]>[[>]>[.>]<[
<]<[<]<<++>]]>[<<
++++[->++++++++<]
>....[-]<
<+>>]>]
任意のbfインタープリターで実行します。Ubuntuは持ってbf
おりbeef
、両方ともうまく機能しています。
bf heart.bf
出力(344バイト):
LOVELOVE LOVELOVE
LOVELOVE LOVELOVE
LOVELOVELOVELOVELOVELOVELOVELOVE
LOVELOVELOVELOVELOVELOVELOVELOVE
LOVELOVELOVELOVELOVELOVELOVELOVE
LOVELOVELOVELOVELOVELOVELOVELOVE
LOVELOVELOVELOVELOVELOVE
LOVELOVELOVELOVELOVELOVE
LOVELOVELOVELOVE
LOVELOVELOVELOVE
LOVELOVE
LOVELOVE
Ungolfed EBFコード:
>>--> ; mark
;; ## ##@
;;########@
;;########@
;; ######@
;; ####@
;; ##@
;; the block below is the art above
;; where space is replaced with ->
;; # with > and @ with +>
->>>->->>>+>
>>>>>>>>+>
>>>>>>>>+>
->>>>>>>+>
->->>>>>+>
->->->>>+>+>
;; we store the string LOVE after a blank
>
~"LOVE"<[<]<
[<++] ;; add 2 to every cell until mark
;; Variables
:new
:zero
:in
:next
@zero
$in(
-[ ; 1
-[ ; 2
$zero 10+.[-]
$in-[#[-]$new<[-] @in] ; its second round lf
$next[#$in++++$new<[[->>+<<]<]]@new ; 2
]
>[[>]>[.>]<[<]<[<]<<++> ]@new
]>[@next $zero 4+(-$in 8+) $in.... (-) $new+ $in]@zero
)
class P{static void Main(){for(int i=0,m=1;i<30;i++)for(int l=0;l<new[]{5,6,7,6,8,10,3,10,4,13,1,13,1,87,1,27,4,23,7,20,11,16,16,11,20,7,24,3,27,1}[i];l++,m++)System.Console.Write((i%2>0?"love"[m%4]:' ')+(m%29>0?"":"\n"));}}
フォーマット済み:
class P
{
static void Main()
{
for (int i = 0, m = 1; i < 30; i++)
for (int l = 0; l < new[] { 5, 6, 7, 6, 8, 10, 3, 10, 4, 13, 1, 13, 1, 87, 1, 27, 4, 23, 7, 20, 11, 16, 16, 11, 20, 7, 24, 3, 27, 1 }[i]; l++, m++)
System.Console.Write((i % 2 > 0 ? "love"[m % 4] : ' ') + (m % 29 > 0 ? "" : "\n"));
}
}
出力:
velove elovel
ovelovelov velovelove
lovelovelovel velovelovelov
lovelovelovelovelovelovelovel
ovelovelovelovelovelovelovelo
velovelovelovelovelovelovelov
lovelovelovelovelovelovelov
elovelovelovelovelovelo
ovelovelovelovelovel
lovelovelovelove
lovelovelov
elovelo
vel
l
x = "love"
print("\t love\t love")
print("\t"+str(x*2)+" "+str(x*2))
print(" "+str(x*6))
print(str(" "*5)+str(x*6)+"lo")
print(str(" "*5)+str(x*6)+"lo")
print(" "+str(x*6))
print("\t"+str(x*5))
print("\t"+str(" "*2)+str(x*4)+"l")
print("\t"+str(" "*4)+str(x*3)+"l")
print("\t"+str(" "*7)+str(x*2))
print("\t"+str(" "*10)+"v")
出力:
str
ので、文字列repetionsとの通話を*
より高い優先順位を持ちます+
。
Perl-97文字
この答えは、@ Wasiの121文字のPythonソリューションに基づいています。
$.=love;say" $. $.$/$. $.$. $.$/$. $. $.";say$"x$_,$.,$"x(9-$_*2),$.for 0..4;say$"x 6,$.
-M5.010
5.10固有の機能を有効にするオプションを使用してperlを実行する必要があります。これは明らかに許可されています。
興味深い機能:
$.
「愛」という言葉を保存します。これは、必要に応じてすぐに別の単語が続くためです。$.for
が$.
続くように明確にトークン化されfor
ます; それ自体が正当な変数名であるため$_for
、$_
後に続くようにトークン化されません。for
$_for
$"
、文字列に補間されるときに配列が結合される文字を表す組み込み変数が使用されます(デフォルトは単一のスペース文字になります)" "
。.replace
コードゴルフでpython メソッドを大幅に凌ぎます。for 0..4
も同様に勝ちますfor i in range(5)
19285703234336595Zb["Love"SS+N]f=
出力:
Love Love
LoveLoveLoveLove
LoveLoveLoveLove
LoveLoveLoveLove
LoveLoveLove
LoveLove
Love
説明:
19285703234336595 number that contains the pattern as base-3 digits
Zb converts to base 3 (Z=3)
["Love"SS+N] creates an array containing "Love", " " and a newline
f= replaces the base-3 digits with the corresponding strings
(0 -> "Love", 1 -> " ", 2 -> newline)