Hakowanie proszków do pieczenia gellwe

0

Ogólnie niezła faza. Wygląda to tak:

Przed świętami moja matka nakupiła proszków do pieczenia w wiadomym celu. Na opakowaniach była promocja, która polegała na tym, że:

  • była kwota
  • kwoty z różnych opakowań należy sumować
  • jak uzbierasz sumę spełniającą warunek: x%1000==0 && x>=1000 && x<=10000 (oczywiście na opakowaniu było to napisane po ludzku), to tyle wygrywasz.
  • promocja trwa chyba do początku marca. nie jestem pewien, teraz nie mam z sobą żadnego opakowania.

Postanowiłem napisać program sprawdzający czy coś wygrałem. Program pobiera z pliku wejściowego kwoty z opakowań (ostatnia to 0 - warunek stopu), na wyjściu wypisuje czy coś wygrałem. Jeśli nic nie wygrałem, to do pliku necessary.txt zapisuje wszystkie kwoty, z których TYLKO JEDNA wystarczy do wygrania nagrody. W nawiasach klamrowych napisane jaka (jakie) to będą kwoty.

Kody programu:


//code_finder.h

#ifndef _CODE_FINDER_
#define _CODE_FINDER_

#include <vector>

class CodeFinder
{
	public:
		CodeFinder() ;
		virtual ~CodeFinder() ;
		
		virtual void findWins() ;
		
		unsigned getNumberOfWins() ;
		std::vector<unsigned> &getWin(unsigned index) ;
		
		virtual void add(unsigned val) ;
		
		unsigned getWinsForNecessary(unsigned index) ;
		bool isWinOfNecessary(unsigned nec, unsigned value) ;
	protected:
		typedef std::vector<unsigned> ValueType ;
		
		ValueType values ;
		unsigned necessary[10000] ;
		
		void addWin(ValueType &winVec) ;
		bool isWin(long unsigned value) ;
		bool isTooBig(long unsigned value) ;
		virtual void find(std::vector<unsigned> &vec, long unsigned sum, unsigned index, unsigned depth)=0;
		int getNecessaryToWin(unsigned expected, unsigned value) ;
		void addNecessaryToWin(unsigned nec, unsigned sum) ;
	private:
		std::vector<ValueType> wins ;
};

inline unsigned CodeFinder::getWinsForNecessary(unsigned needed) 
{
	return necessary[needed] ;
}

inline int CodeFinder::getNecessaryToWin(unsigned expected, unsigned value) 
{
	return expected-value ;
}

#endif


//code_finder.cpp
#include "code_finder.h"

CodeFinder::CodeFinder() 
{
	
}

CodeFinder::~CodeFinder() 
{
	
}

void CodeFinder::findWins() 
{
	wins.clear() ;
	for(int i=0; i<10000; ++i)
	{
		necessary[i] = 0 ;
	}
	std::vector<unsigned> vec ;
	long unsigned sum=0 ;
	for(int i=0; i<values.size(); ++i)
	{
		vec.clear() ;
		vec.push_back(values[i]) ;
		sum=values[i] ;
		find(vec, sum, i, 0) ;
	}
}

unsigned CodeFinder::getNumberOfWins() 
{
	return wins.size() ;
}

std::vector<unsigned> &CodeFinder::getWin(unsigned index) 
{
	return wins[index] ;
}

void CodeFinder::add(unsigned val) 
{
	if(val>0)
	{
		values.push_back(val) ;
	}
}

bool CodeFinder::isWin(long unsigned value) 
{
	if(value%1000)
	{
		return 0 ;
	}
	if(value<1000 || value>10000)
	{
		return 0 ;
	}
	return 1 ;
}

bool CodeFinder::isTooBig(long unsigned value) 
{
	return value>10000 ;
}

void CodeFinder::addWin(ValueType &winVec) 
{
	wins.push_back(winVec) ;
}

void CodeFinder::addNecessaryToWin(unsigned nec, unsigned sum) 
{
	sum/=1000 ;
	sum-- ;
	unsigned value = 1<<sum ;
	necessary[nec] |= value ;
}

bool CodeFinder::isWinOfNecessary(unsigned nec, unsigned sum) 
{
	sum/=1000 ;
	sum-- ;
	unsigned value = 1<<sum ;
	return necessary[nec]&value ;
}




