7 segmentli bir ekranı taklit edin


24

Görev

Görev, 7 segmentli bir ekranın 128 olası durumundan herhangi birini göstermektir .

Programınız ya 0da olan 7 karakterli bir dizgiyi ("bit") kabul etmelidir 1. Girişin ilk biti, aşağıdaki çizimdeki A segmentine karşılık gelir, ikincisi B, vb. (Yoksay dp):

7seg

Ekranı nasıl temsil edeceğiniz size kalmış - tek bir Unicode veya ASCII sembolü, ASCII resmi , grafiksel veya ne olursa olsun. Bununla birlikte, her giriş kendi çıkışına sahip olmalıdır. Fantezi bir şeyle karşılaşırsanız bazı örnekler göstererek artılar toplayabildiğinizden eminim.

Ekranın olası tüm 128 durumu:

devletler

kurallar

  • Codegolf
  • Söylediğim gibi, herhangi bir çıktıya izin verilir, ancak belirttiğinizde iyi olur.
  • Giriş, stdin veya komut satırı argümanı olabilir.

Örnekler

Giriş

1101101

Çıktı

ASCII / Unicode olarak:
2
ASCII sanatının farklı türleri (bu konuda pek iyi değilim)
 _   ╺┓  ╒╗   ---
 _|  ┏┛  ╔╝     |
|_   ┗╸  ╚╛   ---
              |
              ---


@DavidCarraher: Onlar birbirleriyle ilişkili, evet; Hatta kendimle bile bağlantı kurdum. Bununla birlikte, 118 tane daha "sayı" 'ya sahip olduğunuzdan, bu biraz daha zordur. Diğer soruya verilen cevapların çoğu (?) Burada işe yaramaz veya ağır bir şekilde yeniden yazılır. Ayrıca, burada farklı sayıları kodlamanız gerekmez, bu nedenle başka optimizasyonlar mümkün olabilir.
daniero

Haklısın. Gösterdiğin için teşekkürler.
DavidC

Sağladığınız kodlamayı kullanmamız şart mı? örneğin "1101101" her zaman "2" yi temsil etmeli mi?
saat

@ardnew: evet. Girişlerdeki bitlerin konumu, ilk resimde A'dan G'ye kadar olan segmentlerin alfabetik sıralamasıyla eşleşmelidir.
daniero

Yanıtlar:


5

J (51)

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

çıktı:

1101101
 ## 
   #
 ## 
#   
 ## 

1
Bu küçük bir çabayla 38 char aşağı traş edilebilir: 1 2 1#"1' #'{~5 3$,0,.502 A.".&>1!:1]1.
algorithmshark

16

C, 106

"W00WG5WW1GW66WG4WW2GW33WG" programını yeniden adlandırmanıza izin verilirse, boyut 74 karakterdir

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

çalışan:

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

notlar:

'W' ve 'G' (0x47 ve 0x57) değeri & 7 = 7 olacak şekilde seçilir, yani giriş dizgisini sonlandıran boş karakteri güvenli bir şekilde indekslerler.


15

Brainfuck - 224

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

Exlamation puanlarını kullanarak yazdırır:

 ! 
! !
 !
! !
 !

En okunaklı değil, ama çok da korkunç değil.

Bunun ne kadar yakın olacağına şaşırmıştım.


13

Postscript 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

ngibi işlemek için dize olarak tanımlanmasını gerektirir

gs -g7x14 -sn=1101101 lcd.ps

almak

iki numaralı görüntü

tam set

tam karakter kümesi


11

Mathematica: 135 129 118, resim görüntüleme

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

"netlik için" boşluk eklendi

görüntü tanımını buraya girin

Düzenle

Seçici site kullanıcıları için: Harici maske kullanmadan:

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

Kod eksik görünüyor. Programınızın sonlandırılmasını istediğinizi sanmıyorum &.
DavidC

@DavidCarraher Bu bir fonksiyon , bu yüzden bitiyor &.
Doktor Belisarius

Evet, ama hiçbir şeye uygulanmaz. Bir çıktı nasıl elde edilir?
DavidC

2
@belisarius Hala dış kaynakları yerleştirmiş olmandan hoşlanmıyorum.
FUZxxl

1
Önceki yorumumu kaldırmanın bir anlamı olmadığını düşünüyorum, çünkü bu başkasının bu tartışmayı izlemesini zorlaştırıyor. Şaka gibi komik olan fakat ciddi bir kod golf yanıtının parçası olmayan harici verileri alırsınız. -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]]

Örnek giriş:

