Narysuj ASCII-O'-Lantern na Halloween

28

Zbliża się Halloween, święto, po którym większość ludzi musi zrezygnować z pustej diety z cukrem.

Napisz program, który przyjmuje dodatnią liczbę całkowitą. Jeśli liczba całkowita jest mniejsza niż 31 (od 1 do 30), wypuść tę latarnię z latarnią ASCII, patrząc w prawo, jakby czekała na Halloween:

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

Jeśli wartość wejściowa to 31 (data Halloween jest włączona), wypisz tę samą lampę ASCII-o'-latarnię, ale patrząc w lewo:

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

Jeśli wartość wejściowa jest większa niż 31, wyjmij nadętą latarnię ASCII-o'-latarnię, która prawdopodobnie zjadła za dużo cukierków. Może stawić czoła albo w lewo, albo w prawo, ponieważ queasyness może dezorientować. Więc wyjście:

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

lub

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

Którykolwiek wolisz. Może być nawet różny dla różnych liczb powyżej 31.

Najkrótszy kod w bajtach wygrywa.

Hobby Calvina
źródło

Odpowiedzi:

8

JavaScript (ES6), 185 142 140 136 bajtów

Teraz możesz ćwierkać dyni!

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":"^")

Prawdopodobnie wciąż jest miejsce na ulepszenia ...

ETHprodukcje
źródło
Ta x^n>30sztuczka początkowo mnie zdezorientowała, ale kiedy zorientowałem się, co się dzieje, bezwstydnie ją ukradłem, aby poprawić swoją odpowiedź. W ramach rekompensaty i tak głosuję za to.
Neil
8

아희 (Aheui) , 914 bajtów

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

Wypróbuj tutaj! (skopiuj i wklej kod ręcznie)

Aheui może nie jest do gry w golfa, ale mimo to jest fajna. :)

Wyjścia:

N = 10

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

N = 31

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

N = 40

 _____I_____ 
| | | | | | |
| |o| |o| | |
| | |^| | | |
| |XXXXX| | |
|_|_|_|_|_|_|
JungHwan Min
źródło
4

Galaretka , 73 bajty

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

Pełny program
TryItOnline!

Może być możliwe do golfa to przy pomocy odbiciu ŒḄ.

W jaki sposób?

“ẋƥḷỊ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
Jonathan Allan
źródło
3

Rubin, 137 bajtów

Punkty twarzy pozostawione na i po 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])}}

Niegolfowany w programie testowym

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]
Level River St
źródło
3

Węgiel drzewny , 71 bajtów

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

Uwaga : Ten kod nie działa w ostatnim zatwierdzeniu od momentu opublikowania, ponieważ indeksowanie łańcuchów jest zepsute. Powinien jednak działać w tej wersji od 25 października. Działa również z powodzeniem w wersji aktualnie w Try It Online .

Wyjaśnienie

Węgiel drzewny to język zaprojektowany dla sztuki ASCII. Dane wyjściowe są umieszczane na kanwie, która jest drukowana na końcu programu.

Ustawiać

Uzyskaj dane wejściowe i oblicz znaki twarzy:

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

Narysuj dyni

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

Po tej pętli mamy

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

Kolejny:

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

Wynik:

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

Narysuj twarz

Narysujemy twarz, patrząc w prawo, i w razie potrzeby zmienimy ją później.

↙↙←←ε      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

Wynik (do wprowadzenia 31):

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

Zastanów się, czy to Halloween:

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

Ostateczne wyjście:

 _____I_____ 
| | | | | | |
| |^| |^| | |
| | |^| | | |
| |VvVvV| | |
|_|_|_|_|_|_|
DLosc
źródło
2

Pyth - 84 bajtów

Ręczna kompresja bazy.

+dj\Im*5\_2Xjb@_MBsMc5@L"^|_V ve"jC"mËÝ8|0càvll+DzSïë¬Ê"7qQ31"Vve"?>Q31"XXo""Vv^

Pakiet testowy .

Maltysen
źródło
2

PHP, 178 176 171 bajtów

$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|_|_|_|_|_|_|";

można zapisać 5 bajtów z fizycznymi podziałami linii. Uruchom z -r.

Tytus
źródło
1

V , 97 bajtów

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

Wypróbuj online!

Jestem rozczarowany, jak długo to się skończyło. Jest bardziej skomplikowany niż zwykle, ponieważ V ledwo radzi sobie z liczbami, wiele bajtów pochodzi z tworzenia hackowanych warunków warunkowych. Zamieściłem szczegółowe wyjaśnienie, ale wymyślenie go zajęło dużo czasu, więc mógłbym zająć się tym później. Oto zrzut heksowy:

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                                       .

Do Twojej wiadomości będzie działać bardzo wolno. Zajmie to około 10 sekund. Wiem, dlaczego tak się dzieje, i szukam rozwiązań.

