петък, 1 март 2013 г.

Какъв е проблемът на съвременните пари?

В началото на статията искам да подчертая, че целта с която я пиша е да предам на разбираем език, своята теза по темата. По никакъв начин не претендирам, че дефинициите са академично издържани или примерите изчерпателни, така че се надявам да проявите търпение и снизходителност :)

Преди да изложа моето мнение за проблемите на валутите, които в днешно време наричаме пари, нека започнем от началото.

Какво е пари?


Всеки от нас по един или друг начин се е сблъсквал с историята за началото на търговията като натуралната размяна - аз ти давам една овца, ти ми даваш 3 кокошки. Това е една от тезите за първите основи на търговията. Има и друга теза, която за мен лично е по-правдоподобна, според която търговията се е зародила като дълг. Според тази теза първоначално хората са живели в малки затворения общества и са били изключително зависими един от друг. Съответно и понятията за мое и твое са били по-размити от тези в днешно време. Търговските взаимоотношения са били по-скоро от вида: отива Иван при Петър и му казва - "Много ми харесва твоя кон". Съответно Петър отговаря - "Добре, вземи го, подарявам ти го". От този момент нататък Иван е в дълг на Петър. След време Петър отива при Иван и му казва: "Много хубава дъщеря имаш, искам да я взема за жена" и Иван отговаря "Добре, давам я". Сега пък Петър е в дълг към Иван и т.н.

Така или иначе, която и от двете тези да е вярна или може би и двете едновременно, подобен начин на търговия създава изключително много пречки:
1/ На теб ти трябва овца и искаш да купиш от Иван срещу 3 кокошки, но Иван не иска кокошки, на него му трябва кожа от вълк например. С други думи, трудно е да намериш човек, който има това, от което имаш нужда ти и търси, това, което предлагаш в размяна.
2/ Трудно е се определи цената на даден продукт или по-точно трябва да се помнят и пресмятат толкова цени, колкото продукти има - колко кокошки струва кравата, колко кокошки струва еленовата кожа, колко яйца струва кравата, колко яйца струва еленовата кожа и т.н.
3/ Рядко това, което ти продаваш е делимо до толкова, че да получиш точното количество от търсената стока. Например - имаш крава, а искаш да си купиш кокошка. Кравата е много по-скъпа от кокошката, за това за да е честна размяната трябва насреща да получиш 10 кокошки. Проблемът е, че ти искаш една, не искаш 10. Решението може би е да разделиш кравата на 10 парчета, но тогава тя ще загуби част от стойността си - парче от крава не може да дава мляко :)
4/ Трудно е да се спестява сега произведеното за да го похарчиш в бъдеще, когато имаш нужда от него. Например ти гледаш картофи. Извадил си 100 килограма картофи, изял си 50. Искаш останалите 50 килограма да ги размениш срещу нещо, от което имаш нужда, но те не ти достигат. Логично е да искаш да ги запазиш и когато събереш достатъчно картофи да си купиш това, което искаш. Проблема е, че картофите се развалят. Ако не ги изконсумираш или продадеш в даден период от време те губят стойността си. Такъв е проблема и с повечето стоки, които се произвеждат.
5/ Всяка търговска сделка се нужда е от един вид експертна оценка - да ти продаваш крава, но тя добре гледана ли е, млада ли е, здрава ли е, ялова ли е и т.н. Това са все неща, които променят стойността и в дадената сделка. С две думи една крава не струва толкова колкото друга крава. Същото се отнася и за почти всички останали обекти на търговията.
6/ Не всяка стока е лесна за транспортиране и продажба - кокошките лесно ще бъдат занесени на пазара, кравите също, но 1 тон речни камъни ... това е друго нещо :)

Поради всички тези причини и много други хората стигат до концепцията за пари. Парите като най-широко понятие са всички стоки или услуги, които даден човек е готов да приеме като  заплащане и които той приема не за да ги употреби, а за да ги размени на свой ред срещу, това което той иска да закупи. С думи прости - аз ти давам моята крава срещу твоите кокошки, не защото искам кокошки, а защото знам, че мога срещу част от кокошките да си купя еленовата кожа, която всъщност искам. 

Историята познава много различни неща, които хората са използвали като пари. Някой са изпълнявали ролята добре, други не чак толкова. Като пари са се ползвали - кожи, овце, роби, редки миди, сол, вода и какво ли още не. 