1101101

Çıktı:

 _ 
 _|
|_ 

⍞='1' girişi bir karakter dizisi olarak alır ve sayısal bir diziye dönüştürür.

1 2 2 1 2 2 1×⍞='1'dönüştürür bu dizi için: 0boşluğu için, 1için _, 2için|

(x←1 2 2 1 2 2 1×⍞='1')[6 7 2 5 4 3]bu diziyi değişkene atayın xve F, G, B, E, D, C bölümlerini temsil etmek üzere yeniden sıralayın

0,x[1],0,(x←1 2 2 1 2 2 1×⍞='1')[6 7 2 5 4 3] boş, segment A'yı bir diğerini boşla birleştirir

3 3⍴0,x[1],0,(x←1 2 2 1 2 2 1×⍞='1')[6 7 2 5 4 3] 3x3'lük bir matrise yeniden şekillendirme

1+3 3⍴0,x[1],0,(x←1 2 2 1 2 2 1×⍞='1')[6 7 2 5 4 3] 1 tabanlı dizine dönüştürür

Sonunda ' _|'göstergeleri karakterlere dönüştürmek için dizgiyi kullanır.


Düzenle

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

0Değişken atamasını engellemek için diziyi cepheye birleştirerek ve yinelenen endikasyonları kullanarak 3 karakterden yararlanın


APL'niz destekliyorsa, from işlevinin {braket indekslemesinden 1 karakter daha kısa olduğunu düşünüyorum [].
kullanıcı,

9

PHP 66 bayt

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

Hafif bir bir kullanarak iyileştirme md5: sihirli formülü, ancak 3 ek ikili bayt gerektirir
¡, æve Úolan karakterler 161, sırasıyla 230 ve 218. Doğrudan kopyalanmış ve bir ANSI formatı olarak kaydedilmiş gibi çalışmalıdır.


PHP 73 (70) bayt

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

Bana üç ikili karaktere izin verirseniz, bu 70 bayta düşürülebilir :

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

burada ƒ, ßve õsırası ile karakter 131, 223, ve 245 vardır.

Girdiyi komut satırı argümanı olarak alır. Örnek kullanım:

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

$ php seven-seg.php 0111011

|_|
 _|

kodunuzu çalıştırmaya çalıştım, ancak bir sürü hata alıyorum :( mantığınızı anlamıyorum ama ilginç görünüyor.
D34dman

1
@ D34dman Üreteceği mesajlar sadece bildirimlerdir (tanımsız değişkenler, vb.). Bunlar php.ini(varsayılan olarak zaten) kapalı olabilir veya test etmek için, aşağıdaki kodu betiğe hazırlayabilirsiniz:<? error_reporting(E_ALL & ~E_NOTICE); ?>
primo

müthiş! Ben işe aldım: D naice!
D34dman

7

JavaScript + jQuery + HTML + CSS ( 210 201)

Bu çözüm CSS sprite ve örnek olarak verilen resim :

HTML (3)

<a>

CSS ( 82 71)

" Background: url " numarası için xem'e teşekkürler :

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

JavaScript (yeni satırları çıkardıktan sonra okunabilirlik için buraya eklendi)

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');

Çevrimiçi test: http://jsfiddle.net/zhqJq/3/


1
Hey, peki görüntünün 17.937 byte'ı ne olacak? ;)
Thomas W.

@ThomasW. Bunun da sayılıp sayılmayacağını bilmiyorum. Karar vermek için bunu OP'ye bırakalım.
Cristian Lupascu

<p>display:block
Roberto Maldonado

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

@xem bahşiş için teşekkürler; Cevabımı
düzelttim

6

R (65 karakter):

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

Bazı aşkın sayılar için bazı gevşek yaklaşımlara güvenir ...


6

Python 2 - 65

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

Örnek:

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

5

PostScript: 53 ikili, 87 ASCII 52 ikili, 86 ASCII

İkili belirteçler kullanarak programın 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

Denemek için bu dosyayı indirin .

ASCII belirteçlerini kullanma:

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

İlk foralldöngü gerekli tüm koordinatları yığına koyar. Koordinatlar, gerekli alanı en aza indirmek için bir dizgide saklanır. Koordinatlar Biz bir çizgi çizin son 4 karakter segment A'da içindir, yani ters sırada olan (0,8)için (4,8)bu segmentte (aslında, biz çünkü tüm koordinatlara 48 eklemek zorunda için forallyığın koyar tüm ASCII kodları).

İkincisi , girdi dizesindeki foralltüm 0s ve 1s'ler arasında dolaşır ve bunları gri bir değere dönüştürür. 0s beyaz (gri değer 1) ve 1s siyah (gri değer 0) çizilir. Sonra forallçizgileri çizmek için yığında bırakılan ilk döngünün koordinatlarını kullanırız .

Geoffscsy'nin yaptığı gibi Ghostscript'i kullanarak programı çağırın:

gs -sn=1101101 lcd.ps

Bu görüntüler: Örnek çıktı


Bence neg 49 add(ki bu harika btw) ile değiştirebilirsiniz 1 and.
kullanıcı

@ lucerdroog: Parlak, bitsel operatörler, onları hiç düşünmedim. Ama öyle olmalı not 1 and, değil mi? Yine de hem ASCII hem de binary'de bir byte tasarrufu sağlar.
Thomas W.

1 bit bitmap ile düzgün bir yol olması gerektiğini düşünüyorum. ama bitshiftçok uzun bir kelime.
kullanıcı lüzgâr

Ama bu sadece iki byte'lık bir ikili jeton
Thomas W.

Evet. Ama yine de bir şekilde beni aldatmak gibi geliyor . :) Ben ikiliye başvurmadan önce okunabilir bir kaynak ile mümkün olduğunca yapmam gerektiğini hissediyorum.
kullanıcı lüzgâr

