Merge pull request #204 from xexyl/1992-gson
Make 1992/gson not use gets() + update README.md
This commit is contained in:
4 files changed
+208
-197
No files matched your search
@@ -1,2 +1,2 @@
|
|||||||
gson
|
gson
|
||||||
og
|
ag
|
||||||
+2
-2
@@ -114,7 +114,7 @@ PROG= ${ENTRY}
|
|||||||
#
|
#
|
||||||
OBJ= ${PROG}.o
|
OBJ= ${PROG}.o
|
||||||
DATA=
|
DATA=
|
||||||
TARGET= ${PROG} og
|
TARGET= ${PROG} ag
|
||||||
#
|
#
|
||||||
ALT_OBJ=
|
ALT_OBJ=
|
||||||
ALT_TARGET=
|
ALT_TARGET=
|
||||||
@@ -134,7 +134,7 @@ all: data ${TARGET}
|
|||||||
${PROG}: ${PROG}.c
|
${PROG}: ${PROG}.c
|
||||||
${CC} ${CFLAGS} $< -o $@ ${LIBS}
|
${CC} ${CFLAGS} $< -o $@ ${LIBS}
|
||||||
|
|
||||||
og: ${PROG}
|
ag: ${PROG}
|
||||||
${RM} -f $@
|
${RM} -f $@
|
||||||
${LN} $< $@
|
${LN} $< $@
|
||||||
|
|
||||||
|
|||||||
+202
-191
@@ -10,21 +10,33 @@
|
|||||||
|
|
||||||
make all
|
make all
|
||||||
|
|
||||||
### To run
|
### To run:
|
||||||
|
|
||||||
./og word word2 word3 < /path/to/dictionary
|
./ag word word2 word3 < /path/to/dictionary
|
||||||
|
|
||||||
## Judges' comment
|
[Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson) fixed this entry to not
|
||||||
|
use gets(). Previously it had a buffer size of 256 which could easily overflow.
|
||||||
|
Now in this entry `gets()` is used in a more complicated way (first `m` is set
|
||||||
|
to `*++p` in a for loop where `p` is argv and then later `m` is set to point to
|
||||||
|
`h` which is of size 256) and trying to change it to use fgets() proved more a
|
||||||
|
problem. Since the input must come from the command line Cody changed the buffer
|
||||||
|
size to `ARG_MAX+1` which should be enough especially since the command expects
|
||||||
|
redirecting a dictionary file as part of the command line. This also makes it
|
||||||
|
possible for longer strings to be read (in case the `gets()` was not used in a
|
||||||
|
loop). Thank you Cody for your assistance!
|
||||||
|
|
||||||
Determine where your system dictionary is located. You may find
|
|
||||||
it located in one of the following places:
|
## Judges' comment:
|
||||||
|
|
||||||
|
Determine where your system dictionary is located. You may find
|
||||||
|
it located in one of the following places:
|
||||||
|
|
||||||
/usr/share/dict/words
|
/usr/share/dict/words
|
||||||
/usr/share/lib/spell/words
|
/usr/share/lib/spell/words
|
||||||
/usr/ucblib/dict/words
|
/usr/ucblib/dict/words
|
||||||
/dev/null # <-- for machines with nothing to say
|
/dev/null # <-- for machines with nothing to say
|
||||||
|
|
||||||
Then using the proper dictionary:
|
Then using the proper dictionary:
|
||||||
|
|
||||||
./ag free software foundation < /usr/share/dict/words
|
./ag free software foundation < /usr/share/dict/words
|
||||||
./ag obfuscated c contest < /usr/share/dict/words
|
./ag obfuscated c contest < /usr/share/dict/words
|
||||||
@@ -34,202 +46,201 @@
|
|||||||
./ag ross perot < /usr/share/dict/words
|
./ag ross perot < /usr/share/dict/words
|
||||||
./ag paul e tsongas < /usr/share/dict/words
|
./ag paul e tsongas < /usr/share/dict/words
|
||||||
|
|
||||||
Recently some newspapers printed amusing anagrams of one of the
|
Recently some newspapers printed amusing anagrams of one of the
|
||||||
names listed above. Run this program to find the anagrams they
|
names listed above. Run this program to find the anagrams they
|
||||||
weren't allowed to print!
|
weren't allowed to print!
|
||||||
|
|
||||||
## Author's comments
|
## Author's comments:
|
||||||
|
|
||||||
The name of the game:
|
The name of the game:
|
||||||
|
|
||||||
AG is short for either Anagram Generator or simply AnaGram.
|
AG is short for either Anagram Generator or simply AnaGram.
|
||||||
It might also be construed to mean Alphabet Game, and by pure
|
It might also be construed to mean Alphabet Game, and by pure
|
||||||
coincidence it happens to be the author's initials.
|
coincidence it happens to be the author's initials.
|
||||||
|
|
||||||
|
|
||||||
What it does:
|
### What it does:
|
||||||
|
|
||||||
AG takes one or more words as arguments, and tries to find
|
AG takes one or more words as arguments, and tries to find
|
||||||
anagrams of those words, i.e. words or sentences containing
|
anagrams of those words, i.e. words or sentences containing
|
||||||
exactly the same letters.
|
exactly the same letters.
|
||||||
|
|
||||||
|
|
||||||
How to use it:
|
### How to use it:
|
||||||
|
|
||||||
To run AG, you need a dictionary file consisting of distinct words
|
|
||||||
in the natural language of your choice, one word on each line. If
|
|
||||||
your machine doesn't have one already, you can make your own
|
|
||||||
dictionary by concatenating a few hundred of your favourite Usenet
|
|
||||||
articles and piping them through the following obfuscated shell
|
|
||||||
script:
|
|
||||||
|
|
||||||
|
To run AG, you need a dictionary file consisting of distinct words
|
||||||
|
in the natural language of your choice, one word on each line. If
|
||||||
|
your machine doesn't have one already, you can make your own
|
||||||
|
dictionary by concatenating a few hundred of your favourite Usenet
|
||||||
|
articles and piping them through the following obfuscated shell
|
||||||
|
script:
|
||||||
|
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
z=a-z];tr [A-Z\] \[$z|sed s/[\^$z[\^$z*/_/g|tr _ \\012|grep ..|sort -u
|
z=a-z];tr [A-Z\] \[$z|sed s/[\^$z[\^$z*/_/g|tr _ \\012|grep ..|sort -u
|
||||||
|
|
||||||
Using articles from alt.folklore.computers is likely to make
|
Using articles from alt.folklore.computers is likely to make
|
||||||
a more professional-looking dictionary than rec.arts.erotica.
|
a more professional-looking dictionary than rec.arts.erotica.
|
||||||
|
|
||||||
|
AG must be run with the dictionary file as standard input.
|
||||||
|
|
||||||
|
Because anagrams consisting of just a few words are generally more
|
||||||
|
meaningful than those consisting of dozens of very short words, the
|
||||||
|
number of words in the anagrams is limited to 3 by default. This
|
||||||
|
limit can be changed using a numeric command line option, as in
|
||||||
|
`./ag -4 international obfuscated c code contest </usr/dict/words`.
|
||||||
|
|
||||||
|
### Bugs:
|
||||||
|
|
||||||
AG must be run with the dictionary file as standard input.
|
- There is no error checking.
|
||||||
|
- Standard input must be seekable, so you can't pipe the dictionary into AG.
|
||||||
|
- The input sentence and each line in the dictionary may contain at most 32
|
||||||
|
distinct letters, and each letter may occur at most 15 times.
|
||||||
|
- Words in the dictionary may be at most 255 bytes long.
|
||||||
|
- AG cannot handle characters that sign-extend to negative values.
|
||||||
|
- Although AG works on both 16-bit and 32-bit machines, the size of the problems
|
||||||
|
it can solve is severely limited on machines that limit the stack size to 64k or
|
||||||
|
less.
|
||||||
|
|
||||||
|
|
||||||
|
### Obfuscatory notes:
|
||||||
|
|
||||||
Because anagrams consisting of just a few words are generally more
|
As you can see, AG takes advantage of the new '92 whitespace rules to
|
||||||
meaningful than those consisting of dozens of very short words, the
|
achieve a clear, readable, self-documenting layout. The identifiers
|
||||||
number of words in the anagrams is limited to 3 by default. This
|
have been chosen in a way appropriate for an alphabet game, and common
|
||||||
limit can be changed using a numeric command line option, as in
|
sources of bugs such as goto statements and malloc/free have been
|
||||||
"ag -4 international obfuscated c code contest </usr/dict/words".
|
eliminated. As AG also refrains from abusing the preprocessor, it
|
||||||
|
doesn't really have much to offer in terms of "surface obfuscation".
|
||||||
Bugs:
|
Instead, it tries to achieve both its speed and its obscurity through a
|
||||||
|
careful choice of algorithms. Some of the finer points of those
|
||||||
- There is no error checking
|
algorithms are outlined in the rot-13 encoded spoiler below.
|
||||||
- Standard input must be seekable, so you can't pipe the dictionary
|
|
||||||
into AG.
|
### How it works: (ROT13 to read)
|
||||||
- The input sentence and each line in the dictionary may contain
|
|
||||||
at most 32 distinct letters, and each letter may occur at most 15
|
|
||||||
times.
|
Urer sbyybjf n qrfpevcgvba bs fbzr bs gur qngn fgehpgherf naq
|
||||||
- Words in the dictionary may be at most 255 bytes long
|
nytbevguzf hfrq ol NT. Vg vf ol ab zrnaf pbzcyrgr, ohg vg znl uryc
|
||||||
- AG cannot handle characters that sign-extend to negative values
|
lbh trg na vqrn nobhg gur trareny cevapvcyrf.
|
||||||
- Although AG works on both 16-bit and 32-bit machines,
|
|
||||||
the size of the problems it can solve is severely limited
|
--
|
||||||
on machines that limit the stack size to 64k or less.
|
|
||||||
|
Vagreanyyl, NT ercerfragf jbeqf naq fragraprf nf neenlf bs 32
|
||||||
|
4-ovg vagrtre ryrzragf. Rnpu ryrzrag ercerfragf gur ahzore bs
|
||||||
Obfuscatory notes:
|
gvzrf n yrggre bpphef va gur jbeq/fragrapr. Gurer ner 32 ryrzragf
|
||||||
|
orpnhfr 32 vf n pbairavrag cbjre bs gjb ynetre guna gur ahzore bs
|
||||||
As you can see, AG takes advantage of the new '92 whitespace rules to
|
yrggref va zbfg jrfgrea nycunorgf, naq gur ryrzragf ner 4 ovgf
|
||||||
achieve a clear, readable, self-documenting layout. The identifiers
|
rnpu orpnhfr gur fnzr yrggre vf hayvxryl gb bpphe zber guna 15
|
||||||
have been chosen in a way appropriate for an alphabet game, and common
|
gvzrf va n cenpgvpny nantenz trarengvba ceboyrz.
|
||||||
sources of bugs such as goto statements and malloc/free have been
|
|
||||||
eliminated. As AG also refrains from abusing the preprocessor, it
|
Gurfr 32*4-ovg neenlf ner npghnyyl fgberq va zrzbel va n
|
||||||
doesn't really have much to offer in terms of "surface obfuscation".
|
"ovg-genafcbfrq" sbezng, nf neenlf bs sbhe "ybat" inyhrf. Vg vf
|
||||||
Instead, it tries to achieve both its speed and its obscurity through a
|
nffhzrq gung n "ybat" vf ng yrnfg 32 ovgf. Gur svefg 4-ovg yrggre
|
||||||
careful choice of algorithms. Some of the finer points of those
|
pbhag vf sbezrq ol gur yrnfg fvtavsvpnag (2^0) ovg va rnpu bs gur
|
||||||
algorithms are outlined in the rot-13 encoded spoiler below.
|
sbhe ybatf, gur arkg bar vf sbezrq ol gur 2^1 ovgf, rgp.
|
||||||
|
|
||||||
How it works: (ROT13 to read)
|
Guvf fgbentr sbezng znxrf vg cbffvoyr gb nqq be fhogenpg gjb fhpu
|
||||||
|
irpgbef bs 32 4-ovg inyhrf va cnenyyry ol fvzhyngvat n frg bs 32
|
||||||
Urer sbyybjf n qrfpevcgvba bs fbzr bs gur qngn fgehpgherf naq
|
ovanel shyy nqqref va fbsgjner hfvat ovgjvfr ybtvpny bcrengvbaf.
|
||||||
nytbevguzf hfrq ol NT. Vg vf ol ab zrnaf pbzcyrgr, ohg vg znl uryc
|
R.t., nyy gur YFO:f bs gur erfhyg ner sbezrq va cnenyyry ol gnxvat
|
||||||
lbh trg na vqrn nobhg gur trareny cevapvcyrf.
|
gur rkpyhfvir BE bs gur YFO:f va rnpu fhzznaq, naq 32 pneel ovgf
|
||||||
|
ner sbezrq va cnenyyry va n fvzvyne jnl hfvat n ybtvpny NAQ.
|
||||||
--
|
Guhf, 32 vaqrcraqrag 4-ovg nqqvgvbaf pna or cresbezrq ol whfg sbhe
|
||||||
|
vgrengvbaf bs n ybbc pbagnvavat fbzr 32-ovg ovgjvfr ybtvpny
|
||||||
Vagreanyyl, NT ercerfragf jbeqf naq fragraprf nf neenlf bs 32
|
bcrengvbaf, ohg ab nevguzrgvp bcrengvbaf bgure guna gubfr vzcyvrq
|
||||||
4-ovg vagrtre ryrzragf. Rnpu ryrzrag ercerfragf gur ahzore bs
|
ol neenl vaqrkvat.
|
||||||
gvzrf n yrggre bpphef va gur jbeq/fragrapr. Gurer ner 32 ryrzragf
|
|
||||||
orpnhfr 32 vf n pbairavrag cbjre bs gjb ynetre guna gur ahzore bs
|
Fhogenpgvba jbexf fvzvyneyl, naq va snpg NT bayl vzcyrzragf
|
||||||
yrggref va zbfg jrfgrea nycunorgf, naq gur ryrzragf ner 4 ovgf
|
fhogenpgvba qverpgyl, unaqyvat nqqvgvba ol zrnaf bs gur vqragvgl
|
||||||
rnpu orpnhfr gur fnzr yrggre vf hayvxryl gb bpphe zber guna 15
|
n+o = n-(0-o).
|
||||||
gvzrf va n cenpgvpny nantenz trarengvba ceboyrz.
|
|
||||||
|
Va nqqvgvba gb guvf 32*4-ovg ercerfragngvba, NT nyfb sbezf n fb-pnyyrq
|
||||||
Gurfr 32*4-ovg neenlf ner npghnyyl fgberq va zrzbel va n
|
"fvtangher" gung vf gur ovgjvfr BE bs gur sbhe ybatf, juvpu vf
|
||||||
"ovg-genafcbfrq" sbezng, nf neenlf bs sbhe "ybat" inyhrf. Vg vf
|
rdhvinyrag gb fnlvat gung gur fvtangher bs n jbeq pbagnvaf n ybtvpny 1
|
||||||
nffhzrq gung n "ybat" vf ng yrnfg 32 ovgf. Gur svefg 4-ovg yrggre
|
va gur ovg cbfvgvbaf pbeerfcbaqvat gb yrggref bppheevat ng yrnfg bapr
|
||||||
pbhag vf sbezrq ol gur yrnfg fvtavsvpnag (2^0) ovg va rnpu bs gur
|
va gung jbeq.
|
||||||
sbhe ybatf, gur arkg bar vf sbezrq ol gur 2^1 ovgf, rgp.
|
|
||||||
|
Gur svefg guvat NT qbrf vf gb pbafgehpg n ybbxhc gnoyr bs 256
|
||||||
Guvf fgbentr sbezng znxrf vg cbffvoyr gb nqq be fhogenpg gjb fhpu
|
ybatf, bar sbe rnpu 8-ovg punenpgre inyhr. Gur ragel sbe n
|
||||||
irpgbef bs 32 4-ovg inyhrf va cnenyyry ol fvzhyngvat n frg bs 32
|
punenpgre jvyy or mreb vs gung punenpgre qbrfa'g nccrne va gur
|
||||||
ovanel shyy nqqref va fbsgjner hfvat ovgjvfr ybtvpny bcrengvbaf.
|
fragrapr tvira ba gur pbzznaq yvar, be vg jvyy unir n fvatyr ovg
|
||||||
R.t., nyy gur YFO:f bs gur erfhyg ner sbezrq va cnenyyry ol gnxvat
|
frg vs gur punenpgre qbrf nccrne va gur fragrapr. Ol nqqvat
|
||||||
gur rkpyhfvir BE bs gur YFO:f va rnpu fhzznaq, naq 32 pneel ovgf
|
gbtrgure gur ovg znfxf sbe nyy gur yrggref va gur vachg fragrapr
|
||||||
ner sbezrq va cnenyyry va n fvzvyne jnl hfvat n ybtvpny NAQ.
|
hfvat gur genafcbfr nqqvgvba zrgubq qrfpevorq nobir, NT sbezf gur
|
||||||
Guhf, 32 vaqrcraqrag 4-ovg nqqvgvbaf pna or cresbezrq ol whfg sbhe
|
32*4 ovg neenl ercerfragngvba bs gur vachg fragrapr.
|
||||||
vgrengvbaf bs n ybbc pbagnvavat fbzr 32-ovg ovgjvfr ybtvpny
|
|
||||||
bcrengvbaf, ohg ab nevguzrgvp bcrengvbaf bgure guna gubfr vzcyvrq
|
Gur arkg npgvba cresbezrq vf ernqvat gur qvpgvbanel. Gubfr jbeqf gung
|
||||||
ol neenl vaqrkvat.
|
pbagnva yrggref abg va gur vachg fragrapr ner vzzrqvngryl qvfpneqrq.
|
||||||
|
Jbeqf pbagnvavat gur evtug yrggref ohg va rkprffvir ahzoref ner
|
||||||
Fhogenpgvba jbexf fvzvyneyl, naq va snpg NT bayl vzcyrzragf
|
ryvzvangrq va n frcnengr purpx vaibyivat gur 32*4 ovg neenl.
|
||||||
fhogenpgvba qverpgyl, unaqyvat nqqvgvba ol zrnaf bs gur vqragvgl
|
|
||||||
n+o = n-(0-o).
|
Gur erznvavat jbeqf, juvpu jvyy or ersreerq gb nf "pnaqvqngr jbeqf",
|
||||||
|
ner fgberq va 32*4-ovg ercerfragngvba, gbtrgure jvgu gurve fvtangherf
|
||||||
Va nqqvgvba gb guvf 32*4-ovg ercerfragngvba, NT nyfb sbezf n fb-pnyyrq
|
naq bssfrgf vagb gur qvpgvbanel svyr fb gung gur cynva-grkg irefvba bs
|
||||||
"fvtangher" gung vf gur ovgjvfr BE bs gur sbhe ybatf, juvpu vf
|
n jbeq pna yngre or sbhaq sbe cevagvat. Guvf vasbezngvba vf xrcg va n
|
||||||
rdhvinyrag gb fnlvat gung gur fvtangher bs n jbeq pbagnvaf n ybtvpny 1
|
ybpny "fgehpg" va gur qvpgvbanel-ernqvat shapgvba, naq zrzbel vf
|
||||||
va gur ovg cbfvgvbaf pbeerfcbaqvat gb yrggref bppheevat ng yrnfg bapr
|
nyybpngrq sbe rnpu pnaqvqngr jbeq fvzcyl ol znxvat nabgure erphefvir
|
||||||
va gung jbeq.
|
pnyy gb gung shapgvba.
|
||||||
|
|
||||||
Gur svefg guvat NT qbrf vf gb pbafgehpg n ybbxhc gnoyr bs 256
|
Rnpu fgehpg fb nyybpngrq vf yvaxrq vagb n svkrq-fvmr unfu gnoyr bs
|
||||||
ybatf, bar sbe rnpu 8-ovg punenpgre inyhr. Gur ragel sbe n
|
4096 ragevrf vaqrkrq ol gur 12 ybj ovgf bs gur jbeq'f fvtangher.
|
||||||
punenpgre jvyy or mreb vs gung punenpgre qbrfa'g nccrne va gur
|
Jura gur qvpgvbanel-ernqvat shapgvba rapbhagref raq-bs-svyr, nyy gur
|
||||||
fragrapr tvira ba gur pbzznaq yvar, be vg jvyy unir n fvatyr ovg
|
pnaqvqngr jbeqf unir orra fgberq va arfgrq npgvingvba erpbeqf ba gur
|
||||||
frg vs gur punenpgre qbrf nccrne va gur fragrapr. Ol nqqvat
|
fgnpx, npprffvoyr guebhtu gur unfu gnoyr.
|
||||||
gbtrgure gur ovg znfxf sbe nyy gur yrggref va gur vachg fragrapr
|
|
||||||
hfvat gur genafcbfr nqqvgvba zrgubq qrfpevorq nobir, NT sbezf gur
|
Trarengvat gur nantenzf vf gura qbar ol genirefvat gur unfu gnoyr naq
|
||||||
32*4 ovg neenl ercerfragngvba bs gur vachg fragrapr.
|
fhogenpgvat gur yrggref bs rnpu jbeq va gur unfu gnoyr sebz gur
|
||||||
|
"pheerag fragrapr", juvpu vavgvnyyl vf gur fragrapr tvira ba gur
|
||||||
Gur arkg npgvba cresbezrq vf ernqvat gur qvpgvbanel. Gubfr jbeqf gung
|
pbzznaq yvar.
|
||||||
pbagnva yrggref abg va gur vachg fragrapr ner vzzrqvngryl qvfpneqrq.
|
|
||||||
Jbeqf pbagnvavat gur evtug yrggref ohg va rkprffvir ahzoref ner
|
Gur fhogenpgvba vf cresbezrq va cnenyyry ba gur 4-ovg yrggre pbhagf
|
||||||
ryvzvangrq va n frcnengr purpx vaibyivat gur 32*4 ovg neenl.
|
nf qrfpevorq nobir, naq vs nyy 32 erfhygf ner mreb, na nantenz unf
|
||||||
|
orra sbhaq. Vs gur erfhyg vf artngvir sbe bar be zber bs gur yrggref
|
||||||
Gur erznvavat jbeqf, juvpu jvyy or ersreerq gb nf "pnaqvqngr jbeqf",
|
(nf vaqvpngrq ol bar be zber "1" va n irpgbe bs 32 obeebj ovgf
|
||||||
ner fgberq va 32*4-ovg ercerfragngvba, gbtrgure jvgu gurve fvtangherf
|
erghearq ol gur fhogenpgvba ebhgvar), gur jbeq qvq abg zngpu gur
|
||||||
naq bssfrgf vagb gur qvpgvbanel svyr fb gung gur cynva-grkg irefvba bs
|
pheerag fragrapr naq vf vtaberq. Svanyyl, vs gur erfhyg pbagnvarq
|
||||||
n jbeq pna yngre or sbhaq sbe cevagvat. Guvf vasbezngvba vf xrcg va n
|
bayl abaartngvir yrggre pbhagf, jr unir sbhaq n cnegvny nantenz:
|
||||||
ybpny "fgehpg" va gur qvpgvbanel-ernqvat shapgvba, naq zrzbel vf
|
n jbeq pbagnvavat fbzr, ohg abg nyy, bs gur yrggref va gur pheerag
|
||||||
nyybpngrq sbe rnpu pnaqvqngr jbeq fvzcyl ol znxvat nabgure erphefvir
|
fragrapr. Va guvf pnfr jr erphefviryl gel gb svaq na nantenz bs gur
|
||||||
pnyy gb gung shapgvba.
|
erznvavat yrggref. Gur qrcgu bs gur erphefvba vf yvzvgrq gb gur
|
||||||
|
znkvzhz ahzore bs jbeqf va gur nantenz, nf fcrpvsvrq ol gur hfre.
|
||||||
Rnpu fgehpg fb nyybpngrq vf yvaxrq vagb n svkrq-fvmr unfu gnoyr bs
|
|
||||||
4096 ragevrf vaqrkrq ol gur 12 ybj ovgf bs gur jbeq'f fvtangher.
|
Jura gur qrrcrfg erphefvba yriry unf orra ernpurq, na bcgvzvmngvba pna
|
||||||
Jura gur qvpgvbanel-ernqvat shapgvba rapbhagref raq-bs-svyr, nyy gur
|
or nccyvrq: orpnhfr ab shegure erphefvba jvyy or qbar, gurer vf ab
|
||||||
pnaqvqngr jbeqf unir orra fgberq va arfgrq npgvingvba erpbeqf ba gur
|
arrq gb ybbx sbe cnegvny nantenzf, naq gurersber NT bayl arrqf gb
|
||||||
fgnpx, npprffvoyr guebhtu gur unfu gnoyr.
|
purpx sbe jbeqf gung pbagnva rknpgyl gur fnzr yrggref nf gur pheerag
|
||||||
|
fragrapr. Gubfr jbeqf pna or sbhaq fvzcyl ol vaqrkvat gur unfu gnoyr
|
||||||
Trarengvat gur nantenzf vf gura qbar ol genirefvat gur unfu gnoyr naq
|
jvgu gur fvtangher bs gur pheerag fragrapr.
|
||||||
fhogenpgvat gur yrggref bs rnpu jbeq va gur unfu gnoyr sebz gur
|
|
||||||
"pheerag fragrapr", juvpu vavgvnyyl vf gur fragrapr tvira ba gur
|
Rira jura abg ba gur qrrcrfg erphefvba yriry, NT trarenyyl nibvqf
|
||||||
pbzznaq yvar.
|
rknzvavat nyy gur ragevrf bs gur unfu gnoyr. Gur vqrn vf gung jr ner
|
||||||
|
abg vagrerfgrq va unfu ohpxrgf jubfr jbeqf pbagnva nal yrggref abg
|
||||||
Gur fhogenpgvba vf cresbezrq va cnenyyry ba gur 4-ovg yrggre pbhagf
|
va gur pheerag fragrapr; gurfr ohpxrgf ner rknpgyl gubfr jubfr vaqrk
|
||||||
nf qrfpevorq nobir, naq vs nyy 32 erfhygf ner mreb, na nantenz unf
|
unf n ybtvpny bar va n ovg cbfvgvba jurer gur fvtangher bs gur pheerag
|
||||||
orra sbhaq. Vs gur erfhyg vf artngvir sbe bar be zber bs gur yrggref
|
fragrapr unf n mreb. Chg nabgure jnl, jr jnag gb ybbc guebhtu bayl
|
||||||
(nf vaqvpngrq ol bar be zber "1" va n irpgbe bs 32 obeebj ovgf
|
gubfr unfu ohpxrg vaqvprf "v" gung pbagnva mrebrf va nyy gur ovg
|
||||||
erghearq ol gur fhogenpgvba ebhgvar), gur jbeq qvq abg zngpu gur
|
cbfvgvbaf jurer gur fvtangher "f" bs gur pheerag fragrapr pbagnvaf
|
||||||
pheerag fragrapr naq vf vtaberq. Svanyyl, vs gur erfhyg pbagnvarq
|
n mreb; guvf pna or rkcerffrq va P nf (v & ~f == 0).
|
||||||
bayl abaartngvir yrggre pbhagf, jr unir sbhaq n cnegvny nantenz:
|
|
||||||
n jbeq pbagnvavat fbzr, ohg abg nyy, bs gur yrggref va gur pheerag
|
Vg vf cbffvoyr gb ybbc guebhtu nyy fhpu ahzoref va na rssvpvrag jnl ol
|
||||||
fragrapr. Va guvf pnfr jr erphefviryl gel gb svaq na nantenz bs gur
|
gnxvat nqinagntr bs pregnva cebcregvrf bs ovanel nevguzrgvp: ol
|
||||||
erznvavat yrggref. Gur qrcgu bs gur erphefvba vf yvzvgrq gb gur
|
sbepvat gur ovgf pbeerfcbaqvat gb mrebrf va "f" gb barf, jr pna znxr
|
||||||
znkvzhz ahzore bs jbeqf va gur nantenz, nf fcrpvsvrq ol gur hfre.
|
gur pneevrf trarengrq va vaperzragvat "v" cebcntngr fgenvtug npebff
|
||||||
|
gubfr ovgf gung fubhyq erznva mreb. Sbe rknzcyr, gur sbyybjvat
|
||||||
Jura gur qrrcrfg erphefvba yriry unf orra ernpurq, na bcgvzvmngvba pna
|
cebtenz cevagf nyy gubfr 16-ovg vagrtref gung pbagnva mrebrf va nyy
|
||||||
or nccyvrq: orpnhfr ab shegure erphefvba jvyy or qbar, gurer vf ab
|
rira ovg cbfvgvbaf:
|
||||||
arrq gb ybbx sbe cnegvny nantenzf, naq gurersber NT bayl arrqf gb
|
|
||||||
purpx sbe jbeqf gung pbagnva rknpgyl gur fnzr yrggref nf gur pheerag
|
znva(){vag v=0,f=0kNNNN;qb{cevags("%04k\g",v);}juvyr(v=((v|~f)+1)&f);}
|
||||||
fragrapr. Gubfr jbeqf pna or sbhaq fvzcyl ol vaqrkvat gur unfu gnoyr
|
|
||||||
jvgu gur fvtangher bs gur pheerag fragrapr.
|
NT hfrf n fvzvyne zrgubq ohg jbexf va gur bccbfvgr qverpgvba, svaqvat
|
||||||
|
gur arkg ybjre inyhr jvgu mrebrf va tvira ovg cbfvgvbaf ol cebcntngvat
|
||||||
Rira jura abg ba gur qrrcrfg erphefvba yriry, NT trarenyyl nibvqf
|
obeebjf npebff gubfr ovgf. Fbzr nqqvgvbany nqwhfgzragf ner znqr
|
||||||
rknzvavat nyy gur ragevrf bs gur unfu gnoyr. Gur vqrn vf gung jr ner
|
gb gur unfu gnoyr vaqrk jura vavgvngvat n erphefvir frnepu, hfvat
|
||||||
abg vagrerfgrq va unfu ohpxrgf jubfr jbeqf pbagnva nal yrggref abg
|
fvzvyne ovg-gjvqqyvat grpuavdhrf.
|
||||||
va gur pheerag fragrapr; gurfr ohpxrgf ner rknpgyl gubfr jubfr vaqrk
|
|
||||||
unf n ybtvpny bar va n ovg cbfvgvba jurer gur fvtangher bs gur pheerag
|
Jurarire na nantenz unf orra sbhaq, vg vf cevagrq ol genirefvat n
|
||||||
fragrapr unf n mreb. Chg nabgure jnl, jr jnag gb ybbc guebhtu bayl
|
yvaxrq yvfg sbezrq ol fgehpgf va gur npgvingvba erpbeqf bs gur
|
||||||
gubfr unfu ohpxrg vaqvprf "v" gung pbagnva mrebrf va nyy gur ovg
|
erphefvir vaibpngvbaf bs gur frnepu shapgvba, frrxvat gb gur ortvaavat
|
||||||
cbfvgvbaf jurer gur fvtangher "f" bs gur pheerag fragrapr pbagnvaf
|
bs gur jbeq zngpurq ol gung vaibpngvba, naq pbclvat gur punenpgref bs
|
||||||
n mreb; guvf pna or rkcerffrq va P nf (v & ~f == 0).
|
gur jbeq qverpgyl sebz fgnaqneq vachg gb fgnaqneq bhgchg.
|
||||||
|
|
||||||
Vg vf cbffvoyr gb ybbc guebhtu nyy fhpu ahzoref va na rssvpvrag jnl ol
|
|
||||||
gnxvat nqinagntr bs pregnva cebcregvrf bs ovanel nevguzrgvp: ol
|
|
||||||
sbepvat gur ovgf pbeerfcbaqvat gb mrebrf va "f" gb barf, jr pna znxr
|
|
||||||
gur pneevrf trarengrq va vaperzragvat "v" cebcntngr fgenvtug npebff
|
|
||||||
gubfr ovgf gung fubhyq erznva mreb. Sbe rknzcyr, gur sbyybjvat
|
|
||||||
cebtenz cevagf nyy gubfr 16-ovg vagrtref gung pbagnva mrebrf va nyy
|
|
||||||
rira ovg cbfvgvbaf:
|
|
||||||
|
|
||||||
znva(){vag v=0,f=0kNNNN;qb{cevags("%04k\g",v);}juvyr(v=((v|~f)+1)&f);}
|
|
||||||
|
|
||||||
NT hfrf n fvzvyne zrgubq ohg jbexf va gur bccbfvgr qverpgvba, svaqvat
|
|
||||||
gur arkg ybjre inyhr jvgu mrebrf va tvira ovg cbfvgvbaf ol cebcntngvat
|
|
||||||
obeebjf npebff gubfr ovgf. Fbzr nqqvgvbany nqwhfgzragf ner znqr
|
|
||||||
gb gur unfu gnoyr vaqrk jura vavgvngvat n erphefvir frnepu, hfvat
|
|
||||||
fvzvyne ovg-gjvqqyvat grpuavdhrf.
|
|
||||||
|
|
||||||
Jurarire na nantenz unf orra sbhaq, vg vf cevagrq ol genirefvat n
|
|
||||||
yvaxrq yvfg sbezrq ol fgehpgf va gur npgvingvba erpbeqf bs gur
|
|
||||||
erphefvir vaibpngvbaf bs gur frnepu shapgvba, frrxvat gb gur ortvaavat
|
|
||||||
bs gur jbeq zngpurq ol gung vaibpngvba, naq pbclvat gur punenpgref bs
|
|
||||||
gur jbeq qverpgyl sebz fgnaqneq vachg gb fgnaqneq bhgchg.
|
|
||||||
|
|
||||||
## Copyright and CC BY-SA 4.0 License:
|
## Copyright and CC BY-SA 4.0 License:
|
||||||
|
|
||||||
|
|||||||
+3
-3
@@ -1,12 +1,12 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <limits.h>
|
||||||
long a
|
long a
|
||||||
[4],b[
|
[4],b[
|
||||||
4],c[4]
|
4],c[4]
|
||||||
,d[0400],e=1;
|
,d[0400],e=1;
|
||||||
typedef struct f{long g
|
typedef struct f{long g
|
||||||
,h,i[4] ,j;struct f*k;}f;f g,*
|
,h,i[4] ,j;struct f*k;}f;f g,*
|
||||||
l[4096 ]; char h[256],*m,k=3;
|
l[4096 ]; char h[ARG_MAX+1],*m,k=3;
|
||||||
long n (o, p,q)long*o,*p,*q;{
|
long n (o, p,q)long*o,*p,*q;{
|
||||||
long r =4,s,i=0;for(;r--;s=i^
|
long r =4,s,i=0;for(;r--;s=i^
|
||||||
*o^*p, i=i&*p|(i|*p)&~*o++,*q
|
*o^*p, i=i&*p|(i|*p)&~*o++,*q
|
||||||
@@ -33,7 +33,7 @@ s,i=o->h;q.k=o;r>i?j=l[r=i]:r<i&&
|
|||||||
j;char *z,*p;
|
j;char *z,*p;
|
||||||
for(;m ? j.j=
|
for(;m ? j.j=
|
||||||
ftell( stdin)
|
ftell( stdin)
|
||||||
,7,(m= gets(m ))||w(
|
,7,(m= gets(m ))||w(
|
||||||
&g,315 *13,l[ 4095]
|
&g,315 *13,l[ 4095]
|
||||||
,k,64* 64)&0: 0;n(g
|
,k,64* 64)&0: 0;n(g
|
||||||
.i,j.i, b)||(u (&j),j.
|
.i,j.i, b)||(u (&j),j.
|
||||||
|
|||||||
Reference in new issue
Block a user