ASCII Meme Arrow Generator

13

Especificaciones

Dado un número n, genera una "flecha de meme" ASCII (mayor que el símbolo >) de tamaño n.

n siempre será un número entero positivo, mayor que 0.

Ejemplos

n = 2

\
 \
 /
/

n = 5

\
 \
  \
   \
    \
    /
   /
  /
 /
/

Código de muestra

Aquí hay un programa de muestra, escrito en Crystal, que devuelve los resultados correctos. Ejecútalo como ./arrow 10.

arrow.cr:

def f(i)
        i.times { |j|
                j.times { print ' ' }
                puts "\\"
        }
        i.times { |j|
                (i-j-1).times { print ' ' }
                puts '/'
        }
end

f(ARGV[0].to_i)

Reglas

  • Este es el . La respuesta más corta gana. Sin embargo, no seleccionaré una respuesta, porque la respuesta más corta puede cambiar con el tiempo.
  • Las lagunas estándar no están permitidas.
dkudriavtsev
fuente
1
¿Está seguro de que esto no es un duplicado (es decir, ¿lo guardó?) Creo que esto es probable, pero es un poco casi imposible de buscar.
mi pronombre es monicareinstate el
1
Puede nser cero?
xnor
66
Creo que es bastante tonto llamar a este símbolo común una "flecha de meme". Obviamente son galones de comedia.
dispersar el
44
@Christian En realidad son ángulos divertidos
dkudriavtsev
1
@ArtemisFowl Pensé que eran incrementos interesantes
dkudriavtsev

Respuestas:

8

C (gcc) , 56 bytes

f(n,i){for(i=-n;n;printf("%*c\n",i?++i+n:n--,i?92:47));}

Pruébalo en línea!

f(n,i){for(i=-n;i;printf("%*c\n",  ++i+n    ,  92   ));     //first print descending '\'s
       for(    ;n;printf("%*c\n",        n--,     47));}    // then print returning  '/'s
attinat
fuente
5

05AB1E , 6 bytes

'\3.Λ∊

Pruébalo en línea!

Explicación

   .Λ    # draw
'\       # the string "\"
         # of length input
  3      # in the south-eastern direction
     ∊   # then vertically mirror it
Emigna
fuente
4

C64Mini / C64 BASIC (y otras variantes de CBM BASIC), se utilizan 52 bytes BASIC tokenizados

 0INPUTN:N=N-1:FORI=0TON:PRINTTAB(I)"\":NEXT:FORI=NTO0STEP-1:PRINTTAB(I)"/":NEXT

Aquí está la versión no ofuscada para la explicación:

 0 INPUT N
 1 LET N=N-1
 2 FOR I=0 TO N
 3  PRINT TAB(I);"\"
 4 NEXT I
 5 FOR I=N TO 0 STEP -1
 6  PRINT TAB(I);"/"
 7 NEXT I

Cualquier número ingresado Nen la línea cero se reduce en uno ya que el TABcomando está indexado a cero; Los FOR/NEXTbucles en las líneas de la dos a la cuatro y de la cinco a la siete muestran la parte superior e inferior si la memeflecha respectivamente (representada por una fuente desplazada My desplazada Nen modo gráfico )

Commodore C64 flecha meme

Shaun Bebbers
fuente
1
¿Sabías que en Commodore Basic todas las palabras clave se pueden abreviar? Aquí hay un enlace: c64-wiki.com/wiki/BASIC_keyword_abbreviation Por ejemplo, forpuede ser fO( f- shoft o), printis ?, etc.
gaborsch
1
52 bytes es engañoso en Code Golf, los binarios no cuentan, solo el código fuente. Debe ser algo como esto: 0inputn:n=n-1:fOi=0ton:?tA(i)"\":nE:fOi=0ton:?tA(i)"/":nE- ocupa 57 bytes.
gaborsch
1
Como se discutió aquí -> codegolf.meta.stackexchange.com/questions/11553/… Cuento los tokens utilizados, ya que esto es más representativo de la cantidad de memoria que se está utilizando.
Shaun Bebbers
1
Oh, no sabia esto. ¿Hay una decisión sobre esto? Incluso la respuesta no ha sido aceptada allí.
gaborsch
1
Mi primera computadora fue una C16, también monté mucho sobre eso, así que sin ofender, amo a Commodore. C16 tenido Básica 3,5, 80 caracteres por línea, yo también tenía un libro con los anuncios ROM explicado, así que sabía exactamente la tokenización y el listado trabajó,
gaborsch
4