4

APL 101 86 73 69

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

Giriş, ekrandan ⍞ ile yapılır.

1101101

Aşağıdaki boşluklardan oluşan 9x5 karakterlik bir matris üretir ve ⎕ aşağıdaki gibidir:

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

Yedi basamaklı sayı, koordinatları seçmek için bir bölüm vektörüne dönüştürülür.


Başım ağrıyor ...
Rob

4

Mathematica 112 103 100 96 88, Grafikleri kullanarak

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

görüntü tanımını buraya girin

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 grafikleri


Ne tür bir girdi bekliyorsunuz? Ne [123]ne [123], ne de IntegerDigits[123]benim için çalış. Sadece zvurgulamadan alıyorum .
DavidC

@dude HighlightGraph'ı deneyin [z = GridGraph @ {3, 2}, Seçim [EdgeList [z] [[{3, 4, 1, 2, 6, 7, 5}]], Karakterler @ #, "1"] ] & @ "1111111" `` :)
Dr. belisarius

3

Python (107)

Kesinlikle daha fazla golf oynamak mümkün.

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

Çıktı:

1101101
 .. 
   .
   .
 .. 
.   
.   
 .. 

Açıklama:

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 karakter):

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

Açıklama:

Stdin girişi ile *doğru ve yanlış için bir yer vermek için derme çatma bir üçlü operatör kullanın . Bu değerleri alın ve bunları 7 basamaklı ekran biçimindeki bir format ifadesine takın. Ekran böyle çalışsa en fazla 83 karakter olabilir:

 a
b c
 d
e f
 g

ancak sipariş daha uzun sürüyor. Bunun etrafında bir yolu olan var mı?

Örnek:

$ ./7seg.py
111000

 *
  *

  *

$ ./7seg.py


1111111

 *
* *
 *
* *
 *

1
Güzel, ama bu lambda gereksiz görünüyor print' {0}\n{5} {1}\n {6}\n{4} {2}\n {3}'.format(*[' *'[i=='1']for i in raw_input()]);
daniero

Vaov! Boole'ları indeksleyicilere koyabileceğinizi bilmiyordum. Thanks :-)
Brigand

Np. Ayrıca, >'0'bunun yerine =='1've input()(etrafında geri tepmeler varken, ancak buradaki biçimlendirme nedeniyle görünmez) raw_input().
daniero

Bilgin olsun, koddaki geri tepmelere ihtiyacın olursa üçlü geri tepmeler kullanabilirsinx = `input()`
Brigand

Güzel. Sonra bugün de bir şeyler öğrendim :)
daniero

3

Lispy cevabına ihtiyacımız olduğunu düşündüm ...

Clojure, 159 karakter

(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])))" ")))))))

Yukarıdakiler REPL'de çalışacak ve doğru cevabı sağlayacaktır. Örneğin:

1111111
 o 
o o
 o 
o o
 o 

Sayıları küçük değişikliklerle atma:

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

verim:

 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

Okuması kolay değil, ama oradalar!


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)

Eğer "açık" durum için sadece bir karakter kullanırsak, karakter sayımını (101) aşağıya çekebilirim, ancak daha az okunaklı olur:

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 Bu etkileyici. Hala tersine mühendislik yapmaya çalışıyorum. Bana zaten birkaç şey öğretti!
GuyPursey

