N ile n görüntüleniyor


18

İstediğim:

Oldukça basit bir şekilde, bir girdi isteyen ve ndaha sonra ekranda bu değeri gösteren metin tabanlı bir ekran istiyorum ! Ama bir sorun var. 'Gerçek' 'piksellerin (doldurulmuş olanlar) her biri bu sayı ile temsil edilmelidir n.

Misal :

Size bir girdi verilir n. nTek bir rakam olacağını varsayabilirsiniz.

Input: 0
Output:
000
0 0
0 0
0 0
000

Input: 1
Output:
  1
  1 
  1
  1
  1

Input: 2
Output:
222
  2
222
2
222

Input: 3
Output:
333
  3
333
  3
333

Input: 4
Output:
4 4
4 4
444
  4
  4

Input: 5
Output:
555
5  
555
  5
555

Input: 6
Output:
666
6    
666
6 6
666

Input: 7
Output:
777
  7
  7
  7
  7

Input: 8
Output:
888
8 8
888
8 8
888

Input: 9
Output:
999
9 9
999
  9
999

Meydan okuma:

Yukarıdakileri mümkün olduğunca az bayt ile yapın.

Yalnızca tüm gereksinimleri karşılayan cevapları kabul edeceğim.

Rakam düzgün görüntülendiğinde , çevredeki beyaz alan isteğe bağlıdır .

Ayrıca, <75 byte benden bir oy, en düşük kabul, ama her zaman kabul edilen cevabı değiştirebilirim, bu yüzden cevaplamaktan vazgeçmeyin.



Elbette, bu bir kopya. Çok yakın kesinlikle var bu
Shaggy


2
Ben bir dup olduğunu sanmıyorum. Sorular çok benzer olsa da, azaltılmış karakter setinin (0-9) oldukça farklı cevaplar vereceğini düşünüyorum.
Dijital Travma

Yanıtlar:


8

SOGL V0.12 , 30 bayt

■'τč▲Β►║⁰ΡāQšJ┘tXdnοO¹‘'¹n.w3n

Buradan Deneyin! Sıkıştırılmış dize ■'τč▲Β►║⁰ΡāQšJ┘tXdnοO¹‘olduğu

  ŗ  ŗ  ŗ  ŗ  ŗŗŗŗ  ŗŗŗŗŗ  ŗŗŗŗŗŗ  ŗŗŗŗ  ŗŗŗŗŗ ŗŗ ŗŗŗŗ  ŗ  ŗŗŗŗŗ  ŗŗŗ  ŗŗŗŗŗŗŗŗ  ŗŗŗŗ ŗŗŗŗŗŗŗ  ŗ  ŗ  ŗ  ŗŗŗŗŗ ŗŗŗŗŗ ŗŗŗŗŗŗŗŗ ŗŗŗŗ  ŗŗŗŗŗŗŗŗ ŗŗ ŗŗ ŗŗŗŗ

(1 ile başlayan, 0 ile biten) sayılar, satır satır, sayıdan sayıya. Geri kalan

...‘             push the compressed string, replacing the ŗs with pop - the input
    '¹n          split into chunks of 15
       .w        push the (1-indexed, wrapping) input-th item of that array
             3n  split into chunks of 3
                 implicitly output the array, line by line

Bir seferde 35 baytta nasıl başardığınızdan çok etkilendim ! Daha önce hiç SOGL kullanmamış olsam da, çevrimiçi bir test cihazı kullandım ve işe yarıyor!
Girdap

Sayı şekli verileri gerçekten sadece 17 bayttır (kaybedilen 6 bayt uzunluk verileri ve `` ve '' -) ve geri kalanı kolaydır. Merak ediyorum, hangi çevrimiçi test kullanıcısını kullandınız? Hiç yapmadım, görmedim.
dzaima

Oh, sadece yukarıdaki SOGL'a tıklayın! 1MB gibi bir şey indirmeniz gerekiyor. Anında sildim. : /
Girdap