//logger.h
#ifndef _LOGGER_
#define _LOGGER_

#include <ostream>

class Logger
{
	public: 
		Logger(std::ostream &os_) ;
		std::ostream &getOStr() ;
	private:
		std::ostream &os ;
};

inline std::ostream &Logger::getOStr() 
{
	return os ;
}

#endif


//logger.cpp
#include "logger.h"

Logger::Logger(std::ostream &os_) : os(os_)
{
	os<<"Hello.\n";
}




//code_finder_logger.h
#ifndef _CODE_FINDER_LOGGER_
#define _CODE_FINDER_LOGGER_

#include "code_finder.h"
#include "logger.h"

class CodeFinderLogger : public CodeFinder, private Logger
{
	public:
		CodeFinderLogger(std::ostream &os_) ;
		void add(unsigned val) ;
		
		void findWins() ;
	private:
		void find(std::vector<unsigned> &vec, long unsigned sum, unsigned index, unsigned depth) ;
};


#endif 


//code_finder_logger.cpp
#include "code_finder_logger.h"

CodeFinderLogger::CodeFinderLogger(std::ostream &os_) : Logger(os_)
{
	
}

void CodeFinderLogger::add(unsigned val) 
{
	Logger::getOStr()<<"Added value: "<<val<<"\n" ;
	CodeFinder::add(val) ;
}

void CodeFinderLogger::findWins() 
{
	Logger::getOStr()<<"Finding wins: START\n" ;
	
	CodeFinder::findWins() ;
	
	Logger::getOStr()<<"Finding wins: END\n" ;
}

void CodeFinderLogger::find(std::vector<unsigned> &vec, long unsigned sum, unsigned index, unsigned depth) 
{
	std::ostream &os = Logger::getOStr() ;
	for(int i=0; i<depth; ++i)
	{
		os<<"|   " ;
	}
	//os<<"find: sum="<<sum<<", index="<<index<<", depth="<<depth<<"\n" ;
	if(isWin(sum))
	{
		addWin(vec) ;
		os<<"WIN!!! " ;
	}
	for(int i=0; i<=depth; ++i)
	{
		os<<vec[i]<<(i==depth?" = ":"+") ;		
	}
	os<<sum ;
	if(isTooBig(sum))
	{
		os<<"  - TOO BIG\n" ;
		return ;
	}
	os<<"\n";	
	for(int i=1000; i<=10000; i+=1000)
	{
		int nec = getNecessaryToWin(i, sum) ;
		if(nec>0)
		{
			addNecessaryToWin(nec, i) ;
			for(int k=0; k<depth; ++k)
			{
				os<<"|   --- " ;
			}
			os<<nec<<" to win "<<i<<"\n" ;
		}
	}
	long unsigned newSum ;
	for(int i=index+1; i<values.size() ; ++i)
	{
		vec.resize(depth+1) ;
		vec.push_back(values[i]) ;
		newSum = sum+values[i] ;
		find(vec,newSum,i, depth+1) ;
	}
}





//main.cpp
#include "code_finder_logger.h"

#include <cassert>
#include <fstream>
#include <iostream>

void readCodes(CodeFinder &finder, std::istream &is) ;
void writeWins(CodeFinder &finder, std::ostream &os) ;
void writeNecessaryToWin(CodeFinder &finder, std::ostream &os) ;

int main(int argc, char **argv)
{
	std::ifstream ifs("we.txt") ;
	assert(ifs.is_open()) ;
	std::ofstream ofs("wy.txt") ;
	std::ofstream ofs2("wy_necessary.txt") ;
	CodeFinderLogger finder(ofs) ;
	
	readCodes(finder, ifs) ;
	finder.findWins() ;
	writeWins(finder, std::cout) ;
	writeNecessaryToWin(finder, ofs2) ;
	
	return 0 ;
}
	
void readCodes(CodeFinder &finder, std::istream &is) 
{
	unsigned value ;
	do
	{
		is>>value ;
		if(value)
		{
			finder.add(value) ;
		}
	}while(value>0) ;
}

