10 인쇄 CHR $ (205.5 + RND (1)); : PHP의 GOTO 10 (또는 그 밖의 문제)


23

다음 기본 진술의 간결함에 대해 동료와 '정신적'대화를 나누었습니다.

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

그것은 제목의 이 책은 , 단순히 일련의 인쇄합니다 /\이와 유사한 패턴의 결과로, 무작위로 둘 사이의 교류, 문자 :

enter image description here

( http://www.flickr.com/photos/rndmcnlly/5058442151/sizes/o/in/photostream/ 에서 빌린 이미지 )

PHP proclivity이기 때문에, 우리는 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에 쓴 최초의 "프로그램"을 떠올리게한다. :) 아 행복한 날
Dale

@daniero 실제 서체는 터미널이라고 생각하지만 온라인에서 "Windows 명령 프롬프트" codepen.io/nickforddesign/pen/WMqQdM?editors=0110
nickford

무엇 Github에서에이 코드 골프의 repo가 동일한 도전 ...이 일어나는 것을 이상한 우연의 일치 github.com/noops-challenge/golfbot
게자 Kerecsenyi

답변:


9

goto당신은 BASIC에서와 마찬가지로 같은 방법을 사용할 수 있도록 운영자가 버전 5.3.0에서 PHP에 추가되었습니다 :

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 (아무도 언급하지 어떻게 그것을해야했다 의사 난수를) - 또한 (OSX 같은) 유니 코드 터미널에서 작업을하지 않는

@Leigh 구현으로 인해 rand()%20과 1이 교대로 나타납니다. 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]

blue maze


이 이미지는 회색 점 착시를합니다 !!
매직 문어 항아리

8

머리 씨발-534

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

내 친구 ( 여기에서 )는 크고 매우 느립니다. 아마도 더 간단한 LFSR 또는 이와 유사한 것으로 충분하지만 이것은 효과가 있습니다.

enter image description here


나는 이것이 두뇌 섹스이기 때문에 이것이 무작위가 아니라고 생각합니다.
Outgolfer Erik

이들 중 대부분은 내장 프롱에 의존합니다. 네, 매번 똑같이 출력됩니다. 몇 개의 추가 문자를 사용하여 키보드에서 시드 할 수는 있지만 실제로는 그렇지 않습니다.
captncraig

5

C, 39 자 (MSVC에서 38 자)

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

enter image description here 실행을 참조하십시오.

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

$><< 'stdout에 인쇄'입니다.


2
다음을 교체 할 수 있어야 "/\\"'\/'. Ruby 1.8에서는 [rand(2),1]ASCII 코드 대신 문자를 생성 해야 합니다.
primo December

3

C ++, 45 자

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

부족에 대한 상을 수상하지는 않았지만 언급 한 책에 대해 들었을 때 이미 이것을 작성 했으므로 방금 골프를 쳤습니다.

putchar 트릭은 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있습니다.
primo December

3

커먼 리스프-68

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

루프는 복잡하고 간단한 구문을 허용합니다. 간단한 구문은 개와 같지만 영원히 반복됩니다. 을 (를) 삭제할 수 있습니다 do.
coredump 2013 년


3

Befunge-98 (PyFunge) , 7 바이트

? '/,\'

온라인으로 사용해보십시오!

?IP를 왼쪽이나 오른쪽으로 전송하므로 /또는 \로 인쇄하기 전에 또는를 누르십시오 ,. 인쇄 후 '/또는 \'잘못된 순서로 실행하면 스택에 작업을 수행하고 (나누거나 스왑) 반복하기 전에 관련없는 문자를 푸시합니다.


Jo King의 답변에 다른 7 바이트 Befunge-98 솔루션을 제안했습니다. 그러나이 접근법은 더 깔끔해 보입니다.
James Holderness

3

빌 펀지, 12 9 8 7 바이트

편집 : James Holderness 는 대신 세 따옴표를 사용하는 미친 솔루션을 알아 냈습니다.

?\","/"

각 기호에 대해 초과 문자가 많은 스택을 오버플로하지만 누가 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 통역에 실패 할 수 있지만, 공간을 추가하는 것은 어쨌든 이러한 경우에하지 도움이 될 것이다 - 당신이 필요 했어 <애프터를 #작동 할 수 있습니다.
James Holderness

@MistahFiggins 따옴표 중 하나를 제거하는 '대신 Befunge-98에서 대신 사용할 수 있습니다. 온라인으로 사용해보십시오!
James Holderness

2
@JoKing 방금 세 따옴표로 더 잘 할 수 있다는 것을 깨달았습니다! ?\","/"단지 단점은 스택이 훨씬 빠르게 오버플로 될 것이라고 생각합니다.
James Holderness

2

별로 좋지 않습니다. 배열 역 참조 기능을 위해서는 PHP 5.5 이상이 필요합니다.

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

생각조차하지 마세요, 고마워요!
Judy

1
실제로 PHP는 문자열에 대한 첨자를 지원합니다 : while(1)echo'/\\'[rand(0,1)];.
manatwork

2

파이썬, 68

"my language sucks this"카테고리에는 Python이 있습니다!

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

수입에 대한 몇 가지 문자에 대한 Ivo에게 감사합니다 choice.


글쎄, 당신은 'sys import *'로 아무것도 저장하지 않습니다. 대신 'import sys, random'을 쓰고 sys.stdout과 random.random을 사용하면 5 바이트가 절약됩니다.
Ivo

Python3 : 1 : print (random.choice ( '/ \\'), end = '') 동안 무작위 가져 오기
Ivo

@Ivo, 감사합니다. 선택을 잊었습니다! 그래도 py3을 유지할 수 있습니다. ;)
부스