Bunu nasıl yaptın?
Girdap

Vay canına! Tebrikler! İçinde çok fazla dosya var gibi görünüyor. Belki biraz ayrı
VortexYT

13

JavaScript (ES6), 88 bayt

f=
n=>`019
2 3
459
6 7
889`.replace(/\d/g,c=>[2,18,142,96,130,131,698,4,146][c]>>n&1?` `:n)
<input type=number min=0 max=9 oninput=o.textContent=f(this.value)><pre id=o>

Sayılar, hangi karelerin belirli bir basamak için boşluk içerdiğini kodlar, örneğin sol alt köşede 146 değeri vardır, çünkü 1, 4 ve 7 bunu kullanmaz ve 146 = 2¹ + 2⁴ + 2⁷.


11

05AB1E , 40 39 38 bayt

•Y¤ŸèK'¦ú’ò™^N•4B5ô¹èvð¹«5714yè8+b¦Sè,

Çevrimiçi deneyin!

açıklama

•Y¤ŸèK'¦ú’ò™^N•            # the compressed string "318975565561233953387608032537"

4B                         # convert to base-4
  5ô                       # split into strings of size 5
    ¹è                     # get the string at index <input>
      v                    # for each digit y in string
          5714yè           # get the digit in 5714 at index y
                8+         # add 8
                  b        # convert to binary
                   ¦       # remove the leading 1
       𹫠         Sè     # with each digit in the binary number, 
                           # index into the string " <input>"   
                      ,    # print with newline

11

Japt , 43 bayt

"Ýûÿ©ÿßY÷ß"®c s4äëAU ¬£2839¤ë4X÷d0S1U

Bazı yazdırılamazlar içeriyor. Çevrimiçi deneyin!

Tallies: 13 bayt sıkıştırılmış veri, açmak için 9 bayt ve çıktıyı oluşturmak için 21 bayt.

açıklama

Kod çözülmemiş kod:

"Ýûÿ©ÿßY÷ß"®   c s4à ¤  ëAU ¬ £  2839¤  ë4Xà ·  d0S1U
"Ýûÿ©ÿßY÷ß"mZ{Zc s4} s2 ëAU q mX{2839s2 ë4X} qR d0S1U

