10 PRINT 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
Вы можете потерять {}брекеты, но это так же кратко, как вы можете это сделать.
Майкл

Это здорово. Какой шрифт можно использовать для получения похожего изображения?
Даниеро

1
Это (картинка) напоминает мне о первой «программе», которую я когда-либо написал на своем коммодоре 64 прямо из руководства :) ах счастливых дней
Дейл

@daniero Я думаю, что фактический шрифт называется Terminal, но я нашел его в Интернете как «Командная строка Windows» codepen.io/nickforddesign/pen/WMqQdM?editors=0110
Никфорд

Какое странное совпадение, что у этого репо Code Golf на Github точно такая же задача ... github.com/noops-challenge/golfbot
Geza Kerecsenyi

Ответы:


9

gotoОператор был добавлен в PHP с версии 5.3.0 , так что вы можете использовать тот же метод , как вы бы в BASIC:

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

Производит что-то похожее на:

Лучше всего он работает с моноширинным шрифтом, который точно квадратный (здесь я выбрал стандартный системный шрифт 8x8). Чтобы вернуться к вашему цвету по умолчанию, вы можете набрать colorснова без каких-либо параметров.


Может сохранить дополнительный байт с rand()%2(никто не указал, каким псевдослучайным оно должно быть) - Также не работает на терминалах Unicode (например, OSX)
Leigh

@Leigh Благодаря своей реализации rand()%2будет чередоваться от нуля до единицы. mt_rand()%2будет работать, однако.
Прим

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]

синий лабиринт


Это изображение делает оптическую иллюзию серой точки !!
Волшебная Урна Осьминога

8

Brainfuck - 534

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

Мой prng ( отсюда ) большой и очень медленный. Возможно, более простого LFSR или подобного было бы достаточно, но это работает:

введите описание изображения здесь


Я думаю, что это не случайно, так как это бред.
Эрик Outgolfer

большинство из них полагаются на встроенные prngs. Да, это будет выводить то же самое каждый раз. Можно было бы посеять его с клавиатуры по цене пары дополнительных символов, но я думаю, что здесь дело не в этом.
Captncraig

5

С, 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]}

$><< это «печать на стандартный вывод».


2
Вы должны быть в состоянии заменить "/\\"на '\/'. Ruby 1.8 требует [rand(2),1]создания символа вместо кода ascii.
Примо

3

C ++, 45 символов

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

Я не собираюсь выигрывать награды за краткость, но я уже написал это, когда услышал об упомянутой книге, поэтому я просто играл в гольф.

Трюк с путчаром также работает в C ++, сокращая до 43, но вы не можете не объявлять тип возвращаемого значения в main.


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

Common Lisp - 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 на ответ Джо Кинга. Но этот подход выглядит аккуратнее.
Джеймс Холдернесс

3

Befunge, 12 9 8 7 байт

Редактировать: Джеймс Холдернесс нашел безумное решение, которое вместо этого использует три цитаты.

?\","/"

Переполнение стека множеством лишних символов для каждого символа, но кого это волнует, когда вы можете сыграть в гольф этот 1 байт?

Старая версия

"/\"?>,#

(Обратите внимание на конечный пробел) Конечный пробел явно не нужен (спасибо Мисте Фиггинс)

Попробуйте онлайн

"/\" 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 Пространство определенно не должно требоваться для любой стандартной реализации Befunge-93. Код может не работать в некоторых интерпретаторах Funge-98, где спецификация более неоднозначна, но в любом случае добавление пробела в этих случаях не поможет - вам понадобится <после, #чтобы заставить его работать.
Джеймс Холдернесс

@MistahFiggins Что касается избавления от одной из цитат, вы можете сделать это в Befunge-98, используя 'вместо этого. Попробуйте онлайн!
Джеймс Холдернесс

2
@JoKing Просто понял, что вы можете сделать лучше с тремя кавычками! ?\","/"Я думаю, что только из-за этого он переполняет стек намного быстрее.
Джеймс Холдернесс

2

Не намного лучше. Требуется php 5.5+ для функции разыменования массива.

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

Никогда даже не думал об этом, спасибо!
Джуди

1
На самом деле PHP поддерживает индексы для строк: while(1)echo'/\\'[rand(0,1)];.
manatwork

2

Python, 68

В категории «мой язык отстой», у нас есть Python!

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

Спасибо Иво за несколько символов на импорт и choice.


Что ж, вы ничего не сохраняете с помощью 'from sys import *' - если вы вместо этого напишите 'import sys, random' и используете sys.stdout и random.random, вы сэкономите 5 байт.
Иво

