10 พิมพ์ CHR $ (205.5 + RND (1)); : GOTO 10 ใน PHP (หรืออย่างอื่นสำหรับเรื่องนั้น)


23

เพิ่งสนทนา 'กล้า' กับเพื่อนร่วมงานเกี่ยวกับความรัดกุมของคำสั่งพื้นฐานดังต่อไปนี้:

10 PRINT CHR$(205.5+RND(1)); : GOTO 10

มันเป็นชื่อของหนังสือเล่มนี้และจะพิมพ์ลำดับ/และ\ตัวละครโดยสลับกันระหว่างสองแบบสุ่มทำให้เกิดรูปแบบคล้ายกับสิ่งนี้:

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

(ภาพที่ยืมมาจากhttp://www.flickr.com/photos/rndmcnlly/5058442151/sizes/o/in/photostream/ )

ด้วยความที่เป็นความรู้ PHP เราสงสัยว่าวิธีที่กะทัดรัดที่สุดในการเขียนสิ่งเดียวกันใน PHP คืออะไรและเกิดขึ้นกับสิ่งนี้:

while(1) { echo chr(47 + 45 * rand(0,1)); }

chr(47)เป็น/ตัวอักษรและ chr (92) \เป็น ดังนั้นคำสั่งecho chr(47 + 45 * rand(0,1));จะสุ่มเลือกระหว่างสองคลื่นไส้โฆษณา

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


1
คุณสามารถสูญเสีย{}เครื่องหมายปีกกา แต่นั่นเป็นเรื่องที่รัดกุมที่สุดเท่าที่จะทำได้
Michael

ที่นี่หนาว. แบบอักษรใดที่สามารถใช้เพื่อให้ได้ภาพที่คล้ายกัน
daniero

1
(ภาพ) นี้ทำให้ฉันนึกถึง "โปรแกรม" ตัวแรกที่ฉันเคยเขียนลงบนสินค้าโภคภัณฑ์ 64 ตรงจากคู่มือ :) อาสุขสันต์วัน
เดล

@daniero ฉันคิดว่าตัวอักษรที่แท้จริงเรียกว่า Terminal แต่ฉันพบว่าออนไลน์เป็น "Windows Command Prompt" codepen.io/nickforddesign/pen/WMqQdM?editors=0110
nickford

ช่างเป็นเรื่องแปลกที่ Code Golf repo บน Github นี้มีความท้าทายเหมือนกัน ... github.com/noops-challenge/golfbot
Geza Kerecsenyi

คำตอบ:


9

gotoผู้ประกอบการถูกบันทึกอยู่ใน PHP จากเวอร์ชั่น 5.3.0 เพื่อให้คุณสามารถใช้วิธีการเดียวกับที่คุณจะอยู่ในขั้นพื้นฐาน:

a: echo chr(47 + 45 * rand(0,1)); goto a;

18

ตั้งแต่นี้ถูกย้ายไป codegolf ...

PHP 30 ไบต์

<?for(;;)echo rand(0,1)?~Ð:~£;

Ðเป็นตัวละครที่ 208 และ£เป็นตัวละครที่ 163

ตัวอย่างการใช้งาน (บนกล่อง Windows):

color 18 & php maze.php

สร้างสิ่งที่คล้ายกับ:

มันใช้งานได้ดีที่สุดกับแบบอักษร monospace ที่เป็นรูปสี่เหลี่ยมจัตุรัส (ที่นี่ฉันได้เลือกแบบอักษรระบบมาตรฐาน 8x8) หากต้องการกลับไปเป็นสีเริ่มต้นคุณสามารถพิมพ์colorอีกครั้งโดยไม่มีพารามิเตอร์ใด ๆ


สามารถบันทึกไบต์พิเศษด้วยrand()%2(ไม่มีใครระบุว่ามันต้องหลอกแบบสุ่ม) - ยังไม่ทำงานบนเทอร์มินัล Unicode (เช่น OSX)
Leigh

@Leigh เนื่องจากการใช้งานrand()%2จะสลับระหว่างศูนย์และหนึ่ง mt_rand()%2จะทำงานอย่างไร
primo

15

