할로윈을위한 ASCII-O'- 랜턴 그리기


28

할로윈은 거의 여기에 있습니다. 휴일은 대부분의 사람들이 설탕을 먹지 않아도됩니다.

양의 정수를받는 프로그램을 작성하십시오. 정수가 31 (1에서 30)보다 작 으면 할로윈을 기대하는 것처럼 오른쪽을보고이 ASCII 아트 jack-o'-lantern을 출력하십시오.

 _____I_____
| | | | | | |
| | |^| |^| |
| | | |^| | |
| | |VvVvV| |
|_|_|_|_|_|_|

입력 값 31 (할로윈 날짜 10 월 날짜)이면 동일한 ASCII-o'-lantern을 출력하지만 왼쪽을 보면

 _____I_____
| | | | | | |
| |^| |^| | |
| | |^| | | |
| |VvVvV| | |
|_|_|_|_|_|_|

입력 값이 31보다 크면 사탕을 너무 많이 먹은 팽창 된 ASCII-o'-lantern을 출력하십시오. 불안감이 혼란 스러울 수 있기 때문에 왼쪽이나 오른쪽을 향할 수 있습니다. 따라서 출력 :

 _____I_____
| | | | | | |
| |o| |o| | |
| | |^| | | |
| |XXXXX| | |
|_|_|_|_|_|_|

또는

 _____I_____
| | | | | | |
| | |o| |o| |
| | | |^| | |
| | |XXXXX| |
|_|_|_|_|_|_|

당신이 선호하는 것. 31보다 큰 숫자는 다를 수도 있습니다.

바이트 단위의 가장 짧은 코드가 이깁니다.

답변:


8

자바 스크립트 (ES6) 185 142 140 136 바이트

이제 호박을 트윗 할 수 있습니다!

n=>` _____I_____
0 4 1
02421
0 |^| 1
031
|_|_|_|_|_|_|`.replace(/\d/g,x=>x-2?x-3?x^n>30?"| |":"| | |":n>31?"XXXXX":"VvVvV":n>31?"o":"^")

아마 여전히 개선의 여지가 ...


x^n>30트릭은 처음에 혼란 스러웠지만 진행중인 일을 해결할 때 내 대답을 향상시키기 위해 뻔뻔스럽게 그것을 훔쳤습니다. 보상으로 나는 당신에게 어쨌든 그것을 찬성 투표하고 있습니다.
Neil

8

아희 (Aheui) , 914 바이트

붕빠뿌빠삮빠싸빠받따싼사주따반따퍄속맣이
숚뽀빠소뚜번범뻐터번선야챠슊산받발따다뿌
분뽀더번투빠뿌삮뿌다뿌쑬섣뽀빠뼈ㅇ뚜범쑬
받발따또싾솒빠쏟싿솓아삲쏠쑧뽀터벋터볼설
뿌뻐뻐뻐선썬뻐퍼섟썫선뻐퍼샧셗뺘쎣뺘뼈선
받따반타파빠빠받따받반타타싾삲빠빠빠빠뿌
숟썭뻐선썭뻐섣썭뻐선썭뻐섣썯터범떠범뻐선
빠싽술빠싽산빠싽삳빠싽숟삮쎨뿌서탸쥬싸셔
쀼이썭솓쀼섣싻이연우섞빠쏠뱐선반노쌹뻐숛
손빠쓞유삯쏢으산뽀쌹쏡야뼈섣싺이셗처솓썱
아솓썲솑쏢삱쏜빠쌄숞뚜범범섩뻐분터뿌뻐튜
번이손쎫ㅇ야샨우쌃이쀼뱔뿌떠뽀투또뿌뽀노
본떠벋뻐떠번떠숃볌쎬볌섩뿌빠뽀펴봄벌뽀뻐
샯이멓삭뭏ㅇㅇ이멓샥뎌뵥뿌븀범이멓삭뭏맣
맣이ㅇ몋섨희ㅇㅇㅇㅇㅇ먛뻐살뽀ㅇ솕멓샮속