Ruby , 111 99 77 73 68 64 57 56 bytes

-12 bytes gracias a Benjamin Urquhart , -43 gracias a manatwork y -2 bytes gracias a Value Ink .

->i{s=[];puts (0...i).map{|j|s=(p=' '*j)+?/,*s;p+?\\},s}

Pruébalo en línea!

Explicación:

f=->i{                      # instead of a function, use a lambda
  s=[]                      # needs a helper variable *now*, for scope
  puts(                     # puts takes arbitrary num of args; \n after each
    (0...i).map{|j|         # not from 0 to i but from 0 to i-1 (*three* dots)
      s=(
        p=' '*j             # p will remain in scope inside of .map,
      )
      +?/                   # character literal instead of string
      ,*s                   # essentially appending to the array

      p+?\\                 # p is what's returned by .map, not s!

    },                      # up until here, 1st arg to display
    s                       # NOW, as the *2nd* arg, s is displayed
  )
}

Soluciones alternativas (pero más largas)

Un amigo leyó esta respuesta y luego trató de idear un par de enfoques más. Poniéndolos aquí también, para que no se pierdan en las grandes redes.

inyectar y no desplazar, 72 bytes

->n{puts (0...n).inject([]){|s,i|i=' '*(n-1-i);s.unshift i+?\\;s<<i+?/}}

Pruébalo en línea!

downto, inject y unshift, 80 bytes

->n{puts n.downto(1).map{|i|' '*(i-1)}.inject([]){|s,i|s<<i+?/;s.unshift i+?\\}}

Pruébalo en línea!

intrigante, dos bucles no anidados, 127 bytes

->n{
r=->s,c{s[0..-(c+1)],s[-c..-1]=s[c..-1],s[0..c-1];s};
n.times{|i|puts r[' '*n+?\\,n-i]}
n.times{|i|puts r[' '*n+?/,i+1]}
}

Pruébalo en línea!

sesenta y cinco
fuente
¿No se puede eliminar gran parte de ese espacio en blanco?
Benjamin Urquhart
1
Sí, 12 bytes en total, ¡gracias! Esta fue la primera vez que
envié
Entonces puede encontrar interesantes los Consejos para jugar golf en Ruby , o incluso los Consejos para jugar golf en <todos los idiomas> .
manatwork
Puede reemplazar los bucles internos para el relleno con String#rjustPruébelo en línea! ).
manatwork
Aquí apliqué algunos de los consejos de las 2 colecciones mencionadas anteriormente para reducirlo a 57 caracteres: ¡ Pruébelo en línea!
manatwork
3

Código T-SQL, 80 bytes

DECLARE @ INT=3

,@z INT=0
x:PRINT
space(@-abs(@-@z-.5))+char(92-@z/@*45)SET
@z+=1IF @z<@*2GOTO x

Pruébalo en línea

Consulta T-SQL, 96 bytes

Para que esto funcione en línea, tuve que hacer algunas modificaciones menores. Los espacios al comienzo de una fila no se muestran en el fragmento en línea. Así que estoy usando ascii 160 en su lugar. Cuando se ejecuta en el estudio de administración, es posible cambiar la configuración para mostrar el resultado como texto, lo que daría como resultado los espacios correctos en este script publicado.

DECLARE @ INT=3
SELECT space(@-abs(@-number-.5))+char(92-number/@*45)FROM
spt_values WHERE number<@*2and'p'=type

Pruébalo en línea

