Güzel desen çekmecesi (Küçük küpler dahil)


18

Güzel desen çekmecesi

Günaydın PPCG!

Geçen gün, Stack Overflow'da birisine yardım etmeye çalışırken, sorunun bir kısmı bana bu meydan okuma için bir fikir verdi.

Her şeyden önce, aşağıdaki şekli kontrol edin:

resim açıklamasını buraya girin

Tüm siyah sayılar şekildeki noktaların indeksi ve tüm koyu mavi sayılar noktalar arasındaki bağlantıların indeksidir.

Şimdi, 0x00000 - 0xFFFFF için onaltılık bir sayı verildiğinde, konsolda yalnızca karakter alanı ve "■" ("o" karakterini kullanarak da bir şekil) kullanarak bir şekil çizmeniz gerekir.

Onaltılık sayının girildiği ve şeklin çıktığı bazı örnekler:

0xE0C25 :
■ ■ ■ ■ ■ ■ ■ ■ ■ 
■               ■ 
■               ■ 
■               ■ 
■ ■ ■ ■ ■       ■ 
        ■       ■ 
        ■       ■ 
        ■       ■ 
        ■ ■ ■ ■ ■
0xC1043 :
■ ■ ■ ■ ■ ■ ■ ■ ■ 
              ■   
            ■     
          ■       
        ■         
      ■           
    ■             
  ■               
■ ■ ■ ■ ■ ■ ■ ■ ■ 
0xE4F27 :
■ ■ ■ ■ ■ ■ ■ ■ ■ 
■       ■       ■ 
■       ■       ■ 
■       ■       ■ 
■ ■ ■ ■ ■ ■ ■ ■ ■ 
■       ■       ■ 
■       ■       ■ 
■       ■       ■ 
■ ■ ■ ■ ■ ■ ■ ■ ■ 
0xF1957 :
■ ■ ■ ■ ■ ■ ■ ■ ■ 
■ ■           ■ ■ 
■   ■       ■   ■ 
■     ■   ■     ■ 
■       ■       ■ 
■     ■   ■     ■ 
■   ■       ■   ■ 
■ ■           ■ ■ 
■ ■ ■ ■ ■ ■ ■ ■ ■ 
0xD0C67 :
■ ■ ■ ■ ■ ■ ■ ■ ■ 
  ■             ■ 
    ■           ■ 
      ■         ■ 
■ ■ ■ ■ ■       ■ 
      ■ ■       ■ 
    ■   ■       ■ 
  ■     ■       ■ 
■ ■ ■ ■ ■ ■ ■ ■ ■ 
0x95E30 :
■ ■ ■ ■ ■       ■ 
  ■     ■     ■ ■ 
    ■   ■   ■   ■ 
      ■ ■ ■     ■ 
■ ■ ■ ■ ■ ■ ■ ■ ■ 
        ■ ■       
        ■   ■     
        ■     ■   
        ■       ■ 
0x95622 :
■ ■ ■ ■ ■       ■ 
  ■     ■     ■   
    ■   ■   ■     
      ■ ■ ■       
■ ■ ■ ■ ■ ■ ■ ■ ■ 
        ■         
        ■         
        ■         
■ ■ ■ ■ ■         
0xC5463 : 
■ ■ ■ ■ ■ ■ ■ ■ ■ 
        ■     ■   
        ■   ■     
        ■ ■       
■ ■ ■ ■ ■         
      ■ ■         
    ■   ■         
  ■     ■         
■ ■ ■ ■ ■ ■ ■ ■ ■ 
0xE5975 :
■ ■ ■ ■ ■ ■ ■ ■ ■ 
■       ■     ■ ■ 
■       ■   ■   ■ 
■       ■ ■     ■ 
■       ■       ■ 
■     ■ ■ ■     ■ 
■   ■   ■   ■   ■ 
■ ■     ■     ■ ■ 
■       ■ ■ ■ ■ ■ 
0xB5E75 :
■ ■ ■ ■ ■       ■ 
■ ■     ■     ■ ■ 
■   ■   ■   ■   ■ 
■     ■ ■ ■     ■ 
■ ■ ■ ■ ■ ■ ■ ■ ■ 
      ■ ■ ■     ■ 
    ■   ■   ■   ■ 
  ■     ■     ■ ■ 
