セブンスラッシュディスプレイ


99

0から9までの数字の空でない文字列を取り込んで、スラッシュ(、)を使用して7セグメントディスプレイにどのように表示されるかを出力するプログラムを作成します。/\

これらは正確な数字の形状です:

/\  
\ \
 \/

 \
  \


/\
 /
 \/

/\
 /\
  /

 \
\/\

/
\/\
  /

/
\/\
 \/

/\
  \

/\
\/\
 \/

/\
\/\
  /

ある桁が次の桁に続く場合、それらは、斜めのスペースを挟んで、斜め上および右に連鎖します。したがって、たとえば、次の203ようになります。

    /\
     /\
  /\  /
  \ \
/\ \/
 / 
 \/

1キャラクターは他のキャラクターと同じ量のスペースを取ることに注意してください。の2行は、1ディスプレイの右側ではなく、左側にあります。

だからこれ159114になります:

           \
          \/\
         \
          \
       \
        \
    /\
    \/\
  /   /
  \/\
 \  /
  \

数字が互いに対して正しい位置にある限り、出力には先頭/末尾の改行またはスペースの量と組み合わせがあります。

ので159114、これも有効です:



          \        
         \/\     
        \
         \
      \    
       \          
   /\     
   \/\
 /   /
 \/\         
\  /
 \    


stdinまたはコマンドラインから入力を取得するか、文字列を取得する関数を記述します。結果を標準出力に出力するか、関数を作成する場合は文字列として返すことができます。

9の数字0の任意の非空の文字列は、一桁の文字列(例えば含めて、動作するはずです8)と、先行ゼロを持つ文字列(例えばでは007、ゼロがない印刷する必要があります)。

バイト単位の最短コードが優先されます。


41
完全にオフトピック:これはすごいですね!
マーティン

4
これは本当にクールです。ただし、この質問にkolmogorov-complexityが適切かどうかはわかりません-一定の出力が必要だと思いましたか?
アレクサンダー・ブレット

1
@ alexander-brett iircは当初の意図でしたが、最近では、コードの大部分がおそらくハードコーディングになりそうな問題に使用されています。
地下

これで私は... WOW!すごい!
レナエライダー

質問:空の文字列または数字以外の文字を含む文字列を処理する必要がありますか?
フレデリック

回答:


9

CJam、77 71 70 69 63 62バイト

r_,5*_Sa*a*\{~"÷Ðëúܾ¿ðÿþ"=i2bS"\/"4*W<+.*3/..e>2fm>2m>}/Wf%N*

すべての文字は印刷可能であるため、コピーと貼り付けは問題なく機能するはずです。

CJamインタプリタでオンラインで試してください。

アイデア

入力の桁数nを調べて、出力をカバーするのに十分な大きさのスペースを押し出すことから始めます。実装では、この正方形は1文字の文字列の2次元配列としてエンコードされます。

長さ2n + 1の正方形は単純な実装にはちょうどいい(つまり、周囲の空白がない)が、長さ5nの 1つを使用して数バイトを節約する。ありがたいことに、周囲の空白は許可されます。

8の 7つのスラッシュ表現の行を逆にすると、次のようになります。

 \/
\/\
/\

すべての数字の表現は、I 8ビットの整数として符号化することができる番目のビットが0 I IFF 番目の文字は空白で置き換えられ得るべきです。0から9の数字の場合、結果の整数は

247 208 235 250 220 190 191 240 255 254

次のISO-8559-1文字に対応します。

÷Ðëúܾ¿ðÿþ

入力の各桁について、対応する8ビット整数を選択した後、8の表現のi 番目の文字を 正確にa i回繰り返します。ここでaiは整数のi 番目のビットです。これにより、1文字または0文字の文字列の配列がプッシュされます。この配列を長さ3のチャンクに分割することにより、各要素が表現の行に対応する配列を取得します。

次に、正方形を表す文字列と数字を表す文字列のベクトル化された最大値を計算します。文字列/\は文字列よりも大きい ので、正方形のスペースを置き換えます。ただし、空の文字列はstringよりも小さい ため、数字表現の空の文字列は正方形のスペースを保持します。

行と列を2単位ずつ回転させて、次の数字表現を正方形の適切な部分に配置し、入力の残りの数字についてプロセスを繰り返します。

最後に、各行を反転し、個々の行の間に改行を挿入します。

コード