Tam olarak 4 farklı sıra olasılığı vardır: ( #bir rakamı temsil eder)

#  
  #
# #
###

Böylece, her sayı beş baz-4 basamaklı bir küme olarak saklanabilir. Her sayı daha sonra 10 bit içinde saklanabildiğinden, toplam 100 bittir ve 13 bayta karşılık gelir. Sıkıştırma işlemini atlayacağım ve dekompresyonu açıklayacağım.

mZ{Zc s4} 

mZ{     }  // Replace each character Z in the compressed string with the following:
   Zc      //   Take the char-code of Z.
      s4   //   Convert to a base-4 string.

Dekompresyondan sonra 13 baytlık sıkıştırılmış dize şöyle görünür:

3131332333332111200122213333313321011121213133133133

4 basamaklı çalışmalardan herhangi biri ile başlarsa bunun başarısız olacağını unutmayın 0, çünkü çalıştırıldığında önde gelen sıfırlar kapalı kalacaktır s4. Bunu sadece üç kez görünen 0temsilci ile düzeltebiliriz #  ve bunların hiçbiri 4 haneli bir çalışmanın başlangıcına düşmez.

s2         // Slice off the first two chars of the result.

Tamam, bu yüzden 50 basamaklı dizgimizi 4 parça halinde güzelce sıkıştırmak için iki ekstra rakam eklememiz gerekiyordu. Bunları dizenin başına eklemek, onları bir byter ile parçalayabileceğimiz anlamına gelir ¤.

ëAU        // Take every 10th (A) char in this string, starting at index <input> (U).

Utanç verici bir şekilde, Japt, bir dizeyi X uzunluğundaki dilimlere bölmek için yerleşik bir yapıya sahip değildir. tüm ikinci sıralar vs.

Yani şimdi biz, örneğin oluşturmak istediğiniz rakamı kodlayan 5 haneli dizesi var 32223için 0.

q mX{2839s2 ë4X} qR
q                    // Split the resulting string into chars.
  mX{          }     // Replace each char X with the result of this function:
     2839s2          //   Convert the magic number 2839 to a binary string.
            ë4X      //   Take every 4th char of this string, starting at index X.
                 qR  // Join the result with newlines.

Sihirli sayıyı açıklamak için dört ayrı satıra bakın. Eğer değiştirirseniz #ile 1ve  ile 0elde edersiniz

100
001
101
111

Bunu aktarmak ve sonra tek bir dizeye katılmak bize verir 101100010111. Ondalık biçime dönüştürün ve 2839'a sahipsiniz. Süreci tersine çevirmek rakamları eşleştirir0123 çevirmek, yukarıda gösterilen dört ikili satıra .

Neredeyse bitti! Şimdi tek yapmanız gereken boşluklara ve rakamlara eklemek:

d0S1U      // In the resulting string, replace 0 with " " (S) and 1 with <input> (U).

Presto, örtük çıktı gerisini halleder. Üzgünüm bu açıklama çok uzun, ama daha az anlaşılır hale getirmeden golf yapmak için gerçek bir yol göremiyorum (anlaşılabilir ise ...)


9

JavaScript (ES6), 115 111 bayt

Girişi dize olarak alır.

n=>'02468'.replace(/./g,c=>(n+n+n+`   ${n} `+n).substr([126,341,36,68,327.5,66,98,340,102,70][n]*4>>c&6,3)+`
`)

Nasıl çalışır

Desen kodlama

Dört ayrı modeller "XXX", "X..", "..X"ve "X.X"şekilde sıkıştırılabilir "XXX...X.X"ve bu şekilde ekstre:

XXX...X.X
^^^        --> XXX  (id = 0 / pointer = 0)
  ^^^      --> X..  (id = 1 / pointer = 2)
    ^^^    --> ..X  (id = 2 / pointer = 4)
      ^^^  --> X.X  (id = 3 / pointer = 6)

Giriş rakamı ile değiştirilmesiyle niçin "X"ve gerçek boşlukları kullanarak, bu ifadeyi verir:

n+n+n+`   ${n} `+n

Rakam kodlama

Yukarıda tanımlanan örüntü tanımlayıcıları kullanılarak, her bir rakam 5 * 2 = 10 bit miktarıyla temsil edilebilir.

Örneğin:

XXX  -->  0 *   1 =   0
X.X  -->  3 *   4 =  12
XXX  -->  0 *  16 =   0
..X  -->  2 *  64 = 128
XXX  -->  0 * 256 =   0
                    ---
                    140

Tam liste:

[252, 682, 72, 136, 655, 132, 196, 680, 204, 140]

Ancak, bu değerlerin 2'ye bölünmesi iki baytın kaydedilmesini sağlar. Bunun yerine şunları depolarız:

[126, 341, 36, 68, 327.5, 66, 98, 340, 102, 70]

gösteri


6

Bash + GNU araçları, 114

  • @SophiaLechner sayesinde 2 bayt tasarruf edildi

Muhtemelen burada sıkıştırma için daha fazla fırsat var, ancak işte bir başlangıç:

dc<<<4o16iEAC00CDF33AC373DEF00EEFB3p|fold -5|sed "$[$1+1]!d
s/0/  x\n/g
s/1/x\n/g
s/2/x x\n/g
s/3/xxx\n/g
y/x/$1/"

açıklama

Her basamağın her satırı şu dört modelden biridir:

  x
x
x x
xxx

Bu 0-3 etiketlenerek, her basamak 5 baz-4 basamak ile temsil edilebilir. Örneğin, 0 olur 32223ve basamakların tam listesi baz-4'te olarak kodlanır 32223000003031330303223003130331323300003232332303. Bu hex olarak kodlanmıştır EAC00CDF33AC373DEF00EEFB3.

  • dchex'i EAC00CDF33AC373DEF00EEFB3base-4'e dönüştürür .
  • fold her satıra 5 baz-4 hane koyar
  • sed:
    • n + 1 satır numarası dışındaki tüm giriş satırlarını siler (sed 1-dizin satırları)
    • xher bir satırın sonundaki yeni satırla birlikte , taban-4 hanesini verilen basamağın her satırı için desene ( es) çevirir
    • es'yi xn basamağına çevirir.

Çevrimiçi deneyin .


1
İyi bir fikir! Birkaç kaydet değiştirerek bayt s/1/x \n/gile s/1/x\n/gbu alanlarda görsel çıktıyı etkilemez çünkü.
Sophia Lechner

5

MATL , 45 43 bayt

'V~4;LR`I-D2q (z%eI)P-nc'F TFZa15eiZ)5eGV*c