■       ■ ■ ■ ■ ■ 
0xF4C75 :
■ ■ ■ ■ ■ ■ ■ ■ ■ 
■ ■     ■       ■ 
■   ■   ■       ■ 
■     ■ ■       ■ 
■ ■ ■ ■ ■       ■ 
      ■ ■ ■     ■ 
    ■   ■   ■   ■ 
  ■     ■     ■ ■ 
■       ■ ■ ■ ■ ■
0xF5D75 :
■ ■ ■ ■ ■ ■ ■ ■ ■ 
■ ■     ■     ■ ■ 
■   ■   ■   ■   ■ 
■     ■ ■ ■     ■ 
■ ■ ■ ■ ■       ■ 
■     ■ ■ ■     ■ 
■   ■   ■   ■   ■ 
■ ■     ■     ■ ■ 
■       ■ ■ ■ ■ ■ 

Nasıl çalıştığına dair bazı açıklamalar:

0xFFFFF(16) = 1111 1111 1111 1111 1111(2)

Burada 20 bitiniz var, her bit bir bağlantının var olup olmadığını söylüyor.

En Önemli Bit (MSB) Dizini 0 (resim referansı) veya Daha Az Önemli Bit (LSB) 19'dur (tekrar resim referansı).

Örnek olarak verilen ilk şekil için şu şekilde çalışır:

0xE0C25(16) = 1110 0000 1100 0010 0101(2)

Yani şu mevcut bağlantılara sahip olacaksınız: 0,1,2,8,9,14,17,19.

Referans resimdeki çizgileri bu numaralarla vurgularsanız, size bu şekil verilir:

■ ■ ■ ■ ■ ■ ■ ■ ■ 
■               ■ 
■               ■ 
■               ■ 
■ ■ ■ ■ ■       ■ 
        ■       ■ 
        ■       ■ 
        ■       ■ 
        ■ ■ ■ ■ ■

Daha fazla yardıma ihtiyacınız varsa basit ve çözümsüz bir Python uygulaması:

patterns = [
  0xE0C25, 0xC1043, 0xE4F27, 0xF1957, 
  0xD0C67, 0x95E30, 0x95622, 0xC5463, 
  0xE5975, 0xB5E75, 0xF4C75, 0xF5D75
]

def printIfTrue(condition, text = "■ "):
  if condition:
    print(text, end="")
  else:
    print(" "*len(text), end="")

def orOnList(cube, indexes):
  return (sum([cube[i] for i in indexes]) > 0)

def printPattern(pattern):
  cube = [True if n == "1" else False for n in str(bin(pattern))[2::]]
  for y in range(9):
    if y == 0: printIfTrue(orOnList(cube, [0, 2, 3]))
    if y == 4: printIfTrue(orOnList(cube, [2, 4, 9, 11, 12]))
    if y == 8: printIfTrue(orOnList(cube, [11, 13, 18]))
    if y in [0, 4, 8]:
      printIfTrue(cube[int((y / 4) + (y * 2))], "■ ■ ■ ")
      if y == 0: printIfTrue(orOnList(cube, [0, 1, 4, 5, 6]))
      if y == 4: printIfTrue(orOnList(cube, [3, 5, 7, 9, 10, 13, 14, 15]))
      if y == 8: printIfTrue(orOnList(cube, [12, 14, 16, 18, 19]))
      printIfTrue(cube[int((y / 4) + (y * 2)) + 1], "■ ■ ■ ")
    elif y in [1, 5]:
      for i in range(7):
        if i in [2, 5]:
          print(" ", end=" ")
        printIfTrue(cube[y * 2 + (1 - (y % 5)) + i])
    elif y in [2, 6]:
      for i in range(5):
        if i in [1, 2, 3, 4]:
          print(" ", end=" ")
        if i in [1, 3]:
          if i == 1 and y == 2:
            printIfTrue(orOnList(cube, [3, 4]))
          elif i == 3 and y == 2:
            printIfTrue(orOnList(cube, [6, 7]))
          if i == 1 and y == 6:
            printIfTrue(orOnList(cube, [12, 13]))
          elif i == 3 and y == 6:
            printIfTrue(orOnList(cube, [15, 16]))
        else:
          printIfTrue(cube[(y * 2 - (1 if y == 6 else 2)) + i + int(i / 4 * 2)])
    elif y in [3, 7]:
      for i in range(7):
        if i in [2, 5]:
          print("  ", end="")
        ri, swap = (y * 2 - 2) + (1 - (y % 5)) + i, [[3, 6, 12, 15], [4, 7, 13, 16]]
        if ri in swap[0]: ri = swap[1][swap[0].index(ri)]
        elif ri in swap[1]: ri = swap[0][swap[1].index(ri)]
        printIfTrue(cube[ri])
    if y == 0: printIfTrue(orOnList(cube, [1, 7, 8]))
    if y == 4: printIfTrue(orOnList(cube, [6, 8, 10, 16, 17]))
    if y == 8: printIfTrue(orOnList(cube, [15, 17, 19]))
    print()