r_,      e# Read a token from STDIN and push the length of a copy.
5*_      e# Multiply the length by 5 and push a copy.
Sa*      e# Repeat the array [" "] that many times.
a*       e# Repeat the array [[" " ... " "]] that many times.
\{       e# For each character C in the input:
  ~      e#   Push eval(C), i.e., the digit the character represents.

  "÷Ðëúܾ¿ðÿþ"

         e#   Push the encodings of all 10 seven slash representations.

  =      e#   Select the proper one.
  i2b    e#   Push the resulting characters code point in base 2, i.e., its bits.
  S      e#   Push " ".
  "\/"4* e#   Push "\/\/\/\/".
  +W<    e#   Concatenate and eliminate the last character.
  .*     e#   Vectorized repetition.

         e#   For the digit 5, e.g., we have [1 0 1 1 1 1 1 0] and  " \/\/\/\" on
         e#   the stack, so .* yields [" " "" "/" "\" "/" "\" "/" ""].

  3/     e#   Divide the representation into chunks of length 3, i.e., its lines.
  ..e>   e#   Compute the twofold vectorized maximum, as explained above.
  2fm>   e#   Rotate each line to characters to the right.
  2m>    e#   Rotate the lines two units down.
}/
Wf%      e# Reverse each line.
N*       e# Place linefeeds between them.

正方形の辺の長さが2n + 3より小さい場合、最後の回転は出力を台無しにします。以来≥2N + 3を5Nすべての正の整数のnは、正方形が、これを防ぐのに十分な大きさです。


ここにコードのbase64バージョンを投稿するのが賢明でしょうか?
TRiG

1
+1ですが、正直に言うと、私はCJamらを望んでいました。この1つを座るだろう:p
primo

@primo:Pythと数学の質問についても同じように感じています。:P 言葉の整理でオタクになったので、パーティーに少し遅れました。この質問を思い出したのは、今朝あなたが編集するまででした。
デニス

@Dennisの課題は、以前よりもはるかに速く進むようです。私はまだ2週間前の1つに取り組んでいます:p
primo

1
私は、CJamのバイトカウントが最小になることを期待して、常に最初にCJamを探します。私はまだ失望していません。
エンジニアトースト

25

Pythonの3、189の 183 174バイト

s="a%sa"%input()
while s[1:]:b,a,c,d,e,f,g=[c*(ord(n)>>int(s[~(n>"Ͱ")],16)&1)or" "for c,n in zip("\/"*4,"ΟϭŅͭͱͼϻ")];S=len(s)*"  ";print(S+a+b,c+d+"\n"+S+e+f+g);*s,_=s

圧縮は私には問題ないように見えますが、7つの変数を捨てる良い方法を見つけるのに苦労しています...

ありがたいことに、空白の規則に関する仕様はかなり緩和されています。これは、先行/末尾の空白が多いためです。

拡張:

s="a%sa"%input()
while s[1:]:
  b,a,c,d,e,f,g=[c*(ord(n)>>int(s[~(n>"Ͱ")],16)&1)or" "
                 for c,n in zip("\/"*4,"ΟϭŅͭͱͼϻ")]
  S=len(s)*"  "
  print(S+a+b,c+d+"\n"+S+e+f+g)
  *s,_=s

説明

変数によって表されるセグメントの位置は次のとおりです。

    ab               /\
    efg               /\
  ab cd            /\  /
  efg              \ \
ab cd            /\ \/
efg               /
 cd               \/

各セグメントは、単一の2バイトUnicode文字によってエンコードされます。たとえば、次のようにのセグメントをϻエンコードしgます。

bin(ord("ϻ")) = bin(1019) = "0b1111111011"
                               ^^^^^^^^^^
                               9876543210

確かに、27セグメントディスプレイの右下セグメントを使用しない唯一の数字です。


19

C、1098の 345 323 319バイト

1回 目2 3回目の試行。最後に、画面バッファーを捨てて数バイトを節約することにしました。このプログラムは、数字のパラメーターを取り、数字を7セグメント形式で出力します。

初めての参加者。ただ楽しみのために。穏やかな。

a[]={100489,2056,98569,67849,2440,67969,100737,2057,100745,67977},i,j,k,n,m;char*c=" /\\";
#define f(q,r) for(q=0;q<(r);q++)
#define P(w) putchar(w)
#define Q(d,i,j) P(c[a[v[1][d]-48]>>(i*3+j)*2&3])
main(w,char**v){f(i,n=strlen(v[1]))f(k,(m=n-i-1)?2:3){f(j,m*2)P(32);f(w,3)Q(m,k,w);if(!k&&i)f(w,2)Q(m+1,2,w+1);P(10);}}