Mathematica 157 ไบต์

PETSCII ที่ไม่มีฉันรีด "\" และ "/" ของตัวเอง

ไม่มีซิการ์สำหรับความกะทัดรัดที่นี่

Graphics[{Thickness[.005],RGBColor[0.73,0.55,1.],Line/@Flatten[Table[RandomChoice[{{{x,y},{x+1,y+1}},{{x+1,y},{x,y+1}}}],{x,40},{y,25}],1]},Background->Blue]

เขาวงกตสีฟ้า


ภาพนี้เป็นภาพลวงตาแสงสีเทาจุด !!
Magic Octopus Urn

8

Brainfuck - 534

>+[->>>>>>[<<<<<<+>>>>>>-]>[<<<<<<+>>>>>>-]<<<<+++++++[<+++++++++++>-]
<[<<[>>>>>>+<<<+<<<-]>>>[<<<+>>>-]<<[>>>>>+<<<+>+<<<-]>>>[<<<+>>>-]<[>
>>>+[<<<+>+>>-]<<[>>+<<-]+<[>-<[-]]>[>+<-]<<-]<-]++++++[>++++++++<-]>-
[<<[>>>>>+<<<<+<-]>[<+>-]>-]<<<[-]>[-]+++++[<+++++>-]<[>>>>>>>+[<<<<<<
+>+>>>>>-]<<<<<[>>>>>+<<<<<-]+<[>-<[-]]>[>>>>+<<<<-]<<-]++++++[>>>>>>+
++++++++<<<<<<-]>>>>>>[<<<<<<<+>+>>>>>>-]<<<<<<[>>>>>>+<<<<<<-]++<[->-
[>+>>]>[+[-<+>]>+>>]<<<<<]>[-]>>[-]<[<<+>+>-]<<[>>+<<-]+>>[-]<[++++[>+
+++<---]>.[-]<<->]<[[>+<+++++]>----.[-]<]>+]

prng ของฉัน (จากที่นี่ ) มีทั้งขนาดใหญ่และช้ามาก บางที LFSR ที่ง่ายกว่าหรือคล้ายกันอาจพอเพียง แต่ก็ใช้งานได้:

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


ฉันคิดว่านี่ไม่ใช่การสุ่มเพราะนี่คือ brainfuck
Erik the Outgolfer

ส่วนใหญ่เหล่านี้จะพึ่งพา prngs ในตัว ใช่มันจะออกมาเหมือนเดิมทุกครั้ง อาจอนุญาตให้สามารถ seeded จากแป้นพิมพ์ด้วยค่าใช้จ่ายเพิ่มเติมสองสามตัวอักษร แต่นั่นไม่ใช่จุดที่นี่จริงๆ
captncraig

5

C, 39 ตัวอักษร (38 บน MSVC)

main(){while(putchar(rand()%2?47:92));}

ป้อนคำอธิบายรูปภาพที่นี่ เห็นมันวิ่ง

บน MSVC เราสามารถแทนที่putchar()ด้วย_putch()และบันทึกไบต์ แต่มันไม่ทำงานใน IDEOne

main(){while(_putch(rand()%2?47:92));}


3

printมีค่าส่งคืนเป็น 1 ดังนั้นถ้าคุณใช้ที่คุณสามารถห่อนิพจน์ทั้งหมดในwhile:

while(print chr(47 + 45 * rand(0,1));

คุณสามารถเล่นกอล์ฟเพิ่มเติมได้เช่นกัน


3

ทับทิม27 23 ตัวอักษร

loop{$><<"/\\"[rand 2]}

$><< คือ 'print to stdout'


2
คุณควรจะสามารถที่จะแทนที่ด้วย"/\\" '\/'Ruby 1.8 ต้องการ[rand(2),1]สร้างตัวละครแทนรหัส ascii
primo

3

C ++, 45 Chars

int main(){for(;;)cout<<(rand()%2?"/":"\\");}

จะไม่ชนะรางวัลใด ๆ สำหรับช่วงเวลาสั้น ๆ แต่ฉันได้เขียนเรื่องนี้เมื่อฉันได้ยินเกี่ยวกับหนังสือที่กล่าวถึงดังนั้นฉันเพิ่งเล่นกอล์ฟ

เคล็ดลับ putchar ยังทำงานใน C ++ ซึ่งจะทำให้คุณลดลงเหลือ 43 แต่คุณไม่สามารถหลีกเลี่ยงการประกาศประเภทที่ส่งคืนบนหลักได้


3

ฉันลองสร้างโดยใช้สไตล์ CSS และมันก็ใช้ได้

<style>
  body {
    font-family: monospace;
    line-height:75%;
    letter-spacing:-3px;
  }
</style>

รหัส php นี้:

<?php
  $i=10000;
  while($i) {
    if($i%200 == 0) echo '<br/>';
    echo chr(47 + 45 * rand(0,1));
    $i--;
  }
?>

ฉันต้องการแนะนำรูปแบบทางเลือก: font-family: courier; line-height: 0.75em; letter-spacing: -0.25em;การใช้-0.25emระยะห่างระหว่างตัวอักษรดูเหมือนจะจับคู่ได้ดีกว่า-3pxซึ่งมีสิ่งประดิษฐ์เนื่องจากไม่แน่นอนptถึงpxการแปลง
โม่

3

เสียงกระเพื่อมสามัญ - 68

(defun s(l)(elt l(random(length l))))(loop do(format t"~a"(s"/\\")))

วนรอบช่วยให้ทั้งซับซ้อนและไวยากรณ์ง่าย ๆ อันเรียบง่ายเหมือน progn แต่วนซ้ำตลอดไป doคุณสามารถวาง
coredump


3

Befunge-98 (PyFunge) , 7 ไบต์

? '/,\'

ลองออนไลน์!

?ส่ง IP ทั้งซ้ายหรือขวาเพื่อให้ทั้งสอง/หรือถูกผลักก่อนที่จะพิมพ์ด้วย\ ,เมื่อดำเนินการ'/หรือ\'ในลำดับที่ไม่ถูกต้องหลังจากพิมพ์เพียงทำสิ่งต่าง ๆ ไปยังสแต็ก (หารหรือสลับ) แล้วกดอักขระที่ไม่เกี่ยวข้องก่อนทำซ้ำ


ฉันแค่เสนอวิธีแก้ปัญหาแบบ 7 ไบต์ Befunge-98 ที่แตกต่างกันในคำตอบของ Jo King แต่วิธีนี้ดูดีกว่า
James Holderness

3

Befunge, 12 9 8 7 ไบต์

แก้ไข: James Holdernessคิดหาวิธีแก้ปัญหาบ้าที่ใช้สามคำพูดแทน

?\","/"

ล้นสแต็กที่มีจำนวนอักขระมากเกินไปสำหรับแต่ละสัญลักษณ์ แต่ใครสนใจเมื่อคุณสามารถเล่นกอล์ฟที่ 1 ไบต์

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

"/\"?>,#

(สังเกตพื้นที่ต่อท้าย)ไม่จำเป็นต้องใช้พื้นที่ต่อท้าย (ขอบคุณ Mistah Figgins)

ลองใช้ออนไลน์

"/\" Adds both / and \ to the stack
    ? Chooses a random direction to go in. Both up and down loop back around to the ? so it's 50% chance to go in either direction.
Going left
"/\"  >,#  Adds \ and / to the stack but only print the second, the / before heading back
Going right
      >,# Prints the top of the stack, the \ before heading back

สิ่งนี้จะเริ่มเติมสแต็กด้วยสัญลักษณ์พิเศษหนึ่งสัญลักษณ์สำหรับทุกสัญลักษณ์ที่พิมพ์


1
ดูเหมือนว่าคุณสามารถกำจัดพื้นที่พิเศษได้เช่นเดียวกับ#ที่ส่วนท้ายของบรรทัด ไม่ใช่พฤติกรรมที่สอดคล้องกัน แต่ล่ามที่คุณใช้อนุญาต: tio.run/##S0pNK81LT/3/X0k/RsneTkf5/38A
MildlyMilquetoast

ฉันยังสงสัยว่าคุณจะสามารถใช้เพียงคนเดียว"หรือไม่ แต่ความพยายามของฉันนั้นไร้ประโยชน์ เนื่องจากคุณต้องการ/ด้านหนึ่งของ"คุณจะต้องแบ่งครึ่งเวลา
MildlyMilquetoast

@MistahFiggins Space ไม่ควรจำเป็นสำหรับการใช้ Befunge-93 แบบมาตรฐาน รหัสอาจล้มเหลวในล่าม Funge-98 บางตัวโดยที่ spec มีความคลุมเครือมากขึ้น แต่การเพิ่มช่องว่างจะไม่ช่วยในกรณีเหล่านี้ต่อไป - คุณต้องใช้ a <หลัง#เพื่อให้ทำงานได้
James Holderness

@MistahFiggins สำหรับกำจัดหนึ่งในคำพูดคุณสามารถทำได้ใน Befunge-98 โดยใช้'แทน ลองออนไลน์!
James Holderness

2
@ โจกิ้งเพิ่งรู้ว่าคุณสามารถทำได้ดีกว่าด้วยสามคำพูด! ?\","/"เฉพาะข้อเสียมันจะล้นสแต็คเร็วกว่าที่ฉันคิด
James Holderness

2

ไม่ค่อยดีเท่าไหร่ ต้องการ php 5.5+ สำหรับคุณลักษณะการยกเลิกการลงทะเบียนอาเรย์

while(1) { echo ['/', '\\'][rand(0, 1)]; }

ไม่เคยคิดมาก่อนเลยขอบคุณ!
Judy

1
ที่จริง PHP while(1)echo'/\\'[rand(0,1)];สนับสนุนห้อยสำหรับสตริง:
จัดการ

2

Python, 68

ในหมวดหมู่ "ภาษาของฉันแย่มาก" เรามี Python!

import random,sys
while 1:sys.stdout.write(random.choice('/\\'))

ขอขอบคุณที่ Ivo choiceหาตัวอักษรไม่กี่ในการนำเข้าและ


คุณไม่ได้บันทึกอะไรด้วย 'from sys import *' - ถ้าคุณเขียน 'import sys, random' และใช้ sys.stdout และ random.random คุณจะประหยัดได้ 5 ไบต์
Ivo

Python3: นำเข้าแบบสุ่มในขณะที่ 1: พิมพ์ (random.choice ('/ \\'), end = '')
Ivo

@Ivo ขอบคุณฉันลืมเกี่ยวกับทางเลือก! คุณสามารถเก็บ py3 ไว้ได้ ;)
บูธของ