Çevrimiçi deneyin!

açıklama

'V~4;LR`I-D2q (z%eI)P-nc' % Compressed string using printable ASCII except '
F TFZa                    % Decompress (change of base) into alphabet [1 0]
15e                       % Reshape into 15-row matrix. Each column contains the
                          % art for one digit, packed in column-major order
iZ)                       % Take input number and pick the corresponding column.
                          % Indexing is 1-based and modular, so 0 is at the end
5e                        % Reshape into a 5-row matrix. This already looks like
                          % the number, with active pixels as 1 and inactive as 0
GV                        % Push input number again. Convert to string, of one char
*                         % Multiply, element-wise. The previous char is
                          % interpreted as its ASCII code. This changes 1 into the 
                          % ASCII code of the input digit, and leaves 0 as is
c                         % Convert to char. Implicitly display. Char 0 is shown as
                          % a space

3

Retina, 166 164 163 bayt

Üçüncü satırda alttan iki boşluk

0
0addda
d
0 0
1
1b1b1b1b1b1
2
2ab2a2b222
3
3ab3ab3a
4
44 44 4ab4b4
5
55ab555b5a
6
66ab6a 6a
7
7ab7b7b7b7
8
88a 8a8 8a
9
99a 9ab9a
(\d)a
$1$1$1$1
^.

b
  
.{3} $+¶

Çevrimiçi deneyin!

@ Okx'un çözümünün geliştirilmiş bir sürümü


2

Pyth 82 85 91 100 bayt

Km?dC+48Q\ m.&C@"w$kn<^_d\x7f~"Qdj1906486293414135453684485070928 128V5p.)Kp.)K.)K

Golf büyük olasılıkla mümkün, benim ilk meydan okuma.


PPCG'ye Hoşgeldiniz!
Martin Ender

2

Toplu Dosya, 8 + 184 bayt

İşte benim zorunlu toplu iş çözümüm. Ne yazık ki bunu başarmanın standart yöntemi toplu olarak 300 baytın üzerindedir, bu yüzden çok daha ucuz taktiklere başvuruyoruz.

@type %1

Geçerli dizinde, 0'dan 9'a kadar adlandırılmış 10 dosya ayarladım. Bunların her birinde ilgili 5x3 piksel ızgarası var. Örneğin:

enter image description here

Bunlar için bayt sayıları:

19 0
19 1
17 2
19 3
19 4
17 5
17 6
19 7
19 8
19 9
Total - 184

Hala Java'yı yendi.


1

Ruby, 94 bayt

->n{20.times{|i|print i%4>2?$/:[" ",n]["_Q_@@_]UWUU_GD_WU]_U]AA__U_WU_"[n*3+i%4].ord>>i/4&1]}}