void writeWins(CodeFinder &finder, std::ostream &os) 
{
	os<<"\nYou win "<<finder.getNumberOfWins()<<":\n" ;
	for(int i=0; i<finder.getNumberOfWins(); ++i)
	{
		os<<"\t" ;
		long unsigned sum=0 ;
		std::vector<unsigned> &win = finder.getWin(i) ;
		for(int j=0; j<win.size(); ++j)
		{
			sum += win[j] ;
			os<<win[j]<<(j==win.size()-1?" = ":"+") ;
		}
		os<<sum<<"\n" ;
	}
}

void writeNecessaryToWin(CodeFinder &finder, std::ostream &os) 
{
	if(finder.getNumberOfWins()==0)
	{
		for(int i=1; i<10000; ++i)
		{
			unsigned wins = finder.getWinsForNecessary(i) ;
			if(wins)
			{
				os<<i<<": {" ;
				bool coma=0 ;
				for(int j=1000; j<=10000; j+=1000)
				{
					if(finder.isWinOfNecessary(i,j))
					{
						if(coma)
						{
							os<<", " ;
						}
						else
						{
							coma=1 ;
						}
						os<<j ;
					}
				}
				os<<"}\n";
			}
		}
	}
}

Program napisany na szybko, dosyć niedbale, bez testów. Jedyne testy jakie przeprowadziłem, to "na oko" dla przykładowych danych, dla których wyniki mogłem sobie przewidzieć w pamięci i porównać z tym co wyszło. Jak się upewniłem, że działa, zarzuciłem mu plik wejściowy:

3245
1925
1430
2365
825
1815
1485
1540
2530
3190
1925
2750
165
770
1100
1760
2530
2750
2530
550
2420
550
1925
1980
605
2695
550
1155
3190
3300
0

na wyjściu dostałem:

You win 0:

Trudno. Zobaczmy czego mi brakuje do szczęścia:

