ASCII Meme Ok Jeneratörü


14

Özellikler

Bir sayı verildiğinde n, ASCII "meme oku" (simgeden büyük >) boyutunda çıktı alın n.

n her zaman 0'dan büyük bir pozitif tamsayı olur.

Örnekler

n = 2

\
 \
 /
/

n = 5

\
 \
  \
   \
    \
    /
   /
  /
 /
/

Basit kod

İşte Crystal'de yazılmış ve doğru sonuçları döndüren örnek bir program. Olarak çalıştırın ./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)

kurallar

  • Bu . En kısa cevap kazanır. Ancak, bir cevap seçmeyeceğim, çünkü en kısa cevap zaman içinde değişebilir.
  • Standart boşluklara izin verilmez.

1
Bunun bir kopya olmadığından emin misiniz (yani, bunu korumalı yaptınız mı?) Bunun muhtemel olduğunu düşünüyorum, ancak aramak neredeyse imkansız.
benim zamirim monicareinstate

1
Can nsıfır?
xnor

6
Bu ortak simgeye "meme oku" demek oldukça aptalca. Açıkçası komedi şivronlar.
dağılım

4
@Christian Onlar aslında eğlenceli açıları
dkudriavtsev

2
@ArtemisFowl İlginç artışlar olduklarını düşündüm
dkudriavtsev

Yanıtlar:



8

C (gcc) , 56 bayt

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

Çevrimiçi deneyin!

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




4

C64Mini / C64 BASIC (ve diğer CBM BASIC varyantları), 52 tokenize BASIC baytı kullanılır

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

İşte exaplantion için gizlenmemiş sürüm:

 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

NSıfır satırında girilen sayı, TABkomut sıfır indekslendiğinden bir azaltılır ; FOR/NEXTDört ve beş kadar yedi sonra çıkış üst ve alt kısmı ise yoluyla hatları iki döngü memesırasıyla ok (kaydırılan ile temsil edilen Mve kaydırılmış NGrafiklerdeki modu kaynağı )

Commodore C64 meme oku


1
Commodore Basic'te tüm anahtar kelimelerin kısaltılabileceğini biliyor muydunuz? : İşte bir bağlantı c64-wiki.com/wiki/BASIC_keyword_abbreviation Örneğin, forolabilir fO( f- shoft o,) printolduğu ?gibi,
gaborsch

1
Code Golf'te 52 bayt yanıltıcıdır, ikili dosyalar sayılmaz, sadece kaynak kodu. Şöyle bir şey olmalı: 0inputn:n=n-1:fOi=0ton:?tA(i)"\":nE:fOi=0ton:?tA(i)"/":nE- 57 bayt alır.
gaborsch

1
Burada tartışıldığı gibi -> codegolf.meta.stackexchange.com/questions/11553/… Belleğin ne kadarının kullanıldığını daha iyi temsil ettiği için kullanılan simgeleri sayıyorum.
Shaun Bebbers

1
Bunu bilmiyordum. Bununla ilgili bir karar var mı? Cevap bile orada kabul edilmedi.
gaborsch

1
İlk bilgisayarım bir C16'ydı, ben de bunun üzerine bir sürü montaj yaptım, bu yüzden suç yok, Commodore'u seviyorum. C16 satır başına Temel 3,5, 80 karakter vardı, ben de ROM listeleri açıkladı bir kitap vardı, bu yüzden tam olarak
tokenizasyon

4

MarioLANG , 719 677 bayt

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

Çevrimiçi deneyin!

Bu beklenenden daha zordu ...


4

beyin , 125 bayt

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

Çevrimiçi deneyin!

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

4

Yakut , 111 99 77 73 68 64 57 56 bayt

Benjamin Urquhart sayesinde -12 bayt , insan yapımı sayesinde -43 ve Value Ink sayesinde -2 bayt .

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

Çevrimiçi deneyin!

Açıklama:

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

Alternatif (ancak daha uzun) Çözümler

Bir arkadaşım bu cevabı okuduktan sonra birkaç yaklaşım geliştirmeye çalıştı. Onları da buraya koyduktan sonra, geniş iç ağlara kaybolmamaları için.

enjekte ve unshift, 72 bayt

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

Çevrimiçi deneyin!

80 bayt

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

Çevrimiçi deneyin!

