Je viens d'avoir une conversation «animée» avec un collègue sur la brièveté de la déclaration BASIC suivante:
10 PRINT CHR$(205.5+RND(1)); : GOTO 10
C'est le titre de ce livre , et imprimera simplement une séquence de caractères /
et \
, alternant entre les deux au hasard, résultant en un motif similaire à ceci:
(Image empruntée à http://www.flickr.com/photos/rndmcnlly/5058442151/sizes/o/in/photostream/ )
Étant d'une propension PHP, nous nous sommes demandés quelle serait la manière la plus compacte d'écrire la même chose en PHP, et nous avons trouvé ceci:
while(1) { echo chr(47 + 45 * rand(0,1)); }
chr(47)
est un /
caractère, et chr (92) est un \
. La déclaration echo chr(47 + 45 * rand(0,1));
alternera donc au hasard entre les deux, ad nauseum.
Dans la langue de votre choix, écrivez le programme ou la fonction la plus courte pour produire une séquence aléatoire infinie de caractères \
et /
, où chaque caractère a une probabilité égale d'être choisi.
{}
accolades, mais c'est aussi concis que possible.Réponses:
L'
goto
opérateur a été ajouté à PHP à partir de la version 5.3.0 afin que vous puissiez utiliser la même méthode que vous utiliseriez dans BASIC:la source
Depuis que cela a été migré vers codegolf ...
PHP 30 octets
Le
Ð
caractère est 208 et le£
caractère 163.Exemple d'utilisation (sur une boîte Windows):
Produit quelque chose de similaire à:
Cela fonctionne mieux avec une police monospace qui est exactement carrée (ici j'ai choisi la police système standard 8x8). Pour revenir à votre couleur par défaut, vous pouvez taper à
color
nouveau sans aucun paramètre.la source
rand()%2
(personne n'a indiqué à quel point il devait être pseudo-aléatoire) - Ne fonctionne pas non plus sur les terminaux Unicode (comme OSX)rand()%2
alternera entre zéro et un.mt_rand()%2
fonctionnerait, cependant.Mathematica 157 octets
Faute de PETSCII, j'ai roulé mes propres "\" et "/".
Pas de cigare pour être bref ici.
la source
Brainfuck - 534
Mon prng (d' ici ) est à la fois grand et extrêmement lent. Peut-être qu'un LFSR plus simple ou similaire suffirait, mais cela fonctionne:
la source
C, 39 caractères (38 sur MSVC)
Voyez-le courir.
Sur MSVC, nous pouvons remplacer
putchar()
avec_putch()
et enregistrer un octet, mais il ne fonctionne pas dans IDEOne.la source
Lisp commun, 33
la source
print
a une valeur de retour de 1, donc si vous utilisez cela, vous pouvez simplement envelopper l'expression entière danswhile
:while(print chr(47 + 45 * rand(0,1));
Vous pouvez probablement le jouer plus loin.
la source
rubis,
2723 caractères$><<
est 'print to stdout'.la source
"/\\"
par'\/'
. Ruby 1.8 nécessite[rand(2),1]
de produire le caractère au lieu du code ascii.C ++, 45 caractères
Je ne vais pas gagner de prix pour la brièveté, mais j'avais déjà écrit cela quand j'ai entendu parler du livre mentionné, alors je l'ai juste joué au golf.
L'astuce putchar fonctionne également en C ++, vous ramenant à 43, mais vous ne pouvez pas éviter de déclarer le type de retour sur main.
la source
j'essaye de créer en utilisant le style css, et ça marche
ce code php:
la source
font-family: courier; line-height: 0.75em; letter-spacing: -0.25em;
utilisation-0.25em
de l'espacement des lettres semble correspondre mieux que-3px
, ce qui a des artefacts en raison d'une inexactitudept
depx
conversion.Lisp commun - 68
la source
do
.05AB1E , 7 octets
Essayez-le en ligne!
la source
Befunge-98 (PyFunge) , 7 octets
Essayez-le en ligne!
le
?
envoie l'IP à gauche ou à droite, donc soit/
ou\
est poussé avant d'imprimer avec,
. Lors de l'exécution de'/
ou\'
dans le mauvais ordre après l'impression, il fait juste des choses dans la pile (divise ou échange), puis pousse un caractère non pertinent avant de répéter.la source
Befunge,
12987 octetsEdit: James Holderness a trouvé une solution folle qui utilise trois citations à la place.
Déborde la pile avec beaucoup de caractères en excès pour chaque symbole, mais peu importe quand vous pouvez jouer au golf sur cet octet?
Ancienne version
(Notez l'espace de fin) L'espace de fin n'est apparemment pas nécessaire (merci Mistah Figgins)Essayez-le en ligne
Cela commence à remplir la pile, avec un symbole supplémentaire pour chaque symbole imprimé.
la source
#
c'est à la fin d'une ligne. Ce n'est pas un comportement cohérent, mais l'interpréteur que vous utilisez le permet: tio.run/##S0pNK81LT/3/X0k/RsneTkf5/38A"
, mais mes tentatives ont été vaines. Parce que vous avez besoin/
d'un côté"
, vous devrez diviser la moitié du temps.<
après#
pour le faire fonctionner.'
place. Essayez-le en ligne!?\","/"
Seul inconvénient, cela débordera la pile beaucoup plus rapidement, je pense.Pas beaucoup mieux. Nécessite php 5.5+ pour la fonction de déréférencement de la baie.
la source
while(1)echo'/\\'[rand(0,1)];
.Python, 68
Dans la catégorie "mon langage est nul", nous avons Python!
Merci à Ivo pour quelques caractères sur les importations et
choice
.la source
> <> , 14 octets
J'espérais pouvoir le limiter à un carré 3 * 3, mais je n'ai pas réussi.
Vous pouvez l'essayer ici .
la source
Cubix , 12 octets
Voir dans l'interprète en ligne!
Cela correspond au réseau de cubes suivant:
Explication
Installer:
L'IP commence à se diriger vers l'est au premier
!
. Il s'agit de la commande «ignorer si vrai», qui est Faux lorsqu'il n'y a rien sur la pile, donc aucune commande n'est ignorée."/\"
entre en mode chaîne et ajoute ces deux codes de caractères à la pile.B!o
est principalement un no-op ici, inversant seulement la pile.L'IP revient maintenant en boucle au premier
!
. Cependant, il y a maintenant des entiers positifs sur la pile, donc le premier"
est ignoré. Cela signifie que ce/
n'est plus un personnage, mais un miroir, envoyant l'IP au nord dans la boucle principale.Boucle principale:
La
D
commande est la seule source d'aléatoire dans Cubix. Il envoie l'IP dans une direction aléatoire. En bloquant le sud et l'est avec des flèches, nous nous assurons que l'IP a 50% de chances de se diriger vers le nord et 50% de chances de se diriger vers l'ouest.S'il se dirige vers l'ouest, la pile est inversée. S'il se dirige vers le nord, le caractère supérieur est imprimé.
Cela crée la séquence aléatoire de barres obliques, comme vous le souhaitez.
la source
PHP,
2631 octetshuittrois octets plus court que le vôtre (sans espace ni accolades),.deux octets plus court que la solution de primo (sans la balise)
PHP 5.4.9 était la version actuelle en décembre 1012, donc ...
nécessite PHP 5.5 ou version ultérieure pour l'indexation de chaînes littérales.Courez avec
-r
ou essayez-le en ligne .la source
rand()&1
une version PHP pour Windows. Vous pourriez être surpris.SmileBASIC, 20 octets
la source
PowerShell ,
108908654533736 octetsEssayez-le en ligne!
la source
for
rend égalementwhile
un peu plus courtJava 8,
60595453 octets-1 octet grâce à @BenjaminUrquhart en remplaçant
print
parwrite
,'/'
peut donc l' être47
.Explication:
Essayez-le en ligne (expire après 60 secondes).
la source
c->{for(;;)System.out.print(Math.random()<.5?'/':92);}
( 54 octets ) Ou vouliez-vous dire que Java 7 est plus long que Java 8? Dans ce cas, vous avez en effet raison.System.out.write
et en remplaçant'/'
par47
JavaScript (Node.js) ,
595554 octetsRéponse originale
-4 octets grâce au manatwork
-1 octet grâce à Conor O'Brien
la source
while(1)process.stdout.write(Math.random()<.5?"/":"\\")
.for(;;)
place dewhile(1)
Je suppose que vous pouvez utiliser la récursivité.
Je suppose que vous pouvez utiliser la récursivité.
la source
coupé un caractère:
puis retirez les accolades:
une autre astuce, de même longueur:
la source
rand()%2
entraînera une alternance de0
s et1
s. Pas incroyablement aléatoire. Vous auriez besoin d'utiliserrand(0,1)
ou à lamt_rand()%2
place.Perl
Celui-ci me semble drôle:
(Désolé d'être hors sujet ici. Je sais que ce n'est pas PHP)
la source
Powershell, 37 octets
malheureusement, il ne semble pas y avoir d'alias plus courts pour Write-Host qui ne provoquent pas de nouvelle ligne après chaque caractère.
la source
Code d'assemblage x86 16 bits, 10 octets
Je ne me souviens pas si celui-ci s'est retrouvé dans le livre.
la source
Fission , 12 octets
Essayez-le en ligne!
la source
Perl 6 , 23 octets
loop
boucles pour toujours.<\ />
est une liste des chaînes\
et/
..pick
choisit l'une des deux chaînes au hasard..print
imprime cette chaîne aléatoire.la source
xx*