for pattern in patterns:
  printPattern(pattern)

Tabii ki mükemmel değil ve yapması gerekenler için oldukça uzun ve burada olmanızın tam nedeni bu!

Bu programı gülünç kısa yapıyor :)

Bu kod golf, bu yüzden en kısa cevap kazanır!


Çizgilere tek bir boşluk bırakabilir miyiz? Örnekleriniz bunları içerir.
orlp

Yup :) İzin verilir
Sygmei

4
Grafiksel çıktıya izin veriliyor mu?
12Me21

1
Onaltılık girdiye mi ihtiyacınız var veya ondalık uygun mu?
Titus

1
Belki tüm kod golf sadece bana geliyor, ama bu kodu okumak acı verici…
Lynn

Yanıtlar:


8

JavaScript (ES6), 202 188 187 bayt

let f =

n=>`0${x=',16,-54,21,-26,21,21,-26,21,166'}${x},16`.split`,`.map((d,i)=>(k-=d,n)>>i&1&&[..."ooooo"].map(c=>g[p-=(k&3||9)^8]=c,p=k>>2),g=[...(' '.repeat(9)+`
`).repeat(9)],k=356)&&g.join``

console.log(f(0xE0C25))
console.log(f(0xC1043))
console.log(f(0xE4F27))
console.log(f(0xF1957))

Nasıl çalışır

n =>                                                 // given 'n':
  `0${x = ',16,-54,21,-26,21,21,-26,21,166'}${x},16` // build the list of delta values
  .split`,`.map((d, i) =>                            // split the list and iterate
    (k -= d, n) >> i & 1 &&                          // update 'k', test the i-th bit of 'n'
    [..."ooooo"].map(c =>                            // if the bit is set, iterate 5 times:
      g[                                             // 
        p -= (k & 3 || 9) ^ 8                        // compute the direction and update 'p'
      ] = c,                                         // write a 'o' at this position
      p = k >> 2                                     // initial value of 'p'
    ),                                               //
    g = [...(' '.repeat(9) + `\n`).repeat(9)],       // initialization of the 'g' array
    k = 356                                          // initial value of 'k'
  )                                                  //
  && g.join``                                        // yield the final string

g10 karakterlik 9 satırlık bir ızgara üzerinde çalışıyoruz . Izgara başlangıçta boşluklarla doldurulur ve her 10. karakterde bir LineFeed bulunur.

Her bölüm bir başlangıç ​​konumu ve bir yön ile tanımlanır.

Yol tarifleri aşağıdaki gibi kodlanır:

ID | Dir.| Offset
---|-----|-------
 0 |  W  |  -1        Offset encoding formula:
 1 | NE  |  -9        -((ID || 9) ^ 8)
 2 |  N  |  -10
 3 | NW  |  -11

Her bölüm bir tamsayı olarak kodlanır:

  • yön # 0 ve # 1 bitlerinde saklanır
  • başlangıç ​​konumu # 2 ila # 8 bitlerinde saklanır

Örneğin, segment # 3 55. konumda başlar ve 3. yönü kullanır. Bu nedenle, olarak kodlanır (55 << 2) | 3 == 223.

Aşağıda, # 19 numaralı segmentten # 0 numaralı segmente kadar olan tam sayıların listesi verilmiştir:

356,340,394,373,399,378,357,383,362,196,180,234,213,239,218,197,223,202,36,20

Delta kodlandığında, 356'dan başlayarak:

0,16,-54,21,-26,21,21,-26,21,166,16,-54,21,-26,21,21,-26,21,166,16

Sonunda şu şekilde kodlanır:

`0${x=',16,-54,21,-26,21,21,-26,21,166'}${x},16`

Hata! Aradaki boşlukları unuttum. Bunu düzeltmek.
Arnauld

5

Python 3, 289 bayt

