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.