拡張、警告なし:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int a[]={100489,2056,98569,67849,2440,67969,100737,2057,100745,67977};
char *c=" /\\";
#define f(q,r) for(q=0;q<(r);q++)
#define P(w) putchar(w)
#define Q(d,i,j) P(c[a[v[1][d]-48]>>(i*3+j)*2&3])
int main(int w, char **v)
{
    int i,j,k,n,m;
    f(i,n=strlen(v[1])) {
        m=n-i-1;
        f(k,m?2:3) {
            f(j,m*2) P(32);
            f(w,3) Q(m,k,w);
            if (!k&&i) f(w,2) Q(m+1,2,w+1);
            P(10);
        }
    }
}

西で最速の銃。私は今、私のものを圧縮しています。
アレクセイバーディン

15
おい!コードゴルフへようこそ。このチャレンジの目的は、コードを可能な限り短くすることです。そのため、スペースの削除、ステートメントの短縮などに関して最適化を行い、投稿の先頭で言語でバイトカウントを報告する必要があります。素晴らしい最初の投稿!参考までに、最初の投稿の長さは1,098バイトです。
ケード

ありがとう。言語とバイトカウントを追加しました。私のオリジナルにもコメントと使用方法があります。:)
一部のユーザー

ヒント:すべての変数名を単一文字に変更します。また、 `for(i = 0; i <digit` alot、多分それをマクロに置き換えますか?
Joshpbarron

ここで良い仕事。スコアをより競争力のあるものにするには、Cでのゴルフのヒントをご覧ください。
アレックスA.

14

JavaScriptの、192の 178 167 162バイト

f=x=>{n=b="\n";for(k in x)for(i=0;i<8;)b+=("î\xA0Öô¸|~àþü".charCodeAt(x[k])>>i++&1?i%2?"/":"\\":" ")+(i%3?"":n+"  ".repeat(k));return b.split(n).reverse().join(n)}

使用法:f("1337");戻ります

      /\
        \
    /\   
     /\
  /\  /
   /\
 \  /
  \

ES6の機能を使用し、セミコロンや括弧の省略などにより実装に依存する動作が発生する場合がありますが、Firefoxで動作します。

拡張:

f=x=>
{
    n = b = "\n";

    for (k in x)
        for (i=0; i<8;)
            b += ("î\xA0Öô¸|~àþü".charCodeAt(x[k]) >> i++ & 1? i%2? "/" : "\\" : " ") + (i%3? "" : n+"  ".repeat(k));

    return b.split(n).reverse().join(n)
}

説明:

l各桁の形状に対応する10個のシングルバイト文字を含む配列です。たとえば、数字0は次の文字で表されますî

/\        11
\ \  -->  101  --> 11 101 110 = î
 \/       011

入力文字は、対応するものを表す形状を保持する配列のキーとして使用され、ビットごとに読み取られます。


2
ある==0==1前に実際に必要?。intはjsのブール値と見なされませんか?@後悔
アレクセイバーディン

1
@Regret:"w\x05k/\x1D>~\x07\x7F?"ビットごとに反転した各文字がになり"\xee\xa0\xd6\xf4\xb8|~\xe0\xfe\xfc"、これらはそれぞれ印刷可能です。これにより、さらに8バイトが与えられます。しかし、十分ではありません...
アレクセイバーディン

1
かっこを削除することで2バイトを削ることができf=(x)=>{}ます。1つの引数だけでは必要ありません。
Scimonster

あなたは絶対に正しい、@ Alexey。それを変えます。
後悔

動作しますか?偽の文字でさらに6行取得します。
edc65

10

Perl-103バイト

#!perl -n
print$i+$%2?U^(u,$i--%2?v9:z)[$i<4+$%2&vec$_,4*$-3-$i,1]:$/.!($i=$--)
while$+=2*y/0-9/wPkz\\>?p~/

上記には6つの印刷できない文字が含まれており(ソースはIdeoneでダウンロードできます)、以下と同等です