2

Postscript 136

Kazanan değil, farklı bir yaklaşım.

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

Giriş dizesinin yığında olmasını bekler:

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

Bu daha da kötü. 294 bir "ikili" bitmap yapmak. Her satırın bir baytla doldurulduğunu hatırlamak biraz zaman aldı. Bu nedenle 3x5 bitmap, 3 msb bit önemli olan beş bayttır.

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

Çıktı diğeri kadar çirkin. :(

Tamam, işte iyi görünen. 190

Düzenleme: Baş aşağı ve geriye doğru yapıldı. Şimdi düzeltildi.

(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

Bu bana bazı komik kalıpları gösteriyor. Hala bir yerlerde bir hata var mı?
Thomas W.

hı. Evet. (1111110) sıfıra benzemiyor. Bu sadece genişletilmiş bir bytemap. Sanırım kutular basitleştirildi. :(
luser droog

Sanırım bu bitmap yaklaşımın doğasında var. Nasıl çirkin değil yapmak emin değilim.
kullanıcı

Burada bazı ışık yorumları mevcut .
kullanıcı

2

Mathematica 264

Çıktının doğru görünmesi birçok bayt gerektiriyordu, bu yüzden puro yok. Ama yine de ayrıntılı (264 karakter) kodu.

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

Tam karakter kümesi:

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

karakteristik nevi

Rakamlar:

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

görüntü tanımını buraya girin


2

PHP - 155 karakter

<?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 type array bildirimi kullanırsak 150 karakter olur, ancak dizüstü bilgisayarımda kurulu olan bir yazılımı bu yüzden test edemedim.

Örnekleme koyar.

görüntü tanımını buraya girin

Açıklama:

Önce 7 segmentli ekranı beş satır ve 3 sütuna böldüm. Orta sütunda 1., 3. ve 5. sıradaki '-', aksi halde boşluk var.

2. ve 4. satırda '|' ilk ve son sütundaki karakter. Şimdi bu karakterin varlığı giriş değerleri tarafından yönlendirilmelidir.

Temelde iki arama tablosu olan bir arama tablosu oluşturdum. Birincisi, 1., 3. ve 5. sıradaki değerlerin hesaplanmasında. Ve 2. ve 4. sıraların hesaplanması için ofset 2'deki (3. madde) bir diğeri.


2

Java - 204 karakter

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

Örnek çıktı:

 _ 
 _|
|_ 

Doğru biçimlendirilmiş:

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

Gerçekten bu döngü için kaçınmak isterdim, ama birkaç şey daha denedim ve hepsi daha uzun. Muhtemelen bunu yapmanın daha iyi bir yolu var, ama bu kod golf için ilk girişim. (Java bunun için en kötü dil gibi, bu yüzden ilginç olacağını düşündüm.) Brainfuck bile beni yendi, ama en azından çıktılarım daha güzel görünüyor.

EDIT: sınıfta "genel" kurtulmak, bana 7 karakter kazandırır!

Ve teşekkürler, daniero, bana baskı gösterdiğin için! (18 karakter kaydedildi)

Çıktı biçimini yeniden yazdı, karakter değişmezlerini ondalık sayıya değiştirdi, 12 karakter kaydedildi.


Codegolf.se'ye hoş geldiniz! Java printf, temelde printlnve formatbir tanesinde (C işlevi gibi) bir kaç versiyon geriye bir yöntem getirmiştir ; Bu bazı karakterleri kurtaracak
daniero

İşte başka bir püf forfor(int i=7;i>0;c[--i]=a[0].charAt(i)==49?(i%3==0?95:'|'):32);
noktası

1

VBA - 263

Çirkin ama işe yarıyor galiba. Uygun bit sırasını görüntülemekte sorun yaşıyorum, bu yüzden başkalarının cevaplarından çıkarım. Bu parça yanlış olsa bile, kod uzunluğu aynı kalmalıdır.

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 karakter

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

Teşekkürler! İki çift kafa başı hataları bana 6 karakter mal oldu. Fonksiyon hattı argümanını almak için saçma sapan uzun bir çağrı ile bile neredeyse bunu VBA'nın boyutuna getirebiliyorum.
Comintern

Kodunuz yeni satır karakterleri olmadan işlevsel değilse, onları da saymanız gerekir. Sayıma göre 178 karakter var.
Manatwork

1

CJam - 29

l0N]s7078571876784728737Ab\f=

CJam geliştirdiğim yeni bir dil, GolfScript'e benzer - http://sf.net/p/cjam . İşte açıklama:

lokur girişinden bir satır
0numarası 0 olan
Nsatır dizesi preinitialized bir değişkendir
]bir diziye büzgüleri yığında elemanlarının
sbu şekilde belirli giriş sıfır ve bir yeni satır ekleme, dizgeye bir değer (dizi) dönüştüren
7078571876784728737a, sayı (
Apython'da kullandığımla aynı sayı, ancak onaltılıydı) 10'a önceden başlatılmış bir değişkendir.
b , bir baz dönüşümü yapar, [7 0 7 8 ... 3 7] dizisi
\yığındaki son iki değeri değiştirir. işleci (burada, dizinlenmiş dizi erişimi) giriş dizgisine (artı sıfır ve yeni satır)
f=uygular =ve her sayı 7, 0, 7, ...
Dizin 7 eklenmiş sıfıra karşılık gelir ve 8 eklenmiş satır satırına karşılık gelir.

Python çözümüm tam olarak aynı şeyi yapıyor (rakam ayırma işlemi dize dönüşümü ile yapıldığı sürece)


Ben burada neye bakıyorum? Kodun kısa bir açıklamasını sunmak ister misiniz?
daniero

@daniero Bir açıklama ekledim
aditsu

1

VBA, 188 karakter

Birine sahip olduğunu Not türü sadece zorunlu boşluk dahil eğer 188 karakter - VBA düzenleyicisine kopyaladığınızda IDE dışarı genişler.

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

Ne yazık ki, VBScript çok iyi yazılmış bir Byte dizisine sahip değil veya bu yöntemi kullanarak çok daha kısa olabilir.


1

Javascript (ECMAScript 2016) - 108 bayt

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

Bu muhtemelen daha fazla golf oynayabilir, ancak hiçbir şey düşünemiyorum.


Siteye Hoşgeldiniz! Bu güzel bir ilk giriş :)
daniero 17:18

1

JavaScript, 148 bayt

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

Çevrimiçi deneyin! (Altbilgi okumak için Node.js'dir .input.tio)

İkili bayraklarda ABCDEFG girişini kabul eder ve döner:

 #
# #
 #
# #
 #

0

SmileBASIC, 136 bayt

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

Çıktı grafikseldir.


0

05AB1E , 4 bayt

C₄+ç

Çevrimiçi deneyin veya tüm olası girişleri doğrulayın .

Tüm olası girişleri doğrulama bölümüne bakın. her giriş için kullanılan eşleme görmek için yukarıdaki bağlantı.

Açıklama:

Bu, belirtilen kuralları kötüye kullanır:

Ekranı nasıl temsil edeceğiniz size kalmış - tek bir Unicode veya ASCII sembolü , ASCII resmi, grafiksel veya ne olursa olsun. Bununla birlikte, her giriş kendi çıkışına sahip olmalıdır.

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)

Çıktı formatını kullanarak mücadelenin ruhuna alternatif daha fazlası:

 -
| |
 -
| |
 -

38 bayt :

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

Kesinlikle golf olabilir ..

Çevrimiçi deneyin veya tüm olası girişleri doğrulayın .

Açıklama:

Σ       }          # 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 -"

Benim bu 05AB1E ucu bakın ( ne kadar büyük tamsayılar sıkıştırmak için bölüm? ) Anlamak için •L7וolduğunu 1367524.


0

PHP 5.6, 65 bayt düz ASCII

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

veya, takip eden bir satır sonu olmadan, ancak biraz bit eğlence ile:

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

Pipe ile çalıştırın -nRveya çevrimiçi deneyin .

arıza 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
;

arıza 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
Dilin yeni veya eski olması , 2017 Yazından bu yana artık önemli değil . Yani rekabet etmekten bahsetmek zorunda kalmazsınız.
Kevin Cruijssen

@KevinCruijssen Teşekkürler bunu özledim. Fakat aynı zamanda eski PHP sürümlerini canlandırmak için de güzel bir zorluk; Ayrıca bazen daha yeni özellikler hakkında farklı görüşler de ortaya koyar: Bazen, "eski" yolun, daha sonra PHP'ye eklenen öğeleri kullanmaktan daha büyük (performans açısından, okunabilirlikte ve bazen üçünde) etkili olduğunu buldum. Bu durumda hiçbir golf avantajı olsa: birinci yaklaşım 8 ekstra bayt ikinci gerektirecektir biri 5.
Titus
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.