Portál AbcLinuxu, 10. května 2025 11:03

Dotaz: namnozeni radku

9.11.2005 22:02 zuza
namnozeni radku
Přečteno: 68×
Odpovědět | Admin
Mam radek textu obsahujici mimo jine 4mistne hexadecimalni cislo. Potrebuji ho namnozit 16384x. Tak, aby prvni obsahoval cislo 0000 a posledni FFFF. Lze to, nejlepe ve vimu, nejak jednoduse udelat? yy16383p je fajn, ale cisla mi neinkrementuje :)
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

9.11.2005 22:21 zabza | skóre: 52 | blog: Nad_sklenkou_cerveneho
Rozbalit Rozbalit vše Re: namnozeni radku
Odpovědět | | Sbalit | Link | Blokovat | Admin
for x in `seq 0 16383`; do printf '%04x\n' $x; done >/tmp/rada_hex_cisel

a pak :r /tmp/rada_hex_cisel ve vim-u...
9.11.2005 22:30 Jan Martinek | skóre: 43 | blog: johny | Brno
Rozbalit Rozbalit vše Re: namnozeni radku
Odpovědět | | Sbalit | Link | Blokovat | Admin
Ve vimu to neumím. Nevím, jestli rozumím zadání, ale třeba tohleto
#!/usr/bin/env python
N = 16384
i = 0
while i < N:
 print 'Toto je %04x. hexadecimalni cislo.'%i
 i = i + 1
vytvoří 16384 řádků s hexadecimálními čísly. První je 0000, ale poslední je 3fff. Opravdu má být poslední ffff?
9.11.2005 22:48 Jan Martinek | skóre: 43 | blog: johny | Brno
Rozbalit Rozbalit vše Re: namnozeni radku
Ajo, je pravda, že je rozumnější to poslat do souboru spíš než na standardní výstup. Takže lepší bude
#!/usr/bin/env python
N = 16384
i = 0
f  = open('/tmp/rada_hex_cisel', 'w')
while i < N:
 f.write('Toto je %04x. hexadecimalni cislo.\n'%i)
 i = i + 1
f.close()
Mimochodem, běží to cca 12x rychleji než ten skriptík v shellu.
9.11.2005 22:50 Michal Vyskočil | skóre: 60 | blog: miblog | Praha
Rozbalit Rozbalit vše Re: namnozeni radku
Není už jednodušší toto?
for i in xrange(0,16384):
    print "%04x" % (i)
Případně pro příznivce funkcionálního programování
def pr(i):  print "%04x" % (i)
map(pr , xrange(0,4))
When your hammer is C++, everything begins to look like a thumb.
9.11.2005 22:51 Michal Vyskočil | skóre: 60 | blog: miblog | Praha
Rozbalit Rozbalit vše Re: namnozeni radku
Patch :-)
- map(pr , xrange(0,4))
+ map(pr , xrange(0,16384))
When your hammer is C++, everything begins to look like a thumb.
9.11.2005 22:52 zabza | skóre: 52 | blog: Nad_sklenkou_cerveneho
Rozbalit Rozbalit vše Re: namnozeni radku
A to je co za jazyk? :-)
9.11.2005 23:02 Jan Martinek | skóre: 43 | blog: johny | Brno
Rozbalit Rozbalit vše Re: namnozeni radku
Jojo, máš pravdu, xrange() je lepší. Vychází mi, že prázdný cyklus je dokonce dvakrát rychlejší než pomocí while.
10.11.2005 14:57 Michal Vyskočil | skóre: 60 | blog: miblog | Praha
Rozbalit Rozbalit vše Re: namnozeni radku
Rychlejší, nerychlejší, hlavně když je to kratší ;-)

BTW: neměřil jsi náhodou rychlost range oproti xrange?
When your hammer is C++, everything begins to look like a thumb.
10.11.2005 15:19 Michal Vyskočil | skóre: 60 | blog: miblog | Praha
Rozbalit Rozbalit vše Re: namnozeni radku
$ time python -c "range(0,1000000)"

real    0m0.090s
user    0m0.056s
sys     0m0.032s

$ time python -c "xrange(0,1000000)"

real    0m0.018s
user    0m0.012s
sys     0m0.008s
Ale zajímavější je, že xrange generuje téměř stejně rychle i delší posloupnosti.
When your hammer is C++, everything begins to look like a thumb.
10.11.2005 15:53 alex
Rozbalit Rozbalit vše Re: namnozeni radku
$ time python -c 'for i in xrange(0,1000000):print "%05x"%i' > /dev/null

real    0m5.281s
user    0m5.280s
sys     0m0.010s
$ time perl -e 'for(0..1000000){printf"%05x\n",$_}' > /dev/null

real    0m1.200s
user    0m1.200s
sys     0m0.000s
10.11.2005 16:00 alex
Rozbalit Rozbalit vše Re: namnozeni radku
A pro uplnost:
$ time seq 1000000 | xargs printf "%05x\n" > /dev/null

real    0m1.996s
user    0m3.150s
sys     0m0.960s
10.11.2005 16:46 Michal Vyskočil | skóre: 60 | blog: miblog | Praha
Rozbalit Rozbalit vše Re: namnozeni radku
Mě šlo spíš o rychlost range vs xrange v Pythonu. Ale dík, nevěděl jsem, že je print v Pythonu tak pomalý. Ale ten shellový skript mi vyšel jinak.

$ bash --version
GNU bash, version 3.00.15(1)-release (i686-redhat-linux-gnu)
Copyright (C) 2004 Free Software Foundation, Inc.

$ time seq 1000000 | xargs printf "%05x\n" > /dev/null
printf: 1e+06: value not completely converted

real    0m3.046s
user    0m4.388s
sys     0m1.296s
When your hammer is C++, everything begins to look like a thumb.
10.11.2005 17:55 alex
Rozbalit Rozbalit vše Re: namnozeni radku
Tak tohle znamena, ze milion je natolik velke cislo, ze seq ho defaultne zobrazi jako 1e+06, coz se samozrejme printf s formatem %x nelibi. Musite upravit format, ve kterem seq tiskne cisla:
seq -f '%7.0f' 1000000 | xargs printf '%05x\n' 
(Bohuzel, seq neumi pracovat s celociselnymi formaty, jinak by se problem vyresil proste jako seq -f '%05x' 1000000).

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.