## Contest 44: Crazy Calculator

Online C++ programming contests.

Moderators: Darobat, RecursiveS, Dante Shamest, Bugdude, Wizard, raimo

Topic hijackers
while (true){sleep(28800);work(57600);}
"Free" as in speech is so much better than "free" as in beer.

gamma

Posts: 178
Joined: Mon Dec 01, 2003 9:16 am
Location: The Netherlands

Alvaro wrote:The guy that writes the problems for mathschallenge.net (let's call him Euler), has screwed up a couple of times, either proposing a problem with poor or incorrect wording, or introducing the wrong number as the answer. A few other members of the "100% club" and I offered our help with testing the problems before they are released.
Good thinking of you guys, I've also had some problems with his way of posing the problem.

Alvaro wrote:So, actually, I have already solved the three problems . I will probably send in the solutions one day after the problems are released.
That's fair, true sportmanship!

@Gamma: whoops, I'm shutting up now. And you still have time left to figure out how to loose those 4 tokens (or even more... ??), so use that time!
Togra

Posts: 188
Joined: Wed Jul 28, 2004 8:51 am
Location: NL

Damn, time limit exceeded. Stuck @ 103.
while (true){sleep(28800);work(57600);}
"Free" as in speech is so much better than "free" as in beer.

gamma

Posts: 178
Joined: Mon Dec 01, 2003 9:16 am
Location: The Netherlands

Ok I am pumped up now...What's the next contest

Darryl

Posts: 1342
Joined: Wed Sep 01, 2004 10:50 am
Location: Cayman Islands

Well, now that we've hit the time limit, here's my 117-token entry:
Code: Select all
`#include "fstream"main(){    int value=1, pos=31, op=1;    char grid[832];        std::ifstream f("input.txt");    while (f.getline(grid+op++*32, 32));        while (op)    {        int delta = "AAAAAAAAAAAAAAAAAAAAAAAAAAA `?A `?A `?A"[op]-64, g = grid[pos+=delta] - '0';        op<31 ? value*=g : value += op<35?g:-g;        op = "The quick brown fox jumps over a lazy dog. The quick brown fox jumps over a lazy dog. Out of spac\035  \036\000\041\040\042\043\045\044\046      \034\037  \033"[grid[pos+=delta]];    }    printf("%i\n", value);}`

Beer Hunter

Posts: 912
Joined: Sat Dec 13, 2003 7:12 pm
Location: Australia

Beer Hunter wrote:Well, now that we've hit the time limit, here's my 117-token entry:<snip>
I think you should have exploited the fact that globals are initialized at zero and that x - y == x + -y. Furthermore, the while loop can be one statement (comma operator).

One of my 103 solutions (I never that my code was understandable):[syntax="cpp"]#include "fstream"

char
* input = new char [1024];
int
num
,

main()
{
std::ifstream filein("input.txt");
while (filein.getline(input + 26 * num++, 26))
;

while (num)
num <= 40
?
*
//01 2 3 4 5 6 7 8 910 1 2 3 4 5 6 7 8 920 1 2 3 4 5 6 7 8 930 1 2 3 4 5 67 8 9 0
"\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\0\0\1\1\1\1.\377\377\377\377"[num]
:

// 0 1 2 3 3 4
// 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 67 8 9 0
input += "\0\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\0\0\1\32\377\346 \1\32\377\346 \1\32\377\346"
[
num = "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456\54bc\52\0\42\41\40\50\47\46\45mnopqr\53tuv\55xyz"
[*(input += "\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\0\0\1\32\377\346 \1\32\377\346 \1\32\377\346"[num])]
];

}[/syntax]Num is a code that translates a command like 's','l' into a number. The while loop consists of one statements, saving tokens on the parentheses.

This was my first 103 solution:[syntax="cpp"]#include "fstream"

char
* map = new char [1024]; // Should be enough. 26 * 26 = 676.
int
result,
val
;

//int
main()
{
std::ifstream file("input.txt");
while (file.getline(map + 26 * val++, 26));
while (*map - 'e')

val =
map["\0...............................................\0\0\0\0\0\0\0\0\0\0.......................................\377..\1.\377\32\1\346\377\32\1......\32\346..\346 "
[*map]] - '0'
,

"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\1\0\0\0"
[*map]
?
result *= val
:
result += val * "\1...............................................\1\1\1\1\1\1\1\1\1\1.......................................\377bc\377e\1\1\1\377\377\377\377mnopqrs\1uvwxyz"
[*map],
map += "\1...............................................\1\1\1\1\1\1\1\1\1\1.......................................\376bc\2e\376\64\2\314\376\64\2mnopqr\64\314uv\314xyz"
[*map];

printf("%d\n", result);
}
[/syntax]
while (true){sleep(28800);work(57600);}
"Free" as in speech is so much better than "free" as in beer.

gamma

Posts: 178
Joined: Mon Dec 01, 2003 9:16 am
Location: The Netherlands

My 112 token code:[syntax="cpp"]#include "fstream"
//TheInstructions: 32x32 array ([Row][Column]) of the instructions
//Cursor: Current offset into TheInstructions
//TheResult: The running total
//Operation: The selected operation (w,s,a,d,t,f,g,h,i,j,k,l)
//Temp: FileIO: Offset into TheInstructions Processing: The number (0-9)

int Cursor, TheResult, Operation = 'h', Temp;
char TheInstructions[1024];
main()
{
std::ifstream TheFile("input.txt");
while(TheFile.getline(TheInstructions+32*Temp++,32));
while(Operation != 'e')
Temp = TheInstructions[Cursor] - '0',
TheResult += "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x1\x1\x1\xFF\xFF\xFF\xFF\x0\x0\x0\x0\x0\x0\x0\x1\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0"[Operation]*Temp,
TheResult += TheResult*"\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x1\x0\x0\x1\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x1\x0\x0\x0\x1\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0"[Operation]*--Temp,
Cursor += "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xFF\x0\x0\x1\x0\xFF\x20\x1\xE0\xFF\x20\x1\x0\x0\x0\x0\x0\x0\x20\xE0\x0\x0\xE0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0"[Operation],
Cursor += "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xFF\x0\x0\x1\x0\xFF\x20\x1\xE0\xFF\x20\x1\x0\x0\x0\x0\x0\x0\x20\xE0\x0\x0\xE0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0"[Operation = TheInstructions[Cursor]];
printf("%i\n",TheResult);
}
[/syntax]And an entry in CorsixScript:[syntax="CorsixScript"]include "io.cxs" "string.cxs" "logic.cxs" "math.cxs"
fopen "input.txt" "r" \$if
set \$fd ""
section \$rl
set \$l ""
fscan \$if \$l
strlen \$l \$ll
lt \$ll 32 \$ne
if \$ne
call \$el
feof \$if \$ie
ifnot \$ie
jump \$rl
set \$c 0
set \$o 104
set \$r 0
set \$1 "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbcccaaaabbbbbbbcbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
set \$2 "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbcbbcbbbbbbbbbbbbbbcbbbcbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
set \$3 "TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTSTTUTStU4StUTTTTTTt4TT4TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT"
section \$m
eq \$o 101 \$ae
if \$ae
jump \$nd
getchar \$fd \$c \$t
sub \$t 48
getchar \$1 \$o \$tc
sub \$tc 98
set \$tn \$t
mul \$tn \$tc
sub \$t 1
getchar \$2 \$o \$tc
sub \$tc 98
mul \$tc \$t
mul \$tc \$r
getchar \$3 \$o \$tm
sub \$tm 84
getchar \$fd \$c \$o
getchar \$3 \$o \$tm
sub \$tm 84
jump \$m
section \$nd
print \$r
end
section \$el
strlen \$l \$ll
lt \$ll 32 \$ce
if \$ce
jump \$el
end[/syntax]
Last edited by Corsix on Mon Feb 21, 2005 9:20 am, edited 1 time in total.
Code: Select all
`#include <stdio.h>char*_="XxTIHRCXCxTIHRXRCxTIHXHRCxTIXIHRCxTXTIHRCxXxTIHRCX";int main(int l){for(l+=7;l!=putchar(010);++l);if(*(++_))main(*_!=88?(putchar(*_^073)|putchar(33))&1:0xffff2a8b);}`

Corsix

Posts: 1181
Joined: Fri Jul 23, 2004 9:33 am
Location: Berkeley, UK

Interesting code but I have no idea whats going on. Think anyone can try to explain?
Pests

Posts: 52
Joined: Thu Dec 11, 2003 5:28 pm

Previous