Gerador de seta Meme ASCII

13

Especificações

Dado um número n, produza uma "seta de meme" ASCII (símbolo maior que >) , de tamanho n.

n sempre será um número inteiro positivo, maior que 0.

Exemplos

n = 2

\
 \
 /
/

n = 5

\
 \
  \
   \
    \
    /
   /
  /
 /
/

Código de amostra

Aqui está um programa de amostra, escrito em Crystal, que retorna os resultados corretos. Execute-o 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)

Regras

  • Isso é . A resposta mais curta vence. No entanto, não selecionarei uma resposta, porque a resposta mais curta pode mudar com o tempo.
  • As brechas padrão não são permitidas.
dkudriavtsev
fonte
1
Tem certeza de que isso não é uma duplicata (ou seja, você colocou isso na caixa de areia)? Eu acho que é provável que seja, mas é um pouco quase impossível procurar.
meu pronome é monicareinstate
1
Pode nser zero?
Xnor
6
Eu acho muito tolo chamar esse símbolo comum de "flecha de meme". Eles são obviamente divisas de comédia.
scatter
4
@Christian Eles são ângulos realmente divertidos
dkudriavtsev
1
@ArtemisFowl Pensei que fossem os aumentos interessante
dkudriavtsev

Respostas:

8

C (gcc) , 56 bytes

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

Experimente online!

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
fonte
5

05AB1E , 6 bytes

'\3.Λ∊

Experimente online!

Explicação

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

C64Mini / C64 BASIC (e outras variantes do CBM BASIC), 52 bytes BASIC tokenizados usados

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

Aqui está a versão não ofuscada para exaplantion:

 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

Qualquer número inserido Nna linha zero é reduzido em um, pois o TABcomando é indexado a zero; Os FOR/NEXTloops nas linhas de dois a quatro e de cinco a sete saem da parte superior e inferior se a memeseta respectivamente (representada por uma fonte deslocada Me deslocada Nno modo gráfico )

Comodoro C64 meme arrow

Shaun Bebbers
fonte
1
Você sabia que no Commodore Basic todas as palavras-chave podem ser abreviadas? Aqui está um link: c64-wiki.com/wiki/BASIC_keyword_abbreviation Por exemplo, forpode ser fO( f- shoft o), printé ?, etc.
gaborsch
1
52 bytes são enganosos no Code Golf, os binários não contam, apenas o código-fonte. Deve ser algo como isto: 0inputn:n=n-1:fOi=0ton:?tA(i)"\":nE:fOi=0ton:?tA(i)"/":nE- são necessários 57 bytes.
gaborsch
1
Conforme discutido aqui -> codegolf.meta.stackexchange.com/questions/11553/… Conto os tokens usados, pois isso é mais representativo de quanto da memória está sendo usada.
Shaun Bebbers
1
Oh, eu não sabia disso. Existe uma decisão sobre isso? Até a resposta não foi aceita lá.
Gaborsch 17/06/19
1
Meu primeiro computador foi um C16, eu fiz muita montagem sobre isso também, então, sem ofensa, eu amo o Commodore. C16 teve Básica 3,5, 80 caracteres por linha, eu também tinha um livro com as listagens ROM explicou, então eu sabia exatamente como o uso de token e anúncio funcionou,
gaborsch
4

Ruby , 111 99 77 73 68 64 57 56 bytes

-12 bytes graças a Benjamin Urquhart , -43 graças a manatwork e -2 bytes graças a Value Ink .

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

Experimente online!

Explicação:

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

Soluções alternativas (mas mais longas)

Um amigo leu essa resposta e tentou criar mais algumas abordagens. Colocá-los aqui também, para que não se percam nas vastas interwebs.

injetar e não mudar, 72 bytes

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

Experimente online!

downto, injetar e não mudar, 80 bytes

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

Experimente online!

intrigante, dois loops não aninhados, 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]}
}

Experimente online!

sessenta e cinco
fonte
Não é possível remover grande parte desse espaço em branco?
Benjamin Urquhart
1
Sim, 12 bytes no total, obrigado! Esta foi a primeira vez que enviei algo para um jogo de golfe com códigos ...
sixtyfive
Você pode achar interessantes as dicas para jogar golfe em Ruby ou mesmo as dicas para jogar golfe em <todos os idiomas> .
manatwork
Você pode substituir os loops internos por estofamento por String#rjust( Experimente on-line! ).
manatwork
Aqui apliquei algumas das dicas das 2 coleções mencionadas acima para reduzi-las para 57 caracteres: Experimente online!
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