หากคุณย้อนกลับสตริงของคุณคุณไม่จำเป็นต้องหนีเครื่องหมายแบ็กสแลชดังนั้นการบันทึกไบต์
Jonathan Frech

2

> <> , 14 ไบต์

ฉันหวังว่าฉันจะสามารถ จำกัด ให้เป็น 3 * 3 ตาราง แต่ไม่ประสบความสำเร็จ

"/\
~x/
o</
 !

คุณสามารถทดลองใช้งานได้ที่นี่


2

Cubix , 12 ไบต์

D<^<!"/\"B!o

ดูในล่ามออนไลน์!

สิ่งนี้แม็พกับคิวบ์เน็ตต่อไปนี้:

    D <
    ^ <
! " / \ " B ! o
. . . . . . . .
    . .
    . .

คำอธิบาย

ติดตั้ง:

IP !ที่เริ่มมุ่งหน้าไปทางทิศตะวันออกในครั้งแรก นี่คือคำสั่ง 'ข้ามหากความจริง' ซึ่งเป็นเท็จเมื่อไม่มีอะไรในกองซ้อนดังนั้นจึงไม่มีคำสั่งถูกข้าม "/\"ป้อน stringmode และผนวกรหัสอักขระทั้งสองเข้ากับสแต็ก B!oส่วนใหญ่จะเป็นแบบไม่ใช้ที่นี่เพียงการย้อนกลับสแต็กเท่านั้น

IP !ที่ตอนนี้วนกลับรอบแรก อย่างไรก็ตามขณะนี้มีจำนวนเต็มบวกในสแต็กดังนั้นอันแรก"จะถูกข้าม นี่หมายถึง/ไม่ได้เป็นตัวละครอีกต่อไป แต่เป็นมิรเรอร์ที่ส่ง IP ทางทิศเหนือเข้าสู่ลูปหลัก

