7セグメントディスプレイをエミュレートする


24

仕事

タスクは、7セグメントディスプレイの128の可能な状態のいずれかを 表示することです。

プログラムは、0またはの7文字(「ビット」)の文字列を受け入れる必要があります1。入力の最初のビットは、次の図のセグメントAに対応し、2番目のビットはBに対応します(無視dp)。

7セグ

ディスプレイをどのように表現するかはあなた次第です-単一のUnicodeまたはASCIIシンボル、 ASCIIアート、グラフィック、またはあなたが思いつくものなら何でも。ただし、各入力には独自の個別の出力が必要です。あなたが何か素晴らしいものを思いついた場合、私はあなたがいくつかの例を見せることによって賛成票を収穫できると確信しています。

ディスプレイの128の可能な状態はすべて次のとおりです。

州

ルール

  • コードゴルフ
  • 先ほど言ったように、あらゆる種類の出力が許可されていますが、指定した方がいいでしょう。
  • 入力は、stdinまたはコマンドライン引数です。

入力

1101101

出力

ASCII / Unicodeとして:
2
さまざまな種類のASCIIアート(これはあまり得意ではありません)
 _   ╺┓  ╒╗   ---
 _|  ┏┛  ╔╝     |
|_   ┗╸  ╚╛   ---
              |
              ---

codegolf.stackexchange.com/questions/997/…と密接に関連して ますか?
DavidC

@DavidCarraher:それらは関連しています、はい。私も自分でリンクしました。ただし、生成する '番号'の数が118あるため、これは少し難しいです。他の質問に対する回答のほとんどは、ここでは機能しないか、大幅に書き直す必要があります。また、ここでは異なる数値をエンコードする必要がないため、他の最適化が可能です。
daniero

あなたは正しいです。それを指摘してくれてありがとう。
DavidC

提供されたエンコーディングを使用することが要件ですか?たとえば、「1101101」は常に「2」を表す必要がありますか?
ardnew

@ardnew:はい。入力のビットの位置は、最初の画像のセグメントA〜Gのアルファベット順にマッピングする必要があります。
daniero

回答:


5

J(51)

1 2 1#"1[5 3$' #'{~,|:>0;(88707#:~7#7){>".&.>1!:1[1

出力:

1101101
 ## 
   #
 ## 
#   
 ## 

1
これは少しの努力で38文字に削ることができます1 2 1#"1' #'{~5 3$,0,.502 A.".&>1!:1]1
algorithmshark 14

16

C、106

プログラム「W00WG5WW1GW66WG4WW2GW33WG」の名前を変更できる場合、サイズは74文字です。

main(int i,char**s){
    for(s[0]="W00WG5WW1GW66WG4WW2GW33WG";i=*s[0]++;putchar(s[1][i&7]-49?i==71?10:32:42));
}

ランニング:

./a.out 1101101
 ** 
   *
 ** 
*   
 ** 

ノート:

「W」および「G」(0x47および0x57)は、値&7 = 7になるように選択されます。つまり、入力文字列を終了するヌル文字を安全にインデックス付けします。


15

ブレインファック-224

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

感嘆符を使用した印刷:

 ! 
! !
 !
! !
 !

最も読みやすいわけではありませんが、恐ろしくありません。

これが最後の場所ではないことにどれだけ近いかに驚いています。


13

追記 121 107

1 12 moveto{}5 0{0 -5 rmoveto}0 5 0 5 -5 0 0 -5 0 -5 5 0
n{49 eq{rlineto}{rmoveto}ifelse exec}forall stroke

n処理する文字列として定義する必要があるため、次のように呼び出します

gs -g7x14 -sn=1101101 lcd.ps

取得するため

image of number two

完全なセットは

complete set of characters


11

Mathematica:135 129 118、画像表示

