แสดงจังหวะเพลง


24

คุณรู้ - พวกเขามีลักษณะเช่นนี้:

แหล่ง

เป้าหมายคือการวาดภาพประกอบเพลงเต้นดังต่อไปนี้:

=     =      =
=  =  =      =          =
== = ==   =  ==     = ====
== ====  == ===   = = =======
======== == ====  = ========= =
=================================

กฎคือ:

  • ความกว้างของภาพประกอบคือ 33 สัญลักษณ์ แต่ถ้าคุณต้องการ - อนุญาตเว้นวรรคใด ๆ ที่เกินความกว้างนี้
  • แต่ละคอลัมน์ทำจากเครื่องหมายเท่ากับ ( =)
  • แต่ละคอลัมน์มีความสูงแบบสุ่ม (ความสูงของคอลัมน์ถัดไปไม่ควรขึ้นอยู่กับความสูงของคอลัมน์ก่อนหน้า) โดยมีค่าตั้งแต่ 1 ถึง 6 แต่ก็ดีถ้าเป็นไปได้อย่างน้อยที่สุดจะรับอินพุตบางส่วนโดยไม่เข้มงวด ความน่าจะเป็นทางคณิตศาสตร์ (เช่นอินพุตบางตัวอาจปรากฏขึ้นได้ยากกว่าส่วนอื่น ๆ )
  • คอลัมน์ไม่สามารถลอยอยู่เหนือด้านล่างและมีช่องว่างได้
  • เนื่องจากทุกคอลัมน์มีความสูงน้อยที่สุด 1 แถวสุดท้ายจึงไม่มีช่องว่างใด ๆ - ประกอบด้วย 33 เครื่องหมายเสมอ
  • เนื่องจากเป็นไปได้ที่จะไม่มีคอลัมน์ที่มีความสูง 6 (เป็นแบบสุ่มทั้งหมด): ในกรณีนี้คุณไม่จำเป็นต้องมีบรรทัดบนสุดที่ทำจากช่องว่าง ใช้กับกรณีขอบใด ๆ ของลักษณะนี้: หากรหัสของคุณไม่มีคอลัมน์ที่มีความสูงมากกว่า 1 คุณก็ไม่จำเป็นต้องมีบรรทัดเพิ่มเติมที่ทำช่องว่างด้านบนบรรทัดล่าง
  • คุณไม่ได้ใช้ป้อนข้อมูลใด

@ ลินน์โอ้เดิมทีมันระบุไว้ แต่ฉันตั้งใจลบออกจากโพสต์
nicael

11
(Nitpicking) ที่ดูเหมือนว่าฉันจะเป็น spectrogram ในช่วงเวลาที่กำหนดแทนที่จะเป็นตัวแทนของการเต้นใด ๆ
Luis Mendo

2
คอลัมน์อนุญาตให้คั่นด้วยช่องว่างหรือไม่ (เช่นแถวล่างสุดจะเป็น= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =)
LegionMammal978

2
ตกลงเพื่อเพิ่มบรรทัดเหนือเอาต์พุตหรือไม่?
John Dvorak

1
"ความสูงของคอลัมน์ถัดไปไม่ควรขึ้นอยู่กับความสูงของคอลัมน์ก่อนหน้า" แต่อย่างใด - เครื่องกำเนิดจำนวนตัวเลขแบบสุ่มของภาษาส่วนใหญ่จะถูก seed ด้วยเหตุนี้ฟังก์ชั่นเช่นMath.random()นี้สามารถคำนวณได้โดยตรงจากการโทรก่อนหน้านี้หากทราบพารามิเตอร์ของเครื่องกำเนิดสัญญาณเชิงเส้นตรงซึ่งหมายความว่าคุณจะต้องแก้ไขการทำงานแบบสุ่มในตัวเพื่อให้เป็นไปตามเกณฑ์นี้ ฉันขอแนะนำว่านี่เป็นคำที่ดีกว่า
Patrick Roberts