Също така много често е имало няколко различни вида пари, които са съществували паралелно. Такива примери имаме и от съвсем близкото минало. Например по време на войната в Ирак, в една област на страната населението се издържало основно с животновъдствo. В района минавала река, чиято вода била подходяща за пиене от добитъка, но не и от хората. За това и местните жители за питейни нужди разчитали на доставки на бутилирана вода от близките градове. Същевременно за да финансира военните действия иракското правителство печатало местната валута в количества, в които намерело за добре. В резултата имало хипер-инфлация и местните жители в един момент просто отказали да приемат при сделки тези "декретни" пари. За да не спре икономиката в региона се появили няколко паралелни вида пари за търговия - за по-малки сделки се използвали цигари и вода, за по-големи сделки - овце.

Но отново да се върнем в миналото. С времето някой стоки се оказали по-подходящи за при от други. По-добрите пари изтласкали по-лошите. Например една от стоките, които е изпълнявала най-добре ролята на пари, при това за много дълъг период от време била солта. Всеки имал нужда от сол - с нея е можело да си съхраняваш храната  много по-дълго време; за да са ти здрави животните е било важно да им се осигурява и сол като част от менюто; солта била много ценена в арабския свят, понеже помагала на тялото да задържи влагата и т.н. Освен това солта не се разваля, лесно се съхранява, лесно се пренася, лесно се дели, лесно се разпознава - това са качества, които както показахме с примерите по-рано са важни за една стока за да изпълнява ролята на пари.


Добри пари


Аристотел е първия философ за когото ни е известно, че е работил над дефиницията за "добри пари". Той извел няколко основни характеристики, които добрите пари трябва да притежават:
1/ Те трябва да са трайни, т.е. да не променят характеристиките си с времето. За това и кокошките или пък доматите не са подходящи за пари.
2/ Те трябва да са преносими, т.е. да имат висока стойност в малък обем. За това и желязото не е подходящо за пари, въпреки че е много трайно.
3/ Те трябва да са делими, т.е. да можеш да разделиш дадената стока на части и сумата от стойностите на тези части да е равна на стойността на цялото. За това и картините не са подходящи за пари - макар и ценна ако разделиш Мона Лиза на части, тя ще загуби голяма част от стойността си. 
4/ Те трябва да имат собствена стойност, т.е. стойността на парите да идва от тяхната вътрешна ценност, а не да зависи от външни фактори. За това и "декретните" книжни и електронни пари  не са добри пари, защото те се използват тъй като са наложени със закон от дадена държава, а не защото пазарът ги е избрал за такива.

Към тези основни характеристики на добрите пари можем да добавим и още няколко:

5/ Те трябва да са широко приети, т.е. болшинството от хората да са готови да ви предоставят стоки и услуги срещу тях. За това и картинките от дъвки турбо например не са добри пари :)

6/ Те трябва да са лесно разпознаваеми и оценими, т.е. при сключване на сделка лесно да се определя стойността на предложените пари. За това и диамантите например не са подходящи за пари - за всеки отделен диамант е необходима експертна оценка за да се прецени стойността му - тя зависи от размер, цвят, чистота, шлифовка и какво ли още не.

7/ Те трябва да са взаимозаменяеми, т.е. 1 единица от дадените пари да е равна на всяка друга единица от същите пари. За това и редките вина например не са подходящи за пари - всяко вино има различна цена и в общия случай една бутилка не е равна по стойност на друга бутилка.

Тук е мястото да кажем и кои са стоките изпълнявали най-добре ролята на пари, тези които са издържали теста на времето. Предполагам, че почти за никого няма да е изненада, че това са златото и среброто. Исторически по-често и по-широко използвано за пари е било среброто. Причината за това е, че то се среща в по-големи количества в природата и съответно е било по-лесно да се използва не само за големи, но и за малки транзакции в ежедневието. Ако приложим горните критерии към златото и среброто ще открием, че те ги изпълняват перфектно. Всички гореизброени критерии се покриват и от останалите ценни метали (платината, паладия, родия и т.н.). Почти нищо друго не се вписва в изискванията на "добрите" пари. 

Какво представляват днешните пари?


Много хора в днешно време не знаят какво представляват валутите, които всички приемаме за пари. Широко срещано е например разбирането, че днешните валути имат някакво покритие, което стои зад тях в централните банки - злато или нещо друго. Това не е така. В днешно време не съществува нито една валута, която да има за покритие нещо физическо и имащо своя вътрешна стойност. За покритие на своите валути централните банките твърдят, че държат злато и валутни резерви. На практика обаче никоя банка не казва точно колко струва в дадената валута 1 грам злато. Също така ако човек отиде в дадената централна банка със съответната валута, няма никакъв шанс срещу нея да получи някакво фиксирано количество злато. За това, макар че централните банки наистина да държат съществени резерви от злато, то по никакъв начин не се явява покритие на дадената валута. За това и можем спокойно да твърдим, че всички съвременни валути всъщност имат за покритие други валути или ... те практически нямат никакво покритие. 

