ทำให้ Matrix Digital Rain ใช้รหัสที่สั้นที่สุด [ปิด]


21

กฎ:

  • ภาษาใด ๆ ที่คุณเลือก (ไลบรารีมาตรฐาน)
  • เอาต์พุตที่แสดงในTerminalหรือWindows Command Processorหรือวิธีอื่นใดที่คุณต้องการ
    (ความกว้างบัฟเฟอร์ = 80)
  • อักขระ ASCIIนั้นเพียงพอ (อาจเพิ่ม Unicode)
  • ไม่ควรเติมเต็มทั้งหน้าจอเมื่อเริ่มต้นใช้งาน (ควรมีลักษณะเหมือนสายฝน!
  • สีจะได้รับคะแนนโบนัส (+5)
  • ผลกระทบ : ตัวอักษรสุ่มขนาดตกแตกต่างกันสร้างเป็นระยะ

คะแนน: (อัปเดต)

  • +32คะแนนที่จะเริ่มต้นด้วย
  • -1จุดสำหรับทุกไบต์(ไม่ใช่ตัวอักษร)ในรหัสหลัง ** 1024 *** th * ไบต์
  • คะแนนอาจถึงศูนย์และลบ
  • หมายเหตุ:ภาษาที่ใช้อักขระหลายไบต์ควรนับไบต์ไม่ใช่ตัวอักษร
  • +5สำหรับเอฟเฟกต์ใหม่ทุกครั้ง (ไม่โพสต์โดยคนอื่น)
  • +15สำหรับเอฟเฟกต์เหล่านี้:
    1. ลม (พัดอักขระไปด้านข้าง)
    2. การจับคู่ตัวเลข (อินพุตของผู้ใช้เช่น: 90210):
      หมายเลขจะอยู่ในตำแหน่งสุ่มภายในเมทริกซ์
      ป้อนคำอธิบายรูปภาพที่นี่
    3. เสียง
    4. msg ที่เข้ารหัส (อินพุตของผู้ใช้):
      อักขระแสดงถึงข้อความที่เข้ารหัสลับ
    5. โหมด Galaga:
      ยิง ^ เพื่อทำลายตัวละคร
      ป้อนคำอธิบายรูปภาพที่นี่

สกอร์:

┌-----┬------------┬------------┬-------------┬---------------┬--------------┐
| pos |    name    |    type    |    bytes    |    effects    |    points  ^ |
|-----|------------|------------|-------------|---------------|--------------|
|1    |nitro2k01   |QBasic      |913          |Colours        |+57           |
|     |            |            |             |Colour Fade    |              |
|     |            |            |             |Sound (+15)    |              |
|-----|------------|------------|-------------|---------------|--------------|
|2    |squeamish   |HTML, Java- |1024         |Colours        |+47           |
|     |ossifrage   |Script, CSS |             |Transition     |              |
|     |            |            |             |Size Variation |              |
|-----|------------|------------|-------------|---------------|--------------|
|3    |manatwork   |Ruby        |374          |Colours        |+47           |
|     |            |            |             |Actual Words   |              |
|     |            |            |             |Character -    |              |
|     |            |            |             |      Disperse |              |
|-----|------------|------------|-------------|---------------|--------------|
|4    |plg         |Bash        |1024         |Colours        |+42           |
|     |            |            |             |Random Pause   |              |
|-----|------------|------------|-------------|---------------|--------------|
|5    |Timtech     |TI-84 calc  |120          |Umbrella       |+42           |
|     |            |            |             |Run Inside     |              |
|-----|------------|------------|-------------|---------------|--------------|
|6    |Samuel Cook |JavaScript  |830          |Colours        |+42           |
|     |            |            |             |Transition     |              |
└-----┴------------┴------------┴-------------┴---------------┴--------------┘

หมายเหตุ: ทุกคนจะสามารถอัปเดตกระดานคะแนนได้หลังจากโพสต์คำตอบที่ถูกต้อง อย่าเกินสิบตำแหน่งสูงสุด เพิ่มเอฟเฟกต์เพิ่มเติมลงในรหัสของคุณและเอาชนะคะแนนของคุณเอง!
การล้างหน้าจอเริ่มต้น, การล้างข้อมูล, ข้อบกพร่อง, ห้องสมุดบุคคลที่สามเป็นต้นจะไม่ถูกนับรวมในคะแนนอย่าลืมระบุรายละเอียดเกี่ยวกับหมายเลข จำนวนไบต์ที่ใช้และชื่อภาษาหรือโปรแกรม

นีโอ: คุณพยายามจะบอกอะไรฉัน ที่ฉันสามารถหลบกระสุน?

Morpheus: ไม่นีโอ ฉันพยายามที่จะบอกคุณว่าเมื่อคุณพร้อมคุณจะไม่ต้อง


แล้วห้องสมุดล่ะ
Vereos

รวมหรือนำเข้าหรือต้องการไลบรารีมากเท่าที่คุณต้องการ (ไลบรารีมาตรฐาน)!
Renae Lider

คุณจะเพิ่มคะแนนได้ไหมถ้ารหัสต่ำกว่า 250 ตัวอักษร? (ฉันมีวิธีแก้ปัญหาสั้น ๆ แต่ไม่มีคุณสมบัติมากมาย)
ThinkChaos

คุณจะไม่ต้องการมัน คุณยังมีคะแนน +32 อีก! โอกาสที่หลายคนจะเกินขีด จำกัด และเริ่มที่จะลดลงคะแนนทำให้รหัสสั้นขึ้นไปด้านบนบนป้ายบอกคะแนน (ยังเพิ่มกฎระเบียบมากขึ้นและจุดจะซับซ้อนสิ่ง)
Renae Lider

เอาล่ะฉันจะใส่เวอร์ชั่นของกอล์ฟเพื่อความสนุก!
ThinkChaos

คำตอบ:


18

HTML, Javascript และ CSS: 1024 ไบต์, 47 คะแนน

การสาธิตฝนเมทริกซ์

คุณสมบัติ:

  • ใช้อักขระ Unicode (อย่าคิดว่าคะแนนนี้จะเป็นประเด็นใดก็ตาม)
  • เส้นทางจางหายไปจากสีเขียวสดใสไปจนถึงสีเขียวเข้มในขณะที่วาด (*)
  • เส้นทางยังจางจากสีเขียวเข้มเป็นสีดำหลังจากวาดเสร็จ (*)
  • ขนาดข้อความสุ่มในแต่ละเส้นทาง (*)
  • เส้นทางจะถูกเปลี่ยนตำแหน่งแบบสุ่มและปรับขนาดในแต่ละครั้งที่พวกเขาวาด

(*) ฉันจะรับคะแนน +5 สำหรับแต่ละเหล่านี้ แต่แจ้งให้เราทราบหากคุณไม่เห็นด้วย :-)