คำตอบ:


12

Pyth , 13 ไบต์

และฉันก็เอาชนะเจลลี่ได้

j_.tm*hO6\=33

ลองออนไลน์!

j_.tm*hO6\=33
    m      33  for 33 times:
       O6          yield a random number in [0,1,2,3,4,5].
      h            add one.
     *   \=        repeat "=" that number of times.
  .t           transpose, filling with whitespace
 _             reverse
j              join by newlines.

ทำไมมันไม่ทำงานที่นี่ ?
บ้า

@Insane Pyth ค่อนข้างล้าสมัยใน TIO
Dennis

@Dennis แต่ฉันชอบ TIO: '(
Insane

13

Dyalog APL ขนาด 14 ไบต์

⊖⍉↑'='⍴¨⍨?33⍴6

คำอธิบาย

33⍴6 33 ซ้ำจาก 6

?จำนวนเต็มแบบสุ่มในช่วง [1, n ] สำหรับแต่ละ 33 6s

'='⍴¨⍨ สัญลักษณ์ความเท่าเทียมกันทำซ้ำจำนวนครั้งเหล่านั้นแต่ละครั้ง

แปลงรายการของรายการเป็นตารางของแถว

เปลี่ยนแถวเป็นคอลัมน์และเปลี่ยนคอลัมน์เป็นแถว

พลิกคว่ำ

ตัวอย่างการวิ่ง

อินพุตถูกเยื้องหกช่องว่าง:

      ⊖⍉↑'='⍴¨⍨?33⍴6
=          ==        =      ==   
= =    =   ==      ====     ==   
= = = ===  ==  === ==== =  ===  =
= = ===== ==== === ==== = ====  =
=== ============== ==== ====== ==
=================================
      ⊖⍉↑'='⍴¨⍨?33⍴6
         =  =  =    =    =       
  =      =  =  ==  == == =  =    
 === == ==  =  === =======  =    
==== == ==  ====== ==========   =
==== ============= ========== = =
=================================
      ⊖⍉↑'='⍴¨⍨?33⍴6
             =    =   =  =       
         =   =    =   = == =     
=      = =   =    ==  = ==== === 
= = =  = =   =    ==  = ==== ====
=====  = == ==  ============ ====
=================================


9

JavaScript (ES6), 116 ไบต์

(a=Array(33).fill``.map(_=>[,,,,,,].fill` `.fill('=',Math.random()*6)))[0].map((x,i)=>a.map(x=>x[i]).join``).join`
`

ตัวอย่างข้อมูลโค้ด

ลองดูในตัวอย่างภาพเคลื่อนไหวด้านล่าง:

F = () => (a=Array(33).fill``.map(_=>[,,,,,,].fill` `.fill('=',Math.random()*6)))[0].map((x,i)=>a.map(x=>x[i]).join``).join`
`

var interval;
G = () => output.innerHTML = F().split('\n').map((r, i) => `<span id="row-${6-i}">${r}</span>`).join('\n');
A = () => {
  clearInterval(interval);
  if (auto.checked) {
    speed.disabled = false;
    interval = setInterval(G, speed.value);
  } else {
    speed.disabled = true;
  }
}
S = () => {
  if (stylized.checked) {
    output.classList.add('stylized');
  } else {
    output.classList.remove('stylized');
  }
}

generate.onclick = G;
auto.onchange = speed.onchange = A;
stylized.onchange = S;

G();
A();
S();
#output {
  background: #000;
  color: #9fff8a;
  overflow: hidden;
  padding: 1em;
  line-height: 1;
}

#output.stylized {
  line-height: 0.25;
  font-size: 2em;
  margin: 0.5em 0 0 0;
  padding: 0.5em;
}