ilgi çekici, iç içe geçmiş olmayan iki döngü, 127 bayt

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

Çevrimiçi deneyin!


Bu boşlukların çoğu kaldırılamaz mı?
Benjamin Urquhart

1
Evet, toplam 12 bayt, teşekkür ederim! Bu ilk kez bir kod golf oyununa bir şey gönderdim ...
Sixtyfive

O zaman Ruby'de golf için ipuçları ve hatta <tüm dillerde> golf için ipuçları gibi ilginç şeyler bulabilirsiniz .
manatwork

Dolgu için iç halkaları String#rjust( Çevrimiçi deneyin! ) İle değiştirebilirsiniz .
manatwork

Burada 57 karaktere düşürmek için yukarıda belirtilen 2 koleksiyondan bazı ipuçlarını uyguladım: Çevrimiçi deneyin!
manatwork


3

T-SQL kodu, 80 bayt

DECLARE @ INT=3

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

Çevrimiçi deneyin

T-SQL sorgusu, 96 bayt

Bu işi online yapmak için bazı küçük değişiklikler yapmak zorunda kaldım. Bir satırın başındaki boşluklar çevrimiçi snippet'te görüntülenmez. Bunun yerine ascii 160 kullanıyorum. Yönetim stüdyosunda çalışırken, sonuçları metin olarak gösterecek şekilde değiştirmek, bu yayınlanan komut dosyasında doğru boşluklara neden olacaktır.

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

Çevrimiçi deneyin



2

Kömür , 5 bayt

↘N‖M↓

Çevrimiçi deneyin! Bağlantı, kodun ayrıntılı versiyonudur. Açıklama:

↘N

Bir sayı girin ve \o uzunlukta bir çapraz çizgi yazdırın .

‖M↓

Çizgiyi dikey olarak yansıtın.


2

APL (NARS), 40 karakter, 80 bayt

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

Ölçek:

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

1

Retina 0.8.2 , 32 bayt

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

Çevrimiçi deneyin! Açıklama:

.+
$* ¶$&$* 

İki satır nboşluk oluşturun .

\G.
¶$`\

Üst çizgiyi bir \diyagonal haline getirin .

r`.\G
$'/¶

Alt çizgiyi bir /diyagonal haline getirin .




1

PowerShell , 50 bayt

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

Çevrimiçi deneyin!

Bunu yapmak için bakacak, böylece sadece bir kez aralıktan geçecek. Ama beyin yok yöntemi için fena değil.


1

Dal, 115 bayt

Dizeyi geriye doğru oluşturur, sonunda "döndürür".

Tüm sonuçları oluşturmak için bir makro kullanır.

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

Bu makronun bir dosyada olması ve şu şekilde içe aktarılması gerekir:

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

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

Bunu https://twigfiddle.com/5hzlpz adresinde deneyebilirsiniz ("Ham sonucu göster" i tıklayın).



1

MATL, 14 13 12 bayt

Xy92*t45-Pvc

@LuisMendo sayesinde 1 bayt kaydedildi

açıklama

        % 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

MATL Online'da deneyin


@LuisMendo Güncellendi! Teşekkürler!
Suever


1

Rockstar, 133 bayt

Burada çevrimiçi deneyin !

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

Rockstar, string operasyonları ile ünlü olmadığından, bunu yapmak nispeten fazla kod gerektirir (özyinelemeli olarak daha uzundu).

Ok boyutu giriş olarak alınır.



1

\ / \ /> , 74 bayt

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

Açıklama: (satırlar başlangıç ​​noktasına göre döndürülür)

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)Teşekkürler, nefret ediyorum. (jk, denemeyi dört gözle bekliyorum)
Jo King

@JoKing hahaha, ilhamımı koluma takmalıyım. (teşekkürler!)
torcado





0

SimpleTemplate , 100 bayt

Bu oldukça eğlenceli bir mücadeleydi, ancak dildeki bazı hatalar optimizasyonu zorlaştırdı.

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

Temel olarak, döngüler değerleri geriye doğru düşündü, dizeyi ortadan dışarı doğru çalıştı.


Yanıt nasıl olmalı

Hatalar nedeniyle kod düzgün yorumlanmıyordu.

Derleyici herhangi bir hataya sahip olmasaydı kod şöyle olurdu (86 bayt):

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

Oh, en azından çözüm işe yarıyor: x

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.