การสาธิต:

http://ruletheweb.co.uk/matrix.html

รหัสแหล่งที่มา:

ตรง 1024 ไบต์ มันค่อนข้างน่าเกลียดฉันกลัว

<head><style>*{margin:0;padding:0;line-height:1;overflow:hidden;}div{width:1em;position:absolute;}</style><script>
w=window;n=w.innerWidth;m=w.innerHeight;d=document;q="px";function z(a,b){return Math.floor(Math.random()*(b-a)+a)}f=" 0123456789";for(i=0;i<45;i++)f+=String.fromCharCode(i+65393);function g(){for(i=0;i<90;i++){r=d.createElement("div");for(j=z(20,50);j;j--){x=d.createElement("pre");y=d.createTextNode(f[z(0,56)]);x.appendChild(y);x.style.opacity=0;r.appendChild(x)}r.id="r"+i;r.t=z(-99,0);with(r.style){left=z(0,n)+q;top=z(-m,0)+q;fontSize=z(10,25)+q}d.body.appendChild(r);setInterval("u("+i+")",z(60,120))}}function u(j){e=d.getElementById("r"+j);c=e.childNodes;t=e.t+1;if((v=t-c.length-50)>0){if((e.style.opacity=1-v/32)==0){for(f in c)if(c[f].style)c[f].style.opacity=0;with(e.style){left=z(0,n)+q;top=z(-m/2,m/2)+q;opacity=1}t=-50}}e.t=t;if(t<0||t>c.length+12)return;for(f=t;f&&f>t-12;f--){s=1-(t-f)/16;if(f<c.length&&c[f].style){c[f].style.opacity=s;}}}
</script><body text=#0f0 bgcolor=#000 onload=g()>

