10 PRINT CHR $ (205.5 + RND (1)); : GOTO 10 en PHP (o cualquier otra cosa, para el caso)


23

Acabo de tener una conversación 'enérgica' con un compañero de trabajo sobre la brevedad de la siguiente declaración BÁSICA:

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

Es el título de este libro , y simplemente imprimir una secuencia de /y \personajes, alternando entre los dos al azar, lo que resulta en un patrón similar a esto:

ingrese la descripción de la imagen aquí

(Imagen tomada de http://www.flickr.com/photos/rndmcnlly/5058442151/sizes/o/in/photostream/ )

Siendo proclividad de PHP, nos preguntamos cuál sería la forma más compacta de escribir lo mismo en PHP, y se nos ocurrió esto:

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

chr(47)es un /personaje, y chr (92) es a \. Por lo tanto, la declaración echo chr(47 + 45 * rand(0,1));será aleatoriamente alternativa entre los dos, hasta la náusea.

En un idioma de su elección, escribir el programa más corto o función para emitir una secuencia aleatoria infinita de \y /caracteres, donde cada personaje tiene la misma probabilidad de ser elegidos.


1
Puede perder los {}frenos, pero eso es lo más conciso posible.
Michael

Esto es genial ¿Qué fuente se puede usar para obtener una imagen similar?
daniero

1
Esta (imagen) me recuerda el primer "programa" que escribí en mi comodoro 64 directamente del manual :) ah días felices
Dale

@daniero Creo que el tipo de letra real se llama Terminal, pero lo encontré en línea como "Símbolo del sistema de Windows" codepen.io/nickforddesign/pen/WMqQdM?editors=0110
nickford

Qué extraña coincidencia que este repositorio de Code Golf en Github tenga exactamente el mismo desafío ... github.com/noops-challenge/golfbot
Geza Kerecsenyi

Respuestas:


9

El gotooperador se agregó a PHP desde la versión 5.3.0 para que pueda usar el mismo método que usaría en BASIC:

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

18

Como esto ha sido migrado a codegolf ...

PHP 30 bytes

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

El Ðes el personaje 208 y el £personaje 163.

Ejemplo de uso (en un cuadro de Windows):

color 18 & php maze.php

Produce algo similar a:

Funciona mejor con una fuente monoespacial que es exactamente cuadrada (aquí he elegido la fuente estándar del sistema 8x8). Para volver a su color predeterminado, puede colorvolver a escribir sin ningún parámetro.


Puede guardar un byte adicional con rand()%2(nadie dijo cuán pseudoaleatorio tenía que ser) - Tampoco funciona en terminales Unicode (como OSX)
Leigh

@Leigh Debido a su implementación, rand()%2alternará entre cero y uno. mt_rand()%2funcionaría, sin embargo.
primo

15

Mathematica 157 bytes

Al carecer de PETSCII, rodé mis propios "\" y "/".

No hay cigarro por brevedad aquí.

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]

laberinto azul


¡Esta imagen hace la ilusión óptica del punto gris !!
Urna de pulpo mágico

8

Brainfuck - 534

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

Mi prng (desde aquí ) es grande y extremadamente lento. Quizás un LFSR más simple o similar sería suficiente, pero esto funciona:

ingrese la descripción de la imagen aquí


Sin embargo, creo que esto no es aleatorio, ya que esto es una locura mental.
Erik the Outgolfer

la mayoría de estos se basan en puntas incorporadas. Sí, esto generará lo mismo cada vez. Podría permitir que se siembra desde el teclado a costa de un par de caracteres adicionales, pero ese no es realmente el punto aquí, creo.
captncraig

5

C, 39 caracteres (38 en MSVC)

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

ingrese la descripción de la imagen aquí Véalo correr.

En MSVC, podemos reemplazar putchar()con _putch()y guardar un byte, pero no funciona en Ideone.

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


3

printtiene un valor de retorno de 1, por lo que si usa eso, puede envolver toda la expresión en while:

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

Probablemente también puedas jugar más al golf.


3

rubí, 27 23 caracteres

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

$><< es 'imprimir en stdout'.


2
Debería poder reemplazar "/\\"con '\/'. Ruby 1.8 requiere [rand(2),1]producir el carácter en lugar del código ascii.
primo

3

C ++, 45 caracteres

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

No voy a ganar ningún premio por su brevedad, pero ya había escrito esto cuando escuché sobre el libro mencionado, así que simplemente lo jugué.

El truco putchar también funciona en C ++, bajando a 43, pero no puede evitar declarar el tipo de retorno en main.


3

Intento crear usando el estilo CSS, y es trabajo

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

este código php:

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