Python3: импортировать в случайном порядке, а 1: печатать (random.choice ('/ \\'), end = '')
Ivo

@ Ivo, спасибо, я забыл о выборе! Вы можете оставить py3, хотя. ;)
Boothby

Если вы перевернете свою строку, вам не придется экранировать обратную косую черту, тем самым сохраняя байт.
Джонатан Фрех

2

> <> , 14 байт

Я надеялся, что смогу ограничить его размером 3 * 3, но не получилось.

"/\
~x/
o</
 !

Вы можете попробовать это здесь .


2

Cubix , 12 байт

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

Посмотреть в онлайн переводчике!

Это соответствует следующей сети кубов:

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

объяснение

Настроить:

IP начинает идти на восток с самого начала !. Это команда «пропустить, если правдиво», которая равна False, когда в стеке ничего нет, поэтому команды не пропускаются. "/\"вводит строковый режим и добавляет эти два символьных кода в стек. B!oздесь в основном нет, только переворачивая стек.

IP теперь возвращается к первому !. Однако теперь в стеке положительные целые числа, поэтому первое "пропускается. Это означает, что /это уже не символ, а зеркало, отправляющее IP на север в основной цикл.

Основной цикл:

Команда Dявляется единственным источником случайности в Cubix. Он отправляет IP в случайном направлении. Заблокировав стрелками юг и восток, мы обеспечиваем 50-процентную вероятность движения на север и 50-процентную вероятность движения на запад.

Если это возглавляет Запад, стек полностью изменен. Если он направляется на север, печатается верхний символ.

Это создает случайную последовательность косых черт, по желанию.


2

PHP, 26 31 байт

восемь на три байта короче вашего (без пробелов и скобок) , на
два байта короче решения primo (без тега)
.

PHP 5.4.9 была текущей версией в декабре 1012 года, так что ...

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

требует PHP 5.5 или более поздней версии для индексации буквенных строк.

Запустите -rили попробуйте онлайн .


PHP 5.5 не существовал на момент публикации заявки, но в любом случае имел +1. Также попробуйте rand()&1сборку PHP для Windows. Вы можете быть удивлены.
Примо


2

PowerShell , 108 90 86 54 53 37 36 байт

for(){Write-Host "\/"[(Random 2)]-n}

Попробуйте онлайн!


1
Добро пожаловать в Code Golf. Советы по игре в гольф в PowerShell
Маззи


2
forтакже делает while немного короче
Mazy

1
Вы можете больше ... точнее, меньше :)
mazzy


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. Байт. Вау.
Эрик Outgolfer

@EriktheGolfer Хе-хе. Я даже не заметил, что у меня средний счетчик байтов. Обычно я просто предполагаю, что Java - это один из самых высоких байтов, лишь иногда немного конкурирующий с BrainFuck или C #. xD (PS: я даже играл в гольф до 59: P)
Кевин Круйссен

Вы не средний, у вас слишком маленький счетчик байтов (при условии, что Java не слишком мала, это не хорошо). Но, по крайней мере, это не JAVA 8 , где я думаю, что это дольше ...
Эрик Outgolfer

@EriktheGolfer Хм, Java 8 не короче c->{for(;;)System.out.print(Math.random()<.5?'/':92);}( 54 байта ) Или вы имели в виду, что Java 7 длиннее, чем Java 8? В этом случае вы действительно правы.
Кевин Круйссен

1
53 байта путем переключения System.out.writeи замены '/'на47
Бенджамин Уркхарт

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 байт благодаря Конору О'Брайену

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

Добро пожаловать на сайт!
Caird Coinheringaahing

Нет необходимости в скобках вокруг одного блока инструкций; в JavaScript часть с целым числом 0 можно не указывать; обратный условный использовать одного оператор символов: while(1)process.stdout.write(Math.random()<.5?"/":"\\").
manatwork

@manatwork Спасибо! Обновлено.
1024 x 2

Вы также можете написать for(;;)вместоwhile(1)
Конор О'Брайен

И тебе спасибо. Добавлен.
1024 x 2

1

Я думаю, вы можете использовать рекурсию.

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

Я думаю, вы можете использовать рекурсию.

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

...

пространство стека не бесконечно.
codaddict

@codaddict, так что время ожидания истекло.
Нафтали ака Нил

Если предположить, что ваш фрагмент времени слишком большой, он не эквивалентен OP.
codaddict

1
@codaddict LOL время ожидания ОП тоже. это бесконечный цикл!
Нафтали ака Нил

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}

к сожалению, для Write-Host нет более коротких псевдонимов, которые не вызывают новую строку после каждого символа.


1

16-битный код сборки x86, 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*
Джо Кинг,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.