Generatore di frecce meme ASCII


13

specificazioni

Dato un numero n, genera una "freccia meme" ASCII (simbolo maggiore di >) , di dimensioni n.

n sarà sempre un numero intero positivo, maggiore di 0.

Esempi

n = 2

\
 \
 /
/

n = 5

\
 \
  \
   \
    \
    /
   /
  /
 /
/

Codice d'esempio

Ecco un programma di esempio, scritto in Crystal, che restituisce i risultati corretti. Eseguilo come ./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)

Regole

  • Questo è . Vince la risposta più breve. Tuttavia, non selezionerò una risposta, poiché la risposta più breve potrebbe cambiare nel tempo.
  • Non sono ammesse scappatoie standard.

1
Sei sicuro che questo non sia un duplicato (ovvero, hai sandbox questo)? Penso che probabilmente lo sarà, ma è quasi impossibile cercare.
mio pronome è monicareinstate il

1
Può nessere zero?
xnor

6
Penso che sia abbastanza sciocco chiamare questo simbolo comune una "freccia meme". Sono ovviamente galloni commedia.
disperde il

4
@Christian In realtà sono angoli divertenti
dkudriavtsev il

1
@ArtemisFowl Ho pensato che fossero aumenti interessanti
dkudriavtsev il

Risposte:



8

C (gcc) , 56 byte

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

Provalo 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


5

05AB1E , 6 byte

'\3.Λ∊

Provalo online!

Spiegazione

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


4

C64Mini / C64 BASIC (e altre varianti CBM BASIC), 52 byte BASIC tokenizzati utilizzati

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

Ecco la versione non offuscata per l'esaplanzione:

 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

Qualsiasi numero mai immesso Nnella riga zero viene ridotto di uno quando il TABcomando viene indicizzato con zero; I FOR/NEXTloop nelle linee da due a quattro e da cinque a sette quindi emettono rispettivamente la parte superiore e inferiore se la memefreccia (rappresentata da una sorgente in modalità grafica spostata Me spostata )N

Commodore C64 meme arrow


1
Sapevi che in Commodore Basic tutte le parole chiave possono essere abbreviate? Ecco un link: c64-wiki.com/wiki/BASIC_keyword_abbreviation Ad esempio, forpuò essere fO( f- shoft o), printè ?, ecc.
Gaborsch,

1
52 byte è fuorviante in Code Golf, i binari non contano, solo il codice sorgente. Dovrebbe essere qualcosa come questo: 0inputn:n=n-1:fOi=0ton:?tA(i)"\":nE:fOi=0ton:?tA(i)"/":nE- ci vogliono 57 byte.
Gaborsch,

1
Come discusso qui -> codegolf.meta.stackexchange.com/questions/11553/… Conto i token utilizzati in quanto questo è più rappresentativo della quantità di memoria utilizzata.
Shaun Bebbers,

1
Oh, non lo sapevo. C'è una decisione al riguardo? Anche la risposta non è stata accettata lì.
Gaborsch,

1
Il mio primo computer è stato un C16, ho fatto anche molto assemblaggio su quello, quindi senza offesa, adoro Commodore. C16 aveva 3,5, 80 caratteri per riga di base, avevo anche un libro con gli elenchi della ROM spiegati, quindi sapevo esattamente come funzionavano la tokenizzazione e l'elenco,
gaborsch

4

Rubino , 111 99 77 73 68 64 57 56 byte

-12 byte grazie a Benjamin Urquhart , -43 grazie a manatwork e -2 byte grazie a Value Ink .

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

Provalo online!

Spiegazione:

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

Soluzioni alternative (ma più lunghe)

Un amico ha letto questa risposta e poi ha cercato di trovare un altro paio di approcci. Mettendoli anche qui, in modo che non si perdano nelle vaste interwebs.

iniettare e spostare, 72 byte

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

Provalo online!

downto, inject e unshift, 80 byte

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

Provalo online!

intrigante, due loop non nidificati, 127 byte

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

Provalo online!


Gran parte di quello spazio bianco non può essere rimosso?
Benjamin Urquhart,

1
Sì, 12 byte in totale, grazie! Questa è stata la prima volta che ho presentato qualcosa a un gioco di golf in codice ...
sessanta cinque,


È possibile sostituire i cappi interni per l'imbottitura con String#rjust( Provalo online! ).
arte

Qui ho applicato alcuni dei suggerimenti delle 2 raccolte sopra menzionate per ridurlo a 57 caratteri: Provalo online!
arte


3

Codice T-SQL, 80 byte

DECLARE @ INT=3

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

Provalo online

Query T-SQL, 96 byte

Per rendere questo lavoro online ho dovuto apportare alcune piccole modifiche. Gli spazi all'inizio di una riga non vengono visualizzati nello snippet online. Quindi sto usando ASCII 160 invece. Durante l'esecuzione in Management Studio, è possibile modificare le impostazioni per mostrare il risultato come testo, il che comporterebbe gli spazi corretti in questo script pubblicato.

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

Provalo online



3

MarioLANG , 719 677 byte

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

Provalo online!

Questo è stato più difficile del previsto ...


3

Brainfuck , 125 byte

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

Provalo 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
]

1

Carbone , 5 byte

↘N‖M↓

Provalo online! Il collegamento è alla versione dettagliata del codice. Spiegazione:

↘N

Inserire un numero e stampare una linea diagonale di \s di quella lunghezza.

‖M↓

Rifletti la linea in verticale.


1

APL (NARS), 40 caratteri, 80 byte

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

test:

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

1

Retina 0.8.2 , 32 byte

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

Provalo online! Spiegazione:

.+
$* ¶$&$* 

Genera due linee di nspazi.

\G.
¶$`\

Trasforma la linea superiore in \diagonale.

r`.\G
$'/¶

Trasforma la linea di fondo in una /diagonale.




1

PowerShell , 50 byte

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

Provalo online!

Cercherà di farlo in modo che passi attraverso il range solo una volta. Non male per il metodo no brain però.


1

Ramoscello, 115 byte

Costruisce la stringa all'indietro, "restituendola" alla fine.

Utilizza una macro per generare tutti i risultati.

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

Questa macro deve essere in un file e importata in questo modo:

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

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

Puoi provarlo su https://twigfiddle.com/5hzlpz (fai clic su "Mostra risultato non elaborato").



1

MATL, 14 13 12 byte

Xy92*t45-Pvc

1 byte salvato grazie a @LuisMendo

Spiegazione

        % 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

Provalo su MATL Online


@LuisMendo Aggiornato! Grazie!
Suever,


1

Rockstar, 133 byte

Provalo online qui !

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

Dato che Rockstar non è famoso per le operazioni sulle stringhe, ci vuole un sacco di codice per farlo (ricorsivamente era ancora più lungo).

La dimensione della freccia viene considerata come input.



1

\ / \ /> , 74 byte

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

Spiegazione: (linee ruotate in base al punto iniziale)

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

1
\/\/> (pronounced wɜrm)Grazie, lo odio. (jk, non vedo l'ora di provarlo)
Jo King,

@JoKing hahaha, devo portare la mia ispirazione sulla manica. (grazie!)
Torcado,




0

SimpleTemplate, 100 bytes

This was quite a fun challenge, but some bugs in the language made it hard to optimize.

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

Basically, cycles throught the values backwards, working the string from the middle out.


How the answer should be

Due to the bugs, the code wasn't being interpreted properly.

This is how the code would be, if the compiler didn't had any bug (86 bytes):

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

Oh, well, at least the solution works :x


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.