2
มันดูดีเหมือนภาพหน้าจอ แต่กินอึออกจากแหล่งข้อมูลของฉัน +1 จากฉัน
Samuel Cook

เจ๋งจริงๆ! ฉันอาจขโมยอักขระยูนิโค้ดของคุณได้ :) +1
ThinkChaos

1
UglifyJS สามารถลบอักขระ 17 ตัวจากซอร์สโค้ด JavaScript ไม่ใช่ว่ามันจะสำคัญจริง ๆ เพราะนี่ไม่ใช่การเขียนรหัส (ค่อนข้างท้าทายอักขระสูงสุด 1024 ตัว)
Konrad Borowski

นี่เป็นรุ่นที่ดีที่สุดเท่าที่ฉันเคยพบในผลลัพธ์สองหน้าแรกของ Google ฉันแค่หวังว่าคุณจะมีห้องพักที่จะลบบางส่วนของโหนดที่คุณเพิ่มจริง ๆ :) ฆ่าคอมพิวเตอร์ของฉันเพื่อเปิดทิ้งไว้
RustyToms

10

ทุบตี

1024 ไบต์ (รวมถึงความคิดเห็น)

COL=80
ROW=$(tput lines)

cleanup() {
  wait # wait for background jobs (the drops)
  # clear; move cursor to (1,1); show cursor
  # reset color
  printf '\033[2J\033[1;1H\033[?25h\033[0;0m'
}

drop() { # $1=column ; $2=row to end on ; $3 = drop size (ranges from 5 to 15)
  for ((r=1; r<$2+$3+1; r++)); do
    # if before drop's end point : print lowest char in white
    [ $r -lt $2 ] && printf "\033[$r;$1H\033[0;0m\u$[RANDOM % 59 + 21]"

    # if before or on drop's end point : replace older white char with a green one
    [ $r -le $2 ] && printf "\033[$[r-1];$1H\033[0;32m\u$[RANDOM % 59 + 21]"

    # if drop's longer than it's size : erase last char
    [ $r -gt $3 ] && printf "\033[$[r-$3];$1H "

    # wait before moving drop down
    sleep .1
  done
}

# cleanup on exit
trap cleanup EXIT
# clear screen; hide cursor
printf '\033[2J\033[?25l'

# loop with delay
while sleep .1; do
  # start a drop in background : column; ending row; size
  drop $[RANDOM % COL] $[RANDOM % ROW + ROW/3] $[RANDOM % 10 + 5] &
done

เอฟเฟกต์ใหม่:

  • ทุกอย่าง (รายการแรก);)
  • หยดจะหยุดการสุ่มบนหน้าจอ
  • เอฟเฟกต์สีเย็น: ถ่านสุดท้ายเป็นสีขาวในขณะที่สีอื่น ๆ เป็นสีเขียว
  • ตัวอักษรแบบสุ่มและลำดับการหลีกเลี่ยงอยู่บนคอนโซล ... ตกลงนั่นเป็นข้อผิดพลาด แต่เป็นเพราะคำไม่สามารถติดตามการเคลื่อนไหวของเคอร์เซอร์ได้

Golfed @ 188 186 176 :

d(){ for((r=1;r<$2+41;r++));do $4"$3$r;$1H\u$[RANDOM%59+21]";(($r>$2))&&$4"$3$[r-$2];$1H ";$s;done;}
s=sleep\ .1;while $s;do d $[RANDOM%80] $[RANDOM%10+5] '\033[' printf\ &done