여기 사용해보십시오! (코드를 수동으로 복사하여 붙여 넣기)

Aheui는 골프 용이 아닐 수도 있지만 그럼에도 불구하고 재미 있습니다. :)

출력 :

N = 10

 _____I_____ 
| | | | | | |
| | |^| |^| |
| | | |^| | |
| | |VvVvV| |
|_|_|_|_|_|_|

N = 31

 _____I_____ 
| | | | | | |
| |^| |^| | |
| | |^| | | |
| |VvVvV| | |
|_|_|_|_|_|_|

N = 40

 _____I_____ 
| | | | | | |
| |o| |o| | |
| | |^| | | |
| |XXXXX| | |
|_|_|_|_|_|_|

4

젤리 , 73 바이트

“ẋƥḷỊKNṇ&JƝ¡'Ɲṣ,c;|Ṙɗ.hṿ#⁴ɠ³Ṙṅ’b8ị“ I|o^Xv_”
<32ị“o^XV“vX”y¢s13µ¹U31=³¤?Y

전체 프로그램
TryItOnline!

바운스의 도움으로 골프를 칠 수도 있습니다 ŒḄ.

방법?

“ẋƥḷỊKNṇ&JƝ¡'Ɲṣ,c;|Ṙɗ.hṿ#⁴ɠ³Ṙṅ’b8ị“ I|o^Xv_” - Link 1, Jack construction
“ẋƥḷỊKNṇ&JƝ¡'Ɲṣ,c;|Ṙɗ.hṿ#⁴ɠ³Ṙṅ’              - a base 250 integer
                               b8            - convert to base 8
                                 ị           - index into
                                  “ I|o^Xv_” - literal " I|o^Xv_"
                                             - makes this, without the line feeds:
                                                _____I_____ 
                                               | | | | | | |
                                               | |o| |o| | |
                                               | | |^| | | |
                                               | |XvXvX| | |
                                               |_|_|_|_|_|_|

<32ị“o^XV“vX”y¢s13µ¹U31=³¤?Y - Main link: n
<32                          - 1 if n is less than 32 else 0
   ị                         - index into
    “o^XV“vX”                - list of strings, ["o^XV","vX"]
             y               - map those characters (o->^ and X->V OR v->X) in string:
              ¢              -    call last link (1) as a nilad
               s13           - split into chunks of length 13
                  µ          - monadic chain separation
                          ?  - ternary if:
                         ¤   -     nilad and links as a nilad
                     31=³    -         31 equals first argument
                   ¹         -     identity (do nothing if true)
                    U        -     upend (reverse each if false)
                           Y - join with line feeds

3

루비, 137 바이트

얼굴 점은 31 일과 그 이후에 남았습니다.

->n{puts ' _____I_____',(0..4).map{|i|s=[?|]*7*' _'[i/4]
s[5-n/31*2,5]=' | | o| |o |^| VvVvV_|_|_'[i*5,5];s.tr('ovV','^vVoX'[n/32*3,3])}}

테스트 프로그램에서 언 골프

f=->n{
  puts ' _____I_____',                                #Draw top of pumpkin
  (0..4).map{|i|                                      #then 5 more lines
    s=[?|]*7*' _'[i/4]                                #of 7 | separated by space or _ .
    s[5-n/31*2,5]=' | | o| |o |^| VvVvV_|_|_'[i*5,5]  #Add a line of face with 'o' eyes and 'VvVvV' mouth.
    s.tr('ovV','^vVoX'[n/32*3,3])                     #Substitute characters as necessary.
  }
}

f[gets.to_i]

3

, 71 바이트

NβA‹β³²τA§o^τεA§XVτφA§XvτθF³«P↑⁵|_»↑⁵←I←×_⁵‖O→↙↙←←ε↙←^↖↓ε↓→φθφθφ¿⁼β³¹‖←