#!perl -n
print$i+$^F%2?U^(u,$i--%2?v9:z)[$i<4+$^F%2&vec$_,4*$^F-3-$i,1]:$/.!($i=$^F--)
while$^F+=2*y/0-9/wPkz\\>?p\177~/

それぞれを^Fリテラル文字6(ACK)に\177置き換え、文字127(DEL)に置き換えることができます。

シバンは1としてカウントされ、2番目の改行は不要です。入力は標準入力から取得されます。


サンプルの使用法

$ echo 0123 | perl seven-slash.pl

      /\
       /\
    /\  /
     /
   \ \/
    \
/\
\ \
 \/

$ echo 456789 | perl seven-slash.pl

          /\
          \/\
        /\  /
        \/\
      /\ \/
        \
    /
    \/\
  /  \/
  \/\
 \  /
\/\

説明

出力は一度に1バイト生成されます。各文字は音訳され、これはを使用してビット配列として解釈されvecます。ビットは次の方法で保存されます。

   /\           56 
   \/\          234
 /\ \/   ->   56 01
 \/\          234 
  \/           01

3,5スラッシュとの間の出力交互に、ビットはそのよう56に波及01次の桁の。ビット7は使用されません。


8

C#、360 355 331バイト

こんにちは、code-golfでの最初の試み。これがC#エントリに対してあまり悪くないことを願っています。

string p(string n){var l=new string[n.Length*2+1];var i=l.Length-1;for(;i>0;){var x=@"/\\ \\/ \  \  /\ / \//\ /\ / \\/\  / \/\ // \/\\//\  \  /\\/\\//\\/\ /".Substring((n[0]-48)*7,7);for(var j=i-3;j>=0;){l[j--]+="  ";}l[i--]+=" "+x[5]+x[6];l[i--]+=""+x[2]+x[3]+x[4];l[i]+=""+x[0]+x[1];n=n.Remove(0, 1);}return string.Join("\n",l);}

使用法:p("159114");戻ります

          \
         \/\
        \
         \
      \
       \
   /\
   \/\
 /   /
 \/\
\  /
 \

拡張:

string p(string n)
    {
        var l = new string[n.Length * 2 + 1];
        var i = l.Length - 1;
        for (; i > 0; )
        {
            var x = @"/\\ \\/ \  \  /\ / \//\ /\ / \\/\  / \/\ // \/\\//\  \  /\\/\\//\\/\ /".Substring((n[0] - 48) * 7, 7);

            for (var j = i - 3; j >= 0; )
            {
                l[j--] += "  ";
            }
            l[i--] += " " + x[5] + x[6];
            l[i--] += "" + x[2] + x[3] + x[4];
            l[i] += "" + x[0] + x[1];

            n = n.Remove(0, 1);
        }

        return string.Join("\n", l);
    }

1
ほぼ3年ぶりですが、30バイトのゴルフができます。オンラインで試してみてください。301バイト。いい答えです、私から+1。
ケビンクルーイッセン

クール。自分の答えとして自由に投稿してください:)
シオン

1
いいえ、それはあなたのコードです。forループブラケットを削除し、変数を組み合わせて、少し短くしました。そして、ラムダを使用してに変更string s(string n)n=>ます。ええと、お望みならこのようにしておくことができます。:)しかし、私はあなたにクレジットするJavaへのポートを作成しました。;)
ケビンクルーイッセン

4

パイソン2、317 298 278 273.15

def f(s):
    r=range;n=len(s)*2;l=[[' ']*-~n for x in r(-~n)]
    for x in r(0,n,2):
        for i,[d,y,c]in enumerate(zip('0112012','1021012',r'\\\\///')):l[n-2-x+int(y)][x+int(d)]=[' ',c][('%7s'%(bin(ord('}(7/jO_,\x7fo'[map(int,s)[x/2]])))[2:])[i]=='1']
    for x in l:print''.join(x)

カウント中に4スペースをタブと見なしました。
非圧縮で読みやすい:

def f(s):
    r=['1111101','0101000','0110111','0101111','1101010','1001111','1011111','0101100','1111111','1101111']
    ''.join(map(lambda x:chr(eval('0b'+x)),r))
    n=len(s)*2
    l=[[' ']*(n+1) for x in xrange(n+1)]
    shifts=[(0,1,'\\'),(1,0,'\\'),(1,2,'\\'),(2,1,'\\'),(0,0,'/'),(1,1,'/'),(2,2,'/')]
    for x in xrange(0,n,2):
        y=n-2-x
        for i,[dx,dy,c] in enumerate(shifts):
            l[y+dy][x+dx]=c if r[map(int,s)[x/2]][i]=='1' else ' '
    return '\n'.join(''.join(x) for x in l)