Experimente online

Consulta T-SQL, 96 bytes

Para fazer este trabalho online, tive que fazer algumas pequenas alterações. Os espaços no início de uma linha não são exibidos no snippet online. Então, eu estou usando ascii 160 em vez disso. Ao executar no Management Studio, é possível alterar as configurações para mostrar o resultado como texto, o que resultaria nos espaços corretos neste script publicado.

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

Experimente online

t-clausen.dk
fonte
3

MarioLANG , 719 677 bytes

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

Experimente online!

Isso foi mais difícil do que o esperado ...

Charlie
fonte
3

brainfuck , 125 bytes

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

Experimente online!

++++++++++[->+>+++++++++>+++<<<]>>++>++>    ; 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
fonte
1

Carvão , 5 bytes

↘N‖M↓

Experimente online! Link é a versão detalhada do código. Explicação:

↘N

Insira um número e imprima uma linha diagonal de \s desse comprimento.

‖M↓

Reflita a linha verticalmente.

Neil
fonte
1

APL (NARS), 40 caracteres, 80 bytes

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

teste:

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

Retina 0.8.2 , 32 bytes

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

Experimente online!Explicação:

.+
$* ¶$&$* 

Gere duas linhas de n espaços.

\G.
¶$`\

Transforme a linha superior em um \ diagonal.

r`.\G
$'/¶

Transforme a linha inferior em uma /diagonal.

Neil
fonte
1

C (gcc) , 67 65 bytes

-2 bytes graças ao ceilingcat

f(n,i){for(i=~n;i++<n;)i&&printf("%*c\n",n-abs(i)+1,"/\\"[i<0]);}

Experimente online!

gastropner
fonte
1

PowerShell , 50 bytes

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

Experimente online!

Irá procurar fazê-lo para que ele só passe pelo intervalo uma vez. Nada mal para o método sem cérebro.

Veskah
fonte
1

Galho, 115 bytes

Constrói a string para trás, "retornando" no final.

Usa uma macro para gerar todos os resultados.

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

Essa macro deve estar em um arquivo e importada assim:

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

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

Você pode experimentá-lo em https://twigfiddle.com/5hzlpz (clique em "Mostrar resultado bruto").

Ismael Miguel
fonte
1

Haskell , 52 49 bytes

-3 bytes graças ao Sriotchilism O'Zaic .

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

Experimente online!

Joseph Sible-Restabelecer Monica
fonte
1
Você pode salvar um byte em g$n-1vez de g(n-1). Você também não precisa contar o valor, f=pois fnunca é referenciado.
Post Rock Garf Hunter
1

MATL, 14 13 12 bytes

Xy92*t45-Pvc

1 Byte salvo graças a @LuisMendo

Explicação

        % 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

Experimente no MATL Online

Suever
fonte
@LuisMendo Atualizado! Obrigado!
Suever 11/06/19
1

Python 3 , 90 83 bytes

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

Experimente online!

-7 bytes graças a @squid

Artemis ainda não confia em SE
fonte
83 bytes , mas eu sinto que ele ainda pode ir para baixo
Reintegrar Monica
1
Eu gostaria que isso fosse possível.
Artemis ainda não confia
Em breve ...
Reinstale Monica
Ah sim, eu esqueci disso. Talvez você deva enviar!
Artemis ainda não confia
1

Rockstar, 133 bytes

Experimente online aqui !

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

Como a Rockstar não é famosa por operações com strings, é necessário muito código para fazê-lo (recursivamente, foi ainda mais longo).

O tamanho da seta é considerado como entrada.

gaborsch
fonte
1

\ / \ /> , 74 bytes

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

Explicação: (linhas giradas com base no ponto inicial)

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
fonte
1
\/\/> (pronounced wɜrm)Obrigado, eu odeio isso. (jk, eu estou ansioso para dar-lhe uma tentativa)
Jo rei
@JoKing hahaha, tenho que usar minha inspiração na manga. (obrigado!)
torcado
0

SimpleTemplate , 100 bytes

Este foi um desafio bastante divertido, mas alguns erros no idioma dificultaram a otimização.

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

Basicamente, percorre os valores para trás, trabalhando a corda do meio para fora.


Como deve ser a resposta

Devido aos erros, o código não estava sendo interpretado corretamente.

É assim que o código seria, se o compilador não tivesse nenhum erro (86 bytes):

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

Bem, pelo menos a solução funciona: x

Ismael Miguel
fonte