.stylized #row-1 { color: #9fff8a; }
.stylized #row-2 { color: #c5ff8a; }
.stylized #row-3 { color: #e0ff8a; }
.stylized #row-4 { color: #ffe88a; }
.stylized #row-5 { color: #ffc28a; }
.stylized #row-6 { color: #ff8a8a; }
<button id="generate">Generate</button>
<label>Auto: <input id="auto" type="checkbox" checked/></label>
<label>Speed: <select id="speed">
  <option value="25">25</option>
  <option value="50">50</option>
  <option value="100" selected>100</option>
  <option value="200">200</option>
  <option value="400">400</option>
  <option value="600">600</option>
  <option value="800">800</option>
  <option value="1000">1000</option>
</select></label>
<label>Stylized: <input id="stylized" type="checkbox" checked/></label>
<pre id="output"></pre>


1
ว้าวมันเจ๋งจริงๆ!
nicael

8

C, 87 ไบต์

f(x,y){for(y=6;y--;){srand(time(0));for(x=33;x--;)putchar("= "[rand()%6<y]);puts("");}}

โทรf();มา คำตอบนี้ขึ้นอยู่กับข้อเท็จจริงที่ว่าการโทรติดต่อกันหกครั้งเพื่อtime(0)ส่งผลลัพธ์กลับมาเหมือนเดิม นี่เป็นเรื่องจริงเสมอ แต่ก็คุ้มค่าที่จะพูดถึง


คุณใส่xและเพื่อหลีกเลี่ยงที่จะประกาศว่าพวกเขาเป็นy intเนื่องจากไม่มีอินพุตจึงอนุญาตหรือไม่ ถ้าใช่มันเป็นความคิดที่ดี!
aloisdg พูดว่า Reinstate Monica

2
ลองรหัสคุณแล้ว คุณสามารถเรียกใช้ด้วยf();ดี! ฉันไม่รู้ว่า C สามารถทำได้
aloisdg พูดว่า Reinstate Monica

ฉันชอบรหัสคุณมาก ฉันพอร์ตไปที่ C # เนื่องจาก 117 ไบต์ฉันไม่แน่ใจเกี่ยวกับการโพสต์เพราะเป็นรหัสของคุณอย่างแท้จริง
aloisdg พูดว่า Reinstate Monica

1
รู้สึกฟรีที่จะโพสต์ตราบใดที่คุณให้เครดิตฉัน :)
ลินน์

8

Cheddar, 68 65 bytes (ไม่แข่งขัน)

->(1:33).map(->IO.sprintf("%6s","="*Math.rand(1,7))).turn().vfuse

O_O Cheddar ทำได้ดีจริง ๆ ! การใช้ประโยชน์sprintfและturnทำงานเป็นกลุ่ม vfuseเป็นแนวตั้ง - ฟิวส์หมายถึงมันเข้าร่วมอาร์เรย์ แต่ในแนวตั้ง นี่เป็นกอล์ฟมาก แต่ก็ค่อนข้างเร็ว รุ่นนี้วางจำหน่ายก่อนวางจำหน่าย v 1.0.0-beta.10ซึ่งโพสต์วันที่ความท้าทาย

คำอธิบาย

->           // Anonymous function
  (1:33)     // Range 1-33 inclusive
  .map(->    // Loop through the above range
    IO.sprintf("%6s",       // `sprintf` from C/C++
      "="*Math.rand(1,7)    // Repeat `=` a random time from [1,7)
    )
  ).turn().vfuse     // Turn it 90deg, and fuse it vertically

ตัวอย่างบางส่วนทำงาน:

ป้อนคำอธิบายรูปภาพที่นี่


5

05AB1E , 22 ไบต์

ไม่มีการเข้าร่วมอัตโนมัติไม่มีการเติมโดยอัตโนมัติในขณะทำการเปลี่ยน รหัส:

33F6ð×6L.R'=×ðñ})ø€J¶ý

ใช้การเข้ารหัสCP-1252 ลองออนไลน์! .



