จำลองกฎ 110


27

Rule 110 เป็นหุ่นยนต์เซลลูล่าร์ที่มีคุณสมบัติน่าสนใจ เป้าหมายของคุณคือการจำลองกฎ 110 ในตัวละครน้อยที่สุด

สำหรับผู้ที่ไม่รู้กฎ 110 ถูกจำลองแบบทีละบรรทัดในกริด แต่ละตารางในบรรทัดของตารางจะมองไปที่ช่องสี่เหลี่ยมด้านบนด้านบนซ้ายและด้านบนขวาเพื่อกำหนดว่าควรจะใช้เซลล์ใด

current pattern  111 110 101 100 011 010 001 000
new cell          0   1   1   0   1   1   1   0

อินพุต:ตัวเลขตั้งแต่ 0 ถึง 39 แสดงถึงแถวบนสุดของสี่เหลี่ยมจัตุรัสที่ n ในรูปแบบที่เหมาะสม (สตริงที่คั่นด้วยเครื่องหมายจุลภาค, รายการ, อาร์กิวเมนต์ของฟังก์ชัน) เพื่อรองรับภาษาที่มีการจัดทำดัชนี 1 หมายเลขอาจมีการจัดทำดัชนี 1 และช่วงจาก 1 ถึง 40

อินพุตตัวอย่าง:

38,39

เอาท์พุท:ตาราง 40 x 40 แสดงออโตมาตะรวมถึงแถวแรก คุณควรปล่อยให้ 0 ว่างเปล่าและ 1 เป็นอักขระการพิมพ์ใด ๆ อนุญาตให้ใช้ช่องว่างต่อท้ายตราบใดที่ตารางจริงสามารถแยกได้อย่างสมเหตุสมผล ด้านล่างของตารางอาจมีการขึ้นบรรทัดใหม่ แต่ไม่ควรมีบรรทัดว่างระหว่างเส้นกริด

ตัวอย่างผลลัพธ์:

                                  XX
                                 XXX
                                XX X
                               XXXXX
                              XX   X
                             XXX  XX
                            XX X XXX
                           XXXXXXX X
                          XX     XXX
                         XXX    XX X
                        XX X   XXXXX
                       XXXXX  XX   X
                      XX   X XXX  XX
                     XXX  XXXX X XXX

เป็นต้น

หมายเหตุ: คำถามที่คล้ายกันเกี่ยวกับออโตมาตา 1D เซลลูลาร์ได้รับการถามแล้ว แต่ฉันหวังว่าโดยการใช้กฎเพียงข้อเดียวก็สามารถเขียนคำตอบที่สั้นลงได้


4
รูปแบบล้อมรอบหรือไม่ (เช่นเซลล์ด้านซ้ายสุดตรวจสอบเซลล์ด้านขวาในบรรทัดด้านบนหรือไม่)?
Ventero

4
หากเป็นเอกพจน์แสดงว่าเป็นหุ่นยนต์เซลลูลาร์
ClickRick

1
คำตอบอาจสั้นกว่าแบบจำลองเศษส่วนของหุ่นยนต์ 1D เซลใด ๆเพียงเล็กน้อยเนื่องจากกฎนี้มีการเข้ารหัสยากแทนที่จะต้องแยกวิเคราะห์จากอินพุต แต่นอกเหนือจากนั้นคำตอบจะเหมือนกัน ถ้ามันเป็นกฎที่แตกต่างกันก็จะมีศักยภาพในการออม แต่วิธีบนโลกจะใช้กฎพิเศษที่ทรงพลังของทัวริงในการบันทึกสิ่งใดในการใช้งานทั่วไป
Peter Taylor

1
@Ventero พวกเขาไม่ได้อยู่ในรุ่นนี้
qwr

1
@BMO นี้เป็นคำถามเก่า แต่เนื่องจากฉันทามติในปัจจุบันคืออนุญาตรูปแบบการป้อนข้อมูลที่มีความยืดหยุ่นฉันจะแก้ไขคำถามเพื่อให้อนุญาต
qwr

คำตอบ:


8

