Dibuja un ASCII-O'-Lantern para Halloween

28

Halloween está casi aquí, la fiesta después de la cual la mayoría de las personas necesita dejar de comer una dieta hueca de azúcar.

Escribe un programa que tome un entero positivo. Si el número entero es menor que 31 (del 1 al 30), muestre este jack-o'-lantern ASCII-art, mirando a la derecha como si esperara Halloween:

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

Si la entrada es 31 (la fecha de octubre de Halloween está encendida), emita el mismo ASCII-o'-lantern, pero mirando a la izquierda:

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

Si la entrada es mayor que 31, produzca una linterna ASCII-o'-linterna de aspecto hinchado que probablemente comió demasiados dulces. Puede mirar hacia la izquierda o hacia la derecha ya que el mareo puede ser desorientador. Entonces salida:

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

o

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

El que tu prefieras. Incluso puede ser diferente para diferentes números por encima de 31.

El código más corto en bytes gana.

Pasatiempos de Calvin
fuente

Respuestas:

8

JavaScript (ES6), 185 142 140 136 bytes

¡Ahora puedes tuitear una calabaza!

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

Probablemente todavía hay margen de mejora ...

ETHproducciones
fuente
Ese x^n>30truco me confundió al principio, pero cuando descubrí lo que estaba sucediendo, lo robé descaradamente para mejorar mi respuesta. Como compensación, te doy un voto positivo por ello de todos modos.
Neil
8

아희 (Aheui) , 914 bytes

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

Pruébalo aquí! (copie y pegue el código manualmente)

Puede que Aheui no sea para jugar al golf, pero de todos modos es divertido. :)

Salidas:

N = 10

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

N = 31

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

N = 40

 _____I_____ 
| | | | | | |
| |o| |o| | |
| | |^| | | |
| |XXXXX| | |
|_|_|_|_|_|_|
JungHwan Min
fuente
4

Gelatina , 73 bytes

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

Programa completo
TryItOnline!

Podría ser posible campo de esto con la ayuda de rebote, ŒḄ.

¿Cómo?

“ẋƥḷỊ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
fuente
3

Rubí, 137 bytes

Puntos de la cara en y después del 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])}}

Sin golf en el programa de prueba

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
fuente
3

Carbón , 71 bytes

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

Nota : Este código no funciona en la confirmación más reciente a partir de la publicación, porque la indexación de cadenas está rota. Sin embargo, debería funcionar en esta versión desde el 25 de octubre. También se ejecuta con éxito en la versión actualmente en Try It Online .

Explicación

El carbón es un lenguaje diseñado para el arte ASCII. La salida se coloca en un lienzo, que se imprime al final del programa.

Preparar

Obtenga información y calcule los caracteres de la cara:

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

Dibujar la calabaza

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

Después de este ciclo, tenemos

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

Próximo:

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

Resultado:

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

Dibuja la cara

Dibujaremos la cara mirando hacia la derecha y la cambiaremos más adelante si es necesario.

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

Resultado (para entrada 31):

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

Reflexiona si es Halloween:

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

Salida final:

 _____I_____ 
| | | | | | |
| |^| |^| | |
| | |^| | | |
| |VvVvV| | |
|_|_|_|_|_|_|
DLosc
fuente
2

Pyth - 84 bytes

Compresión manual de base.

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

Test Suite .

Maltysen
fuente
2

PHP, 178 176 171 bytes

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

podría ahorrar 5 bytes con saltos de línea físicos. Corre con -r.

Titus
fuente
1

V , 97 bytes

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

Pruébalo en línea!

Estoy decepcionado de cuánto tiempo resultó esto. Es más complicado de lo habitual ya que V apenas puede manejar números, muchos bytes provienen de la creación de condicionales hacky. Publicaría una explicación detallada, pero me llevó mucho tiempo encontrarla, por lo que podría encontrarla más tarde. Aquí hay un hexdump:

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                                       .

FYI esto correrá muy lentamente. Tardará unos 10 segundos. Sé por qué sucede esto, y estoy buscando soluciones.