Image[MorphologicalComponents@Import@"http://goo.gl/j3elE" /. 
      Thread[Range@7 -> IntegerDigits[#, 2, 7][[{7, 2, 6, 1, 3, 5, 4}]]]] &

「わかりやすくするために」追加されたスペース

enter image description here

編集

それらのうるさい仲間サイトユーザーの場合:外部マスクを使用しない場合:

Image[MorphologicalComponents[ColorNegate@Rasterize@8, CornerNeighbors -> False] /. 
    Thread[Range@7 ->IntegerDigits[#, 2, 7][[{7, 2, 6, 1, 3, 5, 4}]]]] &

コードは不完全なようです。プログラムをで終了させたくないと思います&
DavidC

@DavidCarraherこれは関数なので、で終わり&ます。
ベリサリウス博士

はい。ただし、何にも適用されません。どのようにして出力を取得しますか?
DavidC

2
@belisariusまだ外部リソースを埋め込んでいるという事実は好きではありません。
FUZxxl

1
以前のコメントを削除することは、他の誰かがこの議論をフォローするのを非常に難しくするので、意味がないと思います。冗談として面白いが、深刻なコードのゴルフの答えの一部ではない外部データをインポートします。-1
FUZxxl

10

APL、58 55

' _|'[1+3 3⍴0,x[1],0,(x←1 2 2 1 2 2 1×⍞='1')[6 7 2 5 4 3]]

入力例:

1101101

出力:

 _ 
 _|
|_ 

⍞='1' 入力を文字配列として受け取り、数値配列に変換します。

1 2 2 1 2 2 1×⍞='1'その配列を次のように変換します:0for blank、1for _2 for|

(x←1 2 2 1 2 2 1×⍞='1')[6 7 2 5 4 3] その配列を変数に割り当てます xセグメントF、G、B、E、D、Cを表すように並べ替える

0,x[1],0,(x←1 2 2 1 2 2 1×⍞='1')[6 7 2 5 4 3] 空白、セグメントA、および別の空白を前に連結します

3 3⍴0,x[1],0,(x←1 2 2 1 2 2 1×⍞='1')[6 7 2 5 4 3] 3x3行列に変形する

1+3 3⍴0,x[1],0,(x←1 2 2 1 2 2 1×⍞='1')[6 7 2 5 4 3] 1ベースのインデックス付けに変換します

最後に文字列' _|'を使用して、インデックスを文字に変換します


編集

' _|'[1+3 3⍴(0,1 2 2 1 2 2 1×⍞='1')[1 2 1 7 8 3 6 5 4]]

a 0を配列の前に連結し、重複するインデックスを使用して、変数の割り当てを防止することにより、3文字を削減しました


APLがサポートしている場合、from関数{は、ブラケットインデックス付けより1文字短いと思います[]
luserはドローグ

9

PHP 66バイト

<?for(;11>$i;)echo++$i&3?$argv[1][md5(¡æyÚ.$i)%8]?$i&1?~ƒ:_:~ß:~õ;

わずかな使用の改善md5:魔法式が、3つの追加のバイナリを必要はバイト
¡æおよびÚそれぞれの文字161、230、および218です。直接コピーされ、ANSI形式で保存された場合、そのまま機能するはずです。


PHP 73(70)バイト

<?for($s=327638584;3<$s;)echo++$i&3?$argv[1][7&$s/=8]?$i&1?'|':_:' ':'
';

3つのバイナリ文字を許可する場合、これを70バイトに減らすことができます

<?for($s=327638584;3<$s;)echo++$i&3?$argv[1][7&$s/=8]?$i&1?~ƒ:_:~ß:~õ;

ここƒで、、ßおよびõは、それぞれ文字131、223、および245です。

コマンドライン引数として入力を受け取ります。サンプル使用法:

$ php seven-seg.php 1101101
 _
 _|
|_

$ php seven-seg.php 0111011

|_|
 _|

私はあなたのコードを実行しようとしましたが、エラーの負荷を取得しています:(私はあなたのロジックを理解していないが、興味深いようです。
D34dman13年

1
@ D34dman生成されるメッセージは、通知(未定義の変数など)のみです。これらはphp.ini(デフォルトで既に)オフにするか、テストのために次のコードをスクリプトに追加できます。– <? error_reporting(E_ALL & ~E_NOTICE); ?>
primo

驚くばかり!私はそれをうまくやった:Dナイス!
D34dman

7

JavaScript + jQuery + HTML + CSS(210 201)

このソリューションでは、CSSスプライトと例として提供されている画像を使用しています

HTML(3)

<a>

CSS(82 71)

background:url」トリックのxemに感謝します

a{background:url(//bit.ly/VesRKL);width:13px;height:23px;display:block}

JavaScript(読みやすくするためにここに追加された改行を削除した後の125)

i=prompt();
x=-parseInt(i.substr(0,3),2)*23;
y=-parseInt(i.substr(3),2)*13.75;
$('a').css('background-position',y+'px '+x+'px');

オンラインテスト:http : //jsfiddle.net/zhqJq/3/


1
ねえ、しかし、17.937バイトの画像はどうですか?? ;)
トーマスW.

しゅう それもカウントされるべきかどうかはわかりません。これをOPに任せて決定します。
クリスチャンルパスク

<p>タグを使用display:blockして、スペースを節約するためにCSSを使用しないでください
ロベルトマルドナド14

background-image:url(bit.ly/VesRKL); => background:url(// bit.ly/VesRKL);
xem 14

@xem、ありがとう。私は私の答え編集した
クリスティアンLupascu

6

R(65文字):

plot((3^(1i*1.5:-4.5)*(1:7!=7)),col=strsplit(readline(),'')[[1]])

いくつかの超越的な数値のいくつかの緩やかな近似に依存しています...


6

Python 2-65

s=raw_input()+'0\n'
for i in`0x623C239E38D2EAA1`:print s[int(i)],

例:

echo 1101101|python2 7seg.py
0 1 0 
0 0 1 
0 1 0 
1 0 0 
0 1 0

5

PostScript:53バイナリ、87 ASCII 52バイナリ、86 ASCII

バイナリトークンを使用したプログラムのHexdump:

$ hexdump -C lcd_binary.ps 
00000000  28 34 34 30 34 30 38 30  34 30 34 30 30 30 30 34  |(440408040400004|
00000010  30 34 30 34 34 34 34 34  38 34 38 30 38 29 7b 7d  |0404444484808){}|
00000020  92 49 6e 7b 92 70 31 92  04 92 96 92 6b 92 63 92  |.In{.p1.....k.c.|
00000030  a7 7d 92 49                                       |.}.I|
00000034

このファイルダウンロードして試してください。

ASCIIトークンの使用:

(4404080404000040404444484808){}forall
n{not 1 and setgray moveto lineto stroke}forall

最初のforallループは、必要なすべての座標をスタックに配置します。座標は、必要なスペースを最小限にするために文字列に保存されます。座標は逆順です。つまり、最後の4文字はセグメントAのものです。このセグメントから(0,8)に線を引き(4,8)ます(実際には、すべての座標に48を追加する必要があります。forallすべてのASCIIコードがスタックに置かれるあります)。

2番目は、入力文字列内のforallすべての0sおよび1sをループし、グレー値に変換します。0sは白で描画され(グレー値1)、1sは黒で描画されます(グレー値0)。次に、最初のforallループがスタックに残した座標を使用して線を描画します。

Geoff Reedyのように、Ghostscriptを使用してプログラムを呼び出します。

gs -sn=1101101 lcd.ps

これは表示します: Sample output


neg 49 add(驚くべきことに)で置き換えることができると思います1 and
luserはドローグ

@luserdroog:素晴らしく、ビット単位の演算子は考えていませんでした。しかし、そうでなければなりnot 1 andませんか?それでも、ASCIIとバイナリの両方で1バイトを保存します。
トーマスW.

1ビットのビットマップを使ったきちんとした方法が必要だと思います。しかしbitshift、そのような長い言葉です。
luser droog

しかし、それは2つだけバイトのバイナリトークンです
トーマス・W.

うん。しかし、それでも私には何とかカンニングのように感じます。:)バイナリに頼る前に、読み取り可能なソースで可能な限り行う必要があると感じています。
luserはドローグ

4

APL 101 86 73 69

m←45⍴' '⋄m[¯40+⎕av⍳(⍎∊3/' ',¨⍕⍞)/')*+16;EJOQRSAFK-27=>?']←'⎕'⋄9 5⍴m

入力は画面からvia経由で行われます

1101101

次のように、空白とofで構成される9x5文字のマトリックスを生成します。

 ⎕⎕⎕
     ⎕
     ⎕
     ⎕
 ⎕⎕⎕
⎕
⎕
⎕
 ⎕⎕⎕

7桁の数値は、vector座標を選択するためにパーティションベクトルに変換されます。


頭が痛い...
ロブ

4

Mathematica 112 103 100 96 88、グラフを使用

HighlightGraph[z=GridGraph@{3,2},Pick[EdgeList[z][[{3,4,1,2,6,7,5}]],Characters@#,"1"]]&

enter image description here

Using it to show a calculator display

l = {7-> 7, 1-> 6, 0-> 63, 8-> 127, 9-> 111,3 -> 79, 5-> 109,  2-> 91, 4-> 102, 6-> 125}; 
GraphicsRow[
  HighlightGraph[z = GridGraph[{3,2}, EdgeStyle-> {White}, GraphHighlightStyle-> {"Thick"}], 
    EdgeList[z][[{3, 4, 1, 2, 6, 7, 5}]][[IntegerDigits[#, 2, 7] Range@7]]] & /@
            (IntegerDigits[8736302] /. l)]

Mathematica graphics


どのような入力を期待していますか?また[123]、[[123]]でもIntegerDigits[123]、私のためにも働きません。z強調表示なしで、のみを取得します。
DavidC

@dude試してみる `HighlightGraph [z = GridGraph @ {3、2}、Pick [EdgeList [z] [[{3、4、1、2、6、7、5}]]、Characters @#、" 1 "] ]&@ "1111111" `` :)
ベリサリウス博士

3

Python(107)

間違いなくよりゴルフ可能。

a=map(int,raw_input())
for i in(0,6,3):print' .. '*a[i]+('\n'+' .'[a[5-i/6]]+'  '+' .'[a[1+i/6]])*(2*(i!=3))

出力:

1101101
 .. 
   .
   .
 .. 
.   
.   
 .. 

説明:

a is a list of booleans extracted from the input.
When you multiply a string with a number, it will return the string repeated (number) times.
If that number happens to be zero, it returns an empty string.
i is iterated through 0 (pos A), 6 (pos G), and 3 (pos D).
' .. ' will print either section A, G, or D, depending on the value of i.
([string here])*(2*(i!=3)) will print [string here] twice only if i!=3.
Breaking down [string here]:
 - '\n' will print a newline for each repetition.
 - '  ' is the null space between horizontal sections.
 - ' .'[(bool)] will return either ' ' if (bool) is 0, and '.' if (bool) is 1.
 - 5-i/6 will return 5 if i=0 and 4 if i=6. a[5] is section F and a[4] is section E.
 - 1+i/6 will return 1 if i=0 and 2 if i=6. a[1] is section B and a[2] is section C.

3

Python 2.7(93文字):

print (' {0}\n{5} {1}\n {6}\n{4} {2}\n {3}').format(*map(lambda x:int(x)and'*'or' ',raw_input()))

説明:

stdin入力では、makeshift三項演算子を使用して*、trueを指定し、falseを指定します。これらの値を取得して、7桁表示の形式の形式ステートメントにプラグインします。ディスプレイが次のように機能する場合、最大83文字になります。

 a
b c
 d
e f
 g

ただし、順序付けにより長くなります。誰もこれを回避する方法がありますか?

例:

$ ./7seg.py
111000

 *
  *

  *

$ ./7seg.py


1111111

 *
* *
 *
* *
 *

1
素晴らしいですが、そのラムダは不要のようです:print' {0}\n{5} {1}\n {6}\n{4} {2}\n {3}'.format(*[' *'[i=='1']for i in raw_input()]);)print文のための括弧とスペースも必要ありません。
ダニエロ

うわー!インデクサーにブール値を挿入できるとは知りませんでした。ありがとう:
ブリガンド

Np。また、の>'0'代わりに=='1'and input()(代わりにバッククォートがありますが、ここの書式設定のために表示されません)raw_input()
ダニエロ

fyi、コードにバックティックが必要な場合は、トリプルバックティックを使用できますx = `input()`
ブリガンド

クール。それから私は今日も何かを学びました:)
daniero

3

ちょっとした答えが必要だと思いました...

Clojure、159文字

(print(apply str(flatten(interpose\newline(partition 3(map(fn[x](if(= x\1)\o" "))(str" "(apply str(interpose" "(map(vec(read-line))[0 5 1 6 4 2 3])))" ")))))))

上記はREPLで実行され、正しい答えを提供します。例えば:

1111111
 o 
o o
 o 
o o
 o 

少し修正して数字を投げる:

(doseq [i ["1111110" "0110000" "1101101" "1111001" "0110011" "1011011" "1011111" "1110000" "1111111" "1111011"]]
(println (apply str(flatten(interpose\newline(partition 3(map(fn[x](if(= x\1)\o" "))(str" "(apply str(interpose" "(map(vec i)[0 5 1 6 4 2 3])))" "))))))) 
(println))

収量:

 o 
o o

o o
 o 


  o

  o


 o 
  o
 o 
o  
 o 

 o 
  o
 o 
  o
 o 


o o
 o 
  o


 o 
o  
 o 
  o
 o 

 o 
o  
 o 
o o
 o 

 o 
  o

  o


 o 
o o
 o 
o o
 o 

 o 
o o
 o 
  o
 o 

nil

読みにくいですが、そこにあります!


3

Javascript 123

s=prompt(i=o='');for(m=' 0516423';i++<15;i%3==0?o+='\n':1)o+=' ─│'[~i%2&(A=+s[+m[~~(i/2)]])+(A&+'110'[i%3])];console.log(o)

「オン」状態に1つの文字のみを使用する場合、文字数を減らすことができます(101)が、読みにくくなります。

s=prompt(i=o='');for(m=' 0516423';i++<15;i%3==0?o+='\n':1)o+=' ■'[~i%2&s[+m[~~(i/2)]]];console.log(o)

+1これは印象的です。私はまだそれをリバースエンジニアリングしようとしています。すでにいくつかのことを教えてくれました!
guypursey

2

追記136

勝者ではなく、異なるアプローチ。

15 string exch{1 and 255 mul}forall
[7 3 9 13 11 5 1]{count 1 sub index 3 1 roll exch put}forall
3 5 8[.02 0 0 .05 0 0]{}image showpage

入力文字列がスタック上にあることを期待します。

$ echo '(1101101)'|cat - 7seg.ps |gs -sDEVICE=png16 -sOutputFile=6c.png -

これはさらに悪い。294で「バイナリ」ビットマップを作成します。各行が偶数バイトにパディングされていることを思い出すのに少し時間がかかりました。したがって、3x5ビットマップは5バイトで、3 msbビットが重要です。

2#1101101
(12345)exch
2 copy 64 and 0 exch put %A
2 copy 2 and 6 bitshift 2 index 32 and or 1 exch put %F B
2 copy 1 and 6 bitshift 2 exch put %G
2 copy 4 and 5 bitshift 2 index 16 and 1 bitshift or 3 exch put %E C
2 copy 8 and 3 bitshift 4 exch put
pop
3 5 1[.02 0 0 .02 0 0]{}image showpage

出力は他の出力と同じくらいいです。:(

よさそうだね。190

編集:それは逆さまと逆でした。修正されました。

(1101101)
{neg 49 add 255 mul
1 string dup 0 4 3 roll put}forall
(\377){@/g/f/e/d/c/b/a}{exch def}forall
@ a a @
b @ @ f
b @ @ f
@ g g @
c @ @ e
c @ @ e
@ d d @
4 7 8[.01 0 0 .01 0 0]{}image showpage

これは私にいくつかの面白いパターンを示しています。まだどこかにバグがありますか?
トーマスW.

うーん。ええ。(1111110)はゼロのようには見えません。これは単なる拡大されたバイトマップです。ボックスは単純化されていると思います。:(
luser droog

このビットマップアプローチの性質に似ていると思います。くならないようにする方法がわかりません。
luser droog

ここで利用可能ないくつかの軽い解説。
luserはドローグ

2

Mathematica 264

出力を正しく表示するには多くのバイトが必要だったため、今回は葉巻はありません。しかし、とにかく冗長(264文字)コードがあります。

{a, b, c, d, e, g} = {{-1, 5}, {1, 5}, {1, 3}, {1, 1}, {-1, 1}, {-1, 3}};
f@n_ := Graphics[{Yellow, Thickness[.1], CapForm["Round"],
   Line /@ {{g, c}, {g, a}, {g, e}, {e, d}, {d, c}, {c, b}, {b, a}}[[Flatten@
   Position[IntegerDigits[n, 2, 7], 1]]]}, 
   Background -> Blue, PlotRange -> {{-1, 1}, {1, 5}}, PlotRangePadding -> 1]

文字の完全なセット:

GraphicsGrid[Partition[Table[f[p], {p, 0, 128}], 16]]

characteris

数字:

{f[63], f[6], f[91], f[79], f[102], f[109], f[125], f[7], f[127], f[111]}

enter image description here


2

PHP-155文字

<?php
$y=array("   \n"," - \n","   \n","  |\n","|  \n","| |\n"); $x = $argv[1]; echo $y[$x[0]].$y[2*$x[6]+$x[2]+2].$y[$x[7]].$y[2*$x[5]+$x[3]+2].$y[$x[4]];

php 5.4型配列宣言を使用すると150文字になりますが、ラップトップにインストールしていないのでテストできませんでした。

サンプル出力。

enter image description here

説明:

最初に、7セグメント表示を5行3列に分割しました。中央の列に1行目、3行目、5行目が '-'で、それ以外の場合はスペースです。

2行目と4行目にはパイプ「|」があります 最初と最後の列の文字。これで、これらの文字の存在は入力値によってガイドされるはずです。

基本的に2つのルックアップテーブルであるルックアップテーブルを作成しました。1行目、3行目、5行目の値を計算するための最初の行。そして、2番目と4番目の行を計算するためのオフセット2(3番目のアイテム)にあるもう1つ。


2

Java-204文字

class A{public static void main(String[]a){char[]c=new char[7];for(int i=0;i<7;i++)c[i]=a[0].charAt(i)==49?i%3==0?95:'|'):32;System.out.printf(" %c %n%c%c%c%n%c%c%c",c[0],c[5],c[6],c[1],c[4],c[3],c[2]);}}

サンプル出力:

 _ 
 _|
|_ 

適切にフォーマット:

class A {
    public static void main(String[] a) {
        char[] c = new char[7];
        for (int i = 0; i < 7; i++)
            c[i] = a[0].charAt(i) == 49 ? (i % 3 == 0 ? 95 : '|') : 32;
        System.out.printf(" %c %n%c%c%c%n%c%c%c", c[0], c[5], c[6], c[1], c[4], c[3], c[2]);
    }
}

本当にforループを回避できたらいいのにと思いますが、他にもいくつか試してみましたが、それらはすべて長くなりました。これを行うにはおそらくもっと良い方法がありますが、これはコードゴルフでの私の最初の試みです。(そしてJavaはそれにとって最悪の言語のようなものです。だから、私はそれが面白いと思ったのです。)

編集:クラスの「パブリック」を取り除くことができ、7文字節約できます!

そして、ダニエル、printfを見せてくれてありがとう!(18文字が保存されました)

出力形式を書き直し、文字リテラルを10進数に変更し、12文字を保存しました。


codegolf.seへようこそ!Javaには、printfいくつかのバージョンのメソッドが導入されていますが、基本的printlnformatは1つのメソッドです(C関数など)。これは、あなたにいくつかの文字が保存されます
daniero

ここで別のトリックです:あなたはの「身体」組み合わせることができますforループと一つに更新部分を、1つの文字を保存:for(int i=7;i>0;c[--i]=a[0].charAt(i)==49?(i%3==0?95:'|'):32);
daniero

1

VBA-263

ugいですが、うまくいくと思います。適切なビット順序を表示できないので、他の人の答えから推測しています。その断片が間違っていたとしても、コード長は変わらないはずです。

Sub d(b)
Dim c(1 To 7)
For a=1 To 7
c(a)=Mid(b,a,1)
Next
x=" - "
y="|"
z=" "
w="   "
v=vbCr
MsgBox IIf(c(1)=1,x,w) & v & IIf(c(6)=1,y,z) & z & IIf(c(2)=1,y,z) & v & IIf(c(7)=1,x,w) & v & IIf(c(5)=1,y,z) & z & IIf(c(3)=1,y,z) & v & IIf(c(4)=1,x,w)End Sub

1

VBScript-178文字

m=Split("2 7 11 10 9 5 6")
s=" _ "&vbCr&"|_|"&vbCr&"|_|"
For x=1 To 7
If Mid(WScript.Arguments.Item(0),x,1)=0 Then r=m(x-1):s=Left(s,r-1)&" "&Right(s,Len(s)-r)
Next
MsgBox s

ありがとう!カップルの骨頭の間違いは私に6文字を要した。関数ライン引数を取得するために不条理に長い呼び出しを行っても、これをVBAのサイズまでほぼ削減できます。
コミンテルン

コードが改行文字なしで機能する場合を除き、それらもカウントする必要があります。私の数によれば、これは178文字です。
マナトワーク

1

CJam-29

l0N]s7078571876784728737Ab\f=

CJamは、GolfScript- http: //sf.net/p/cjamに似た、私が開発している新しい言語です。説明は次のとおりです。

l読み出し入力からのラインは、
0数0は
N改行文字列に初期化済み変数である
]配列にギャザースタック上の要素
s従って、与えられた入力にゼロと改行を追加、文字列に値(アレイ)に変換
7078571876784728737され数値(Pythonで使用したのと同じ数値ですが、16進数でした)
Aは、10に事前初期化された変数
bがベース変換を行い、配列[7 0 7 8 ... 3 7]
\がスタック上の最後の2つの値を交換します
f=を適用する=入力文字列(およびゼロと改行)に演算子(ここではインデックス配列アクセス)を各数字7、0、7、...
インデックス7は追加されたゼロに対応し、8は追加された改行に対応します。

私のPythonソリューションはまったく同じことを行います(数字の分離が文字列変換を介して行われることを除いて)


ここで何を見ているの?コードの簡単な説明を提供しますか?
ダニエロ

@daniero説明を追加しました
aditsu

1

VBA、188文字

必須の空白のみを含める場合は、188文字を入力する必要があることに注意してください。VBAエディターにコピーすると、IDEによって展開されます。

Sub f(i)
Dim c() As Byte
m=Split("1 6 10 9 8 4 5")
c=StrConv(" _  |_| |_|",128)
c(3)=10
c(7)=10
For x=1 To 7
If Mid(i,x,1) = 0 Then c(m(x-1))=32
Next
MsgBox StrConv(c,64)
End Sub

残念ながら、VBScriptには厳密に型指定されたByte配列がありません。または、このメソッドを使用すると、はるかに短くなる可能性があります。


1

Javascript(ECMAScript 2016)-108バイト

console.log(([a,b,c,d,e,f,g]=[...prompt()].map((x,i)=>+x?'_||'[i%3]:' '),` ${a}
${f}${g}${b}
${e}${d}${c}`))

これはおそらくさらにゴルフすることができますが、私は何も考えられません。


サイトへようこそ!それはいい最初のエントリです:)
daniero

1

JavaScript、148バイト

e=>(e[0]==1?" #\n":"\n")+(e[5]==1?"#":" ")+(e[1]==1?" #\n":"\n")+(e[6]==1?" #\n":"\n")+(e[4]==1?"#":" ")+(e[2]==1?" #\n":"\n")+(e[3]==1?" #\n":"\n")

オンラインでお試しください! (フッターはNode.jsです.input.tio

バイナリフラグでABCDEFGの入力を受け入れ、以下を返します。

 #
# #
 #
# #
 #

0

SmileBASIC、136バイト

DIM A[7,2]COPY A,@L@L?DATA.,1,1,3,4,3,6,1,4,0,1,0,3,1INPUT X$FOR I=0TO 6M=I MOD 3GBOX A[I,1],A[I,0],A[I,1]+!M,A[I,0]+!!M,-VAL(X$[I])NEXT

出力はグラフィカルです。


0

05AB1E、4 バイト

C₄+ç

オンラインで試すか、、すべての可能な入力を確認します

すべての可能な入力検証を参照してください上記のリンクを参照して、各入力に使用されるマッピングを確認してください。

説明:

これにより、次のようなルールが悪用されます。

ディスプレイをどのように表現するかはあなた次第です- 単一のUnicodeまたはASCIIシンボル、ASCIIアート、グラフィック、またはあなたが思いつくものなら何でも。ただし、各入力には固有の出力が必要です。

C       # Convert the (implicit) input from binary to integer
 ₄+     # Increase it by 1000
   ç    # Convert it to a unicode character with this value (and output implicitly)

output-formatを使用したチャレンジの精神での代替案:

 -
| |
 -
| |
 -

38 バイト

Σ•L7וNè}εi" -| | "14∍2ôNèëðº]J24S5∍£»

間違いなくゴルフできます。

オンラインそれを試してみたり、すべての可能な入力を検証します

説明:

Σ       }          # Sort the (implicit) input-digits by:
 L7וNè           #  The digit at the same index in the compressed integer 1367524
                   #   i.e. "1101101" → ["1","0","1","1","1","0","1"]
ε                  # Then map each digit to:
 i                 #  If it's a 1:
  " -| | "         #   Push string " -| | "
          14      #   Lengthen it to size 14: " -| |  -| |  -"
             2ô    #   Split it into parts of 2: [" -","| ","| "," -","| ","| "," -"]
               Nè  #   Index into it
 ë                 #  Else (it's a 0):
  ðº               #   Push "  " (two spaces) instead
    ]              # Close both the if-else and map
                   #  i.e. ["1","0","1","1","1","0","1"]
                   #   → [" -","  ","| "," -","| ","  "," -"]
J                  # Join everything together to a single string
                   #  i.e. [" -","  ","| "," -","| ","  "," -"] → " -  |  -|    -"
 24S               # Push [2,4]
    5             # Lengthened to size 5: [2,4,2,4,2]
      £            # Split the string into parts of that size
                   #  i.e. " -  |  -|    -" → [" -","  | "," -","|   "," -"]
       »           # Join by newlines (and output implicitly)
                   #  i.e. [" -","  | "," -","|   "," -"] → " -\n  | \n -\n|   \n -"

なぜかを理解するに•L7ו、この05AB1Eのヒント(大きな整数を圧縮する方法?参照してください1367524


0

PHP 5.6、65バイトのプレーンASCII

for(;$p++<9;)echo$argn[_707561432[$p]]?"||_"[$p%3]:" ","\n"[$p%3];

または、後続の改行なしで、ビット単位の楽しみがあります:

for(;$p++<11;)echo$argn[_70785618432[$p]]?L|Sx[$p&1]:a^kAAA[$p&3];

パイプとして実行する-nR、オンラインで試してください

内訳1

for(;$p++<9;)echo           # loop through positions
    $argn[_707561432[$p]]   # map position to input bit
        ?"||_"[$p%3]            # if set: underscore in 2nd column, pipe symbol else
        :" "                    # else space
    ,"\n"[$p%3]             # add newline every 3 columns
;

内訳2

for(;$p++<11;)echo          # loop through positions
    $argn[_70785618432[$p]] # map position to input bit (bit 8 for EOL, never set)
        ?L|Sx[$p&1]             # if set: underscore in the middle, pipe symbol else
        :a^kAAA[$p&3]           # else: newline in 4th column, space else

1
言語が新しいか古いかは、2017年の夏以降は関係ありません。したがって、競合しないことに言及する必要はありません。
ケビンクルイッセン

@KevinCruijssenありがとうございます しかし、古いバージョンのPHPを復活させることは素晴らしい挑戦でもあります。また、最近の機能について異なる見解を示すこともあります。時々、「古い」方法のほうが、後でPHPに追加されたものを使用するよりも効率的(サイズ、パフォーマンス、読みやすさ、および3つすべて)であることがわかりましたこの場合でNOゴルフ利点は、しかし:第1のアプローチは8つの余分なバイト数、秒を必要としないであろう1 5
タイタス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.