4

Python 3, 115 ไบต์

Python ไม่เคยมีโอกาส ...

from random import*
for k in zip(*[[' ']*(6-len(j))+j for j in[randint(1,6)*['=']for i in[0]*33]]):print(*k,sep='')

มันทำงานอย่างไร

from random import*    Import everything in the random module
randint(1,6)*['=']     Create a list containing a random number in [1,6] of '='...
...for i in[0]*33      ...33 times...
[...]                  ...and store in a list X
for j in...            For all lists j in X...
[' ']*(6-len(j))+j     ...create a list containing j padded with the correct number of
                       spaces to give a height of 6...
[...]                  ...and store in a list Y

Y now contains a list for each output line, but transposed.

for k in zip(*...):...  For all lists k in the transpose of Y...
print(*k,sep='')        Print all elements in k with no separating space

ลองใช้กับ Ideone



3

SpecaBAS - 76 ไบต์

1 FOR x=1 TO 33: r=1+INT(RND*6): FOR y=7-r TO 6: ?AT y,x;"=": NEXT y: NEXT x

พิมพ์เครื่องหมายเท่ากับที่พิกัดหน้าจอที่เกี่ยวข้อง

ป้อนคำอธิบายรูปภาพที่นี่

ด้วยจุดสีและGOTOห่วงมันจะกลายเป็น

ป้อนคำอธิบายรูปภาพที่นี่



2

C #, 200 117 ไบต์

()=>{var s="";int x,y=6;for(;y-->0;){var r=new Random();for(x=33;x-->0;)s+="= "[r.Next(6)<y?1:0];s+='\n';}return s;};

ฉันย้ายไปยังอัลกอริทึม @Lynn และบันทึก 83 ไบต์!

C # แลมบ์ดาที่ไม่มีอินพุตและตำแหน่งที่เอาต์พุตเป็นสตริง ลองออนไลน์ลองมันออนไลน์

รหัส:

()=>{
    var s="";int x,y=6;
    for(;y-->0;){
        var r=new Random();
        for(x=33;x-->0;)
            s+="= "[r.Next(6)<y?1:0];
        s+='\n';
    }return s;
};

2

Haskell, 164 ไบต์

Haskell เป็นภาษาที่ใช้งานได้อย่างหมดจด ฉันทำมันต่อไปและปรากฎว่าค่าใช้จ่ายที่จำเป็นนั้นไม่มาก

import System.Random
import Data.List
f r n|r>n=' '|0<1='='
s=do
g<-newStdGen
mapM_ putStrLn$transpose$map(\n->map(f$mod n 6)[0..5])(take 33(randoms g)::[Int])

การใช้งาน:

s

คำอธิบาย:

import System.Random

เพื่อให้สามารถใช้newStdGenและrandoms

import Data.List

เพื่อให้สามารถใช้งานได้ transpose

f r n|r>n=' '|0<1='='

กำหนดฟังก์ชั่นที่พิมพ์ช่องว่างถ้าอาร์กิวเมนต์แรกของมันมีขนาดใหญ่กว่าที่สองและ=อื่น ๆ มันถูกเรียกว่ามีmap (f m) [0..5]อยู่เป็นจำนวนมากที่ได้รับและรายการm [0,1,2,3,4,5](ดูด้านล่าง)

s=do
g<-newStdGen

สร้างตัวสร้างตัวเลขสุ่มมาตรฐานใหม่

(take 33(randoms g)::[Int])

ใช้ 33 จำนวนเต็มสุ่ม

map(\n->map(f$mod n 6)[0..5])

คำนวณm = n % 6และแม็พ(f m)กับรายการ[0,1,2,3,4,5]ซึ่งส่งผลให้หนึ่งใน"======", " =====", ..., " ="ซึ่งผลในหนึ่งในบรรทัดเหล่านี้ถูกแมปกับรายการของเลขจำนวนเต็ม 33 ตัวที่เป็นผลลัพธ์ในตาราง (ตารางใน Haskell เป็นรายการของรายการ)

