도전
하트 모양 그리기
... 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
글쎄, 나는 간결하게 승리를 기대하지는 않지만 스칼라에서 그것을 할 수 있는지보고 싶었다. 똑똑한 골퍼는 아마도 몇 바이트를 깎을 수 있지만 여기에 내가 가진 것이 있습니다.
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}
화면에 두 개의 반원과 삼각형을 인쇄하여 꽤 괜찮은 마음의 팩스를 만듭니다.
스칼라 통역사와 함께 실행해야합니다 (컴파일을 위해서는 여분의 주름을 추가해야하며 그중 object Main { def main(args: Array[String]) = { ... } }
아무것도하지 않습니다.
love
가로로 정확히 20 초를 인쇄합니다 .
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
변경 일 +
에 ,
9 10; 마지막 줄에서 변수 x의 값을 사용하십시오. pastebin.com/i1TSEZfE
love
이 오른쪽에 세 가로 세로를 세고 가로 s 를 세고 love
있습니까?
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
.
요청에 의한 간략한 설명
for'3h112a05e0n1l2j4f6b9'=~/./g
/./
분명히 단일 문자와 일치하며 목록 컨텍스트 /./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|
) 렌더링 한 다음 두 개의 원을 맨 위에 결합합니다. x 값이 미러링되므로 하나의 원만 필요합니다.
0
부동 소수점 숫자 를 제거하고 Math.abs
변수에 할당 하여 코드를 줄일 수 있습니다 .
겤뙡늆굚넰밌各긂밀❷거雙復냄뭖끐❸갰右거雙復겠⓸걠右復終
산출:
LOVE LOVE
LOVELOVELOVELOVE
LOVELOVELOVELOVELOVE
LOVELOVELOVELOVE
LOVELOVELOVE
LOVELOVE
LOVE
긢꼙겱딧꽔밂各감啃갰啃긂밀⓶復냄뭖끐⓷復겠⓸復終
— 啃
이 과제를 게시 한 후에 추가 한 지침을 사용 하므로 계산에 포함되지 않습니다.
(이것이 충분히 심장 모양인지는 모르겠습니다 ... 출력을 생성하기 위해 세 개의 원 안쪽을 채 웁니다.)
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) ];
}
}
나는 또한이 일을 강요 당했다고 느꼈다. :피
#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
더 명확하게
펄-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 인터프리터로 실행하십시오. 우분투는이 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
으므로 문자열 반복을 사용 하여 호출을 제거 할 수 있습니다 . *
+
펄-97 자
이 답변은 @Wasi의 121 자 Python 솔루션을 기반으로합니다.
$.=love;say" $. $.$/$. $.$. $.$/$. $. $.";say$"x$_,$.,$"x(9-$_*2),$.for 0..4;say$"x 6,$.
-M5.010
5.10 관련 기능을 활성화 하려면 옵션으로 perl을 실행해야 합니다. 이것은 분명히 허용 됩니다.
흥미로운 기능 :
$.
를 사용하여 "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)