DJMcMayhem
fuente
1

Pyth, 76 bytes

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

Pruébalo en línea.

No usa compresión. (Intenté usar algunos para una versión de la cadena de datos de la cara, pero terminó con la misma longitud).

PurkkaKoodari
fuente
1

Java 7, 237 bytes

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

Ungolfed y código de prueba:

Pruébalo aquí

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

Salida:

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

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

 _____I_____ 
| | | | | | |
| |o| |o| | |
| | |^| | | |
| |XXXXX| | |
|_|_|_|_|_|_|
Kevin Cruijssen
fuente
¿No es su código de golf solo una función, no un programa completo?
Angzuril
La solución JavaScript de ETHproductions es solo una función, no veo por qué sería diferente para Java
brianush1
1

C ++, 222 204 194 bytes

-18 bytes gracias a Kevin Cruijssen y -10 bytes para la parte superior explícita

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

Sin golf

#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
fuente
1
Solo he programado en C ++ una vez hace muchos años, así que realmente no puedo recordar mucho, pero ¿son obligatorios los paréntesis para los controles ternarios? Si no, puede eliminar muchos de ellos. Además, es posible cambiar la &&a &y ||a |? Como resumen, ¿ compila y ejecuta 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 bytes )?
Kevin Cruijssen
1
@KevinCruijssen Sí, tienes razón. Solo el paréntesis i-oes obligatorio, por lo que 204 bytes,
Karl Napf
1

PHP, 222 bytes

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;

Salida

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
fuente
1

Groovy Script, 273 265 216 202 198 bytes

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

Versión sin golf

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

Pruébalo aquí

Editar

Como mencionó Titus, puedo guardar algo de tamaño en i < 32lugar dei in 1..31

Editar 2

Se eliminaron todos los espacios posibles alrededor de los operadores ... Olvidé hacerlo al principio

Editar 3

Reescribió las condiciones ternarias para usar la variable guardada, reemplazada ;por nuevas líneas, eliminó la definición explícita de la variable

Editar 4

Como se ha mencionado Otávio, puedo ahorrar otros 4 bytes si me cambio a partir | |${j ? ' |^| | ' : ' | |^| '}| |de| | |${j ? '^| ' : ' |^'}| | |

Victor A.
fuente
¿Qué tal en i < 32lugar de i in 1..31?
Titus
¿No puedes deshacerte de los espacios alrededor de los operadores?
Financia la demanda de Mónica el
Sí, puedo ... Me olvidé por completo de esto, gracias
Victor A.
Como las declaraciones Groovy se pueden separar por nueva línea o ;ambas tienen 1 carácter, sugiero que prefiera la nueva línea para facilitar la lectura. Y renunciar a los buenos hábitos de codificación, deshacerse de ellos inty def.
manatwork
En printel primer ternario, guarde la condición en una variable como (j=i>30), luego en los siguientes 2 use solo en jlugar de repetir la misma i>30condición.
manatwork
1

JavaScript (ES6), 163125 bytes

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>

Ahora roba descaradamente el truco de @ ETHproduction para posicionar la cara. Codificación: 0es un ojo, 1y 2son dientes, 3es el lado izquierdo, 4es el lado derecho y 5es el puente de la nariz.

Neil
fuente
0

Ruby, 168 bytes

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

Probablemente lejos de ser óptimo. Requiere las bibliotecas base64y zlib.

Llamada como una función lambda.

dkudriavtsev
fuente
0

Python 2, 167 bytes

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
fuente
-1

C # 6, 223 215 bytes

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

Programa completo sin golf:

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
fuente
2
Este es solo un código, no una función o programa, puede compilarlo en una Func<int, string>que generalmente es la forma más corta de hacerlo.
TheLethalCoder
1
Apuesto a que puede guardar algunos bytes moviendo las condiciones a en Writelugar de declarar y definir s.
Titus
2
¿Y por qué en \r\nlugar de solo \n?
Titus
nadie te detiene para hacerlo mejor
IonutC
3
¡Solo te están ayudando!
MrPaulch