참고 :이 코드는 문자열 인덱싱이 손상되어 게시 시점의 최신 커밋에서 작동하지 않습니다. 그러나 10 월 25 일부터이 버전 에서 작동해야합니다 . 또한 온라인 으로 시험 온라인 버전에서도 성공적으로 실행됩니다 .

설명

숯은 ASCII 예술을 위해 설계된 언어입니다. 출력은 캔버스에 저장되며 프로그램 끝에서 인쇄됩니다.

설정

입력을 받고 얼굴 문자를 계산하십시오.

Nβ        Input number into beta
A‹β³²τ    Assign beta<32 to tau for easy reuse
A§o^τε    Assign appropriate eye character (selected via indexing into "o^") to epsilon
A§XVτφ    Assign outside and middle mouth character to phi
A§Xvτθ    Assign other mouth character to theta

호박을 그립니다

F³«  »    Do this three times:
P↑⁵       Draw a 5-character line upward (using | by default); don't move the cursor
|_         Draw that string, rightward

이 루프 후에 우리는

| | | 
| | | 
| | | 
| | | 
|_|_|_

다음 것:

↑⁵         Draw a 5-character line upward
←I         Draw the stem leftward
←×_⁵       Draw 5 underscores leftward
‖O→       Reflect the canvas rightward, overlapping in the middle

결과:

 _____I_____ 
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
|_|_|_|_|_|_|

얼굴 그리기

얼굴을 똑바로보고 나중에 필요할 경우 변경합니다.