おい!すばらしい答えですが、さらに短くするためにいくつかの変更を加えることができます。5バイトl[y+dy][x+dx]=c if r[map(int,s)[x/2]][i]=='1' else ' 'l[y+dy][x+dx]=[' ',c][r[map(int,s)[x/2]][i]=='1']節約するように変更し、3バイトreturn '\n'.join(''.join(x) for x in l)print'\n'.join(''.join(x)for x in l)節約するように変更すると、さらにいくつかの変更が加えられます。ここにリンクだ私はバイトを得骨子には、508から440へのカウントダウン
カーデ

6
ケルビンはそのスコアに非常に満足していたでしょう。
クリスチャンルパスク

3
実際の回答は272バイトですが、タブよりもスペースが短いため、もう1つ節約できます。こちらをご覧ください。とにかく273.15バイトはどうすればよいでしょうか?
mbomb007

1
273.15バイトは、@ AlexeyBurdinがデジタルプラットフォームでアナログコンピューティングを計算したことを意味します。なぜ科学ではなく、世界でここに出版したのですか?;-)
hBy2Py

1
これは、解が絶対ゼロで凍結されることだけを意味します。つまり、すでに失ったものに焦点を当てたくありません。:)
アレクセイバーディン

3

KDB(Q)、172 136バイト

{d:(9#1 2 0 2)*/:-9#'0b vs'427 136 403 409 184 313 315 392 443 441;
 -1" /\\"{m+(c,/:y),c:(count[m:0 0,x,\:0 0]-3)#0}/[3 3#/:d"J"$'(),x];}

説明

1)dすべての数字の形状でマップを作成します。

2)行列に余分なゼロを埋め込み、それらを加算します。すなわち「01」

0           0 0 0 2 0   
0           0 0 0 0 2
1 2 0 0 0 + 0 0 0 0 0
2 0 2 0 0   0
0 2 1 0 0   0

3)インデックスを使用して、でマップ" /\"および印刷し-1ます。

テスト