Как се е стигнало до тук е много дълга история. С две думи - стъпка по стъпка. Първо широко се е използвало среброто за пари; после по политически причини - златото; след това се е минало на валути със златно и сребърно покритие (златен или сребърен стандарт); после към златно покритие само на ниво търговия между държави; после на покритие с долари и чрез него към златото, тъй като само долара е запазил златото си покритие (Система Бретън Удс) и на края към пари без никакво покритие (през 71-ва Никсън премахва златното покритие на долара). 

Така стигаме до днешни дни, когато всички валути нямат никакво покритие и нищо не ограничава количеството на единиците от дадената валута освен волята на самото правителство. 

Защо днешните валути не са добри пари?


Краткия отговор - защото не ги е избрал пазарът. Всички днешни валути са наложени за употреба чрез закон. Държавата ни принуждава да ги приемаме и да си плащаме данъците с тях. По този начин държавата ни принуждава да ги използваме и предпочитаме в ежедневието преди други алтернативни видове пари. Ако живеехме в един по-свободен свят, в който хората сами решаваха какво да използват за пари, считам че доста бързо днешните пари щяха да бъдат изтласкани от обръщение по волята на пазара. Защо? Нека да обясня.

Какво всъщност определя стойността на парите - например колко струва един хляб? Стойността на парите е пряко зависима от количеството на стоките и услугите в една икономика и обратно зависима от количество на тези пари. С други думи, колкото повече имаме от дадена стока в една икономика, толкова по-ниска е цената на тази стока (защото предлагането е голямо) и обратно, колкото е по-рядка стоката, толкова е по-висока цената и. Същевременно колкото е по-голямо количеството на парите в една икономика, толкова по-малка е тяхната покупателна способност (цената им) и обратно. 

За да онагледим нека да разгледаме следния пример: Имаме една лодка, в която се намират 3-ма корабокрушенци. Единия има един портокал, а другите 2-ма имат по 5 евро. Този с портокала е готов да го продаде. Въпросът е колко струва този портокал в този момент? Той струва 5 евро, защото толкова е готов да даде всеки от другите 2-ма корабокрушенци - те искат портокала и без това няма какво друго да си купят с парите, така че са готови да ги дадат всичките за него. Да речем обаче, че единия от тях си пребърква още веднъж джобовете и открива още 5 евро. Колко е сега цената на портокала? Отговорът е 10 евро - отново, корабокрушенецът няма какво друго да си купи с тези 10 евро, така че е готов да ги даде всичките за портокала. 

От този пример ясно е видно, че цената на портокала е пряко зависима от количеството пари в икономиката - когато количеството пари в обръщение се увеличи, съответно се увеличава и цената на стоките (или погледнато от другата страна - пада цената на парите, защото те вече не са толкова "редки"). От тук мисля, че лесно може да се стигне до дефиницията за инфлация - Инфлация е увеличението на парите в обръщение. Подчертавам, че инфлацията не е увеличението на цените на стоките и услугите в икономиката, това е просто резултат от инфлацията. Увеличението на цените е резултат от увеличението на парите в обръщение.

Това е и един от основните проблеми със съвременните пари - тъй като не са ограничени от никакъв материален ресурс, които да се използва за тяхно покритие, правителствата могат да печатат колкото си поискат от тях. Ако имахме например истински златен стандарт в САЩ и американското правителство искаше да напечата още долари за да ги пусне в обръщение, щеше да му се наложи преди това да намери от някъде златото, което да служи за покритие на тези новонапечатани пари. В днешно време това не е така, в днешно време те просто ги създават от нищото.

Много читатели по-добре запознати с материята в този момент ще кажат - "Това не е вярно. Стойността на парите не зависи само от тяхното количество, но и от скоростта, с която се въртят в икономиката". Да така е. Други ще кажат - "Не само централните банки печатат пари, много повече пари се печатат във вид на дълг от търговските банки". Да това също е така.

Проблемът на съвременните пари за мен е огромния контрол, който централните банки имат върху всички тези параметри на паричното предлагане - върху количеството напечатано от централните банки, върху количеството създадено от търговските банки и дори върху скоростта на обръщение на парите в икономиката.

