- log69 blogja
- A hozzászóláshoz be kell jelentkezni
- 1200 megtekintés
Hozzászólások
Ez egy hosszú csík \-ből és /-ből. pl. (\//\\/////\\\\\/\/\\\///\/\\\)
Hogyan kell ezt elképzelni labirintusnak?
- A hozzászóláshoz be kell jelentkezni
Printelj sokat terminálba úgy, hogy sok sorba átmenjen, és meglátod ;) Habár igaz hogy a C64-es karakter készleten szemléletesebb volt kicsit.
- A hozzászóláshoz be kell jelentkezni
Maradjunk a 80x24-es terminálnál, ez lenne a megfelelő? (Sose Rubyztam)
24.times{80.times{ ... } }
=====
tl;dr
Egy-két mondatban leírnátok, hogy lehet ellopni egy bitcoin-t?
- A hozzászóláshoz be kell jelentkezni
Nem kell semmi ilyen trükk, próbáld ki ;) Csak nyomd tele a képernyőt véletlen / vagy \ karakterrel, akár programozd le más nyelven. Bedobhatnád ide Bash-ben, enpassant meg Scala-ban mondjuk funkciónálisan ;)
Szívesen megnéznék sok más nyelvet is minél tömörebben..
- A hozzászóláshoz be kell jelentkezni
Feltételezed, hogy a terminálon érvényben van a wrap-around. Tapasztalati úton én meg nem :-) Amúgy egy nem túl rövid (és legalább ronda) ksh/bash/POSIX-sh-beli megvalósítás:
i=0 ; while (( i < 24 )) ; do j=0 ; while (( j < 80 )) ; do (( RANDOM % 2 )) && printf / || printf \\ ; (( j++ )) ; done ; echo ; (( i++ )) ; done
Akárhogy erőltetem a ?: operátort, nem bírom rábeszélni, hogy karaktert is elfogadjon az igaz/hamis ágban. Amúgy ha valóban van wrap-around, akkor persze egyszerűbb a dolog:
while : ; do (( RANDOM % 2 )) && printf / || printf \\ ; done
Mondjuk a tiedhez ez hasonlít jobban (hosszban is).
=====
tl;dr
Egy-két mondatban leírnátok, hogy lehet ellopni egy bitcoin-t?
- A hozzászóláshoz be kell jelentkezni
Nem rossz. Perl vajon hogy nézne ki?
Itt van tőlem egy HTML5 verzió:
Itt megtekinthető (oldal frissítésre újra generál):
- A hozzászóláshoz be kell jelentkezni
pl:
perl -e 'print (rand() < 0.5 ? "\\" : "/") while(1)'
- A hozzászóláshoz be kell jelentkezni
Ebben nincsenek elágazások (vagy meghaló utak).
- A hozzászóláshoz be kell jelentkezni
Alap "funkcionális" megoldás, bár a print és a foreach miatt nem teljesen az:
(1 to 2000).foreach(i => print(if (util.Random.nextDouble < 0.5) "╲" else "╱"))
Alap imperatív egy kicsit rövidebb:
for (i <- 1 to 2000) print(if (util.Random.nextDouble < 0.5) "╲" else "╱")
Két függvény definíció segítségével lehet a ruby-hoz hasonlót csinálni:
def rand = util.Random.nextDouble
def times(n: Int)(fn: => Unit) = for (i <- 1 to n) fn
times(2000) { print(if (rand < 0.5) "╲" else "╱") }
Vagy csúnya implicit-tel még hasonlóbbat:
def rand = util.Random.nextDouble
implicit def intTimes(i: Int) = new {
def times(fn: => Unit) = (1 to i) foreach (x => fn)
}
2000 times { print(if (rand < 0.5) "╲" else "╱") }
Itt egy stream-es megoldás, még ez a legfunkcionálisabb:
def wallStream: Stream[String] = Stream.cons(if (util.Random.nextDouble < 0.5) "╲" else "╱", wallStream)
wallStream.take(2000).foreach(print)
Kicseréltem mindenhol szép (végigérő) karakterekre. Így már tényleg hasonlít labirintusra.
Szerk.: no még a végére egy keveréses megoldás:
util.Random.shuffle(List.fill(1000)("╲") ++ List.fill(1000)("╱")).foreach(print)
- A hozzászóláshoz be kell jelentkezni
Tetszik.
- A hozzászóláshoz be kell jelentkezni
Nem biztos, hogy a leghatékonyabb megoldás, de...
Stream.continually(util.Random.nextPrintableChar)
.filter(c => c == '/' || c == '\\')
.take(2000)
.foreach(print)
- A hozzászóláshoz be kell jelentkezni
:)
A leglassabb megoldás címéért folyó versenyben biztosan előkelő helyen végezne! Az is elképzelhető, hogy örökké fut ;)
Illetve, ha a "szép" karaktereket (╲, ╱) akarod kiírni, akkor még egy átalakítás is kellene:
Stream.continually(util.Random.nextPrintableChar)
.filter(c => c == '/' || c == '\\')
.map(_ match { case '\\' => '╲'; case '/' => '╱' })
.take(2000)
.foreach(print)
A fenti kicsit hatékonyabb átírata:
Stream.continually(Vector("╲", "╱")(util.Random.nextInt(2)))
.take(2000)
.foreach(print)
Vagy egy még hatékonyabb és szebb, de nem egysoros átirata:
val walls = Vector("╲", "╱")
def randomWall = walls(util.Random.nextInt(walls.size))
Stream.continually(randomWall)
.take(2000)
.foreach(print)
- A hozzászóláshoz be kell jelentkezni
Örökké futHAT! :) Egy smiley mindenesetre lemaradt a comment végéről.
- A hozzászóláshoz be kell jelentkezni
"Egy smiley mindenesetre lemaradt a comment végéről."
Így is értettem a viccet! :)
- A hozzászóláshoz be kell jelentkezni
Hol van a hely a csillag karakternek a perek kozott hogy mozogjon ?
Mintha C64 -is lettek volna normalis rajzolo karakterek.
https://en.wikipedia.org/wiki/PETSCII
Amit nem lehet megirni assemblyben, azt nem lehet megirni.
- A hozzászóláshoz be kell jelentkezni
Most látom, hogy a string unescape-elést kifelejtettem az RBASIC release-ből. A következőben fixálom. Akkor működni fog ez a program:
for i=1 to 50
for j=1 to 50
if rand<0.5 then
print("\\");
else
print("/");
end if
next j
print ""
next i
- A hozzászóláshoz be kell jelentkezni
:)
- A hozzászóláshoz be kell jelentkezni
Python 3-ban:
import random
for sor in ( (random.choice('\/') for i in range(100)) for k in range(100) ): print( ''.join(sor))
________________________________________
https://sites.google.com/site/eutlantis/
- A hozzászóláshoz be kell jelentkezni
R pelda kod az algoritmusra:
cat(sample(c('\\', '/'), 1e3, replace = TRUE))
Ha a karakterek szama lenyeges, akkor a 3. argumentum lerovidiheto :)
cat(sample(c('\\','/'),1e3,1))
- A hozzászóláshoz be kell jelentkezni