DJMcMayhem
źródło
1

Pyth, 76 bajtów

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

Wypróbuj online.

Nie używa kompresji. (Próbowałem użyć niektórych do wersji ciągu danych twarzy, ale skończyło się na tej samej długości).

PurkkaKoodari
źródło
1

Java 7, 237 bajtów

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("~","| ");}

Kod niepoznany i testowy:

Wypróbuj tutaj.

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));
  }
}

Wydajność:

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

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

 _____I_____ 
| | | | | | |
| |o| |o| | |
| | |^| | | |
| |XXXXX| | |
|_|_|_|_|_|_|
Kevin Cruijssen
źródło
Czy Twój golfowy kod nie jest tylko funkcją, a nie pełnym programem?
Angzuril,
JavaScript w ETHproductions to tylko funkcja, nie rozumiem, dlaczego miałoby być inaczej w Javie
brianush1,
1

C ++, 222 204 194 bajtów

-18 bajtów dzięki Kevin Cruijssen i -10 bajtów za wyraźną górną część

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);}

Nie golfił

#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);
}
Karl Napf
źródło
1
Programowałem w C ++ tylko wiele lat temu, więc tak naprawdę nie pamiętam zbyt wiele, ale czy nawiasy są obowiązkowe w przypadku kontroli trójskładnikowych? Jeśli nie, możesz usunąć wiele z nich. Ponadto, jest to możliwe, aby zmienić &&się &i ||do |? Podsumowując, czy 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 bajty ) kompiluje się i uruchamia?
Kevin Cruijssen
1
@KevinCruijssen Tak masz rację. i-oObowiązkowy jest tylko nawias wokół , więc 204 bajty,
Karl Napf
1

PHP, 222 bajtów

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;

Wydajność

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| | |
|_|_|_|_|_|_|
Jörg Hülsermann
źródło
1

Groovy Script, 273 265 216 202 198 bajtów

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|_|_|_|_|_|_|"

Wersja bez golfa

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"}| |
|_|_|_|_|_|_|"""

Wypróbuj tutaj

Edytować

Jak wspomniał Tytus, mogę zaoszczędzić trochę rozmiaru i < 32zamiasti in 1..31

Edytuj 2

Usunięto wszystkie możliwe przestrzenie wokół operatorów ... Na początku zapomniałem o tym

Edytuj 3

Ponownie przepisano warunki trójskładnikowe, aby użyć zapisanej zmiennej, zastąpiono ;ją nowymi liniami, usunięto jawną definicję zmiennej

Edytuj 4

Jak wspomniał Otávio, mogę zmienić kolejne 4 bajty, jeśli przejdę z | |${j ? ' |^| | ' : ' | |^| '}| |na| | |${j ? '^| ' : ' |^'}| | |

Victor A.
źródło
A może i < 32zamiast i in 1..31?
Tytus
Nie możesz pozbyć się przestrzeni wokół operatorów?
Pozew Fund Moniki w dniu
Tak, mogę ... Całkowicie zapomniałem o tym, dziękuję
Victor A.
Ponieważ instrukcje Groovy mogą być oddzielone znakiem nowej linii lub ;oba mają długość 1 znaku, sugerowałbym preferowanie nowego wiersza ze względu na czytelność. I zrezygnuj z dobrych nawyków kodowania, pozbądź się ich inti def.
manatwork
W printpierwszej trójce zapisz warunek w zmiennej as (j=i>30), a następnie w następnych 2 użyj po prostu jzamiast powtarzać ten sam i>30warunek.
manatwork
1

JavaScript (ES6), 163 125 bajtów

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>

Teraz bezwstydnie kradnie sztuczkę @ ETHproduction dotyczącą pozycjonowania twarzy. Kodowanie: 0to oko 1i 2zęby, 3lewa strona, 4prawa strona i 5grzbiet nosa.

Neil
źródło
0

Rubin, 168 bajtów

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

Prawdopodobnie daleki od optymalnego. Wymaga bibliotek base64i zlib.

Wywołaj jako funkcję lambda.

dkudriavtsev
źródło
0

Python 2, 167 bajtów

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+'|'])
TFeld
źródło
-1

C # 6, 223 215 bajtów

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|_|_|_|_|_|_|");

Cały program bez golfa:

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|_|_|_|_|_|_|");
        }
    }
}
IonutC
źródło
2
To tylko część kodu, a nie funkcja lub program, możesz go skompilować na taki, Func<int, string>który jest zwykle najkrótszym sposobem.
TheLethalCoder,
1
Założę się, że możesz zaoszczędzić trochę bajtów, przenosząc warunki do Writezamiast deklarować i definiować s.
Tytus
2
A dlaczego \r\nzamiast tylko \n?
Tytus
nikt nie powstrzyma cię przed zrobieniem tego lepiej
IonutC
3
Po prostu ci pomagają!
MrPaulch