5: {6000}
10: {1000}
15: {7000}
20: {2000}
25: {8000}
30: {3000}
35: {9000}
40: {4000}
45: {10000}
50: {5000}
60: {6000}
65: {1000}
70: {7000}
75: {2000}
80: {8000}
85: {3000}
90: {9000}
95: {4000}
100: {10000}
105: {5000}
115: {6000}
125: {7000}
130: {2000}
135: {8000}
140: {3000}
145: {9000}
150: {4000}
155: {10000}
160: {5000}
170: {6000}
175: {1000}
180: {7000}
185: {2000}
190: {8000}
195: {3000}
200: {9000}
205: {4000}
210: {10000}
215: {5000}
225: {6000}
230: {1000}
235: {7000}
240: {2000}
245: {8000}
250: {3000}
255: {9000}
260: {4000}
265: {10000}
270: {5000}
280: {6000}
285: {1000}
290: {7000}
295: {2000}
300: {8000}
305: {3000}
310: {9000}
315: {4000}
320: {10000}
325: {5000}
335: {6000}
345: {7000}
350: {2000}
355: {8000}
360: {3000}
365: {9000}
370: {4000}
375: {10000}
380: {5000}
390: {6000}
395: {1000}
400: {7000}
405: {2000}
410: {8000}
415: {3000}
420: {9000}
425: {4000}
430: {10000}
435: {5000}
445: {6000}
450: {1000}
455: {7000}
460: {2000}
465: {8000}
470: {3000}
475: {9000}
480: {4000}
485: {10000}
490: {5000}
500: {6000}
510: {7000}
515: {2000}
520: {8000}
525: {3000}
530: {9000}
535: {4000}
540: {10000}
545: {5000}
555: {6000}
565: {7000}
570: {2000}
575: {8000}
580: {3000}
585: {9000}
590: {4000}
595: {10000}
600: {5000}
610: {6000}
620: {7000}
625: {2000}
630: {8000}
635: {3000}
640: {9000}
645: {4000}
650: {10000}
655: {5000}
665: {6000}
675: {7000}
680: {2000}
685: {8000}
690: {3000}
695: {9000}
700: {4000}
705: {10000}
710: {5000}
720: {6000}
730: {7000}
735: {2000}
740: {8000}
745: {3000}
750: {9000}
755: {4000}
760: {10000}
765: {5000}
775: {6000}
785: {7000}
795: {8000}
800: {3000}
805: {9000}
810: {4000}
815: {10000}
820: {5000}
830: {6000}
835: {1000}
840: {7000}
845: {2000}
850: {8000}
855: {3000}
860: {9000}
865: {4000}
870: {10000}
875: {5000}
885: {6000}
895: {7000}
900: {2000}
905: {8000}
910: {3000}
915: {9000}
920: {4000}
925: {10000}
930: {5000}
940: {6000}
950: {7000}
960: {8000}
965: {3000}
970: {9000}
975: {4000}
980: {10000}
985: {5000}
995: {6000}
1005: {7000}
1010: {2000}
1015: {8000}
1020: {3000}
1025: {9000}
1030: {4000}
1035: {10000}
1040: {5000}
1050: {6000}
1060: {7000}
1065: {2000}
1070: {8000}
1075: {3000}
1080: {9000}
1085: {4000}
1090: {10000}
1095: {5000}
1105: {6000}
1115: {7000}
1125: {8000}
1130: {3000}
1135: {9000}
1140: {4000}
1145: {10000}
1150: {5000}
1160: {6000}
1170: {7000}
1175: {2000}
1180: {8000}
1185: {3000}
1190: {9000}
1195: {4000}
1200: {10000}
1205: {5000}
1215: {6000}
1225: {7000}
1230: {2000}
1235: {8000}
1240: {3000}
1245: {9000}
1250: {4000}
1255: {10000}
1260: {5000}
1270: {6000}
1280: {7000}
1285: {2000}
1290: {8000}
1295: {3000}
1300: {9000}
1305: {4000}
1310: {10000}
1315: {5000}
1325: {6000}
1335: {7000}
1345: {8000}
1350: {3000}
1355: {9000}
1360: {4000}
1365: {10000}
1370: {5000}
1380: {6000}
1390: {7000}
1395: {2000}
1400: {8000}
1405: {3000}
1410: {9000}
1415: {4000}
1420: {10000}
1425: {5000}
1435: {6000}
1445: {7000}
1450: {2000}
1455: {8000}
1460: {3000}
1465: {9000}
1470: {4000}
1475: {10000}
1480: {5000}
1490: {6000}
1500: {7000}
1510: {8000}
1515: {3000}
1520: {9000}
1525: {4000}
1530: {10000}
1535: {5000}
1545: {6000}
1555: {7000}
1565: {8000}
1570: {3000}
1575: {9000}
1580: {4000}
1585: {10000}
1590: {5000}
1600: {6000}
1610: {7000}
1620: {8000}
1625: {3000}
1630: {9000}
1635: {4000}
1640: {10000}
1645: {5000}
1655: {6000}
1665: {7000}
1675: {8000}
1680: {3000}
1685: {9000}
1690: {4000}
1695: {10000}
1700: {5000}
1710: {6000}
1720: {7000}
1730: {8000}
1735: {3000}
1740: {9000}
1745: {4000}
1750: {10000}
1755: {5000}
1765: {6000}
1775: {7000}
1785: {8000}
1795: {9000}
1800: {4000}
1805: {10000}
1810: {5000}
1820: {6000}
1830: {7000}
1835: {2000}
1840: {8000}
1845: {3000}
1850: {9000}
1855: {4000}
1860: {10000}
1865: {5000}
1875: {6000}
1885: {7000}
1895: {8000}
1900: {3000}
1905: {9000}
1910: {4000}
1915: {10000}
1920: {5000}
1930: {6000}
1940: {7000}
1950: {8000}
1960: {9000}
1965: {4000}
1970: {10000}
1975: {5000}
1985: {6000}
1995: {7000}
2005: {8000}
2010: {3000}
2015: {9000}
2020: {4000}
2025: {10000}
2030: {5000}
2040: {6000}
2050: {7000}
2060: {8000}
2065: {3000}
2070: {9000}
2075: {4000}
2080: {10000}
2085: {5000}
2095: {6000}
2105: {7000}
2115: {8000}
2125: {9000}
2130: {4000}
2135: {10000}
2140: {5000}
2150: {6000}
2160: {7000}
2170: {8000}
2175: {3000}
2180: {9000}
2185: {4000}
2190: {10000}
2195: {5000}
2205: {6000}
2215: {7000}
2225: {8000}
2230: {3000}
2235: {9000}
2240: {4000}
2245: {10000}
2250: {5000}
2260: {6000}
2270: {7000}
2280: {8000}
2285: {3000}
2290: {9000}
2295: {4000}
2300: {10000}
2305: {5000}
2315: {6000}
2325: {7000}
2335: {8000}
2345: {9000}
2350: {4000}
2355: {10000}
2360: {5000}
2370: {6000}
2380: {7000}
2390: {8000}
2395: {3000}
2400: {9000}
2405: {4000}
2410: {10000}
2415: {5000}
2425: {6000}
2435: {7000}
2445: {8000}
2450: {3000}
2455: {9000}
2460: {4000}
2465: {10000}
2470: {5000}
2480: {6000}
2490: {7000}
2500: {8000}
2510: {9000}
2515: {4000}
2520: {10000}
2525: {5000}
2535: {6000}
2545: {7000}
2555: {8000}
2565: {9000}
2570: {4000}
2575: {10000}
2580: {5000}
2590: {6000}
2600: {7000}
2610: {8000}
2620: {9000}
2625: {4000}
2630: {10000}
2635: {5000}
2645: {6000}
2655: {7000}
2665: {8000}
2675: {9000}
2680: {4000}
2685: {10000}
2690: {5000}
2700: {6000}
2710: {7000}
2720: {8000}
2730: {9000}
2735: {4000}
2740: {10000}
2745: {5000}
2755: {6000}
2765: {7000}
2775: {8000}
2785: {9000}
2795: {10000}
2800: {5000}
2810: {6000}
2820: {7000}
2830: {8000}
2835: {3000}
2840: {9000}
2845: {4000}
2850: {10000}
2855: {5000}
2865: {6000}
2875: {7000}
2885: {8000}
2895: {9000}
2900: {4000}
2905: {10000}
2910: {5000}
2920: {6000}
2930: {7000}
2940: {8000}
2950: {9000}
2960: {10000}
2965: {5000}
2975: {6000}
2985: {7000}
2995: {8000}
3005: {9000}
3010: {4000}
3015: {10000}
3020: {5000}
3030: {6000}
3040: {7000}
3050: {8000}
3060: {9000}
3065: {4000}
3070: {10000}
3075: {5000}
3085: {6000}
3095: {7000}
3105: {8000}
3115: {9000}
3125: {10000}
3130: {5000}
3140: {6000}
3150: {7000}
3160: {8000}
3170: {9000}
3175: {4000}
3180: {10000}
3185: {5000}
3195: {6000}
3205: {7000}
3215: {8000}
3225: {9000}
3230: {4000}
3235: {10000}
3240: {5000}
3250: {6000}
3260: {7000}
3270: {8000}
3280: {9000}
3285: {4000}
3290: {10000}
3295: {5000}
3305: {6000}
3315: {7000}
3325: {8000}
3335: {9000}
3345: {10000}
3350: {5000}
3360: {6000}
3370: {7000}
3380: {8000}
3390: {9000}
3395: {4000}
3400: {10000}
3405: {5000}
3415: {6000}
3425: {7000}
3435: {8000}
3445: {9000}
3450: {4000}
3455: {10000}
3460: {5000}
3470: {6000}
3480: {7000}
3490: {8000}
3500: {9000}
3510: {10000}
3515: {5000}
3525: {6000}
3535: {7000}
3545: {8000}
3555: {9000}
3565: {10000}
3570: {5000}
3580: {6000}
3590: {7000}
3600: {8000}
3610: {9000}
3620: {10000}
3625: {5000}
3635: {6000}
3645: {7000}
3655: {8000}
3665: {9000}
3675: {10000}
3680: {5000}
3690: {6000}
3700: {7000}
3710: {8000}
3720: {9000}
3730: {10000}
3735: {5000}
3745: {6000}
3755: {7000}
3765: {8000}
3775: {9000}
3785: {10000}
3800: {6000}
3810: {7000}
3820: {8000}
3830: {9000}
3835: {4000}
3840: {10000}
3845: {5000}
3855: {6000}
3865: {7000}
3875: {8000}
3885: {9000}
3895: {10000}
3900: {5000}
3910: {6000}
3920: {7000}
3930: {8000}
3940: {9000}
3950: {10000}
3965: {6000}
3975: {7000}
3985: {8000}
3995: {9000}
4005: {10000}
4010: {5000}
4020: {6000}
4030: {7000}
4040: {8000}
4050: {9000}
4060: {10000}
4065: {5000}
4075: {6000}
4085: {7000}
4095: {8000}
4105: {9000}
4115: {10000}
4130: {6000}
4140: {7000}
4150: {8000}
4160: {9000}
4170: {10000}
4175: {5000}
4185: {6000}
4195: {7000}
4205: {8000}
4215: {9000}
4225: {10000}
4230: {5000}
4240: {6000}
4250: {7000}
4260: {8000}
4270: {9000}
4280: {10000}
4285: {5000}
4295: {6000}
4305: {7000}
4315: {8000}
4325: {9000}
4335: {10000}
4350: {6000}
4360: {7000}
4370: {8000}
4380: {9000}
4390: {10000}
4395: {5000}
4405: {6000}
4415: {7000}
4425: {8000}
4435: {9000}
4445: {10000}
4450: {5000}
4460: {6000}
4470: {7000}
4480: {8000}
4490: {9000}
4500: {10000}
4515: {6000}
4525: {7000}
4535: {8000}
4545: {9000}
4555: {10000}
4570: {6000}
4580: {7000}
4590: {8000}
4600: {9000}
4610: {10000}
4625: {6000}
4635: {7000}
4645: {8000}
4655: {9000}
4665: {10000}
4680: {6000}
4690: {7000}
4700: {8000}
4710: {9000}
4720: {10000}
4735: {6000}
4745: {7000}
4755: {8000}
4765: {9000}
4775: {10000}
4800: {7000}
4810: {8000}
4820: {9000}
4830: {10000}
4835: {5000}
4845: {6000}
4855: {7000}
4865: {8000}
4875: {9000}
4885: {10000}
4900: {6000}
4910: {7000}
4920: {8000}
4930: {9000}
4940: {10000}
4965: {7000}
4975: {8000}
4985: {9000}
4995: {10000}
5010: {6000}
5020: {7000}
5030: {8000}
5040: {9000}
5050: {10000}
5065: {6000}
5075: {7000}
5085: {8000}
5095: {9000}
5105: {10000}
5130: {7000}
5140: {8000}
5150: {9000}
5160: {10000}
5175: {6000}
5185: {7000}
5195: {8000}
5205: {9000}
5215: {10000}
5230: {6000}
5240: {7000}
5250: {8000}
5260: {9000}
5270: {10000}
5285: {6000}
5295: {7000}
5305: {8000}
5315: {9000}
5325: {10000}
5350: {7000}
5360: {8000}
5370: {9000}
5380: {10000}
5395: {6000}
5405: {7000}
5415: {8000}
5425: {9000}
5435: {10000}
5450: {6000}
5460: {7000}
5470: {8000}
5480: {9000}
5490: {10000}
5515: {7000}
5525: {8000}
5535: {9000}
5545: {10000}
5570: {7000}
5580: {8000}
5590: {9000}
5600: {10000}
5625: {7000}
5635: {8000}
5645: {9000}
5655: {10000}
5680: {7000}
5690: {8000}
5700: {9000}
5710: {10000}
5735: {7000}
5745: {8000}
5755: {9000}
5765: {10000}
5800: {8000}
5810: {9000}
5820: {10000}
5835: {6000}
5845: {7000}
5855: {8000}
5865: {9000}
5875: {10000}
5900: {7000}
5910: {8000}
5920: {9000}
5930: {10000}
5965: {8000}
5975: {9000}
5985: {10000}
6010: {7000}
6020: {8000}
6030: {9000}
6040: {10000}
6065: {7000}
6075: {8000}
6085: {9000}
6095: {10000}
6130: {8000}
6140: {9000}
6150: {10000}
6175: {7000}
6185: {8000}
6195: {9000}
6205: {10000}
6230: {7000}
6240: {8000}
6250: {9000}
6260: {10000}
6285: {7000}
6295: {8000}
6305: {9000}
6315: {10000}
6350: {8000}
6360: {9000}
6370: {10000}
6395: {7000}
6405: {8000}
6415: {9000}
6425: {10000}
6450: {7000}
6460: {8000}
6470: {9000}
6480: {10000}
6515: {8000}
6525: {9000}
6535: {10000}
6570: {8000}
6580: {9000}
6590: {10000}
6625: {8000}
6635: {9000}
6645: {10000}
6680: {8000}
6690: {9000}
6700: {10000}
6735: {8000}
6745: {9000}
6755: {10000}
6800: {9000}
6810: {10000}
6835: {7000}
6845: {8000}
6855: {9000}
6865: {10000}
6900: {8000}
6910: {9000}
6920: {10000}
6965: {9000}
6975: {10000}
7010: {8000}
7020: {9000}
7030: {10000}
7065: {8000}
7075: {9000}
7085: {10000}
7130: {9000}
7140: {10000}
7175: {8000}
7185: {9000}
7195: {10000}
7230: {8000}
7240: {9000}
7250: {10000}
7285: {8000}
7295: {9000}
7305: {10000}
7350: {9000}
7360: {10000}
7395: {8000}
7405: {9000}
7415: {10000}
7450: {8000}
7460: {9000}
7470: {10000}
7515: {9000}
7525: {10000}
7570: {9000}
7580: {10000}
7625: {9000}
7635: {10000}
7680: {9000}
7690: {10000}
7735: {9000}
7745: {10000}
7800: {10000}
7835: {8000}
7845: {9000}
7855: {10000}
7900: {9000}
7910: {10000}
7965: {10000}
8010: {9000}
8020: {10000}
8065: {9000}
8075: {10000}
8130: {10000}
8175: {9000}
8185: {10000}
8230: {9000}
8240: {10000}
8285: {9000}
8295: {10000}
8350: {10000}
8395: {9000}
8405: {10000}
8450: {9000}
8460: {10000}
8515: {10000}
8570: {10000}
8625: {10000}
8680: {10000}
8735: {10000}
8835: {9000}
8845: {10000}
8900: {10000}
9010: {10000}
9065: {10000}
9175: {10000}
9230: {10000}
9285: {10000}
9395: {10000}
9450: {10000}
9835: {10000}