transpose$

สลับคอลัมน์และแถวของตาราง

mapM_ putStrLn$

พิมพ์ทุกบรรทัดในตาราง


1

CJam, 19 ไบต์

{5mrS*6'=e]}33*]zN*

ลองออนไลน์!

คำอธิบาย

{       e# 33 times...
  5mr   e#   Push a random number in [0 1 2 3 4 5].
  S*    e#   Create a string with that many spaces.
  6'=e] e#   Pad to length 6 with =.
}33*    
]       e# Wrap all 33 strings in a list.
z       e# Transpose that list.
N*      e# Join the lines with linefeeds.

1

Mathematica, 78 ไบต์

StringRiffle[(PadLeft[Array["="&,#+1],6," "]&/@5~RandomInteger~33),"
",""]&

ฟังก์ชั่นไม่ระบุชื่อ ไม่รับอินพุตและส่งคืนสตริงเป็นเอาต์พุต อักขระ Unicode เป็น U + F3C7 \[Transpose]คิดเป็น


1

R, 102 ไบต์

m=rep(" ",33);for(i in 1:6){n=ifelse(m=="=",m,sample(c(" ","="),33,T,c(6-i,i)));m=n;cat(n,"\n",sep="")}

คำอธิบาย

m=rep(" ",33) เริ่มเวกเตอร์เปล่าสำหรับการวนรอบที่กำลังจะมาถึง

n=ifelse(m=="=",m,sample(c(" ","="),33,T,c(6-i,i)))หากมี=ในแถวด้านบนตรวจสอบให้แน่ใจว่าจุดด้านล่างมี=; เลือกแบบสุ่ม การเลือกแบบสุ่มมีการถ่วงน้ำหนักเพื่อให้แน่ใจว่าก) แถวด้านล่างคือทั้งหมด=และ b) คุณจะได้รูปร่างที่เรียบร้อยกับทุกสิ่ง

cat(n,"\n",sep="") เอาท์พุทแถวนั้นไปยังคอนโซลด้วยการขึ้นบรรทัดใหม่ที่ส่วนท้ายและไม่มีช่องว่างระหว่างองค์ประกอบ!


1

PHP, 95 92 89 ไบต์

<?php for(;++$i<34;)for($j=6,$e=' ';$j--;)$a[$j].=$e=rand(0,$j)?$e:'=';echo join("
",$a);

ค่อนข้างมีความสุขกับอันนี้จริง ๆ ในขณะที่ฉันมีรุ่นที่ในทางทฤษฎีสามารถสร้างการป้อนข้อมูลใด ๆ แต่ในทางปฏิบัติจะสร้างบล็อกที่เป็นของแข็งเท่านั้น = แต่นี่คือทั้งสั้นและกระจาย!
สร้าง 7 สิ่งที่ไม่ได้กำหนดประกาศเมื่อใดก็ตามที่คุณเรียกใช้ แต่ก็ไม่เป็นไร

แก้ไข: ฉันเพิ่งเรียนรู้ว่าการเข้าร่วมเป็นนามแฝงของการระเบิดดังนั้นจึงเป็นเรื่องดี


1

J, 18 ไบต์

|.|:'='#~"0>:?33#6

สิ่งที่ง่ายมาก ด้วยการแก้ไขข้อบกพร่องจากไมล์!


นี่จะเลือกจำนวนเต็มแบบสุ่มในช่วง [0, 6] ในขณะที่ OP ต้องการ [1, 6] คุณสามารถทำได้>:?33#6เพื่อรับจำนวนเต็มแบบสุ่มในช่วง [1, 6] นอกจากนี้อันดับ 0 '='#~"0สำเนาจะสั้นลงโดยใช้ ผลลัพธ์นี้ใน|.|:'='#~"0>:?33#6แต่น่าเสียดายที่การออม 2 ไบต์ท้ายถูกบรรเทาโดยการรวมของผู้ประกอบการที่เพิ่มขึ้น
ไมล์

@miles โอ้โหขอบคุณ! เด็ดมาก
Conor O'Brien

1

Perl, 64 ไบต์

@f=$_="="x33;s/=/rand>.4?$&:$"/ge,@f=($_.$/,@f)while@f<6;print@f

การใช้

perl -e '@f=$_="="x33;s/=/rand>.3?$&:$"/ge,@f=($_.$/,@f)while@f<6;print@f'
  = =           =  ==      =    =
  = =         ===  ==      =    =
= = =         ===  ==      =    =
= = =   = =   ===  ===   = =    =
= = == =====  === ====   ===  = =
=================================

Perl, 68 ไบต์

เวอร์ชันทางเลือกที่อาศัยรหัสหลบหนี ANSI เพื่อเลื่อนเคอร์เซอร์ไปรอบ ๆ วางลง 6 บรรทัดก่อนจากนั้นจึงเขียนบรรทัดเดิม (ทุกบรรทัด=) เลื่อนขึ้นบรรทัดและพิมพ์สตริงที่แทนที่ ( s/=/rand>.4?$&:$"/ge) ซ้ำ ๆ จนกว่าจะไม่มีการแทนที่อีก นี่สามารถจบลงด้วยการเขียนมากกว่าหกบรรทัด แต่ในที่สุดมันก็ถูกแทนที่ด้วยบรรทัดว่าง

หมายเหตุ: \x1bs เป็นอักขระ ASCII Escจริง

print"\x1bc\x1b[6B",$_="="x33;print"\x1b[1A\x1b[33D$_"while s/=/rand>.4?$&:$"/ge

1

ทับทิม, 102 99 84 83 ไบต์

s='
'*203;33.times{|j|a=(' '*rand(6)).ljust 6,'=';6.times{|i|s[i*34+j]=a[i]}};$><<s

ใหม่และสั้นลงอย่างมากซึ่งฉันเริ่มต้นด้วยสตริงที่เต็มไปด้วยการขึ้นบรรทัดใหม่

รุ่นเก่ากว่า ...

s='';204.times do|i|s+=->i{i%34==0?"\n":i>170?'=':s[i-34]=='='?'=':rand(2)==1?'=':' '}[i]end;puts s

... ให้ผลลัพธ์ด้วยบรรทัดใหม่ชั้นนำ การส่งครั้งแรกของฉันใน Ruby โดยใช้วิธีการคล้ายกับ @ Barbarossa แต่เป็นวงเดียว

สิ่งที่ฉันชอบใน Ruby ขณะทำงานกับโปรแกรมนี้:

  • .times ห่วง
  • rand() ซึ่งค่อนข้างสั้น
  • ผู้ประกอบการที่ประกอบไปด้วยสามกองซ้อนโดยไม่ต้องวงเล็บ

ฉันไม่ชอบ (ส่วนใหญ่ในแง่ของการเล่นกอล์ฟ):

  • จำเป็น $สำหรับตัวแปรทั่วโลกไม่บังคับใน.timesวง
  • do และ endคำหลัก ซึ่งสามารถแทนที่ด้วยบล็อกบรรทัดเดียว
  • 0 ไม่เป็นเท็จ

0

JavaScript, 179 ไบต์

ยังคงทำงานเกี่ยวกับการเล่นกอล์ฟนี้เล็กน้อย ฉันชอบสิ่งนี้เพราะมันตรงไปตรงมา

n=>{a=Array(33).fill(0).map(n=>Math.floor(Math.random()*6)+1);r=Array(6).fill("");r.map((e,m)=>{a.map(n=>{if (n<=m+1){r[m]+="="}else r[m]+=" "})});return r.join('\n');}

การใช้งาน:

>q=n=>{a=Array(33).fill(0).map(n=>{return Math.floor(Math.random() * 6)+1});
r=Array(6).fill("");r.map((e,m)=>{a.map(n=>{if (n<=m+1){r[m]+="="}else r[m]+=" "})});return r.join('\n');}
>q();
           = =  =   =    = =     
=   =    = = =  =  == =  = =  =  
= = =  = === ====  ====  = = === 
= = =  = === ==========  ======= 
= === ===========================
=================================

คุณควรจะสามารถที่จะแทนที่ด้วย.map(n=>{return Math.floor(Math.random() * 6)+1}) .map(n=>Math.floor(Math.random()*6)+1)แลมบ์ดาเก่งมาก :)
aloisdg พูดว่า Reinstate Monica

if (n<=m+1){r[m]+="="}elseอาจจะเป็นif(n<=m+1)r[m]+="=" else
aloisdg พูดว่า Reinstate Monica

ฉันต้องทำ PRNG ของตัวเองและโปรแกรม Forth ของฉันไม่นาน : P
mbomb007

0

ออกมา 190 ไบต์

ผมต้องสร้างของตัวเองPRNGการ xor กะเอามาจากที่นี่ คำfนี้เป็นคำที่คุณจะเรียกหลาย ๆ ครั้งเพื่อดูผลลัพธ์

variable S utime S !
: L lshift xor ;
: R S @ dup 13 L dup 17 rshift xor dup 5 L dup S ! 6 mod ;
: f
33 0 DO R LOOP
1 -5 DO
33 0 DO
I PICK J + 0< 1+ IF ." =" ELSE SPACE THEN
LOOP CR
LOOP
; f

ลองใช้ออนไลน์ - โปรดทราบว่าเวลาของระบบเป็นหนึ่งในสองค่าโดยยึดตามเซิร์ฟเวอร์ (หรือบางอย่าง) ที่กำลังเรียกใช้รหัส นอกเหนือจากนั้นพวกเขาจะไม่เปลี่ยนแปลงใน IDE ออนไลน์ด้วยเหตุผลบางอย่าง ดังนั้นคุณจะเห็นเพียงสองเอาต์พุตที่เป็นไปได้ คุณสามารถตั้งค่าเมล็ดด้วยตนเองโดยการเปลี่ยนutimeเป็นจำนวนเต็ม

Ungolfed

variable seed                   \ seed with time
utime seed !

: RNG                           \ xor-shift PRNG
seed @
dup 13 lshift xor
dup 17 rshift xor
dup 5 lshift xor
dup seed !
6 mod                           \ between 0 and 6, exclusive
;

: f 33 0 DO RNG LOOP            \ push 33 randoms
    1 -5 DO                     \ for (J = -6; J <  0; J++)
        33 0 DO                 \ for (I =  0; I < 33; I++)
            I PICK J + 0< 1+ IF \ if  (stack[I] < J)
                61 EMIT         \ print "="
            ELSE
                32 EMIT         \ print " "
            THEN
        LOOP
        CR                      \ print "\n"
    LOOP
; f

ออนไลน์ไม่ดี


0

จาวาสคริปต์, 165 ไบต์

// function that fills a column with a specified number of = signs
m=l=>Array(6).fill``.map((e,i)=>i<l?"=":" ");
// fill an array of 33 length with columns of random number of = signs
a=Array(33).fill``.map(e=>m(Math.ceil(Math.random()*6)));
// transponse the rows and columns and print to console
a[0].map((c,i)=>a.map(r=>r[5-i])).map(r=>console.log(r.join``))

การขึ้นบรรทัดใหม่นั้นไม่จำเป็น แต่ทำให้ง่ายต่อการดูว่าเกิดอะไรขึ้น ไม่ใช่ทางออกที่ดีที่สุด แต่อย่างน้อยก็เหมาะสมกับฉัน

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