문자열을 반대로 바꾸면 백 슬래시를 이스케이프 처리하지 않아도되므로 바이트가 절약됩니다.
Jonathan Frech

2

> <> , 14 바이트

나는 그것을 3 * 3 정사각형으로 제한 할 수 있기를 바랐지만 성공하지 못했습니다.

"/\
~x/
o</
 !

여기서 시도해 볼 수 있습니다 .


2

Cubix , 12 바이트

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

온라인 통역사에서 확인하십시오!

이것은 다음 큐브 네트에 매핑됩니다.

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

설명

설정:

IP는 처음에 동쪽으로 향하기 시작합니다 !. 이것은 '진실한 경우 건너 뛰기'명령으로, 스택에 아무것도 없으면 False이므로 명령을 건너 뛰지 않습니다."/\"stringmode를 입력하고이 두 문자 코드를 스택에 추가합니다. B!o여기서는 역전이 없으며 스택을 역전시킵니다.

IP는 이제 첫 번째로 되돌아갑니다 !. 그러나 스택에 양의 정수가 있으므로 첫 번째 정수 "는 건너 뜁니다. 이것은 의미/ 더 이상 문자가 아니라 미러를 사용하여 IP를 북쪽으로 메인 루프로 보냅니다.

메인 루프 :

그만큼 D 명령은 Cubix에서 유일한 무작위 소스입니다. IP를 임의의 방향으로 보냅니다. 화살표로 남쪽과 동쪽을 차단하면 IP가 북쪽으로 50 %, 서쪽으로 50 %의 확률을 갖습니다.

West로 향하면 스택이 반전됩니다. 북쪽으로 향하면 맨 위 문자가 인쇄됩니다.

원하는대로 임의의 슬래시 시퀀스를 만듭니다.


2

PHP, 26 31 바이트

여덟 세 (공백 또는 괄호없이) 당신보다 더 짧은 바이트 ,
두 사람은보다 짧은 바이트 primo's 솔루션 (태그없이)
.

PHP 5.4.9는 1012 년 12 월의 현재 버전이므로 ...

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

리터럴 문자열 인덱싱을 위해서는 PHP 5.5 이상이 필요합니다.

온라인으로 실행 -r하거나 사용해보십시오 .


챌린지 게시 시점에 PHP 5.5는 존재하지 않았지만 어쨌든 +1이 있습니다. 또한 rand()&1Windows 용 PHP 빌드를 사용해보십시오 . 당신은 놀라게 될 것입니다.
primo


2

PowerShell , 108 90 86 54 53 37 36 바이트

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

온라인으로 사용해보십시오!


1
Code Golf에 오신 것을 환영합니다. PowerShell의 골프를위한 팁
Mazzy



1
더 정확하게 ... 더 정확하게, 더 적게 할 수 있습니다 :)
mazzy

1
그리고 적은
mazzy

2

자바 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 Erik

@EriktheGolfer Hehe. 나는 평균 바이트 수에 대해서는 알지 못했습니다. 일반적으로 Java가 가장 높은 바이트 수 중 하나라고 가정하고 때로는 BrainFuck 또는 C #과 약간만 경쟁 할 수 있습니다. xD (PS : 나는 심지어 59 : P까지 골프를 쳤다)
Kevin Cruijssen at

평균적이지 않고 바이트 수가 너무 적습니다 (자바 가정, 너무 작지 않다는 가정). 그러나 적어도 이것은 자바 8 이 아닙니다. 더 긴 것으로 생각됩니다.
Erik the Outgolfer

@EriktheGolfer Hmm, Java 8이 c->{for(;;)System.out.print(Math.random()<.5?'/':92);}( 54 bytes ) 더 짧지 않습니까? 아니면 Java 7이 Java 8보다 길다는 의미입니까? 이 경우 실제로 맞습니다.
Kevin Cruijssen

1
53 바이트 로 전환 System.out.write및 교체 '/'47
벤자민 우르크 하트

2

자바 스크립트 (Node.js) , 59 55 54 바이트

원래 답변

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

-4 bytes thanks to manatwork

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

-1 byte thanks to Conor O'Brien

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

Welcome to the site!
caird coinheringaahing

No need for braces around a single instruction block; in JavaScript the 0 integer part can be left out; reverse the conditional to use single character operator: while(1)process.stdout.write(Math.random()<.5?"/":"\\").
manatwork

@manatwork Thanks! Updated.
1024x2

You can also write for(;;) instead of while(1)
Conor O'Brien

Thank you as well. Added.
1024x2

1

I guess you can use recursion.

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

I guess you can use recursion.

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

...

stack space is not infinite.
codaddict

@codaddict so it will timeout.
Neal

Assuming a considerably high timeout your snippet is not equivalent to the OP's.
codaddict

1
@codaddict lol the OPs times out as well. it is an infinite loop!
Neal

1
Yours would create a run time error before the timeout.
codaddict

1

chopped off one character:

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

then remove the curly braces:

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

another trick, with the same length:

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

1
Due to the algorithm it employs, rand()%2 will result in an alternation of 0s and 1s. Not incredibly random. You'd need to use rand(0,1) or mt_rand()%2 instead.
primo

1

Perl

This one looks funny for me :

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

(Sorry to be out of subject here. I know this is not PHP)


1

Powershell, 37 bytes

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

unfortunately there seem to be no shorter aliases for Write-Host that don't cause a new line after every char.


1

16-bit x86 assembly code, 10 bytes

I don't remember if this one ended up in the book.

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 bytes

loop {<\ />.pick.print}
  • loop loops forever.
  • <\ /> is a list of the strings \ and /.
  • .pick picks one of the two strings randomly.
  • .print prints that random string.

instead of loop, you can use xx*
Jo King
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.