ASCIIミーム矢印ジェネレーター


13

仕様書

数値を指定するとn>サイズがASCIIの「ミーム矢印」(より大記号)を出力しますn

n 常に0より大きい正の整数になります。

n = 2

\
 \
 /
/

n = 5

\
 \
  \
   \
    \
    /
   /
  /
 /
/

サンプルコード

以下は、正しい結果を返す、Crystalで作成されたサンプルプログラムです。として実行します./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)

ルール

  • これはです。最短の答えが勝ちです。ただし、最短の回答は時間とともに変化する可能性があるため、回答を選択しません。
  • 標準の抜け穴は許可されていません。

1
これが重複していないことを確認します(つまり、これをサンドボックスしましたか)。これは可能性が高いと思いますが、検索することはわずかにほぼ不可能です。
私の代名詞は

1
nゼロにすることができますか?
xnor

6
この一般的なシンボルを「ミーム矢印」と呼ぶのはかなりばかげていると思います。彼らは明らかにコメディシェブロンです。
スキャター

4
@クリスチャン彼らは実際に面白い角度
-dkudriavtsev

1
@ArtemisFowl彼らは興味深い増加だと思った
-dkudriavtsev

回答:







4

C64Mini / C64 BASIC(およびその他のCBM BASICバリアント)、52個のトークン化されたBASICバイトが使用されます

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

エクスパプランションの難読化されていないバージョンは次のとおりです。

 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

N行0に入力された数値は、TABコマンドのインデックスがゼロになるため1つ減ります。FOR/NEXT〜4及び5を介してライン2のループ上部および下部出力次いで七介してIF meme矢印はそれぞれ(シフトで表されるMとシフトNグラフィクスモードでソース

Commodore C64 meme arrow


1
Commodore Basicでは、すべてのキーワードを短縮できることをご存知ですか?:ここにリンクがありますc64-wiki.com/wiki/BASIC_keyword_abbreviationは、 たとえば、forすることができfOf- shoft o、)printである?など、
gaborschは

1
Code Golfでは52バイトは誤解を招く可能性があります。バイナリはソースコードだけをカウントしません。これは次のようになり0inputn:n=n-1:fOi=0ton:?tA(i)"\":nE:fOi=0ton:?tA(i)"/":nEます。-57バイトかかります。
ガボルシュ

1
ここで説明したように-> codegolf.meta.stackexchange.com/questions/11553/…使用されているトークンをカウントします。これは、使用されているメモリの量をよりよく表しているためです。
ショーンビバーズ

1
ああ、私はこれを知りませんでした。これについて決定はありますか?答えさえそこで受け入れられていません。
ガボルシュ

1
私の最初のコンピューターはC16でしたが、私もその上で多くのアセンブリを行いました。私は正確にトークン化とリストが働いていた方法を知っていたので、C16は基本3,5、行あたり80の文字は、私はまた、ROMのリストを持つ本は、説明していた
gaborsch

4

ルビー111 99 77 73 68 64 57 56バイト

Benjamin Urquhartに -12バイト、manatworkに-43 バイト、Value Inkに -2バイト。

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

オンラインでお試しください!

説明:

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

代替(ただしより長い)ソリューション

友人がこの答えを読んでから、さらに2、3のアプローチを考え出そうとしました。広大なインターウェブに負けないように、ここにも配置します。

挿入およびシフト解除、72バイト

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

オンラインでお試しください!

downto、注入およびシフト解除、80バイト

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

オンラインでお試しください!

興味深い、2つの非ネストループ、127バイト

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

オンラインでお試しください!


その空白の多くを削除することはできませんか?
ベンジャミンアー

1
はい、合計12バイト、ありがとうございます!コードゴルフゲームに何かを提出したのはこれが初めてでした...
60

次に、Rubyでのゴルフヒント、または<すべての言語> でのゴルフヒントに興味があるかもしれません。
マナトワーク

パディングの内側のループをString#rjustオンラインで試してみてください!)に置き換えることができます。
マナトワーク

ここで、上記の2つのコレクションのヒントのいくつかを適用して、57文字に減らしました。オンラインで試してみてください。
マナトワーク


3

T-SQLコード、80バイト

DECLARE @ INT=3

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

オンラインで試す

T-SQLクエリ、96バイト

この作業をオンラインで行うには、いくつかの小さな変更を行う必要がありました。行の先頭のスペースはオンラインスニペットに表示されません。そのため、代わりにascii 160を使用しています。Management Studioで実行する場合、設定を変更して結果をテキストとして表示することができます。これにより、この投稿されたスクリプトに正しいスペースが作成されます。

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

オンラインで試す



3

MarioLANG719 677バイト

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

オンラインでお試しください!

これは予想よりも大変でした...


3

brainfuck、125バイト

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

オンラインでお試しください!

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

APL(NARS)、40文字、80バイト

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

テスト:

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





1

小枝、115バイト

文字列を逆方向に構築し、最後に「返す」。

マクロを使用して、すべての結果を生成します。

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

このマクロはファイル内にあり、次のようにインポートする必要があります。

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

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

https://twigfiddle.com/5hzlpzで試すことができます(「Show raw result」をクリックします)。



1

MATL、14 13 12バイト

Xy92*t45-Pvc

@LuisMendoのおかげで1バイト節約

説明

        % 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で試してみてください


@LuisMendo更新されました!ありがとう!
スーバー

1

Pythonの390 83バイト

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

オンラインでお試しください!

@squidのおかげで-7バイト


83バイトですが、それでもダウンする可能性があると感じています
モニカを復活させる

1
これが可能だったらいいのに。
アルテミスはまだSEを信用していない


そうそう、私はそれを忘れていました。たぶん、あなたはそれを提出するべきです!
アルテミスはまだSEを信用していません

1

ロックスター、133バイト

こちらからオンラインでお試しください!

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

ロックスターは文字列操作で有名ではないため、それを行うには比較的多くのコードが必要です(再帰的にさらに長くなりました)。

矢印のサイズが入力として取得されます。



1

\ / \ />、74バイト

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

説明:(開始点に基づいて回転した線)

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)ありがとう、嫌いだ。(jk、試してみるのを楽しみにしています)
ジョーキング

@JoKing haha​​ha、私の袖に私のインスピレーションを着なければならない。(ありがとう!)
torcado




0

SimpleTemplate、100バイト

これは非常に楽しい挑戦でしたが、言語のいくつかのバグにより最適化が困難になりました。

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

基本的に、値を逆方向に循環させ、文字列を真ん中から順に処理します。


答えはどうあるべきか

バグが原因で、コードが正しく解釈されていませんでした。

コンパイラーにバグがなかった場合(86バイト)のコードは次のようになります。

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

ああ、まあ、少なくともソリューションは動作します:x


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.