Проблемът е, че понеже централните банки имат тази власт, те чрез нея насочват световната икономика в посоката, в която решат. Това води следните проблеми:
1/ Тази власт е концентрирана в ръцете на малка група хора, които не са избрани от никой, но реално държат юздите на целия свят в ръцете си, т.е. до тук с илюзиите за домокрация в развитите държави :)
2/ Самата идея за насочване на тези парични потоци към един или друг сектор на икономиката означава да се създадат изкуствено дисбаланси. Вместо самия пазар да определени каква част парите да минат през големите търговски банки на Уолстрийт например, това се решава от управителния съвет на Федералния резерв на САЩ (ФЕД). Това значи, че тези пари няма да отидат в друг сектор на икономиката, например машиностроенето. Това значи, че ФЕД, а не пазарът решава кой сектор да се развива и кой не. В резултат, изкуствено ще имаме, например, повече инвестиционни брокери отколкото инженери, повече деривативни инструменти отколкото машини, при положение, че явно пазарът показва, че трябва да не е така. Така се създава дисбаланси, който рано или късно ще бъде коригиран при това с големи последствия за икономиката.
3/ Подкрепят се бизнеси, които при други обстоятелства биха фалирали и съответно фалират бизнеси, които при други обстоятелства биха били конкурентно способни и биха произвеждали търсена от пазара продукция. Отново това е резултат от насочването на парите към един или друг сектор и отново се създават дисбаланси - подкрепят се провалили се предприятия и се обричат на фалит продуктивни предприятия. Тук може би е и момента читателя да се замисли, дали наистина системата, в която живеем днес е капитализъм, защото това, което описваме е много по-близо до централно управлявана икономика :)
4/ Централните банки имат 2 посоки на действие, те имат избор - да свият паричното предлагане или да го увеличат. Ако го свият страда икономиката като цяло и в общия случай те нямат контрол върху това, кой сектор страда от тези мерки. От друга страна ако увеличат паричното предлагане, те могат да го насочат в посоката, в която сметнат за нужно. За това и централните банки почти винаги прибягват до увеличение на паричната маса като средство за управление на икономиката. Това обаче има доста сериозни последствия.

Нека отново да се върнем на нашия пример с 3-мата корабокрушенци. Да предположим, че единия има 3 портокала, а другите 2-ма имат по 5 долара. Това значи, че всеки от тези 2-ма може да си купи по портокал и половина. Отново да предположим, че единия намира в джоба си още 5 долара (той е централната банка и си ги напечатва все едно). Сега вече този с 10-тте долара може да си купи 2 портокала, а този с 5-тте може да си купи само 1. От този пример се вижда, че печатането на пари е обезценило вече съществуващите пари - преди 5 долара са купували портокал е половина, а сега купуват само 1 портокал. Очевидно спестяванията и на двамата (първоначалните 5 долара) са се обезценили (намаляла им е покупателната способност). Тъй като единия от двамата корабокрушенци има вече 10 долара, въпреки че неговите първоначални 5 долара са се обезценили все пак може да го преживее, защото с новите 5 долара си покрива загубата, че дори може да си купи и половин портокал в повече. От друга страна другия, които пак има само 5 долара си е на чиста загуба. Очевидно е, че в случая покупателната способност се е прехвърлила от джоба на единия в джоба на другия.

5/ Горния пример ясно показва още един от проблемите, които увеличението на паричната маса от централните банки създава - намалява покупателната способност на спестовната част от населението (спестяванията на хората). Кой основно губи от тези политики - хората, които имат спестявания, пенсионните фондове и т.н. Това означава също така, че се наказва спестяването и се поощрява взимането на кредити (тъй като предизвиканата инфлация намалява реалната лихва по тези кредити). Това предизвиква много сериозни дисбаланси в икономиката - за да има производство и инвестиции трябва да има капитал. Капитализъм без капитал не съществува. Капитал се натрупва, когато се отказваш от настоящото потребление и го запазваш за в бъдеще, т.е. когато спестяваш. С други думи в резултат на тези политики се унищожава капиталът в икономиката и се поощряват високо рисковите инвестиции, направени със заемен капитал. Съответно се поощрява надуването на спекулативни балони (в акциите, в имотите, в дълговите книжа...).