Test programında yönlendirilmemiş

f=->n{
  20.times{|i|                           #4 characters * 5 rows = 20
    print i%4>2?$/:                      #If i%4=3 print a newline else
    [" ",n][                             #either a space if the expression below is 0 or the digit n if 1.
      "_Q_@@_]UWUU_GD_WU]_U]AA__U_WU_"[  #bitmap data for digits, one character for each column
        n*3+i%4].ord>>i/4&1              #Select the correct character for the column, convert to ascii code,
    ]                                    #rightshift to find the correct bit for the row, 
  }                                      #use & to isolate the bit: 0 or 1
}

f[gets.to_i]

1

PHP, 115 Bayt

for(;$i<5;)echo strtr(sprintf("%03b\n","1754"[[425,0,465,273,26,285,413,1,409,281][$argn]/4**$i++%4]),[" ",$argn]);

Çevrimiçi deneyin!

Expanded

for(;$i<5;)
  echo strtr(
    sprintf("%03b\n",  # make a binary
      "1754"[[425,0,465,273,26,285,413,1,409,281][$argn]/4**$i++%4])
    ,[" ",$argn]); # replace 0 with space and 1 with the input

Kodlama Çevrimiçi deneyin!


1

Retina , 125 bayt

.
A$&¶B$&¶C$&¶D$&¶E$&
([ACE][235689]|A0|E0|C4|A7)(?<=(.))
$2$2$2
(B[0489]|D[068]|A4|C0)(?<=(.))
$2 $2
D2
2
B5
5
B6
6
[A-E]
  

Çevrimiçi deneyin! (Tek tek giriş basamaklarını test etmek için başlıktaki test paketini silin.) Son satır iki boşluk içerir.


1

PowerShell, 126 120 113 109 101

$n="$args"
-split'ϽϭϿ·ͱ Ο·ͽͼϿ·Ņ ϻ·ͭͭϿ'|%{-join($_[0..2]|%{"$n·"[!($_-band1-shl$n)]})}

Unicode eğlencelidir. Karakterler de rakamlardan çok daha kısadır. Yukarıdaki kod iki kez U + 0000 içerir, bu nedenle doğrudan kopyalanamaz (bir dosyada iyi çalışır). Aşağıdaki kod kopyalanabilir:

$n="$args"
-split"ϽϭϿ ͱ`0Ο ͽͼϿ Ņ`0ϻ ͭͭϿ"|%{-join($_[0..2]|%{"$n "[!($_-band1-shl$n)]})}

Üç bayt kaybediyoruz çünkü başlangıçta UTF-8 imzasına ihtiyacımız var. Aksi takdirde dize çalışmaz.


1

Retina , 190 bayt

0
000¶aaa000
a
0 0¶
1
aaaaa
a
b1¶
2
ab2¶a2¶a
a
222¶
3
ab3¶ab3¶a
a
333¶
4
4 4¶4 4¶444¶b4¶b4
5
a5b¶ab5¶a
a
555¶
6
a6¶a6 6¶a
a
666¶
7
777aaaa
a
¶b7
8
a8 8¶a8 8¶a
a
888¶
9
a9 9¶ab9¶a
a
999¶
b
  

Son satırda iki boşluk var, ancak SE bunu oluşturmak istemiyor: / Sabit!

Çevrimiçi deneyin!


Ben tekrar tekrar yerine aüç basamak ve yeni satır ile birleştirmek için bir yol olduğunu hissediyorum . (Belki gözcüleri mi kullanıyorsunuz?)
Matematik bağımlısı

@mathjunkie Evet: /
Okx

1

Java 8, 278 214 210 204 bayt

n->("A"+n+"\nB"+n+"\nC"+n+"\nD"+n+"\nE"+n).replaceAll("([ACE][235689]|A0|E0|C4|A7)(?<=(.))","$2$2$2").replaceAll("(B[0489]|D[068]|A4|C0)(?<=(.))","$2 $2").replaceAll("D2|B5|B6",n).replaceAll("[A-E]","  ")