q){d:(9#1 2 0 2)*/:-9#'0b vs'427 136 403 409 184 313 315 392 443 441;-1" /\\"{m+(c,/:y),c:(count[m:0 0,x,\:0 0]-3)#0}/[3 3#/:d"J"$'(),x];}"0123456789"
                  /\
                  \/\
                /\  /
                \/\
              /\ \/
                \
            /
            \/\
          /  \/
          \/\
         \  /
        \/\
      /\
       /\
    /\  /
     /
   \ \/
    \
/\
\ \
 \/

これはもっと短くできると思います!!

ありがとう@hjk


1
私が見つけた唯一の削減は1 2 0 2 1 2 0 2 1(9#1 2 0 2)(-6)に置き換えることです。
hjk

1
ああ、と置き換えるenlist1#作品なので、それはまた別だ-5。
hjk

1
君はスター!更新します!原子ではないenlistので、しかし、置き換えることcount[a 0]#0はできません:(
WooiKentリー

ああ、それは私にはうまくいきましたが...奇妙なに違いありません。;)
hjk

1
実際、list plus atomは、とにかく原子を正しい長さに拡張します!あなたは私にそのようなメカニズムを思い出させた!:D
ウーイケントリー

2

ピップ、122 + 1 = 123バイト

-nフラグを使用します。コマンドライン引数を介して入力を受け取ります。

l:$.(J"\/ "@^(A_TB3M"⮐䫶ヷ㄃䓳ⴷⴥㅕ⬿⭑")@_.2<>2Ma)z:2*#ap:sXz+2RLz+2Fi,5Fj,z{c:[4-ii]//2+j(pc@0c@1):(lij)}RVp

UTF-8文字列の文字には、次のコードポイントがあります11152, 19190, 12535, 12547, 17651, 11575, 11557, 12629, 11071, 11089

わずかに未使用:

t:[120022001 222022202 122012021 122012201 220012202 120212201 120212001 122022202 120012001 120012201]
l:$.({J"\/ "@^t@a.2<>2}Ma)
z:2*#a+2
p:sXzRLz
Fi,5
 Fj,2*#a {
  x:i//2+j
  y:(4-i)//2+j
  p@y@x:l@i@j
 }
P RVp

基本的な戦略は、各数字の構成文字を見つけて、適切に歪めることです。たとえば、の場合8、これが必要です(ドットで表されるスペース):

/.
\\
/.
\\
/.

これは次のようになります。

 .  
/\. 
\/\.
 \/ 

この戦略の優れた機能は、事前にスキューされた複数の数値を単純に並べて連結できることです。

これで、/.\\/.\\/.ベース3でとしてエンコードでき1200120012ます。次に、これを10進数に変換し、UTF-8コードポイントとして扱うことができます。

この式J"\/ "@^(A_TB3M"⮐䫶ヷ㄃䓳ⴷⴥㅕ⬿⭑")@_.2<>2Maは、次のプロセスによって事前に歪んだデータを取得します。

                            Ma   Map this lambda function to each character in input:
        (A_TB3M"...")            Create list of the code points of each character in UTF-8
                                   string, converted to base 3
                     @_          Index into that list using the input character
                       .2        Concatenate 2 to the end of the base-3 value (all of the
                                   pre-skewed number grids end in 2, i.e. space)
       ^                         Split the number into a list of its digits
 "\/ "@                          Index into this string with those digits, giving a list
                                   of slashes & spaces
J                                Join the list together into a string
                         <>2     Group string two characters at a time

を使用してこれらの文字列を並べて連結したら$.、スペースのグリッド(2 * n +2正方形)を作成し、事前に歪んだグリッドをループし、歪んだ後のグリッドの対応するスペースを適切な文字。発生を確認するには、コードを修正して各ステージを印刷し、ユーザー入力を一時停止します。

処理中のアルゴリズム

グリッドは実際には逆さまに構築されています。それは数学が簡単になるように思えたからです。

使用するより良いアルゴリズムがあると確信しています。しかし、私は他の誰かのコピーを作成するのではなく、自分のアイデアを思いつきました。

ピップの詳細


2

Brainfuck-719バイト

歴史的背景のみについては、ダニエルBクリストファニに帰属 これがいつ作成されたかは正確にはわかりませんが、2003年5月9日にはインターネットアーカイブから入手できます。

の出力9は、問題の説明とは異なります。

>>>>+>+++>+++>>>>>+++[
  >,+>++++[>++++<-]>[<<[-[->]]>[<]>-]<<[
    >+>+>>+>+[<<<<]<+>>[+<]<[>]>+[[>>>]>>+[<<<<]>-]+<+>>>-[
      <<+[>]>>+<<<+<+<--------[
        <<-<<+[>]>+<<-<<-[
          <<<+<-[>>]<-<-<<<-<----[
            <<<->>>>+<-[
              <<<+[>]>+<<+<-<-[
                <<+<-<+[>>]<+<<<<+<-[
                  <<-[>]>>-<<<-<-<-[
                    <<<+<-[>>]<+<<<+<+<-[
                      <<<<+[>]<-<<-[
                        <<+[>]>>-<<<<-<-[
                          >>>>>+<-<<<+<-[
                            >>+<<-[
                              <<-<-[>]>+<<-<-<-[
                                <<+<+[>]<+<+<-[
                                  >>-<-<-[
                                    <<-[>]<+<++++[<-------->-]++<[
                                      <<+[>]>>-<-<<<<-[
                                        <<-<<->>>>-[
                                          <<<<+[>]>+<<<<-[
                                            <<+<<-[>>]<+<<<<<-[
                                              >>>>-<<<-<-
  ]]]]]]]]]]]]]]]]]]]]]]>[>[[[<<<<]>+>>[>>>>>]<-]<]>>>+>>>>>>>+>]<
]<[-]<<<<<<<++<+++<+++[
  [>]>>>>>>++++++++[<<++++>++++++>-]<-<<[-[<+>>.<-]]<<<<[
    -[-[>+<-]>]>>>>>[.[>]]<<[<+>-]>>>[<<++[<+>--]>>-]
    <<[->+<[<++>-]]<<<[<+>-]<<<<
  ]>>+>>>--[<+>---]<.>>[[-]<<]<
]
[Enter a number using ()-./0123456789abcdef and space, and hit return.
Daniel B Cristofani (cristofdathevanetdotcom)
http://www.hevanet.com/cristofd/brainfuck/]

2
私はおそらく2002年ザ・にそれを書いたインターネットアーカイブ 9に関しては、私は第二版からのパターンを使用したと思われるパヌKalliokoskiは2002年8月に彼のbrainfuckリポジトリに追加して言うマイクロプロセッサとのインタフェース、4ページ
ダニエルCristofani

1

Perl、270バイト

これに時間を無駄にすべきではありませんでした。

$e="\\";$g=" ";$_=reverse<>;$l=length;push@a,(119,18,107,91,30,93,125,19,127,95)[$1]while/(.)/g;for($i=0;$i<=$l;$i++){$j=2*($l-$i);$b=$a[$i];$c=$i&&$a[$i-1];print" "x$j,$b&1?"/":$g,$b&2?$e:$g,$g,$c&32?$e:$g,$c&64?"/":$g,"
"," "x$j,$b&4?$e:$g,$b&8?"/":$g,$b&16?$e:$g,"
"}

と置き換え[$1]while/(.)/g[$_]for/./g4バイトを節約します。と置き換えfor($i=0;$i<=$l;$i++)for$i(0..$l)9バイトを節約します。
ホッブズ

1

JavaScript(ES6)、191 206

Firefoxでスニペットを実行してテストします。

F=m=>(
  a='    \\/  /\\/\\ /  /\\  \\\\ \\'.match(/.../g),
  o=f='',r=' ',
  [for(d of m)(
    n=1e3+'¯B\x91ÿ$ê\x86A\x87ë'.charCodeAt(d)+'', // here there are 3 valid characters tha the evil stackoverflow editor just erase off, so I had to put them as hex escape
    o='\n'+f+' '+a[n[2]]+'\n'+r+a[n[1]]+o,
    r=f+a[n[3]],
    f+='  ')],
  r+o
)


//TEST

go=_=>O.innerHTML =(v=I.value)+'\n'+F(v)

go()
<input id=I value='0123456789'><button onclick='go()'>-></button>
<pre id=O></pre>


0

Java 8、341バイト

n->{int i=n.length*2,j=i+1,k=0,t;String l[]=new String[j],x;for(;j-->0;l[j]="");for(;i>0;l[i--]+=" "+x.substring(5,7),l[i--]+=x.substring(2,5),l[i]+=x.substring(0,2))for(x="/~~ ~~/ ~  ~  /~ / ~//~ /~ / ~~/~  / ~/~ // ~/~~//~  ~  /~~/~~//~~/~ /".replace('~','\\').substring(t=(n[k++]-48)*7,t+7),j=i-2;j-->0;)l[j]+="  ";return"".join("\n",l);}

@ShionのC#.NET回答のポートです。必ず彼にも賛成してください!

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

説明:

n->{                       // Method with character-array parameter and String return-type
  int i=n.length*2,        //  Two times the length of the input array
      j=i+1,               //  Index integer, starting at `i+1`
      k=0,t;               //  Temp integers
  String l[]=new String[j],//  String-array for the rows, default filled with `null`
         x;                //  Temp-String
  for(;j-->0;l[j]="");     //  Replace all `null` with empty Strings
  for(;i>0                 //  Loop `i` downwards in the range [`n.length*2`, 0)
      ;                    //   After every iteration:
       l[i--]+=            //    Append the row at index `i` with:
                           //    (and decrease `i` by 1 afterwards with `i--`)
         " "               //     A space
         +x.substring(5,7),//     And the 6th and 7th characters of temp-String `x`
       l[i--]+=            //    Append the row at index `i` with:
                           //    (and decrease `i` by 1 afterwards with `i--`)
         x.substring(2,5), //     The 3rd, 4th and 5th characters of temp-String `x`
       l[i]+=              //    Append the row at index `i` with:
         x.substring(0,2)) //     The 1st and 2nd characters of the temp-String `x`
    for(x="/~~ ~~/ ~  ~  /~ / ~//~ /~ / ~~/~  / ~/~ // ~/~~//~  ~  /~~/~~//~~/~ /".replace('~','\\')
                           //   String containing all digit-parts
          .substring(t=(n[k++]-48)*7,t+7),
                           //   and take the substring of 7 characters at index
                           //   `n[k]` as integer multiplied by 7
        j=i-2;j-->0;)      //   Inner loop `j` in the range (`i`-2, 0]
      l[j]+="  ";          //    And append the rows at index `j` with two spaces
  return"".join("\n",l);}  //  Return the rows delimited with new-lines
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.