Всички тези проблеми ме карат да твърдя, че днешните пари не са "добри" пари. Те позволяват на централните банки да създават дисбаланси в икономиката, които са точно това, което си мислите - изместване на цялата система от балансираното положение. Системата обаче търси баланса и рано или късно следват корекции, каквато виждаме последните 5 години (от 2007 до днес). Днешните управители на света (управителните съвети на централните банки) си мислят, че могат да балансират по ръба на ножа, че могат да настройват системата в движение и да предотвратят корекциите. На практика обаче създават един след друг все по-големи дисбаланси, като в покер игра всеки път удвояват залога. Първо беше стоковия балон от 2000-2001, след това имотния балон 2006 година, сега имаме гигантски балон в държавните дългови книжа. Какво представлява балон в държавните дългови книжа и какви са последствията от него - достатъчно е да погледнем какво се случва в Гърция, Испания, Италия ...

неделя, 17 февруари 2013 г.

How to add timestamp in the name of an uploaded image in PDW file browser

What is PDW file browser

PDW file browser as the name suggest is a ready to use file browser that you can include in your web projects. It is written on PHP and if you want to include it easily in your projects you should put the application in the web root directory of your web server (for xampp it is htdocs directory). It this aspect it is different from some other external applications which by default expect to be put in the directory of your current project. The application is used for all cases in which you want to provide to the user the ability to manage files on the server (in most cases images). The application allows the user to upload, delete, rename the files, to add directories, to search and more.


What did I need the PDW file browse for

I am doing a project which uses CK Editor as a "what you see is what you get" (WYSIWYG) system. In other words I needed a web editor with which the user could prepare articles, which could afterwords be automatically published on the web site. The articles needed to include not only text but also images. The CK Editor provides the interface for image selection, but it didn't have a free file manager. To be more specific - the company provides a file manager, but you need to pay for it. At this point I started searching for a free file manager and from what I have read the PDW file browser was what I needed. Indeed I was able to make the two systems work together easy enough. You just need to specify that you use the PDW file browser in filebrowserBrowseUrl and filebrowserImageBrowseUrl as it is shown bellow:


$site .= "<textarea name=\"editor\">" . $editor . "</textarea>\n";
$site .= " <script>\n";
$site .= "  CKEDITOR.replace( 'editor', {\n";
$site .= "    filebrowserBrowseUrl: '/pdw_file_browser/index.php?editor=ckeditor',\n";
$site .= "    filebrowserImageBrowseUrl: '/pdw_file_browser/index.php?editor=ckeditor&filter=image',\n";
$site .= "    filebrowserUploadUrl: 'ck_editor/uploader.php',\n";
$site .= "    filebrowserImageUploadUrl: 'ck_editor/uploader.php',\n";
$site .= "    filebrowserImageWindowWidth: '720',\n";
$site .= "    filebrowserImageWindowHeight: '560'\n";
$site .= "  });\n";
$site .= " </script>\n";

Adding a time stamp

The problem that I had with the PDW file browser was the file name of the uploaded images. When the user uploaded an image the name of the uploaded image file was the same as the name of the original file.



This meant that if for example the user uploaded on 01/02/2013 the file Ferrari.jpg and on 05/02/2015 he uploaded another image with the same name, the new image would replace the old one. If this was allowed to happen than all the articles that used the old Ferrari.jpg would now show the new image. For that reason I wanted every time the user uploaded an image to add the current time stamp at the beginning of the file name. This way every image uploaded would have a unique name and I would not have to worry that the user could overwrite an existing image file.


A lot of the functions in the PDW file browser can be configuratted, but there is no build-in function to add a time stamp in front of the file name. For that reason I had to change the code of the PDW browser itself. The version I was working on was PDW File Browser v1.3 beta. The change has to be done here: \swfupload\upload.php. You need to find the place where the actual file is uploaded to the server. In my case it was on row 114. The original code looked like this:

if (!@move_uploaded_file($_FILES[$upload_name]["tmp_name"], $save_path.$file_name)) {
 HandleError("File could not be saved.");
 exit(0);
}


The file name is taken here: $save_path.$file_name. In order to add the time stamp I have modified it like this: $save_path.time()."_".$file_name.

In my code the end result looked like this:

//if (!@move_uploaded_file($_FILES[$upload_name]["tmp_name"], $save_path.$file_name)) {if (!@move_uploaded_file($_FILES[$upload_name]["tmp_name"], $save_path.time()."_".$file_name)) {
    HandleError("File could not be saved.");
    exit(0);
}

I hope you find that useful and this fix works for you as good as it did for me.

събота, 29 декември 2012 г.

Решения подготовка за изпит C# - Variant 2

Telerik Software Academy – C# Variant 2

Problem 1 – Fighter Attack

