挑战
画一个心形
...作为ASCII艺术!
您的艺术不必看起来完全像我的,但必须看起来像心形。
心脏内部必须至少包含20次“爱”字样
规则
- 该程序必须将美术作品写入控制台。
- 最短的代码(以字节为单位,任何语言)均获胜。
获胜者将在2月14日情人节那天被选中
:D
popularity-contest
画一个心形
...作为ASCII艺术!
您的艺术不必看起来完全像我的,但必须看起来像心形。
心脏内部必须至少包含20次“爱”字样
获胜者将在2月14日情人节那天被选中
:D
popularity-contest
Answers:
以下代码似乎是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开发工具中)。
/[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}
在屏幕上打印出两个半圆和一个三角形,非常漂亮地复制了一颗心。
需要与scala解释器一起运行(编译需要为此添加一些额外的内容,object Main { def main(args: Array[String]) = { ... } }
而我只是想做到这一点。
love
水平精确地打印20 s。
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个+
至,
10 9; 在最后一行中,使用变量x的值。pastebin.com/i1TSEZfE
love
通过交错水平love
s来计算右边的三个垂直s?
love
s。包括这些love
在内的将是23:D
open 0;s
/\S.?/Lo.ve
/ge,print
, , for
<0>
输出:
LoveLove LoveLove
LoveLoveLoveLoveLoveLove
LoveLoveLoveLoveLove
LoveLoveLoveLove
LoveLove
这有点作弊;它将Love
在源代码中每两个非空白字符打印一次。带有使心脏形状所需的空白,代码的长度为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
。
根据要求简要说明
-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|
),然后在顶部合并两个圆圈。x值是镜像的(因此只需要一个圆)。
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个字节。
(我不知道这是否足够心形……填充三个圆的内部以产生输出。)
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
zh.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
完整的单词“ Love”(垂直)包含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
非高尔夫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
使用字符串重复删除呼叫,因为*
它的优先级高于+
。
Perl-97个字符
该答案基于@Wasi的121个字符的Python解决方案。
$.=love;say" $. $.$/$. $.$. $.$/$. $. $.";say$"x$_,$.,$"x(9-$_*2),$.for 0..4;say$"x 6,$.
您需要运行带有-M5.010
选项的perl 以启用5.10特定功能。这显然是允许的。
有趣的功能:
$.
存储单词“ love”。这是因为如有必要,可以在其后紧跟另一个单词。$.for
明确地标记为$.
后面的for
; 由于其本身是合法的变量名称,因此$_for
不会被标记为$_
后跟。for
$_for
$"
,它使用一个内置变量来表示插入到字符串中时将与数组连接的字符(默认为单个空格字符),而不是 " "
此处和此处节省一个字符。.replace
在代码打高尔夫球中大大方法。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)