def f(n):
 for r in range(9):print(*(" o"[any(n&1<<ord(c)-97for c in"trq|t|t|t|tspon|s|s|s|sml|r|q||p|o|n||m|l|r||qp||o||nm||l|r|p||q|o|m||n|l|rpkih|k|k|k|qomkjgfe|j|j|j|nljdc|i|h||g|f|e||d|c|i||hg||f||ed||c|i|g||h|f|d||e|c|igb|b|b|b|hfdba|a|a|a|eca".split("|")[r*9+c])]for c in range(9)))

Akıllı bir şey değil, sadece kodlama.


Could "trq|t...a|eca".split("|")haline "tqr t...a eca".split()?
Loovjo

@Loovjo Hayır, .split()yok eder ||.
orlp

3

Ruby, 116 bayt

->n{s=[' '*17]*9*$/
20.times{|i|j=i%9
n>>19-i&1>0&&5.times{|k|s[i/9*72+(j>1?~-j/3*8+k*18:j*16)+k*(2--j%3*2)]=?O}}
s}

Bu gözlemlediğim birkaç desene dayanıyor. İlk olarak, desen her 9 satırda bir tekrarlanır. İkinci olarak, yatay çizgilerin başlangıç ​​noktaları uygun şekilde seçilirse, x yönleri sürekli olarak sağ, sol, düz arasında döner.

Test programında yönlendirilmemiş

f=->n{
   s=[' '*17]*9*$/                    #Setup a string of 9 newline separated lines of 17 spaces.
   20.times{|i|                       #For each of the 20 bits..
     j=i%9                            #The pattern repeats every 9 bits.
     n>>19-i&1>0&&                    #If the relevant bit is set,
     5.times{|k|                      #draw each of the 5 points on the relevant line.
       s[i/9*72+                      #There are 9 lines starting on each row. Row y=0 starts at 0 in the string, row y=1 at 72, etc.
       (j>1?~-j/3*8+k*18:j*16)+       #~-j=j-1. For j=2..8, the starting x coordinates are (0,0,1,1,1,2,2)*8. For j=0 and 1 starting x coordinates are 0 and 16. 
       k*(2--j%3*2)                   #From the starting points, draw the lines right,left,straight. Down movement if applicable is given by conditional k*18 above.
       ]=?O                           #Having described the correct index to modify, overwrite it with a O character.
     }
   }
s}                                    #Return the string.


[0xE0C25, 0xC1043, 0xE4F27, 0xF1957, 
  0xD0C67, 0x95E30, 0x95622, 0xC5463, 
  0xE5975, 0xB5E75, 0xF4C75, 0xF5D75].map{|m|puts f[m],'---------'}

20 karakterlik bir dize ve 20 satırın parametrelerini tanımlamak için bazı kod çözme kullanarak 112 bayt bir çözüm olduğuna inanıyorum. Zamanım varsa bunu daha sonra deneyeceğim.


Güzel açıklama!
Sygmei

2

PHP 142 150 149 bayt

for($r="";$c=ord(",(NMKJIGFHDjigfecbd`"[$i]);)if(hexdec($argv[1])>>$i++&1)for($p=96^$c&~$k=3;$k++<8;$p+=7+($c&3?:-6))$r[$p]=o;echo chunk_split($r,9);

şekli gerektiği kadar basar; yani alt kısım boşsa kesilir.
İle çalıştırın php -nr '<code>' <input>. Girişe önek ekleme

Çevrimiçi test edin

Hiçbir kesim için 11 bayt ekleyin: Ekle ,$r[80]=" "sonra $r="".

kodlama açıklandı

Her çizgi bir başlangıç ​​noktası ve dört yönden biriyle tanımlanabilir.
9x9 grid Çizim, başlangıç konumu arasında değişir 0,0için 8,4; veya kombine 0olarak 8*9+4=76. Neyse ki, tüm başlangıç ​​noktaları [0,4,8,36,40,44,72,76]4'e bölünebilir; yani yön kodu[0..3] 0 ve 1 bitlerine sıkıştırılabilir -> hiçbir kaymaya gerek yoktur.

İmleç hareketinin kolay bir hesaplaması 0için, doğu (sadece dikey hareketsiz yön) ve [1,2,3]ofset 9(dikey hareket için) artı [-1,0,1]-> [8,9,10]-> olduğu güney-batı, güney, güney-doğu için alınır delta=code?code+7:1.