t-clausen.dk
fuente
3

MarioLANG , 719 677 bytes

+
+
+
+
+
+         ((((+)+++++)))<
+>======================"
+)++++++)+++++++++++((-[!)
========================#=-
) ![-    <+;)+++)---)++++)<
)=#======"=================
) >)+)+((!
+ "======#
         <))))).(((((((<
 ========">============"
>)+)+((-[!+))        -[!((((((((.)).))))+(-[!)
"========#=============#====================#<
!)                                          <
#==========================================="
                  >(((((.)))>
                  "========<"========
 ![-)).))).(((((((![-    ))+![-((+)+)<((![<
 #================#=========#========"==#="===
 >                                   !  >-!
 "===================================#  "=#

Pruébalo en línea!

Esto fue más difícil de lo esperado ...

Charlie
fuente
3

brainfuck , 125 bytes

++++++++++[->+>+++++++++>+++<<<]>>++>++>,[->[->+<<<.>>]<<<.<.>>>>>[-<+>]<+<]<<[--<<+>>]<<+>>>>>[-[-<+<.>>]<<<<<.>.>>>[->+<]>]

Pruébalo en línea!

++++++++++[->+>+++++++++>+++<<<]>>++>++>    ; Initialize with " \"
,                                           ; Get input
[->                                         ; loop and decrement n 
    [->+<<<.>>]                             ; output number of spaces, copy n
    <<<.                                    ; output \
    <.                                      ; output newline
    >>>>                                    
    >[-<+>]<+                               ; copy copy of n back to original place 
<]
<<[--<<+>>]<<+>>                            ; change "\" to "/"
>>>                             
[                                           ; second loop for bottom half
 -                                          ; decrement n
 [-<+<.>>]                                  ; output n spaces
 <<<<<.>.                                   ; output \ and newline
 >>>[->+<]>                                 ; copy n back
]
Helena
fuente
1

Carbón de leña , 5 bytes

↘N‖M↓

Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:

↘N

Ingrese un número e imprima una línea diagonal de \s de esa longitud.

‖M↓

Refleja la línea verticalmente.

Neil
fuente
1

APL (NARS), 40 caracteres, 80 bytes

{f←{⍺,⍨⍵⍴' '}⋄⊃('\'f¨k),('/'f¨⌽k←¯1+⍳⍵)}

prueba:

  h←{f←{⍺,⍨⍵⍴' '}⋄⊃('\'f¨k),('/'f¨⌽k←¯1+⍳⍵)}
  h 2
\ 
 \
 /
/ 
  h 5
\    
 \   
  \  
   \ 
    \
    /
   / 
  /  
 /   
/    
RosLuP
fuente
1

Retina 0.8.2 , 32 bytes

.+
$* ¶$&$* 
\G.
¶$`\
r`.\G
$'/¶

Pruébalo en línea! Explicación:

.+
$* ¶$&$* 

Genera dos líneas de nespacios.

\G.
¶$`\

Convierte la línea superior en una \diagonal.

r`.\G
$'/¶

Convierta la línea inferior en una /diagonal.

Neil
fuente
1

PowerShell , 50 bytes

param($n)0..--$n|%{' '*$_+'\'}
$n..0|%{' '*$_+'/'}

Pruébalo en línea!

Buscará hacerlo para que solo atraviese el rango una vez. Sin embargo, no está mal para el método sin cerebro.

Veskah
fuente
1

Ramita, 115 bytes

Construye la cadena hacia atrás, "devolviéndola" al final.

Utiliza una macro para generar todos los resultados.

{%macro a(N,s="")%}{%for i in N..1%}{%set s=('%'~i~'s
'~s~'%'~i~'s
')|format('\\','/')%}{%endfor%}{{s}}{%endmacro%}

Esta macro tiene que estar en un archivo e importarse así:

{% import 'macro.twig' as a %}

{{ a.a(<value>) }}

Puede probarlo en https://twigfiddle.com/5hzlpz (haga clic en "Mostrar resultado bruto").

Ismael Miguel
fuente
1

Haskell , 52 49 bytes

-3 bytes gracias al Sriotchilism O'Zaic .

unlines.g
g 0=[]
g n="\\":map(' ':)(g$n-1)++["/"]

Pruébalo en línea!

Joseph Sible-Reinstate a Monica
fuente
1
Puede guardar un byte con en g$n-1lugar de g(n-1). Tampoco es necesario contar el f=ya que fnunca se hace referencia.
Post Rock Garf Hunter
1

MATL, 14 13 12 bytes

Xy92*t45-Pvc

1 Byte guardado gracias a @LuisMendo

Explicación

        % Implicitly grab the input as an integer
Xy      % Create an identity matrix this size
92*     % Multiply by 92 (ASCII for '\')
t       % Duplicate the matrix
45-     % Subtract 45 from every element yielding 47 (ASCII for '/') on the diagonal
        % and -45 everywhere else
P       % Vertically flip this matrix
v       % Vertically concatenate the two matrices
c       % Convert to characters (negative numbers are replaced with a space)
        % Implicitly display the result

Pruébelo en MATL Online

Suever
fuente
@LuisMendo ¡Actualizado! ¡Gracias!
Suever
1

Python 3 , 90 83 bytes

lambda n:'\n'.join([' '*i+'\\'for i in range(n)]+[' '*(n+~i)+'/'for i in range(n)])

Pruébalo en línea!

-7 bytes gracias a @squid

Artemisa todavía no confía en SE
fuente
83 bytes , pero siento que todavía puede
fallar
1
Desearía que esto fuera posible.
Artemis todavía no confía en SE
Pronto ...
Restablece a Mónica el
Oh sí, me olvidé de eso. ¡Quizás deberías enviarlo!
Artemis todavía no confía en SE
1

Rockstar, 133 bytes

Pruébelo en línea aquí !

F takes N,S
If N is 0
Give back N

Say S+"\"
Let T be S+" "
Let M be N-1
F taking M,T
Say S+"/"

Listen to X
F taking X,""

Dado que Rockstar no es famoso por las operaciones de cadena, se necesita relativamente mucho código para hacerlo (recursivamente fue aún más largo).

El tamaño de la flecha se toma como entrada.

gaborsch
fuente
1

\ / \ /> , 74 bytes

jp100o
-84*}!o:?!x1
@+:q:p=?x:o~$:0(pa"\/"q?$~}}:
x2-:p$1-y$:0(?
.{suh?!;2

Explicación: (líneas giradas según el punto de inicio)

jp100o                        //setup
:?!x1-84*}!                   //add leading spaces, loop and decrement until 0
~$:0(pa"\/"q?$~}}:@+:q:p=?x:o //add correct slash, go back to loop or switch sides
$:0(?x2-:p$1-y                //flip direction state or continue to print
{suh?!;2.                     //remove extra data and print stack
torcado
fuente
1
\/\/> (pronounced wɜrm)Gracias lo odio. (jk, estoy deseando intentarlo)
Jo King
@JoKing jajaja, tengo que usar mi inspiración en mi manga. (¡gracias!)
torcado
0

SimpleTemplate , 100 bytes

Este fue un desafío bastante divertido, pero algunos errores en el lenguaje dificultaron la optimización.

{@set_ argv.0}{@while_}{@callstr_repeat intoS" ",_}{@setO S,"\\\n",O,S,"/\n"}{@incby-1_}{@/}{@echoO}

Básicamente, recorre los valores hacia atrás, trabajando la cadena desde la mitad.


Cómo debería ser la respuesta

Debido a los errores, el código no se interpretaba correctamente.

Así sería el código, si el compilador no tuviera ningún error (86 bytes):

{@forfrom argv.0to0step-1}{@callrepeat intoS" ",_}{@setO S,"\\
",O,S,"/
"}{@/}{@echoO}

Oh, bueno, al menos la solución funciona: x

Ismael Miguel
fuente