ห่วงหลัก:

Dคำสั่งเป็นแหล่งเดียวของการสุ่มใน Cubix ส่ง IP แบบสุ่ม ด้วยการปิดกั้นลูกศรใต้และตะวันออกเรามั่นใจว่า IP มีโอกาส 50% ที่มุ่งหน้าไปทางเหนือและมีโอกาส 50% ที่จะมุ่งหน้าไปทางทิศตะวันตก

ถ้ามันมุ่งหน้าไปทางทิศตะวันตกสแต็คจะกลับด้าน ถ้ามันมุ่งไปทางทิศเหนือตัวละครด้านบนจะถูกพิมพ์

สิ่งนี้จะสร้างลำดับของสแลชแบบสุ่มตามที่ต้องการ


2

PHP, 26 31 ไบต์

แปดสามไบต์สั้นกว่าของคุณ (ไม่มีช่องว่างหรือวงเล็บ) ,
สองไบต์สั้นกว่าการแก้ปัญหา primo's
(โดยแท็ก)

PHP 5.4.9 เป็นรุ่นปัจจุบันในเดือนธันวาคม 1012 ดังนั้น ...

for($s="\/";;)echo$s[rand()%2];

ต้องการ PHP 5.5 หรือใหม่กว่าสำหรับการจัดทำดัชนีสตริงตัวอักษร

ทำงานด้วย-rหรือลองออนไลน์


PHP 5.5 ไม่มีอยู่ในขณะที่ทำการโพสต์ Challange แต่มี +1 อยู่ดี ลองrand()&1ใช้ PHP build สำหรับ Windows คุณอาจจะแปลกใจ
โม่


2

2

Java 8, 60 59 54 53 ไบต์

v->{for(;;)System.out.write(Math.random()<.5?47:92);}

-1 ขอบคุณไบต์@BenjaminUrquhartโดยการแทนที่printด้วยwriteเพื่อให้สามารถ'/'47

คำอธิบาย:

ลองออนไลน์ (หมดเวลาหลังจาก 60 วินาที)

v->{                     // Method with empty unused parameter and no return-type
  for(;;)                //  Loop indefinitely
    System.out.write(    //   Print:
      Math.random()<.5?  //    If the random decimal value in range [0,1) is below 0.5:
       47                //     Print forward slash
      :                  //    Else:
       92);}             //     Print backward slash

1
ชวา 60. ไบต์ ว้าว.
Erik the Outgolfer

@EriktheGolfer Hehe ฉันไม่ได้สังเกตว่าฉันมีค่าเฉลี่ยเป็นจำนวนไบต์ โดยปกติฉันแค่สมมติว่า Java เป็นหนึ่งในจำนวนไบต์สูงสุดสามารถแข่งขันกับ BrainFuck หรือ C # ได้เพียงเล็กน้อยเท่านั้น xD (PS: ฉันถึงกับตีกอล์ฟถึง 59: P)
Kevin Cruijssen

คุณไม่ได้เฉลี่ยคุณมีจำนวนไบต์น้อยเกินไป (สมมติว่า Java ไม่ใช่ว่าเล็กเกินไปไม่ดี) แต่อย่างน้อยนี่ไม่ใช่JAVA 8ที่ฉันคิดว่านานกว่านี้อีกแล้ว ...
Erik the Outgolfer

@EriktheGolfer อืมไม่ใช่ Java 8 ที่สั้นกว่าc->{for(;;)System.out.print(Math.random()<.5?'/':92);}( 54 ไบต์ ) หรือคุณหมายถึง Java 7 นั้นยาวกว่า Java 8 หรือเปล่า ในกรณีนั้นคุณถูกต้องแน่นอน
Kevin Cruijssen

1
53 bytesโดยสลับไปSystem.out.writeและแทนที่'/'ด้วย47
Benjamin Urquhart

2

JavaScript (Node.js) , 59 55 54 ไบต์

คำตอบเดิม