İlk ve son satırların yönü doğu olup, 0 ile 76 arasında değişen kodlarla sonuçlanır [0+0,4+0,0+2,0+3,4+1,4+2,4+3,8+1,8+2,...,44+1,44+2,72+0,76+0]; ve her bir değerde bitsel veya xor 96 yazdırılabilir ve sorunsuz ascii kodları ile sonuçlanır [96,100,98,99,101,102,103,105,106,68, 72,70,71,73,74,75,77,78,40,44]-> `dbcefgijDHFGIJKMN(,. Kod, bit 0 için LSB'yi kullanırken, 0 satırı MSB'ye karşılık gelir, bu nedenle dize ters çevrilmelidir. Finito.

Yıkmak

for($r="";                  // init result string, loop through line codes
    $c=ord(",(NMKJIGFHDjigfecbd`"[$i]);)
    if(hexdec($argv[1])>>$i++&1)// if bit $i is set, draw line 19-$i:
        for($p=96^$c&~$k=3          // init $k to 3, init cursor to value&~3
            ;$k++<8;                // loop 5 times
            $p+=7+($c&3?:-6)            // 2. map [0,1,2,3] to [1,8,9,10], move cursor
        )
            $r[$p]=o;                   // 1. plot
echo chunk_split($r,9);     // insert a linebreak every 9 characters, print

bazı golf açıkladı

  • Yana ^96düşük iki biti üzerinde hiçbir etkiye sahip yönü çıkarılırken, göz ardı edilebilir; bu nedenle değeri imleç başlangıcına 5 bayt kaydeden bir değişkende depolamaya gerek yoktur.
  • ~3Bunun yerine kullanmak 124bir bayt kaydeder ve bir sonraki golf oynamaya izin verir:
  • Devir sayacının atama $k=3içinde başlatılması $piki bayt tasarrufu sağlar
    ve ön koşula zarar vermez (üst değerde hala bir basamak olduğu için).
  • Sonuç için bir dize kullanmak en kısa başlatma ve çizime sahiptir: Bir karakter bir dizenin sonundan öteye ayarlandığında, PHP eksik karakterleri uzaya ayarlar. Ve chunk_splitçizgi satırlarını eklemenin en kısa yoludur.
    Başka ne kadar çok şey alacağını bilmek bile istemiyorum.
  • 7+($c&3?:-6)bir bayt daha kısadır $c&3?$c%4+7:1.
  • hexdec()Giriş kısıtlamasını karşılamak için (8 bayt) eklendi .

2

JavaScript, 184 183 178 168 167 bayt

f=
n=>[...`<>K[LM]NO\\^k{lm}no|~`].map((e,i)=>n>>i&1&&[0,2,4,6,8].map(i=>a[(e&102)*4+(e&17||15)*i]=`o`,e=~e.charCodeAt()),a=[...(` `.repeat(31)+`
`).repeat(9)])&&a.join``
<input oninput=o.textContent=f(+this.value)><pre id=o>

Başlangıçta 206 bayttı ama @ Arnauld'un cevabı bana tek boyutlu bir dizi çözümünü araştırmam için ilham verdi. Düzenleme: @ edc65 sayesinde 1 bayt kaydedildi. Kaydedilen 5 15 @Arnauld sayesinde bayt. Karakter seçimini değiştirerek bir bayt daha kaydetti.


[0,1,2,3,4]daha kısa
edc65

Sanırım [67,65,52,36,51,50,34,49,48,35,33,20,4,19,18,2,17,16,3,1]ve kullanarak 4 bayt tasarruf edebilirsiniz[0,2,4,6,8].map(i=>a[(e&102)*4+(e&17||15)*i]='o')
Arnauld

1
Veya 10 bayt daha kaydetmek için [..."ecVFUTDSREC6&54$32%#"]ve [0,2,4,6,8].map(i=>a[(e&102)*4+(e&17||15)*i]='o',e=e.charCodeAt()-34)tuşlarını kullanabilirsiniz.
Arnauld

@Arnauld Tasarrufunuzu 1'e kadar aşmış gibi görünüyorsunuz ve ~bunun yerine kullanarak ekstra bir bayt golf yapmayı başardım -34(ne yazık ki `` `` faulüne düştüm , bu yüzden 2 bayt kaydetmiyorum).
Neil

Bu '\' karakterini ASCII karakteri # 220 ile değiştirip değiştiremeyeceğinizi merak ediyorum.
Arnauld

1

Toplu, 491 bayt