ใช้งานได้ในตารางขนาด 80x40 คุณสามารถเปลี่ยนมันในRANDOM%80บรรทัดสุดท้ายและr<$2+41ในบรรทัดที่ 2 ผมไม่ล้างหยดหลังจากที่พวกเขาได้รับการออกของตารางดังนั้นทั้งปรับขนาดข้อความของคุณ 80x40 หรือเปลี่ยน $LINES+141 มีสองสิ่งที่ไม่ได้เปรียบเทียบกับเวอร์ชั่นเต็ม:

  • การเตรียมคำหรือการทำความสะอาด
  • สีแฟนซี (ใช้ 52 ไบต์ดังนั้นจึงไม่คุ้มค่า)
  • หยุดแบบสุ่ม (ที่นี่ลดลงเสมอไปลงที่ด้านล่าง)
  • ฉันสามารถนำไปใช้กับ 174 ได้โดยไม่ระบุความยาวขั้นต่ำสำหรับ "หยด": $[RANDOM%10+5]จะกลายเป็น$[RANDOM%15]

แม้จะมีข้อ จำกัด เหล่านั้นฉันก็คิดว่ามันค่อนข้างเท่

แก้ไข: ฉันลองใช้ตัวอักษร unicode เช่น squeamish ossifrage แต่เนื่องจากพวกมันมีความกว้างสองเท่าพวกเขาจึงเติมกริดอย่างรวดเร็วและมันก็ดูแปลก ๆ

ฉันยังลดเวอร์ชัน golfed ด้วยการใช้จุดรหัสยูนิโคดแทน ASCII ดังนั้นฉันไม่จำเป็นต้องไปที่ฐานแปดก่อนที่จะได้รับตัวละครบันทึกขั้นตอน ฉันทำสิ่งเดียวกันในเวอร์ชันหลัก แต่เพิ่มความคิดเห็นเพื่อเก็บไว้ที่ 1024 ไบต์

และแล้วการเปลี่ยนแปลงเปรียบเทียบ int จาก[ $r -gt $2 ]การ(($r>$2))ที่พื้นที่สีขาวกำลังจะฆ่าฉัน แต่ฉันไม่สามารถหาวิธีอื่นที่เทียบ ints และไม่สตริง นี่มีเวอร์ชั่น golfed ลงไป 176 btyes!


คนที่ตีกอล์ฟเป็นบิตของ fork-bomb เช่นกัน;)
46417 Rob

1
@ RobStarling พวกเขาทั้งคู่เป็นจริง!
ThinkChaos