A rectangular plant P located in east-west direction is under attack by a fighter aircraft flying over it on the west. When the fighter launches a missile we have its coordinates F. It is assumed that the missile's direction is always straight on the west and the missile always hits the target after a fixed distance D in front of the fighter.
To simplify our model we assume the land is built of square cells of size 1 x 1 located in east-west direction and each cell has integer Cartesian coordinates {x, y}. In this model the plant can be represented by a rectangular area of cell and the missile always hits some of the square cells (inside or outside of the plant).
When the missile hits a certain cell, the damage over it is 100%, on the cells staying on the left and on the right of it the damage is 50% and in front of it the damage is 75%. The total damage is sum of the separate damages and can exceed 100%.
You are given the location of the plant P, the location of the fighter F and the distance D. Write a program that calculates the damage over the plant after the attack. Note that the missile could hits the plant partially of fully or can hit some area outside of the plant and cause no damage.
At the figure below a plant P, a fighter F, a distance D and the missile hit point are shown along with the damage caused over the cells by the hit. Note that some of the damaged cells are outside of the plant and thus the total damage is 225%:



Your task is to write a program that calculates the total damage caused after the attack over the plant.

Input

The input data should be read from the console. There will be exactly 7 lines holding the integer numbers PX1, PY1, PX2, PY2, FX, FY, and D. The plant P is given by the coordinates of any two of its opposite corners and is non-empty (consists of at least one cell). The location of the fighter is given as cell coordinates FX, and FY and the distance D is given as an integer number.
The input data will always be valid and in the format described. There is no need to check it explicitly.

Output

The output should consist of a single line holding the total damage given as percentage.

Constraints

·        The numbers PX1, PY1, PX2, PY2, FX, FY, and D are all integers in the range [-100 000 … 100 000].
·        Allowed work time for your program: 1 second.
·        Allowed memory: 16 MB.

Examples

Input
Output

Input
Output

Input
Output
2
5
6
3
-6
3
9
225%
2
5
6
3
-6
5
7
75%
6
5
2
3
0
1
-3
0%


using System;
 
class FighterAttack
{
    static void Main()
    {
        int pX1 = int.Parse(Console.ReadLine());
        int pY1 = int.Parse(Console.ReadLine());
 
        int pX2 = int.Parse(Console.ReadLine());
        int pY2 = int.Parse(Console.ReadLine());
 
        if (pX1 > pX2)
        {
            int temp = pX2;
            pX2 = pX1;
            pX1 = temp;
        }
 
        if (pY1 > pY2)
        {
            int temp = pY2;
            pY2 = pY1;
            pY1 = temp;
        }
 
        int fX = int.Parse(Console.ReadLine());
        int fY = int.Parse(Console.ReadLine());
 
        fX += int.Parse(Console.ReadLine());
        int [,] hitArea = new int [4,3] {
            {fX, fY+1, 50},
            {fX, fY, 100},
            {fX, fY-1, 50},
            {fX+1, fY, 75}
        };
 
        int totalDamage = 0;
        for (int i = 0; i < 4; i++)
  {
 
            int x1 = hitArea[i, 1];
            int x2 = hitArea[i, 2];
 
            if ((hitArea[i, 0] >= pX1) &&
                (hitArea[i, 0] <= pX2) &&
                (hitArea[i, 1] >= pY1) &&
                (hitArea[i, 1] <= pY2))
            {
                totalDamage += hitArea[i, 2];
            }
  }
        Console.WriteLine("{0}%",totalDamage);
    }
}

Problem 2 – Astrological Digits

The astrological digit of a given number N is a digit calculated by the number's digits by a special algorithm. The algorithm performs the following steps:
(1)  Sums the digits of the number N and stores the result back in N.
(2)  If the obtained result is bigger than 9, step (1) is repeated, otherwise the algorithm finishes.
The last obtained value of N is the result, calculated by the algorithm.

Input

The input data should be read from the console.
The only line in the input contains a number N, which can be integer or real number (decimal fraction).
The input data will always be valid and in the format described. There is no need to check it explicitly.

Output

The output data should be printed on the console.
You must print the calculated astrological digit of the number N on the first and only line of the output.

Constraints

·        The number N will be in range [-1.7 × 10−308 1.7 × 10308]. It will have no more than 300 digits before and after the decimal point.
·        The decimal separator will always be the "." symbol.
·        Allowed working time for your program: 0.25 seconds.
·        Allowed memory: 16 MB.

Examples

Input example
Output example
8
8
-1337
5
1234567.8900
9


using System;
 