@set n=%1
@for %%i in ("720896 524288 524288 524288 843776 262144 262144 262144 268288" "131072 65536 0 32768 16384 8192 0 4096 2048" "131072 0 98304 0 16384 0 12288 0 2048" "131072 32768 0 65536 16384 4096 0 8192 2048" "165248 1024 1024 1024 89312 512 512 512 10764" "256 128 0 64 32 16 0 8 4" "256 0 192 0 32 0 24 0 4" "256 64 0 128 32 8 0 16 4" "322 2 2 2 171 1 1 1 17")do @set s=&(for %%j in (%%~i)do @set/am=%1^&%%j&call:c)&call echo(%%s%%
:c
@if %m%==0 (set s=%s%  )else set s=%s%o 

Not: Son satır boşlukla biter. ifBir fordöngünün içine bir değişken içeren bir koşul koymak , kendi alt yordamına ihtiyaç duymak için toplu işin ötesindedir. Görünür hiçbir şey yapmadığından çıkmak için içine düşüyorum. ~Sayıları üzerinde döngü iç döngü sağlayan dış döngü dizeleri unquotes. Sayılar basitçe os'nin çizilmesi gereken tüm yerler için bitmaskindir .


1

Cı, 267 262 260 256 karakter

1 karakterden kaçma sayımı

void f(int i){char*k="\0\x1\x2\x3\x4\x4\x5\x6\x7\x8\0\x9\x12\x1b\x24\0\xa\x14\x1e\x28\x4\xc\x14\x1c\x2d\x4\xd\x16\x1f\x28\x4\xe\x18\x22\x2c\x8\x10\x18\x20\x28\x8\x11\x1a\x23\x2c\x24\x25\x26\x27\x28\x28\x29\x2a\x2b\x2c\x24\x2d\x36\x3f\x48\x24\x2e\x38\x42\x4c\x28\x30\x38\x40\x48\x28\x31\x3a\x43\x4c\x28\x31\x3a\x43\x4c\x28\x32\x3c\x46\x50\x2c\x35\x3e\x47\x50\x48\x49\x4a\x4b\x4c\x4c\x4d\x4e\x4f\x50";for(int n=0,s,l;n<81;!(++n%9)&&putchar(10))for(s=l=0;s<20;!(++l%5||++s^20)&&putchar(32))if(i<<s&1<<19&&k[l]==n&&putchar(111))break;}

k, hangi kutulara 'o' koyulacağını gösteren bir aramadır.

Çevrimiçi deneyin!


1

Befunge, 468 bayt

~:85+`!#v_86*-:9`7*-48*%\82**+
3%2:/2\<$v0%2:/2\*g02*!g03%2:/2\*!+4g07%2:/2\*g02*!-8g06%2:/2\*g02*!-4g0
g!*20g*^00>50g*\2/:2%00g8-!*40g*\2/:2%30g8-!*20g*\2/:2%60g66+-!*\2/:2%70
`\5:p00:<g^*!-8g00%2:\-10:\p07-g00:p06+g00:p05`3:p04`\5:p03:<0\p02`3:p01
#o 8`#@_^4>*50g*\2/2%00g!*40g*0\>:#<1#\+_$!1+4g,48*,\1+:8`!#^_55+,$\1+:
g03%2:/2<-^!g00%2:/2\*g01*!g03%2:/2\*g01*!g07%2:/2\*!-4g06%2:/2\*g01*!-4
70g4-!*\^>!*50g*\2/:2%00g4-!*40g*\2/:2%30g8-!*10g*\2/:2%60g8-!*10g*\2/:2%

Çevrimiçi deneyin!

İlk satır, bir dizgiyi onaltılı sayı olarak değerlendirerek stdin'den okur. Kodun geri kalanı esasen ızgaranın x / y koordinatları üzerinde sadece bir çift döngüdür ve büyük bir boole hesaplaması o, her bir konum için bir çıkışın gerekip gerekmediğini belirler .

Temel olarak 20 ızgara noktasının her biri için ayrı bir koşul vardır, örneğin (ilk dört):

(y==0) * (x<5) * bit0
(y==0) * (x>3) * bit1
(x==0) * (y<5) * bit2
(x==y) * (y<5) * bit3

Ve sonra, 20'sini de hesapladıktan sonra, lotu birlikte VEYA sonuç doğruysa, a çıktısı veririz o, aksi takdirde bir boşluk çıkarırız.

Befunge'in bit manipülasyon işlemleri yolunda hiçbir şeyi yoktur, bu yüzden bitleri girdiden çıkarmak için tekrar tekrar değerlendiriyoruz n%2ve sonra n/=220 koşul hesaplamalarında yolumuza devam ediyoruz.

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.