while(1){process.stdout.write(Math.random()>=0.5?"/":"\\")}

-4 ไบต์ต้องขอบคุณการจัดการ

while(1)process.stdout.write(Math.random()<.5?"/":"\\")

-1 ไบต์ขอบคุณ Conor O'Brien

for(;;)process.stdout.write(Math.random()<.5?"/":"\\")

ยินดีต้อนรับสู่เว็บไซต์!
caird coinheringaahing

ไม่จำเป็นต้องใช้เครื่องมือจัดฟันรอบบล็อกการสอนเดียว ใน JavaScript ส่วนจำนวนเต็ม 0 สามารถถูกปล่อยออกมา; while(1)process.stdout.write(Math.random()<.5?"/":"\\")กลับมีเงื่อนไขที่จะใช้ประกอบการตัวเดียว:
จัดการ

@ การจัดการขอบคุณ! Updated
1024x2

คุณสามารถเขียนfor(;;)แทนwhile(1)
Conor O'Brien

ขอขอบคุณเป็นอย่างดี. ที่เพิ่ม
1024x2

1

ฉันเดาว่าคุณสามารถใช้การสอบถามซ้ำได้

function slashes() {echo chr(47 + 45 * rand(0,1)); slashes();}

ฉันเดาว่าคุณสามารถใช้การสอบถามซ้ำได้

function slashes() {echo chr(47 + 45 * rand(0,1)); slashes();}

...

พื้นที่สแต็กไม่สิ้นสุด
codaddict

@codaddict ดังนั้นจึงจะหมดเวลา
Naftali aka Neal

สมมติว่าการหมดเวลาสูงมากตัวอย่างของคุณไม่เท่ากับ OP ของ
codaddict

1
@caddaddict ฮ่า ๆ หมดเวลาเช่นกัน มันเป็นวงที่ไม่มีที่สิ้นสุด !
Naftali aka Neal

1
คุณจะสร้างข้อผิดพลาดรันไทม์ก่อนหมดเวลา
codaddict

1

ตัดออกหนึ่งตัวละคร:

while(1) { echo chr(2 + 45 * rand(1,2)); }

จากนั้นลบเครื่องหมายปีกกา:

while(1) echo chr(2+45*rand(1,2));

เคล็ดลับอื่นที่มีความยาวเท่ากัน:

while(1) echo chr(rand()%2*45+47);

1
เนื่องจากอัลกอริธึมที่ใช้rand()%2จะส่งผลให้มีการสับเปลี่ยนของ0s และ1s ไม่สุ่มอย่างไม่น่าเชื่อ คุณจะต้องใช้rand(0,1)หรือmt_rand()%2แทน
โม่

1

Perl

อันนี้ดูตลกสำหรับฉัน:

perl -pe '$_="~"ge$_?"/":"\\"' </dev/urandom

(ขออภัยที่อยู่นอกหัวข้อที่นี่ฉันรู้ว่านี่ไม่ใช่ PHP)


1

Powershell ขนาด 37 ไบต์

for(){Write-Host(Random("\","/"))-N}

น่าเสียดายที่ดูเหมือนจะไม่มีนามแฝงสั้นกว่าสำหรับโฮสต์การเขียนที่ไม่ก่อให้เกิดบรรทัดใหม่หลังจากถ่านทุกตัว


1

รหัสแอสเซมบลี x86 16 บิต 10 ไบต์

ฉันจำไม่ได้ว่าอันนี้ลงเอยในหนังสือหรือไม่

init:
scasb            ;read from where ES:DI points and compare to AL 
                 ;this sets flags similar to a subtraction 
salc             ;set mask in AL to 00 or FF 
and   al,'\'-'/' ;begin choosing character (AL is 00 or 2D) 
add   al,'/'     ;finish choosing character 
writec:
int   29h        ;write char in AL 
jmp   init       ;loop endlessly


1

Perl 6 , 23 ไบต์

loop {<\ />.pick.print}
  • loop ลูปตลอดไป
  • <\ />เป็นรายการของสตริง\และ/และ
  • .pick เลือกหนึ่งในสองสายสุ่ม
  • .print พิมพ์สตริงแบบสุ่มที่

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