1
รักสิ่งนี้จริงๆ! ฉันซ่อมมันเล็กน้อยและดูเหมือนว่าคุณสามารถทำให้เป็นสีเขียวโดยการเปลี่ยน\033[เป็น\033[0;32m\033[(อย่างน้อยใน terminal ของฉัน) ความคิดมันแย่ขนาดไหนที่ลองและตั้งค่านี้เป็นตัวรักษาหน้าจอเทอร์มินัล : P
Dom Hastings

อืมมม ฉันได้รับ 1,059 ไบต์สำหรับครั้งแรกและ 190 ไบต์ต่อวินาที
Renae Lider

1
พวกคุณเป็นพ่อมดโดยทั่วไป! ขอบคุณสำหรับการแบ่งปัน!
Dom Hastings

8

JavaScript, 830 ไบต์

มันมีคุณสมบัติคลาสสิกทั้งหมดเช่น:

  1. พื้นหลังสีดำ
  2. ข้อความสีเขียว
  3. ข้อความสีขาวเมื่อล้ม
  4. ตัวอักษรแบบสุ่ม
  5. ช่องว่าง
  6. วนลูปไม่สิ้นสุด

window.onload=function(){
    var tbl=document.createElement('table'),
	body=document.body;
	body.style.backgroundColor='#000';
	body.style.color='#060';
	body.style.fontFamily='Lucida Console';

    for(var i = 0; i <= 30; i++){
        var tr = tbl.insertRow();
        for(var j = 0; j <= 50; j++){
            var td = tr.insertCell();
			td.style.width="2%";
        }
    }
    body.appendChild(tbl);
	setInterval(function(){
		rain(Math.floor((Math.random()*50)),0)
	},20);
}
function rain(n,i) {          
   setTimeout(function (){
	  var e=document.getElementsByTagName('tr')[i].childNodes[n];
	  e.style.color='#fff';
      e.innerHTML = '&#'+Math.floor((Math.random()*127)+1)+';';
	  setTimeout(function(){e.style.color=''},200)
	  
      if (i++ < 30) rain(n,i);
   },20);
};

ฉันชอบเพราะน้ำหนักเบาอย่างไม่น่าเชื่อการเคลื่อนไหวลื่นไหลและเรียบง่าย สนุก!


6

QBasic 1, 587 ไบต์, 32 + 5 = 37 คะแนน

DECLARE SUB d (p!, s!, x!, y!)
DIM t(80)
FOR i = 1 TO 80
    t(i) = INT(-50 * RND)
NEXT
s = TIMER

CLS
WHILE 1
    FOR i = 1 TO 80
        IF t(i) > 28 THEN t(i) = 0
        t(i) = t(i) + 1
        y = t(i)
        d 0, 0, i, y - 6
        d 2, 0, i, y - 5
        d 2, 0, i, y - 4
        d 10, 0, i, y - 3
        d 10, 0, i, y - 2
        d 11, 0, i, y - 1
        d 0, 2, i, y
    NEXT

    l = TIMER
    WHILE l = TIMER
    WEND
WEND

SUB d (p, s, x, y)
COLOR p, s
IF y > 0 AND y < 24 THEN LOCATE y, x: PRINT CHR$(33 + (x * y) MOD 200);
END SUB

ภาพตัวอย่าง:

QBasic matrix 1

32 คะแนนฐาน + 5 คะแนนสำหรับสี แต่เนื่องจากฉันลอยอย่างมีความสุขต่ำกว่า 1024 ไบต์แม้ไม่มีการตัดช่องว่างหรือการปรับให้เหมาะสมดังนั้นเราจึงเพิ่มบางสิ่งเพื่อขโมยบางจุด:

QBasic 2, 913 ไบต์, 32 + 5 + 15 + 5 = 57 คะแนน

DECLARE SUB d (p!, s!, x!, y!)
DIM t(80)
FOR i = 1 TO 80
    t(i) = INT(-50 * RND)
NEXT
s = TIMER
f = 0
w$ = "bullet"
o = 1
CLS
WHILE 1
    FOR i = 1 TO 80
        IF t(i) > 28 THEN t(i) = 0: IF f THEN SOUND 100 * i, 1
        t(i) = t(i) + 1
        y = t(i)
        d 0, 0, i, y - 6
        d 2 + x, 0, i, y - 5
        d 2 + x, 0, i, y - 4
        d 10 + x, 0, i, y - 3
        d 10 + x, 0, i, y - 2
        d 11 + x, 0, i, y - 1
        d 0, 2 + x, i, y
    NEXT
    k$ = INKEY$
    IF k$ <> "" THEN
        IF MID$(w$, o, 1) = k$ THEN
            o = o + 1
            IF o = LEN(w$) + 1 THEN z = 1: f = 100
        ELSE
            o = 1
        END IF

    END IF
    x = x + z
    l = TIMER
    WHILE l = TIMER
    WEND

WEND

SUB d (p, s, x, y)
COLOR p MOD 16, s MOD 16
IF y > 0 AND y < 24 THEN LOCATE y, x: PRINT CHR$(33 + (x * y) MOD 200);
END SUB

ภาพตัวอย่าง (เปิดใช้เอฟเฟกต์สี):

Qbasic matrix 2

คุณสมบัติเช่นเดียวกับคนแรก นอกจากนี้ยังมี:

  • สี (+5)
  • รหัสผ่านเพื่อเปิดใช้งานคุณสมบัติพิเศษ (ฉันอ้างว่า +5 สำหรับสิ่งนี้เป็นคุณสมบัติใหม่)
  • รหัสผ่านจะเปิดใช้งานจานสีจางและเสียงประกอบ (+15 สำหรับเสียง)

วิดีโอแสดงผลพร้อมใช้งานรวมถึงเอฟเฟกต์สีและเอฟเฟกต์เสียงที่เปิดใช้งานด้วยรหัสผ่าน

http://www.youtube.com/watch?v=MQc-FDl_AZ8


5

GTB 42 คะแนน

ดำเนินการจากเครื่องคิดเลข TI-84 ประมาณ 100 ไบต์:

"  O O    O O   O"→Str1:"O  O   O O  O O "→Str2:0→X[@getkey=25$~""~""~""~""~""~""~""p;&@round(r;$~""#@round(r;$~Str1#~Str2&:&]

ผลกระทบ

เนื่องจากเครื่องคิดเลขเป็นสีขาว + ดำเริ่มต้นทำอะไรไม่ได้ที่นั่น ...

  • อัมเบรลล่า - การกดคีย์ขึ้นเพื่อล้างฝนและทำให้คุณแห้งจนกว่าคุณจะกดEnter
  • Run Inside - การกดONแบ่งโปรแกรมและให้หลังคาที่ดีเพื่อให้คุณแห้ง (คุณสามารถกลับไปกลางสายฝนโดยกดEnterสองครั้ง

ทำงานได้อย่างสมบูรณ์บน TI-92 ของฉัน! น่ากลัว
Renae Lider

@ user3058846 ฉันดีใจที่คุณชอบ :) ฉันไม่ทราบว่า GTB สามารถใช้กับ TI-92 ได้
Timtech

TI-92 Plus จริง
Renae Lider

@ user3058846 คุณดาวน์โหลดคอมไพเลอร์ใช่มั้ย เป็นคนดีมาก :)
Timtech

4

Ruby: 374 ตัวอักษร

$><<"^[[2J"
w=->c,d,m{$><<"^[[0;3%d;%dm^[[%d;%dH%s"%[c,d[4],d[3]+d[1]-m,d[2],d[0][d[1]-m]]}
t=%w{Stack Exchange Programming Puzzle Code Golf}
r=[]
loop{r.map{|o|w[2,o,1]if o[1]>0
w[7,o,0]
o[1]+=1
o[0][0]==" "?r.delete(o):(o[0]=" "*o[1])*o[1]=0if o[1]>o[0].size}
sleep 0.1
r<<[(k=rand(10)%2)==0 ?t.sample: [*?a..?z].sample(rand(10)+5)*"",0,rand(80),rand(20),k+1]while r.size<25}

(หมายเหตุ: ^[เป็นอักขระเดียว)

รายละเอียด:

  • 25 การวิ่งพร้อมกัน (เก็บไว้ต่ำเพื่อให้ข้อความที่กำหนดไว้ล่วงหน้ายังคงสามารถอ่านได้)
  • การวิ่งแต่ละครั้งมีโอกาส 50% / 50% ที่จะเป็นเช่นกัน
    • คำที่กำหนดไว้ล่วงหน้า - แสดงเป็นสีสดใส
    • สตริงแบบสุ่มตัวอักษรตัวเล็ก 5..15 - แสดงเป็นสีเข้ม
  • ในขณะที่แสดงการวิ่งสีด้านล่างเป็นสีขาวส่วนสีเขียวอื่น ๆ
  • หลังจากการเรียกใช้จะแสดงขึ้นอย่างสมบูรณ์ก็จะถูกลบตัวละครโดยตัวละคร

วิ่งตัวอย่าง:

ฝนเมทริกซ์


กี่ไบต์ (ไม่ใช่ตัวอักษร)
Renae Lider

1
ใช้อักขระไบต์เดียวเท่านั้นดังนั้น 374 ไบต์
จัดการ

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