Port @Neil 'ın Retina cevap . Girdiyi birString.

Burada deneyin.



1

PowerShell,159 135 128 118 bytes

param($n);0..4|%{("$n$n$n","$n $n","  $n","$n  ")['01110333330203002020110220302003010022220101001020'[$_+($n*5)]-48]}

Current answer: removed extraneous variable naming

Try it online!

I'll have to see if I can get some tricks from the other answers :P

EDIT Getting smarter with calling the mega string

EDIT2 Switched to using a string of numbers to index into $a to save 7 bytes. Although I liked my previous dynamic variable name calls in the below code (135 bytes)

param($n);$a="$n$n$n";$b="$n $n";$c="  $n";$d="$n  ";$r="abbbadddddacadaacacabbaccadacaadabaaccccababaabaca";0..4|%{gv $r[$_+($n*5)]-v}

0

Charcoal, 61 38 bytes

E§⪪”{⊞¶↙⬤\→*'K«-aRQ¹νÀ⁰”⁵N⭆421⎇&IιIλθ 

Try it online! Link is to verbose version of code. Note: Trailing space. Explanation:

E§⪪”{⊞¶↙⬤\→*'K«-aRQ¹νÀ⁰”⁵N

Split the (compressed) string into groups of 5, take the one at the index given by the input, and map over the characters in the group (which are always 1, 4, 5 or 7).

⭆421⎇&IιIλθ 

Convert the character from base 10 to 3-digit base 2 using the input character and space as the digits. The 5 results are then implicitly printed on separate lines.

A generic port is a bit boring, so here's a more idiomatic 61-byte answer:

GH✳✳§⟦⟦↑L↓¬⟧⟦↓↓⟧⟦T↓→⟧⟦T→¬⟧⟦↑↑¬↑⟧⟦←↓T⟧⟦T↑L⟧⟦→↓↓⟧⟦+L↓⟧⟦+↓T⟧⟧N³θ

Try it online! No verbose version as the deverbosifier doesn't understand lists of directions or even multidirectionals inside ordinary polygons. Explanation:

     ⟦...⟧      Array of paths, see below
          N     Input as an integer
    §           Index into the array
  ✳✳            Treat the element as direction data
           ³    Length of each segment (including 1 character overlap)
            θ   Draw using the input character
GH              Draw a path

Each path is specified using a list of directions (←↑→↓). Four usable shortcuts save bytes: L represents ↑→, ¬ represents ↓←, T represents →↓← while + represents →↓←↑, although at least one arrow must remain for the list to be recognised as a direction list (so for instance TT cannot be used for 3).



0

Perl 5 -Mbigint -pa, 101 bytes

$_=sprintf"%16b",0xf79ef7dee492f3def39eb792e79ee7ce4924f6de>>16*$_&65535;eval"y/01/ @F/";s/...\K/\n/g

Try it online!


0

Python 3, 119 bytes

lambda n:(3*f"%s%s{n}\n%s %s\n")[:30]%(*[n if i//(2**n)%2else" "for i in[1021,1005,881,927,893,892,325,1019,877,877]],)

Try it online!

Each 'pixel' is represented as an integer where each power of two indicates whether the pixel is solid. This takes advantage of the fact that the three right-hand corners are always the digit.


-1

JavaScript (ES8), 87 bytes

n=>`019
2 3
459
6 7
889`.replace(/\d/g,c=>[2,18,142,96,130,131,698,4,146][c]>>n&1?' ':n)

2
This is exactly the same answer as @Neil's JavaScript answer of April 27th.. If you have something he can improve, you should comment to his answer instead of posting a new one that is the same (EDIT: And yes, I realize you don't have enough reputation to comment yet..)
Kevin Cruijssen
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.