okazuje się, że wystarczy jedna z 877 liczb (2 strony A4 czcionką 8), aby wygrać! tyle możliwości, nic tylko drukować i przeszukiwać półki sklepowe:)

ale gdy się patrzy na liczby wejściowe i oczekiwane, to trudno znaleźć w oczekiwanych liczby, która się powtarza w wejściowych... no cóż, prezentów nikt nie rozdaje, oni po prostu na tym zarabiają.

jak będę miał czas i będzie mi się chciało, to poprawię ten programik, dodam moduły porównawcze i statystyczne ;)

a może ktoś ma jakieś opakowania po proszkach, gdzie jest kwota, która mi brakuje? oczywiście sprawiedliwy podział nagrody :D

0

Post z cyklu "Co robią nolify w wolnym czasie" :D

Była już podobna promocja w czymś innym - kwoty oczywiście dobrane tak, żeby wygrać się nie dało (stale brakuje jakiejś kwoty, i takich brakujących kwot drukuje się parę - żeby wygrane nie przekraczały puli na nagrody). Proszek do pieczenia jest taki tani, że gdyby to losowo (sprawiedliwie) były drukowane te kwoty, to po zakupie takich proszków za stówę byłbyś bogaty (i mógł zrobić dużo wypieków).

0

Kiedyś było coś podobnego z nakrętkami do Coli (a może Pepsi, nie pamiętam). Też zrobili tak, że pasujących par kodów było bardzo mało. Gdyby były losowane równomiernie, to prawdopodobieństwo trafienia byłoby duże.

0

Możesz to napisać algorytmem wydawania reszty i na oko zmieści to się w 50 linijkach..
Jak byłem na pierwszym roku, taka sama promocja była w zupkach Amino. Moi sąsiedzi żarli je co dziennie i naklepałem im na szybko taka apke w C#..
http://www.sendspace.com/file/5906mq
Dawno temu to pisałem, ale jak chcesz to zobacz sobie..

0

Zawsze można skoczyć do zaprzyjaźnionej osiedlówki i poprosić o "promocyjną" cenę na paragonie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1