CJam - 47

S40*l',/{i'!t}/{N40,S3$S++f{>3<2b137Yb='!^}}39*

มันใช้!สำหรับเซลล์ "1"

ลองที่http://cjam.aditsu.net/

คำอธิบาย:

S40*ทำให้สตริง (อาร์เรย์) ของ 40 ช่องว่าง
l',/อ่านบรรทัดและแยกโดยเครื่องหมายจุลภาค
{…}/ดำเนินการบล็อกสำหรับแต่ละรายการ (ตัวเลขในรูปแบบสตริง)
- i'!tแปลงตัวเลขเป็นจำนวนเต็มและตั้งค่ารายการที่ตำแหน่งในสตริงก่อนหน้า (เริ่มต้น 40 ช่องว่าง ) ถึง '!'
ณ จุดนี้เราได้รับบรรทัดแรก
{…}39*ดำเนินการบล็อก 39 ครั้ง
- Nเพิ่มบรรทัดใหม่
- 40,ทำให้อาร์เรย์ [0 1 … 39]
- S3$S++คัดลอกบรรทัดก่อนหน้า (ตำแหน่ง 3 บนสแต็ค) และวางแผ่นมันด้วยช่องว่างในแต่ละด้าน
- f{…}ดำเนินการบล็อกสำหรับ {แต่ละหมายเลขจาก 0 ถึง 39} และ {the padded line}
- >3<รับชิ้นของ 3 รายการจากบรรทัดที่มีเบาะเริ่มต้นที่หมายเลขปัจจุบัน
- 2bแปลงจากฐาน 2; รายการที่เราแบ่งเป็นตัวเลขฐาน 2 แต่ตัวละครจะถูกแปลงเป็นค่า ASCII และ '' mod 8 คือ 0 และ '!' mod 8 คือ 1
- 137Ybแปลง 137 เป็นเบส 2 ( Y= 2), ได้รับ [1 0 0 0 1 0 0 1], ซึ่งคือ 110 ที่กลับด้านและลบล้าง (บน 8 บิต)
- ='!^ได้รับเลขฐาน 2 ที่สอดคล้องกัน อาร์เรย์ล้อมรอบเพื่อให้ดัชนีถูกนำมาดัดแปลง 8) และ xor ด้วย '!' ตัวละครส่งผลให้ '!' สำหรับ 0 และ '' สำหรับ 1


17

Ruby, 113 อักขระ

c=[0]*41
eval"[#{gets}].map{|i|c[i]=1}"+'
c=(0..39).map{|x|putc" X"[u=c[x]]
110[4*c[x-1]+2*u+c[x+1]]}<<0;puts'*40

ใช้อินพุตบน stdin หากต้องการใช้กฎที่แตกต่างเพียงแค่แทนที่110ในบรรทัดสุดท้ายด้วยกฎใดก็ตามที่คุณต้องการลอง

ตัวอย่าง:

$ ruby 110.rb <<< 38,39
                                      XX
                                     XXX
                                    XX X
                                   XXXXX
                                  XX   X
                                 XXX  XX
                                XX X XXX
                               XXXXXXX X
                              XX     XXX
                             XXX    XX X
                            XX X   XXXXX
                           XXXXX  XX   X
                          XX   X XXX  XX
                         XXX  XXXX X XXX
                        XX X XX  XXXXX X
                       XXXXXXXX XX   XXX
                      XX      XXXX  XX X
                     XXX     XX  X XXXXX
                    XX X    XXX XXXX   X
                   XXXXX   XX XXX  X  XX
                  XX   X  XXXXX X XX XXX
                 XXX  XX XX   XXXXXXXX X
                XX X XXXXXX  XX      XXX
               XXXXXXX    X XXX     XX X
              XX     X   XXXX X    XXXXX
             XXX    XX  XX  XXX   XX   X
            XX X   XXX XXX XX X  XXX  XX
           XXXXX  XX XXX XXXXXX XX X XXX
          XX   X XXXXX XXX    XXXXXXXX X
         XXX  XXXX   XXX X   XX      XXX
        XX X XX  X  XX XXX  XXX     XX X
       XXXXXXXX XX XXXXX X XX X    XXXXX
      XX      XXXXXX   XXXXXXXX   XX   X
     XXX     XX    X  XX      X  XXX  XX
    XX X    XXX   XX XXX     XX XX X XXX
   XXXXX   XX X  XXXXX X    XXXXXXXXXX X
  XX   X  XXXXX XX   XXX   XX        XXX
 XXX  XX XX   XXXX  XX X  XXX       XX X
XX X XXXXXX  XX  X XXXXX XX X      XXXXX
XXXXXX    X XXX XXXX   XXXXXX     XX   X

8

Mathematica, 122 ไบต์

f[a_]:=Riffle[CellularAutomaton[110,Array[If[MemberQ[ToExpression["{"<>a<>"}"],#-1],1,0]&,40],39]/.0->" "/.1->"X","
"]<>""

ใช่คุณอาจมองว่าเป็นการละเมิดช่องโหว่นี้แต่ก) ช่องโหว่นั้นค่อนข้างแน่นอน b) คำถาม Cellular Automaton ต้องการคำตอบทางคณิตศาสตร์ (โดยเฉพาะอย่างยิ่งเกี่ยวกับกฎข้อ 110) และ c) คำตอบ Ruby ของ Ventero นั้นสั้นกว่าดังนั้นฉันจึงไม่ ไม่คิดว่าจะมีอันตรายใด ๆ เกิดขึ้น

อักขระส่วนใหญ่ใช้สำหรับการแยกวิเคราะห์อินพุตและการจัดรูปแบบเอาต์พุต หุ่นยนต์จริงถูกจำลองโดยใช้

CellularAutomaton[110,initialGrid,39]

สิ่งนี้ใช้เงื่อนไขขอบเขตเป็นระยะ (เพื่อให้กริดล้อมรอบ)


8

Python - 141

i=input()
o=range(40)
l=''.join(' X'[c in i]for c in o)
for r in o:print l;l=''.join('X '[l[c-1:c+2]in('XXX','   ','X  ','','  ')]for c in o)

ทำงานเช่น python 110.py <<< 38,39


3
['X',' ']สามารถเปลี่ยน'X 'เป็นบันทึก 5 ตัว
งานอดิเรกของ Calvin

16
ผลไม้ที่ฉันชอบตอนนี้คือo=range()
kitcar2000

7

q, 67 62 58 ไบต์

ไม่มีการล้อมกรอบ:

{40{not(2 sv'flip 1 0 -1 xprev\:x)in 0 4 7}\@[40#0b;x;~:]}

เวอร์ชั่นเก่า

{40{not(flip(prev;::;next)@\:x)in 3 cut 111100000b}\@[40#0b;x;not]}
{40{not(flip 1 0 -1 xprev\:x)in 3 3#111100000b}\@[40#0b;x;~:]}

5

Python, 186

def r(s,m=range(40)):
 s=[int(i in s)for i in m]
 for g in m:print''.join([' X'[i]for i in s]);s=[int(not''.join(map(str,s[i-1:i+2]if i else s[:2]))in'111 100 000 00'.split())for i in m]

เหมาะสม แต่อาจไม่เหมาะสม

คุณไม่ได้ระบุว่าจะรับอินพุตอย่างไรดังนั้นฉันจึงสร้างฟังก์ชันขึ้นมา

ใช้ตัวอย่าง:

R ([38,39])

เอาท์พุท:

                                      XX
                                     XXX
                                    XX X
                                   XXXXX
                                  XX   X
                                 XXX  XX
                                XX X XXX
                               XXXXXXX X
                              XX     XXX
                             XXX    XX X
                            XX X   XXXXX
                           XXXXX  XX   X
                          XX   X XXX  XX
                         XXX  XXXX X XXX
                        XX X XX  XXXXX X
                       XXXXXXXX XX   XXX
                      XX      XXXX  XX X
                     XXX     XX  X XXXXX
                    XX X    XXX XXXX   X
                   XXXXX   XX XXX  X  XX
                  XX   X  XXXXX X XX XXX
                 XXX  XX XX   XXXXXXXX X
                XX X XXXXXX  XX      XXX
               XXXXXXX    X XXX     XX X
              XX     X   XXXX X    XXXXX
             XXX    XX  XX  XXX   XX   X
            XX X   XXX XXX XX X  XXX  XX
           XXXXX  XX XXX XXXXXX XX X XXX
          XX   X XXXXX XXX    XXXXXXXX X
         XXX  XXXX   XXX X   XX      XXX
        XX X XX  X  XX XXX  XXX     XX X
       XXXXXXXX XX XXXXX X XX X    XXXXX
      XX      XXXXXX   XXXXXXXX   XX   X
     XXX     XX    X  XX      X  XXX  XX
    XX X    XXX   XX XXX     XX XX X XXX
   XXXXX   XX X  XXXXX X    XXXXXXXXXX X
  XX   X  XXXXX XX   XXX   XX        XXX
 XXX  XX XX   XXXX  XX X  XXX       XX X
XX X XXXXXX  XX  X XXXXX XX X      XXXXX
XXXXXX    X XXX XXXX   XXXXXX     XX   X

ฉันระบุอินพุต: ในกรณีของคุณคุณจะต้องใช้อินพุต () และจัดรูปแบบอินพุตตามที่ระบุในโพสต์ดั้งเดิม
qwr

5

Mathematica, 113 ตัวอักษร

อีกคำตอบ Mathematica CellularAutomatonใช้

Print@@" "["X"][[#]]&/@CellularAutomaton[110,SparseArray[#+1->1&/@ImportString[InputString[],"CSV"][[1]],40],39];

ที่น่าสนใจ" "["X"][[#]]&ทำงานอย่างไร
Martin Ender

@ m.buettner คือ" "["X"][[1]] ผลตอบแทนที่หัวของคือ "X"" "["X"][[0]]" "["X"]" "
alephalpha

อ้อเข้าใจแล้ว. นั่นเป็นเพียงการบันทึกอักขระสำหรับรายการโดยทั่วไป มันฉลาดจริงๆ ผมคิดว่าคุณสามารถเพิ่มเข้าไปในcodegolf.stackexchange.com/questions/12900/...
มาร์ตินเอนเดอร์

4

C - 178

รหัสนี้ขึ้นอยู่กับความจริงที่ว่าแต่ละแถวในเมทริกซ์ถูกเก็บไว้ในหน่วยความจำต่อเนื่อง นอกจากนี้จะไม่พิมพ์แถวแรก แต่จะพิมพ์ 40 แถวถัดไปเนื่องจากกฎระบุเฉพาะตาราง 40x40 เท่านั้น

เยื้องสำหรับการอ่านได้อย่างเดียวจำนวนไบต์เท่านั้นรวมรหัสที่จำเป็น

a[41][42],i,j,*t;
main(){
    while(scanf("%d,",&j)>0)
        a[i][j]=1;
    for(;i<40;i++,puts(""))
        for(j=0;++j<40;)
            t=&a[i][j],
            putchar((*(t+42)=1&(110>>(*(t+1)?1:0)+(*t?2:0)+(*(t-1)?4:0)))?88:32);
}

3

ลัวะ - 351

ไม่ใช่ภาษาที่เหมาะสำหรับการเล่นกอล์ฟ

s,n,t,u=arg[1],{},table.remove,table.insert
for i=1,40 do u(n,i,'.') end
for i in s:gmatch("%d+")do u(n,i,'x');t(n)end
function a(b) c="";for i=1,40 do c=c..b[i] end;print(c);return c end
for i=1,40 do z= n[40]..a(n)..n[1];for k=2,41 do y=string.sub(z,k-1,k+1);if y=="xxx"or y=="x.." or y=="..." then u(n,k-1,'.')else u(n,k-1,'x')end;t(n)end end

1
do u(n,i,'x')มันเป็นความตั้งใจใช่มั้ย
Stan Strum


3

Haskell , 135 131 130 ไบต์

-1 ไบต์ขอบคุณØrjan Johansen (จัดเรียงใหม่take 40)

แนวทางที่แตกต่างอย่างสิ้นเชิงกับคำตอบของ FrownyFrogแต่มีความยาวเท่ากัน:

(a?b)r=mod(b+r+b*r+a*b*r)2
r x=0:(zipWith3(?)x=<<tail$tail x++[0])
f y=take 40$map(" o"!!)<$>iterate r[sum[1|elem i y]|i<-[0..40]]

1

คำอธิบาย

4101

f y=                               [sum[1|elem i y]|i<-[0..40]]

40

    take 40$              iterate r

01

            map(" o"!!)<$>

r110zipWith3(?)

r x=0:(zipWith3(?)x=<<tail$tail x++[0])

(?)ผู้ประกอบการเป็นส่วนที่น่าสนใจที่สุดของการแก้ปัญหา: ก่อนหน้านี้ผมใช้กฎบูลีนสร้างขึ้นด้วยแผนที่ Karnaugh แต่กลับกลายเป็นมีวิธีที่รัดกุมยิ่งเพิ่มเติมได้ที่:

(a?b)r=mod(b+r+b*r+a*b*r)2

1
บันทึกไบต์โดยใส่ก่อนtake 40$ map(" o"!!)<$>
Ørjan Johansen

3

Husk , 31 28 ไบต์

ฮะ Husk กำลังเต้นเยลลี่!

†!¨↑¨↑40¡ȯẊȯ!ḋ118ḋėΘ`:0M#ŀ40

ลองออนไลน์!

คำอธิบาย & Ungolfed

ก่อนที่จะเพิ่มคำอธิบายให้ฉันเลิกทำสิ่งนี้เล็กน้อยก่อนอื่นให้เราเอาองค์ประกอบต่าง ๆ เพิ่มวงเล็บอย่างชัดเจนและคลายการบีบอัด¨↑¨สตริง และแทนที่40ด้วย4คำอธิบายที่อ่านง่ายขึ้น:

†!"t "↑4¡(Ẋ(!ḋ118ḋė)Θ`:0)M#ŀ4  -- example input: [3]
                           ŀ4  -- lower range of 4: [0,1,2,3]
                         M     -- map over left argument
                          #    -- | count in list
                               -- : [0,0,0,1]
        ¡(              )      -- iterate the following indefinitely (example with [0,1,1,1])
                     `:0       -- | append 0: [0,1,1,1,0]
                    Θ          -- | prepend 0: [0,0,1,1,1,0]
          Ẋ(       )           -- | map over adjacent triples (example with  1 1 0
                  ė            -- | | create list: [1,1,0]
                 ḋ             -- | | convert from base-2: 6
                               -- | | convert 118 to base-2: [1,1,1,0,1,1,0]
                               -- | | 1-based index: 1
                               -- | : [1,1,0,1]
                               -- : [[0,0,0,1],[0,0,1,1],[0,1,1,1],[1,1,0,1],[1,1,1,1],[1,0,0,1],...]
      ↑4                       -- take 4: [[0,0,0,1],[0,0,1,1],[0,1,1,1],[1,1,0,1]]
†                              -- deep map the following (example with [1,1,0,1])
 !"t "                         -- | use each element to index into "t ": "tt t"
                               -- : ["   t","  tt"," ttt","tt t"]

2

Java, 321 ตัวอักษร

อินพุตถูกส่งผ่านเป็นอาร์กิวเมนต์จากบรรทัดคำสั่งเป็นต้น java R 38,39

ฉันไม่เคยเขียนโค้ดจาวาที่สับสนมากขึ้น :-)

class R{public static void main(String[]a) {
Integer s=40;boolean[]n,o=new boolean[s];
for(String x:a[0].split(","))o[s.valueOf(x)]=s>0;
for(Object b:o){n=o.clone();
for(int j=0;j<s;j++){
boolean l=j>1&&o[j-1],r=o[j],c=j+1<s&&o[j+1];
n[j]=!(l&c&r|l&!c&!r|!(l|c|r));
System.out.print((r?"X":" ")+(j>s-2?"\n":""));
}o=n;}}}

2

อัปเดต: แก้ไขตัวอย่างเอาต์พุตที่นี่ (ด้วย 40 บรรทัดไม่ใช่ 50): เอาท์พุทใหม่ด้านล่าง (ลบอันก่อนหน้านี้ออกเพื่อความกะทัดรัด):

                                      xx
                                     xxx
                                    xx x
                                   xxxxx
                                  xx   x
                                 xxx  xx
                                xx x xxx
                               xxxxxxx x
                              xx     xxx
                             xxx    xx x
                            xx x   xxxxx
                           xxxxx  xx   x
                          xx   x xxx  xx
                         xxx  xxxx x xxx
                        xx x xx  xxxxx x
                       xxxxxxxx xx   xxx
                      xx      xxxx  xx x
                     xxx     xx  x xxxxx
                    xx x    xxx xxxx   x
                   xxxxx   xx xxx  x  xx
                  xx   x  xxxxx x xx xxx
                 xxx  xx xx   xxxxxxxx x
                xx x xxxxxx  xx      xxx
               xxxxxxx    x xxx     xx x
              xx     x   xxxx x    xxxxx
             xxx    xx  xx  xxx   xx   x
            xx x   xxx xxx xx x  xxx  xx
           xxxxx  xx xxx xxxxxx xx x xxx
          xx   x xxxxx xxx    xxxxxxxx x
         xxx  xxxx   xxx x   xx      xxx
        xx x xx  x  xx xxx  xxx     xx x
       xxxxxxxx xx xxxxx x xx x    xxxxx
      xx      xxxxxx   xxxxxxxx   xx   x
     xxx     xx    x  xx      x  xxx  xx
    xx x    xxx   xx xxx     xx xx x xxx
   xxxxx   xx x  xxxxx x    xxxxxxxxxx x
  xx   x  xxxxx xx   xxx   xx        xxx
 xxx  xx xx   xxxx  xx x  xxx       xx x
xx x xxxxxx  xx  x xxxxx xx x      xxxxx
xxxxxx    x xxx xxxx   xxxxxx     xx   x

ทำปริศนาตัวต่อฉันเรียนรู้สิ่งที่น่าสนใจเกี่ยวกับคำสั่งซ้อนในลูปใน php และทันใดนั้นมันซับซ้อนเกินกว่าที่ฉันคิดไว้ เมื่อฉันได้รับเวลาฉันคิดว่าฉันสามารถเอาชนะคะแนนนี้ได้อย่างมาก สำหรับตอนนี้แม้ว่าจะยังคงไม่เปลี่ยนแปลงที่ 408 ไม่ใช่การแข่งขัน


PHP เวอร์ชัน 408 ตัวละครของฉัน:

นี่เป็นปริศนาที่ยอดเยี่ยม ฉันยังใช้เวลาเล่นกับปัจจัยการผลิตเป็นสิ่งเหล่านี้เป็นสิ่งที่น่าสนใจที่จะต้องพูด อย่างไรก็ตามนี่คือเวอร์ชัน PHP ของฉัน (ซึ่งไม่มีที่ใดดีเท่าคำตอบที่โพสต์ แต่เสร็จสมบูรณ์ในตำแหน่งที่ 0 จะขึ้นไปด้านบนและด้านขวาในตำแหน่งที่ 39 จะอยู่เหนือและบนซ้ายเท่านั้นนั่นคือไม่มีที่นี่ เป็นรุ่นของฉัน:

<?php $a='38,39';$b='';$d=explode(',',$a);for($i=0;$i<40;++$i){$c=' ';
foreach($d as $k=>$v){if($v == $i){$c='x';}}$b.=$c;}echo $b."\n";
for($x=1;$x<41;++$x){$o='';for($i=1;$i<41;++$i){if(($i>1)AND(substr($b,$i-2,1)=='x')){
$l=1;}else{$l=0;}if((substr($b,$i-1,1))=='x'){$v=1;}else{$v=0;}if((substr($b,$i,1))=='x'){
$r=1;}else{$r=0;}if((($l+$v+$r)==2)OR(($v+$r)==1)){$o.='x';}else{$o.=' ';}}
echo $o."\n";$b=$o;}?>

คุณสามารถดูและเรียกใช้ได้ที่นี่: http://codepad.org/3905T8i8

อินพุตเป็นสตริงอินพุตที่เริ่มต้นเป็น $ a = '38, 39 ';

เอาท์พุทเป็นดังนี้:

xx removed as was too long originally - had 50 lines, not 40 xx

หวังว่าคุณจะชอบมัน!!!

ป.ล. ฉันต้องเพิ่มตัวแบ่งบรรทัดสองสามตัวลงในโค้ดเพื่อให้คุณสามารถดูได้ทั้งหมดและไม่ขยายไปทั่วหน้าด้วยแถบเลื่อน


ผลลัพธ์ของคุณมี 50 บรรทัด
aditsu

นั่นเป็นเพราะฉันเล่นกับมันหลังจากที่ฉันเสร็จแล้วและเห็นว่าเกิดอะไรขึ้น การเปลี่ยนแปลงกฎเล็กน้อยมีผลกระทบที่น่าสนใจเช่นนั้น อย่างไรก็ตามได้เปลี่ยนเป็น 40 แล้วและขออภัยที่พลาดไป
พอล Drewett

คุณอาจต้องการเปลี่ยนผลลัพธ์ด้วยเช่นกัน: p
aditsu

แก้ไขเอาต์พุตและเพิ่มลิงค์ Codepad ใหม่ด้วยค่าที่ถูกต้อง ขอขอบคุณอีกครั้ง.
Paul Drewett

2

สแตกซ์ 24 ไบต์CP437

╦♥µ╤u{£┬íQ<;▀ΦΣ╢╕╚äZ↕áû↑

เรียกใช้และแก้ไขข้อบกพร่องออนไลน์!

ใช้ codepoint 1 ใน CP437 สำหรับเซลล์ "1"

กรณีที่ยอดเยี่ยมในการแสดงพลังของภาษานี้

คำอธิบาย

ใช้เวอร์ชันที่ไม่มีการแพ็ก (29 ไบต์) เพื่ออธิบาย

0]40X*,1&xDQ0]|S3B{:b^374:B@m
0]40X*                           Prepare a tape with 40 cells
      ,1&                        Assign 1 to the cells specified by the input
         xD                      Repeat the rest of the program 40 times
           Q                     Output current tape
            0]|S                 Prepend and append a 0 cell to it
                3B               All runs of length 3
                  {         m    Map each run with block
                   :b            Convert from binary
                     ^           Increment (call this value `n`)
                      374:B      The binary representation of 374
                                 [1,0,1,1,1,0,1,1,0]
                                 which is `01101110` reversed and prepended a 1
                           @     Element at 0-based index `n`

1

K (ngn / k) , 44 35 ไบต์

{"X "39{(2\145)@2/'3'1,x,1}\^x?!40}

ลองออนไลน์!

{ } ฟังก์ชั่นที่มีข้อโต้แย้ง x

!40 รายการของ ints จาก 0 ถึง 39

x?ค้นหาดัชนีของพวกเขาในxใช้0N("จำนวนเต็มโมฆะ null") ไม่พบ

^อันไหนของพวกเขาที่เป็นโมฆะ? สิ่งนี้ทำให้เราป้อนข้อมูลเมื่อตะกี้

39{ }\ ใช้ 39 ครั้งการรวบรวมผลลัพธ์ระดับกลางในรายการ

1,x,1 ล้อมรอบรายการด้วย 1s (negated 0s)

3' รายการอเนกประสงค์สามรายการติดต่อกัน

2/' ถอดรหัสไบนารีแต่ละ

@ ใช้เป็นดัชนีใน ...

2\145 การเข้ารหัสแบบไบนารี่ 145 (บิตที่ไม่ได้รับ 110)

"X "ในที่สุดใช้เมทริกซ์ 40x40 เป็นดัชนีในสตริง"X "( @นี่คือนัย)


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.