class AstrologicalDigits
{
    static void Main()
    {
        string nString = Console.ReadLine();
        string [] numberSplit = nString.Split('.','-');
        int n = 0;
        for (int i = 0; i < numberSplit.Length; i++)
        {
            for (int j = 0; j < numberSplit[i].Length; j++)
            {
                n += int.Parse(numberSplit[i].Substring(j, 1));
            }
        }
 
        while (n > 9)
        {
            string inner = Convert.ToString(n);
            n = 0;
            for (int i = 0; i < inner.Length; i++)
            {
                n += int.Parse(inner.Substring(i, 1));
            }
        }
        Console.WriteLine(n);
    }
}

Problem 3 – Sand-glass

Once upon a time a powerful wizard was born. His name was Gwenogfryn and soon he became a great sorcerer. Kind-hearted he was. He would only use his magic to protect humans from the evil witches that would come at night. Gwenogfryn, however was a pacifist and did not want to fight or hurt the witches, so he came up with another solution. He would catch the witches and throw them into a sand-glass (the only prison a witch cannot escape from). Unfortunately, he is running out of sand-glasses. Help Gwenogfryn catch all witches by making your own sand-glasses.

Input

The input data should be read from the console.
You have an integer number N (always odd number) showing the height of the sand clock.
The input data will always be valid and in the format described. There is no need to check it explicitly.

Output

The output should be printed on the console.
You should print the hourglass on the console. Each row can contain only the following characters: “.” (dot) and “*” (asterisk). As shown in the example: the middle row must contain only one ‘*’ and all other symbols must be “.”. Every next row (up or down from the middle one) must contain the same number of ‘*’ as the previous one plus two. You should only use “.” to fill-in the rows, where necessary.

Constraints

·        The number N will be a positive integer number between 3 and 101, inclusive.
·        Allowed working time for your program: 0.25 seconds.
·        Allowed memory: 16 MB.

Examples

Input example
Output example
5


*****
.***.
..*..
.***.
*****
7
*******
.*****.
..***..
...*...
..***..
.*****.
*******


using System;
 
class SandGlass
{
    static void Main()
    {
        int n = int.Parse(Console.ReadLine());
 
        for (int i = 0; i < (n/2) + 1; i++)
        {
            Console.Write(new String('.', i));
            Console.Write(new String('*', n - i * 2));
            Console.WriteLine(new String('.', i));
        }
        for (int i = (n / 2) - 1; i >= 0; i--)
        {
            Console.Write(new String('.', i));
            Console.Write(new String('*', n - i * 2));
            Console.WriteLine(new String('.', i));
        }
    }
}

Problem 4 – Dancing Bits