Me gustaría sugerir un estilo alternativo: font-family: courier; line-height: 0.75em; letter-spacing: -0.25em;El uso -0.25emde espaciado entre letras parece coincidir mejor que -3px, el que tiene artefactos debido a una inexacta pta pxla conversión.
primo

3

Lisp común - 68

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

Loop permite una sintaxis compleja y simple, la simple es como un progn, pero se repite para siempre. Puedes soltar el do.
coredump

3

05AB1E , 7 bytes

["/\"Ω?

Pruébalo en línea!

["/\"Ω?  - Full program
[          Start an infinite loop
 "/\"      ... Push the string "/\" on the stack
     Ω     ... Pick a character from the top of the stack, at random
      ?    ... Print without a newline

3

Befunge-98 (PyFunge) , 7 bytes

? '/,\'

Pruébalo en línea!

el ?envía la IP hacia la izquierda o hacia la derecha, por lo tanto, /o \se empuja antes de imprimir con ,. Al ejecutar '/o \'en el orden incorrecto después de la impresión, simplemente hace cosas a la pila (se divide o intercambia), y luego empuja un carácter irrelevante antes de repetir.


Solo estaba proponiendo una solución Befunge-98 de 7 bytes diferente en la respuesta de Jo King. Pero este enfoque se ve más ordenado.
James Holderness

3

Befunge, 12 9 8 7 bytes

Editar: James Holderness descubrió una solución loca que usa tres comillas en su lugar.

?\","/"

Desborda la pila con un montón de caracteres en exceso para cada símbolo, pero ¿a quién le importa cuando puedes jugar ese 1 byte?

Versión antigua

"/\"?>,#

(Tenga en cuenta el espacio final) El espacio final aparentemente no es necesario (gracias Mistah Figgins)

Pruébalo en línea

"/\" 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

Esto comienza a llenar la pila, con un símbolo adicional por cada símbolo impreso.


1
parece que puedes deshacerte del espacio extra, ya que #está al final de una línea. No es un comportamiento consistente, pero el intérprete que está usando lo permite: tio.run/##S0pNK81LT/3/X0k/RsneTkf5/38A
MildlyMilquetoast

También me pregunto si puedes usar solo uno ", pero mis intentos han sido inútiles. Debido a que necesita un /lado ", tendrá que dividir la mitad del tiempo.
MildlyMilquetoast

@MistahFiggins Space definitivamente no debería ser necesario para ninguna implementación estándar de Befunge-93. El código puede fallar en algunos intérpretes Funge-98, donde la especificación es más ambigua, pero agregar un espacio no ayudaría en esos casos de todos modos, necesitaría un <después #para que funcione.
James Holderness

@MistahFiggins En cuanto a deshacerse de una de las citas, puede hacer eso en Befunge-98 utilizando en su 'lugar. Pruébalo en línea!
James Holderness

2
@JoKing ¡Acabo de darme cuenta de que en realidad puedes hacerlo mejor con tres citas! ?\","/"Lo único malo es que desbordará la pila mucho más rápido, creo.
James Holderness

2

No mucho mejor. Necesita php 5.5+ para la función de desreferenciación de matrices.

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

Nunca pensé en eso, ¡gracias!
Judy

1
En realidad PHP soporta subíndices para cadenas: while(1)echo'/\\'[rand(0,1)];.
manatwork

2

Python, 68

En la categoría "mi idioma apesta en esto", ¡tenemos Python!

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

Gracias a Ivo por algunos caracteres sobre importaciones y choice.


Bueno, no está guardando nada con 'from sys import *': si en su lugar escribe 'import sys, random' y usa sys.stdout y random.random, ahorrará 5 bytes.
Ivo

Python3: importación aleatoria mientras que 1: print (random.choice ('/ \\'), end = '')
Ivo

@ Ivo, ¡Gracias, me olvidé de elegir! Sin embargo, puedes mantener py3. ;)
stand por

Si invierte su cadena, no tiene que escapar de la barra diagonal inversa, guardando así un byte.
Jonathan Frech

2

> <> , 14 bytes

Esperaba poder restringirlo a un cuadrado de 3 * 3, pero no tuve éxito.

"/\
~x/
o</
 !

Puedes probarlo aquí .


2

Cubix , 12 bytes

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

Ver en el intérprete en línea!

Esto se asigna a la siguiente red de cubos:

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

Explicación

Preparar:

La IP comienza a dirigirse hacia el este en el primero !. Este es el comando 'omitir si es verdad', que es Falso cuando no hay nada en la pila, por lo que no se omiten comandos. "/\"ingresa stringmode y agrega estos dos códigos de caracteres a la pila. B!oes principalmente un no-op aquí, solo invierte la pila.

La IP ahora vuelve al primero !. Sin embargo, ahora hay enteros positivos en la pila, por lo que "se omite el primero . Esto significa /que ya no es un personaje, sino un espejo, que envía la IP del norte al bucle principal.

Bucle principal:

los D comando es la única fuente de aleatoriedad en Cubix. Envía la IP en una dirección aleatoria. Al bloquear el sur y el este con flechas, nos aseguramos de que el IP tenga un 50% de probabilidad de dirigirse hacia el norte y un 50% de probabilidad de dirigirse hacia el oeste.

Si se dirige al oeste, la pila se invierte. Si se dirige hacia el norte, se imprime el carácter superior.

Esto crea la secuencia aleatoria de barras, según se desee.


2

PHP, 26 31 bytes

ocho tres bytes más cortos que el tuyo (sin espacios en blanco o llaves) ,
dos bytes más cortos que la solución de primo (sin la etiqueta)
.

PHP 5.4.9 era la versión actual en diciembre de 1012, así que ...

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

requiere PHP 5.5 o posterior para la indexación de cadenas literales.

Ejecutar -ro probarlo en línea .


PHP 5.5 no existía en el momento de la publicación del desafío, pero tiene un +1 de todos modos. Además, pruebe rand()&1una compilación PHP para Windows. Te sorprenderías.
primo



2

Java 8, 60 59 54 53 bytes

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

-1 byte gracias a @BenjaminUrquhart al reemplazar printconwrite , por lo que '/'puede ser 47.

Explicación:

Pruébelo en línea (agota el tiempo de espera después de 60 segundos).

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
Java. 60. Bytes. Guau.
Erik the Outgolfer

@EriktheGolfer Hehe. Ni siquiera me había dado cuenta de que soy promedio en el conteo de bytes. Por lo general, solo asumo que Java es uno de los conteos de bytes más altos, a veces solo ligeramente competible con BrainFuck o C #. xD (PD: incluso lo jugué a 59: P)
Kevin Cruijssen

No eres promedio, tienes un recuento de bytes demasiado pequeño (suponiendo que Java, no es demasiado pequeño, no es bueno). Pero, al menos, esto no es JAVA 8 , donde creo que es más largo ...
Erik the Outgolfer

@EriktheGolfer Hmm, ¿Java 8 no es más corto con c->{for(;;)System.out.print(Math.random()<.5?'/':92);}( 54 bytes ) ¿O quiso decir que Java 7 es más largo que Java 8? En ese caso, estás en lo cierto.
Kevin Cruijssen

1
53 bytes cambiando System.out.writey reemplazando '/'con47
Benjamin Urquhart

2

JavaScript (Node.js) , 59 55 54 bytes

Respuesta original

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

-4 bytes gracias a manatwork

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

-1 byte gracias a Conor O'Brien

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

Bienvenido al sitio!
caird coinheringaahing

No hay necesidad de llaves alrededor de un solo bloque de instrucciones; en JavaScript, la parte entera 0 puede omitirse; revertir el condicional a utilizar el operador solo carácter: while(1)process.stdout.write(Math.random()<.5?"/":"\\").
manatwork

@manatwork Gracias! Actualizado.
1024x2

También puedes escribir en for(;;)lugar dewhile(1)
Conor O'Brien

Gracias a ti también. Adicional.
1024x2

1

Supongo que puedes usar la recursividad.

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

Supongo que puedes usar la recursividad.

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

...

El espacio de la pila no es infinito.
codaddict

@codaddict por lo que se agota el tiempo de espera.
Naftali aka Neal

Suponiendo un tiempo de espera considerablemente alto, su fragmento no es equivalente a los OP.
codaddict

1
@codaddict jajaja, los OP también caducan. es un bucle infinito !
Naftali alias Neal

1
El tuyo crearía un error de tiempo de ejecución antes del tiempo de espera.
codaddict

1

cortado un personaje:

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

luego quite las llaves:

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

otro truco, con la misma longitud:

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

1
Debido al algoritmo que emplea, rand()%2dará como resultado una alternancia de 0sy 1s. No increíblemente al azar. Tendría que usar rand(0,1)o en su mt_rand()%2lugar.
primo

1

Perl

Este me parece divertido:

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

(Perdón por estar fuera de tema aquí. Sé que esto no es PHP)


1

Powershell, 37 bytes

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

desafortunadamente parece que no hay alias más cortos para Write-Host que no causen una nueva línea después de cada char.


1

Código de ensamblado x86 de 16 bits, 10 bytes

No recuerdo si este terminó en el libro.

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 bucles para siempre.
  • <\ />es una lista de las cadenas \y /.
  • .pick elige una de las dos cadenas al azar.
  • .print imprime esa cadena aleatoria.

en lugar de bucle, puedes usarxx*
Jo King
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.