↙↙←←ε      Move to the correct spot and draw the right eye (our right, pumpkin's left)
↙←^        Move to the correct spot and draw the nose
↖↓ε        Move to the correct spot and draw the left eye
↓→φθφθφ    Move to the correct spot and draw the mouth with alternating characters

결과 (입력 31) :

 _____I_____ 
| | | | | | |
| | |^| |^| |
| | | |^| | |
| | |VvVvV| |
|_|_|_|_|_|_|

그것이 할로윈인지 반영하십시오 :

¿⁼β³¹      If beta equals 31:
‖←         Reflect canvas leftward

최종 출력 :

 _____I_____ 
| | | | | | |
| |^| |^| | |
| | |^| | | |
| |VvVvV| | |
|_|_|_|_|_|_|


2

PHP, 178 (176) 171 바이트

$e="| | ";$b=($n=$argv[1]-31)?" |^":"^| ";$c=$n<1?VvVvV:XXXXX;$a=$n<1?$b:" |o";echo" _____I_____\n$e$e$e|\n| |$a|$a$e\n$e|$b$e|\n| |",$n?" |$c":"$c| ","$e\n|_|_|_|_|_|_|";

물리적 줄 바꿈으로 5 바이트를 절약 할 수 있습니다. 로 실행하십시오 -r.


1

V , 97 바이트

é|6i| Y5PÒ_r $.7|rIGÓ /_
3G3f r^jll.kll.5G3f RVvVvVLá
Àé*ñ30|l2GGkld$PñGñ31|l3GÓÞ/o
5GÓãv/Xñͪ

온라인으로 사용해보십시오!

나는 이것이 얼마나 오랫동안 밝혀 졌는지에 대해 실망했다. V 겨우 숫자를 처리 할 수 있기 때문에 그것은 더 평소보다 뒤얽힌되어하는 많은 바이트의 해키 조건문을 만들기에서 온다. 자세한 설명을 게시 할 때까지 시간이 오래 걸리므로 나중에 문제를 해결할 수 있습니다. 다음은 16 진수 덤프입니다.

0000000: e97c 3669 7c20 1b59 3550 d25f 7220 242e  .|6i| .Y5P._r $.
0000010: 377c 7249 47d3 202f 5f0a 3347 3366 2072  7|rIG. /_.3G3f r
0000020: 5e6a 6c6c 2e6b 6c6c 2e35 4733 6620 5256  ^jll.kll.5G3f RV
0000030: 7656 7656 1b4c e10a c0e9 2af1 3330 7c6c  vVvV.L....*.30|l
0000040: 3247 1647 6b6c 6424 50f1 47f1 3331 7c6c  2G.Gkld$P.G.31|l
0000050: 3347 d3de 2f6f 0a35 47d3 e376 2f58 f1cd  3G../o.5G..v/X..
0000060: aa                                       .

참고로 매우 느리게 실행됩니다 . 약 10 초가 걸립니다. 왜 이런 일이 발생하는지 알고 있으며 수정을 찾고 있습니다.


1

Pyth, 76 바이트

+dX*11\_5\IjbmX.<.[14d"| "yqQ31<G3?>Q31"XXo""Vv^"c"
|c| |c
|^
|ababa"bt*7"_|

온라인으로 사용해보십시오.

압축을 사용하지 않습니다. (얼굴 데이터 문자열의 버전에 일부를 사용하려고 시도했지만 길이는 동일했습니다.)


1

자바 7, 237 바이트

String c(int n){char a=n==31?94:n>31?'o':32,b=n<31?'^':32;return(" _____I_____ \n~~~~~~|\n~|"+a+"|"+b+"|"+a+"|"+b+"~|\n~~|"+(n>31?94:a)+"|"+b+"~~|\n~"+(n<31?"~|VvVvV|":n==31?"|VvVvV~|":"|XXXXX~|")+" |\n|_|_|_|_|_|_|").replace("~","| ");}

언 골프 및 테스트 코드 :

여기에서 시도하십시오.

class M{
  static String c(int n){
    char a = n == 31
              ? 94
              : n > 31
                 ? 'o'
                 : 32,
         b = n < 31
              ? '^'
              : 32;
    return (" _____I_____ \n~~~~~~|\n~|"+a+"|"+b+"|"+a+"|"+b+"~|\n~~|"
        +(n > 31
           ? 94
           :a)
        +"|"+b+"~~|\n~"
        +(n < 31
           ? "~|VvVvV|"
           : n == 31
              ? "|VvVvV~|"
              : "|XXXXX~|")
        +" |\n|_|_|_|_|_|_|")
      .replace("~", "| ");
  }

  public static void main(String[] a){
    System.out.println(c(12));
    System.out.println();
    System.out.println(c(31));
    System.out.println();
    System.out.println(c(100));
  }
}

산출:

 _____I_____ 
| | | | | | |
| | |^| |^| |
| | | |^| | |
| | |VvVvV| |
|_|_|_|_|_|_|

 _____I_____ 
| | | | | | |
| |^| |^| | |
| | |^| | | |
| |VvVvV| | |
|_|_|_|_|_|_|

 _____I_____ 
| | | | | | |
| |o| |o| | |
| | |^| | | |
| |XXXXX| | |
|_|_|_|_|_|_|

당신의 골프 코드가 완전한 프로그램이 아닌 기능 일 뿐입니 까?
Angzuril

ETHproductions의 JavaScript 솔루션은 기능
일뿐

1

C ++, 222 (204) 194 바이트

Kevin Cruijssen 덕분에 -18 바이트, 명시적인 상단 부분에 -10 바이트

using S=std::string;S f(int n){char L[80],o=2*(n>30),i=-1;while(i++<80)L[i]=47<i&i<53?88:i%2?'|':i==20|i==24|i==36?n<32|i>35?94:'o':(i-o)%14?i-o<55?32:95:10;return" _____I_____ "+S(L+o,L+70+o);}

언 골프

#include <string>

using S=std::string;
S f(int n){
 char L[80];
 int o=2*(n>30);
 for (int i=0;i<80;i++){
  L[i]=
   (47<i && i<53) ?
   'X' :
   (
    (i%2) ?
    '|' :
    (
     i==20||i==24||i==36 ?
     (n<32||i>35?'^':'o') :
     ((i-o)%14?(i-o<55?' ':'_'):'\n')
    )
   );
 }
 return " _____I_____ " + S(L+o,L+70+o);
}

1
몇 년 전에 한 번만 C ++로 프로그래밍 했으므로 실제로는 많이 기억할 수 없지만 삼진 검사에는 괄호가 필수입니까? 그렇지 않으면 많은 것을 제거 할 수 있습니다. 또한, 그것은을 변경할 수 있습니다 &&&|||? 요약하면 using S=std::string;S f(int n){char L[80],o=2*(n>30),i=-1;while(i++<80)L[i]=47<i&i<53?88:i%2?'|':i==20|i==24|i==36?n<32|i>35?94:'o':i-o%14?i-o<55?32:95:10;S t(5,95);return' '+t+'I'+t+' '+S(L+o,L+70+o);}( 202 바이트 )가 컴파일 및 실행됩니까?
Kevin Cruijssen

1
@KevinCruijssen 네 맞아요. 주위의 괄호 만 i-o필수이므로 204 바이트
Karl Napf

1

PHP, 222 바이트

for($s=" ".str_pad("I",11,_,2)." \n";$i<5;$i++)$s.=str_pad("",13,$i<4?"| ":"|_")."\n";$p=($a=$argv[1])<31||!($a%2)?2:0;$s=substr_replace($s,$a>31?XXXXX:VvVvV,$p+59,5);$s[$p+31]=$s[$p+35]=($a>31?o:"^");$s[$p+47]="^";echo$s;

산출

input:29
 _____I_____ 
| | | | | | |
| | |^| |^| |
| | | |^| | |
| | |VvVvV| |
|_|_|_|_|_|_|

input:30
 _____I_____ 
| | | | | | |
| | |^| |^| |
| | | |^| | |
| | |VvVvV| |
|_|_|_|_|_|_|

input:31
 _____I_____ 
| | | | | | |
| |^| |^| | |
| | |^| | | |
| |VvVvV| | |
|_|_|_|_|_|_|

input:32
 _____I_____ 
| | | | | | |
| | |o| |o| |
| | | |^| | |
| | |XXXXX| |
|_|_|_|_|_|_|

input:33
 _____I_____ 
| | | | | | |
| |o| |o| | |
| | |^| | | |
| |XXXXX| | |
|_|_|_|_|_|_|

input:34
 _____I_____ 
| | | | | | |
| | |o| |o| |
| | | |^| | |
| | |XXXXX| |
|_|_|_|_|_|_|

input:35
 _____I_____ 
| | | | | | |
| |o| |o| | |
| | |^| | | |
| |XXXXX| | |
|_|_|_|_|_|_|

1

당연 스크립트, 273 265 216 202 198 바이트

i=args[0]as int
a=i<32?'^| |^':'o| |o'
b=i<32?'VvVvV':'XXXXX'
j=i>30
print" _____I_____\n| | | | | | |\n| |${j?"$a| ":" |$a"}| |\n| | |${j?'^| ':' |^'}| | |\n| |${j?"$b| ":" |$b"}| |\n|_|_|_|_|_|_|"

언 골프 버전

i = args[0] as int
a = i < 32 ? '^| |^' : 'o| |o'
b = i < 32 ? 'VvVvV' : 'XXXXX'
j = i > 30
print """ _____I_____
| | | | | | |
| |${j ? "$a| " : " |$a"}| |
| | |${j ? '^| ' : ' |^'}| | |
| |${j ? "$b| " : " |$b"}| |
|_|_|_|_|_|_|"""

여기 사용해보십시오

편집하다

Titus가 언급했듯이 i < 32대신에 약간의 크기를 절약 할 수 있습니다.i in 1..31

편집 2

운영자 주변의 모든 가능한 공간을 제거했습니다 ... 처음부터 잊어 버렸습니다.

편집 3

저장된 변수를 사용하기 위해 삼항 조건을 다시 작성 ;하고 개행으로 대체 하고 명시 적 변수 정의를 제거했습니다.

편집 4

Otávio가 언급했듯이에서 | |${j ? ' |^| | ' : ' | |^| '}| |로 전환하면 다른 4 바이트를 절약 할 수 있습니다| | |${j ? '^| ' : ' |^'}| | |


방법에 대해 i < 32대신 i in 1..31?
Titus

연산자 주위의 공백을 제거 할 수 없습니까?
기금 모니카의 소송

예, 할 수 있습니다 ... 완전히 잊어 버렸습니다. 감사합니다
Victor A.

Groovy 문장은 개행 문자로 분리 할 수 ​​있고 ;둘 다 1 자 길이이므로 가독성을 위해 개행 문자를 선호하는 것이 좋습니다. 그리고, 좋은 코딩 습관을 포기하는 없애 int하고 def.
manatwork

에서 print의 1 위 변수에 상태를 저장 삼항 (j=i>30)그 다음이 사용, 단지 j대신 같은 반복 i>30조건을.
manatwork

1

자바 스크립트 (ES6) 163 125 바이트

f=
n=>` _____I_____
3 5 4
30504
3 |^| 4
3121214
|_|_|_|_|_|_|`.replace(/\d/g,c=>(n>31?`oXX`:`^Vv`)[c]||(c-3^n>30?`| |`:`| | |`))
;
<input type=number oninput=o.textContent=f(this.value)><pre id=o>

이제 얼굴을 배치하는 @ETHproduction의 트릭을 부끄럽게 훔칩니다. 인코딩 : 012치아, 3왼쪽, 4오른쪽 5, 코의 다리입니다.


0

루비, 168 바이트

->i{s=(Zlib.inflate Base64.decode64 "eJxTiAcBTzDJVaOABCG8OCiGycUhyYWVASGYF48EuRTwGhmHZkgckhzMQBKNzIdibEZGgAA2IwFZA1N4").lines;puts i<31?s[0..5]:i<32?s[6..11]:s[12..17]}

아마 최적과는 거리가 멀다. base64zlib라이브러리가 필요합니다 .

람다 함수로 호출하십시오.


0

파이썬 2, 167 바이트

i=input()
b='| |';e='^o'[i>31]+b;print'\n'.join(x[::[1,-1][i>30]]for x in[' _____I_____ ','| '*5+b,b+' |'+e+e,b+' | |^| '+b,b+' |'+['VvVvV','X'*5][i>31]+b,'|_'*6+'|'])

-1

C # 6, 223215 바이트

int d=int.Parse(args[0]);var x="| | |\n| |";var s=d<31?" |^| |^| |\n| | | |^"+x+" |VvVvV":(d==31?"^| |^"+x+" |^| "+x+"VvVvV| ":"o| |o"+x+" |^| "+x+"XXXXX| ");Write(" _____I_____\n| | | | "+x+s+"| |\n|_|_|_|_|_|_|");

전체 프로그램이 풀리지 않은 상태 :

using static System.Console;
namespace Halloween
{
    public class Program
    {
        public static void Main(string[] args)
        {
            int d = int.Parse(args[0]);
            var x = "| | |\n| |";
            var s = d < 31 ? " |^| |^| |\n| | | |^" + x + " |VvVvV" 
                           : (d == 31 ? "^| |^" + x + " |^| " + x + "VvVvV| " 
                                      : "o| |o" + x + " |^| " + x + "XXXXX| ");
            Write(" _____I_____\n| | | | " + x + s + "| |\n|_|_|_|_|_|_|");
        }
    }
}

2
이것은 함수 또는 프로그램이 아닌 일부 코드 일 뿐이며 Func<int, string>일반적으로 가장 짧은 방법으로 컴파일 할 수 있습니다 .
TheLethalCoder

1
Write선언하고 정의하는 대신 조건을 이동하여 바이트를 절약 할 수 있습니다 s.
Titus

2
그리고 왜 \r\n대신에 \n?
Titus

아무도 당신을 더 잘 멈출 수 없습니다
IonutC

3
그들은 단지 당신을 돕고 있습니다!
MrPaulch
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.