Gergana loves dancing and she also likes bits (she doesn't know what bits really are, but she knows that she likes them). Few days ago she accidently invented a new term - “dancing bits”.
If you ask her what “dancing bits” mean she will tell you that it’s a sequence of identical bits (so the bits can dance together – zeros can only dance with other zeros, the same applies for ones).
You are given N positive integer numbers that are converted to binary numeral system and are concatenated together in one big sequence of bits.
For example: if we have 4 numbers: 5 (101 in binary numeral system), 6 (110 in binary numeral system), 14 (1110 in binary numeral system) and 143 (1000111 in binary numeral system) their concatenation will be 101110111010001111.
You are also given a positive integer K - the number of identical bits (zeroes or ones that can dance together).
Write a program that finds the number of all “dancing bits” (the sequences of equal bits) with a length of exactly K bits. Your program should search in the concatenation of the given N numbers.
For example, if we have 4 numbers (5, 6, 14 and 143, the concatenation of their binary representation is 101110111010001111) and we are searching for the total number of all sequences of equal bits with an exact length of 3 bits, the answer will be 3 (the sequences are bolded in the concatenation above).
In this example we have two sequences of “dancing bits” - "111" consisting of only ones and one sequence of “dancing bits” - "000" consisting of only zeros. Note that the sequence "1111" is not a sequence of exact 3 identical bits.

Input

The input data should be read from the console.
At the first input line there will be one positive integer – the number K.
At the second input line there will be another positive integer – the number N.
At each of the next N lines there will be one positive integer – the N numbers that represent the input sequence of bits.
The input data will always be valid and in the format described. There is no need to check it explicitly.

Output

The output data should be printed on the console.
The only output line must contain the answer – the number of “dancing bits” sequences found.

Constraints

·        The number K will be positive integer number between 1 and 25 600, inclusive.
·        The number N will be positive integer number between 1 and 800, inclusive.
·        Each of the N numbers will be positive integer numbers between 1 and 2 147 483 647, inclusive.
·        Allowed working time for your program: 0.20 seconds.
·        Allowed memory: 16 MB.

Examples

Input example
Output example
3
4
5
6
14
143
3

1
4
2
10
42
170
20



using System;
 
class DancingBits
{
    static void Main()
    {
        int k = int.Parse(Console.ReadLine());
        int n = int.Parse(Console.ReadLine());
 
        string allNumbers = "";
        for (int i = 0; i < n; i++)
        {
            allNumbers += Convert.ToString(int.Parse(Console.ReadLine()), 2);
        }
 
        int countDancingBits = 0;
        int charCount = 0;
        char lastChar = ' ';
        foreach (char currentChar in allNumbers)
        {
            if (currentChar != lastChar)
            {
                if (charCount == k)
                {
                    countDancingBits++;
                }
                charCount = 1;
                lastChar = currentChar;
            }
            else
            {
                charCount++;
            }
        }
 
        if (charCount == k)
        {
            countDancingBits++;
        }
 
        Console.WriteLine(countDancingBits);
    }
}

Problem 5 – Lines

You are given a list of 8 bytes (positive integers in the range [0…255]) n0, n1, …, n7. These numbers represent a square grid consisting of 8 lines and 8 columns. Each cell of the grid could either be empty or full. The first line is represented by the bits of n0, the second – by the bits of n1 and so on, and the last line is represented by the bits of n7. Each bit with value 1 denotes a full cell and each bit with value 0 denotes an empty cell. The lines are numbered from the first (top) to the last (bottom) with the numbers 0, 1, …, 7. The columns are numbered from right to left with the indices 0, 1, …, 7. The figure shows a sample square grid and its representation by a sequence of 8 numbers n0, n1, …, n7:

7
6
5
4
3
2
1
0

0







n0 = 8
1






n1 = 72
2







n2 = 8
3







n3 = 8
4







n4 = 16
5





n5 = 28
6




n6 = 240
7








n7 = 0
A line is any sequence of full cells staying on the same row or column. At the figure above we have two lines of 4 cells and two lines of 3 cells and one line of 1 cell. You need to create a program that finds the longest line in the grid and the number of lines with the longest length. At the figure we have two largest lines with length of 4 cells.

Input

The input data is should be read from the console. There will be exactly 8 lines each holding the integer numbers n0, n1, …, n7. It is guaranteed that there exists at least one line in the grid (the grid is not empty).
The input data will always be valid and in the format described. There is no need to check it explicitly.

Output

The output consists of two integers placed on separate lines. The first line should hold the length of the longest line in the grid. The second line should hold the number of lines with the maximal length.

Constraints

·        The numbers n0, n1, …, n7 are positive integers in the range [0…255].
·        Allowed work time for your program: 0.25 seconds.
·        Allowed memory: 16 MB.


Example

Input Example
Output Example
8
72
8
8
16
28
240
0
4
2


using System;
 
class Lines
{
    static void Main()
    {
        string [] rows = new string [8];
 
        byte lenghtLine = 0;
        byte numberLines = 0;
        
        for (int i = 0; i < 8; i++)
        {
            rows[i] = Convert.ToString(byte.Parse(Console.ReadLine()),2);
            byte lenghtCurrentLine = 0;
            foreach (char letter in rows[i])
         {
          if (letter == '1')
                {
                    lenghtCurrentLine++;
                    if (lenghtCurrentLine == lenghtLine)
                    {
                        numberLines++;
                    }
                    else if (lenghtCurrentLine > lenghtLine)
                    {
                        lenghtLine = lenghtCurrentLine;
                        numberLines = 1;
                    }
                }
                else
                {
                    lenghtCurrentLine = 0;
                }
         }
            rows[i] = rows[i].PadLeft(8,'0');
        }
 
        for (int i = 0; i < 8; i++)
        {
            byte lenghtCurrentLine = 0;
            for (int j = 0; j < 8; j++)
            {
                if (rows[i][j] == '1')
                {
                    lenghtCurrentLine++;
                    if (lenghtCurrentLine == lenghtLine)
                    {
                        numberLines++;
                    }
                    else if (lenghtCurrentLine > lenghtLine)
                    {
                        lenghtLine = lenghtCurrentLine;
                        numberLines = 1;
                    }
                }
                else
                {
                    lenghtCurrentLine = 0;
                }
            }
        }
        Console.WriteLine(lenghtLine);
        Console.WriteLine(numberLines);        
    }
}