Właśnie odbyłem „porywającą” rozmowę ze współpracownikiem na temat zwięzłości następującego oświadczenia BASIC:
10 PRINT CHR$(205.5+RND(1)); : GOTO 10
Jest to tytuł tej książki i po prostu wydrukuje sekwencję znaków /
i \
, naprzemiennie między nimi, tworząc wzór podobny do tego:
(Zdjęcie pożyczone z http://www.flickr.com/photos/rndmcnlly/5058442151/sizes/o/in/photostream/ )
Będąc skłonnością do PHP, zastanawialiśmy się, jaki byłby najbardziej kompaktowy sposób pisania tego samego w PHP, i wymyśliliśmy:
while(1) { echo chr(47 + 45 * rand(0,1)); }
chr(47)
jest /
postacią, a chr (92) to \
. Tak więc oświadczenie echo chr(47 + 45 * rand(0,1));
będzie losowo alternatywne między tymi dwoma, ad nauseum.
W wybranym języku napisz najkrótszy program lub funkcję, aby wygenerować nieskończoną losową sekwencję znaków \
i /
, przy czym każdy znak ma jednakowe prawdopodobieństwo wybrania.
{}
aparat ortodontyczny, ale jest to tak zwięzłe, jak tylko możesz.Odpowiedzi:
goto
Operator został dodany do PHP od wersji 5.3.0, więc można używać tej samej metody, jak w podstawowy:źródło
Od czasu migracji do codegolf ...
PHP 30 bajtów
Jest
Ð
to postać 208, a£
jest to postać 163.Przykładowe użycie (w systemie Windows):
Tworzy coś podobnego do:
Najlepiej działa z czcionką o stałej szerokości, która jest dokładnie kwadratowa (tutaj wybrałem standardową czcionkę systemową 8x8). Aby wrócić do domyślnego koloru, możesz pisać
color
ponownie bez żadnych parametrów.źródło
rand()%2
(nikt nie powiedział, jak musiałby być pseudolosowy) - Również nie działa na terminalach Unicode (takich jak OSX)rand()%2
będzie na przemian od zera do jednego.mt_rand()%2
działałoby jednak.Mathematica 157 bajtów
Nie mając PETSCII, zwinąłem własne „\” i „/”.
Tutaj nie ma cygara za zwięzłość.
źródło
Brainfuck - 534
Mój prng ( stąd ) jest zarówno duży, jak i bardzo wolny. Być może wystarczyłby prostszy LFSR lub podobny, ale to działa:
źródło
C, 39 znaków (38 na MSVC)
Zobacz, jak działa.
Na MSVC możemy wymienić
putchar()
ze_putch()
i zapisać bajt, ale to nie działa w IDEOne.źródło
Common Lisp, 33
źródło
print
ma wartość zwracaną 1, więc jeśli użyjesz tego, możesz po prostu zawinąć całe wyrażenie wwhile
:while(print chr(47 + 45 * rand(0,1));
Prawdopodobnie możesz też zagrać w golfa dalej.
źródło
rubin,
2723 znaków$><<
to „print to stdout”.źródło
"/\\"
z'\/'
. Ruby 1.8 wymaga[rand(2),1]
wytworzenia znaku zamiast kodu ascii.C ++, 45 znaków
Nie zamierzam wygrać żadnych nagród za zwięzłość, ale napisałem to już, kiedy usłyszałem o wspomnianej książce, więc po prostu grałem w nią.
Sztuczka putchar działa również w C ++, co prowadzi do obniżenia do 43, ale nie można uniknąć zadeklarowania typu zwrotu na main.
źródło
próbuję tworzyć w stylu css i to działa
ten kod php:
źródło
font-family: courier; line-height: 0.75em; letter-spacing: -0.25em;
Korzystanie-0.25em
z letter-spacing wydaje się, aby dopasować się lepiej niż-3px
, który ma artefaktów z powodu niedokładnegopt
dopx
nawrócenia.Common Lisp - 68
źródło
do
.05AB1E , 7 bajtów
Wypróbuj online!
źródło
Befunge-98 (PyFunge) , 7 bajtów
Wypróbuj online!
?
wysyła IP albo w lewo lub prawo, więc albo/
czy\
jest wciśnięty przed drukowania,
. Wykonując'/
lub\'
w niewłaściwej kolejności po wydrukowaniu, po prostu robi rzeczy na stosie (dzieli lub zamienia), a następnie wypycha nieistotny znak przed powtórzeniem.źródło
Befunge,
12987 bajtówEdytować: James Holderness wymyślił szalone rozwiązanie, które zamiast tego wykorzystuje trzy cytaty.
Przepełnia stos z dużą ilością nadmiarowych znaków dla każdego symbolu, ale kogo to obchodzi, kiedy możesz zagrać w ten 1 bajt?
Stara wersja
(Zwróć uwagę na spację końcową)Spacja spacji najwyraźniej nie jest potrzebna (dzięki Mistah Figgins)Wypróbuj online
To zaczyna wypełniać stos, z jednym dodatkowym symbolem dla każdego wydrukowanego symbolu.
źródło
#
znajduje się na końcu linii. Nie jest to spójne zachowanie, ale używany przez niego interpreter"
, ale moje próby były daremne. Ponieważ potrzebujesz/
jednej strony"
, będziesz musiał podzielić połowę czasu.<
po to,#
żeby działało.'
zamiast tego. Wypróbuj online!?\","/"
Jedynym minusem jest to, że myślę, że szybciej przepełni stos.Niewiele lepiej. Potrzebuje php 5.5+ dla funkcji dereferencji macierzowej.
źródło
while(1)echo'/\\'[rand(0,1)];
.Python, 68
W kategorii „mój język jest do bani” mamy Python!
Dzięki Ivo za kilka znaków na temat importu i
choice
.źródło
> <> , 14 bajtów
Miałem nadzieję, że uda mi się ograniczyć do kwadratu 3 * 3, ale mi się nie udało.
Możesz spróbować tutaj .
źródło
Cubix , 12 bajtów
Zobacz w tłumaczu online!
Odwzorowuje to na następującą sieć kostek:
Wyjaśnienie
Ustawiać:
WI zaczyna się od wschodu
!
. Jest to polecenie „pomiń, jeśli jest prawdą”, które jest fałszem, gdy nic nie ma na stosie, więc żadne polecenia nie są pomijane."/\"
wchodzi w tryb string i dołącza te dwa kody znaków do stosu.B!o
jest tu w większości nie-op, tylko odwraca stos.IP powraca teraz do pierwszego
!
. Jednak na stosie są teraz dodatnie liczby całkowite, więc pierwsza"
jest pomijana. Oznacza to, że/
nie jest już postacią, ale lustrem, wysyłającym adres IP na północ do głównej pętli.Główna pętla:
The
D
Komenda jest źródłem tylko przypadkowości w Cubix. Wysyła adres IP w losowym kierunku. Blokując strzały na południe i wschód, upewniamy się, że IP ma 50% szansy na skierowanie się na północ i 50% szansy na skierowanie się na zachód.Jeśli kieruje się na zachód, stos jest odwracany. Jeśli leci na północ, drukowana jest górna postać.
Spowoduje to utworzenie losowej sekwencji ukośników, zgodnie z potrzebami.
źródło
PHP,
2631 bajtówosiemtrzech bajtów krótszych niż twój (bez spacji i nawiasów klamrowych),.dwa bajty krótsze niż rozwiązanie primo (bez znacznika)
PHP 5.4.9 była aktualną wersją w grudniu 1012, więc ...
wymaga PHP 5.5 lub nowszego do dosłownego indeksowania ciągów.Uruchom
-r
lub wypróbuj online .źródło
rand()&1
także kompilacji PHP dla Windows. Możesz być zaskoczony.SmileBASIC, 20 bajtów
źródło
PowerShell ,
108908654533736 bajtówWypróbuj online!
źródło
for
also makeswhile
a bit shorterJava 8,
60595453 bytes-1 byte thanks to @BenjaminUrquhart by replacing
print
withwrite
, so'/'
can be47
.Explanation:
Try it online (times out after 60 sec).
źródło
c->{for(;;)System.out.print(Math.random()<.5?'/':92);}
(54 bytes) Or did you mean Java 7 is longer than Java 8? In that case you are indeed correct.System.out.write
and replacing'/'
with47
JavaScript (Node.js),
595554 bytesOriginal Answer
-4 bytes thanks to manatwork
-1 byte thanks to Conor O'Brien
źródło
while(1)process.stdout.write(Math.random()<.5?"/":"\\")
.for(;;)
instead ofwhile(1)
I guess you can use recursion.
I guess you can use recursion.
źródło
chopped off one character:
then remove the curly braces:
another trick, with the same length:
źródło
rand()%2
will result in an alternation of0
s and1
s. Not incredibly random. You'd need to userand(0,1)
ormt_rand()%2
instead.Perl
This one looks funny for me :
(Sorry to be out of subject here. I know this is not PHP)
źródło
Powershell, 37 bytes
unfortunately there seem to be no shorter aliases for Write-Host that don't cause a new line after every char.
źródło
16-bit x86 assembly code, 10 bytes
I don't remember if this one ended up in the book.
źródło
Fission, 12 bytes
Try it online!
źródło
Perl 6, 23 bytes
loop
loops forever.<\ />
is a list of the strings\
and/
..pick
picks one of the two strings randomly..print
prints that random string.źródło
xx*