Вверх ↑
Этот топик читают: Гость
Ответов: 970
Рейтинг: 270
#1: 2010-09-12 23:13:33 ЛС | профиль | цитата
А не порезвиться ли нам с кодом в честь праздника?

Предлагаю либо кратко(по правилам codegolf), либо изящным ASCII-артом, либо просто весело c юмором решить вот такую вот задачку:
Дано текстовое сообщение с поздравлением(«С днем программиста!»). К сожалению набор сообщения осуществлялся на неисправной клавиатуре: клавиши очень сильно залипали и символы напечатались по несколько раз. Необходимо преобразовать это неправильное сообщение в несколько одинаковых «правильных» предложений. При этом следует учитывать, что символов можно использовать ровно столько, сколько их было в исходном, поэтому при исчерпании символов вместо них вставлять пробелы.


Пример:
вход:
«ССС дддннннннеееееемммм ппппппрррррооооооггггггрррррааааааммммммммииииииссссссттттттаааааа!!!!!!»
выход:
С днем программиста!
С днем программиста!
С днем программиста!
нем программиста!
не програ иста!
не п ог а иста!


PS. Для усложнения можно перепутать порядок букв и исходном сообщении.
PPS. Разработчики БД могут считать, что входом является таблица, состоящая из односимвольного поля и содержащая введенный текст посимвольно.
PPPS. ASCII-арт в топике — это 99 бутылок пива к хабрафуршету в честь праздника
PPPPS. Хабрачитатели могут слать мне решения на programmers.day@gmail.com


Источник

То же самое, только на HiAsm
------------ Дoбавленo в 23.13:
Самая большая схема, да ещё с костылями и с проблемами масштабируемости:


Add(MainForm,2953706,210,357)
{
link(onCreate,16732599:doData,[])
}
Add(DoData,16732599,266,371)
{
Data=String(CCC дддннннннеееееемммм ппппппрррррооооооггггггрррррааааааммммммммииииииссссссттттттаааааа!!!!!!)
link(onEventData,13823035:doWork1,[])
}
Add(MultiElement,13823035,322,371)
{
link(onEvent1,13023161:doMessage,[])
}
BEGIN_SDK
Add(EditMulti,12743634,21,21)
{
EventCount=1
WorkCount=1
Width=1105
Height=557
link(doWork1,2551932:doReplace,[(45,27)(45,111)])
}
Add(StrList,1790778,252,161)
{
Point(onGetIndex)
Point(doGetIndex)
link(onGetIndex,237252:doValue,[])
}
Add(CharArray,8767582,119,105)
{
link(onLoad,8650060:doCount,[(165,111)(165,149)(107,149)(107,167)])
}
Add(ArrayCountRepeats,8650060,119,161)
{
link(onCount,10877864:doSeparateMT,[])
link(onEndCount,1774722:doWork1,[(160,174)])
link(Array,8767582:Array,[])
}
Add(MT_MultiData,10877864,175,161)
{
link(onData1,1790778:doAdd,[])
link(onData2,13408080:doAdd,[(236,174)(236,132)])
}
Add(StrList,13408080,357,126)
{
Point(onGetString)
Point(doGetString)
link(onGetString,3117069:doCase,[])
}
Add(Case,3117069,413,133)
{
Value=String(0)
link(onNextCase,5362397:doValue,[])
link(onTrue,3555161:doData,[(457,146)(457,177)(648,177)(648,146)])
}
Add(ArrayEnum,14767397,182,294)
{
link(onItem,1790778:doGetIndex,[(233,300)(233,209)])
link(onEndEnum,14095146:doData,[(503,307)(503,202)])
link(Array,13226017:Array,[])
}
Add(ArrayRW,15067827,371,217)
{
link(Array,16418868:Var2,[])
link(Index,237252:Value,[(384,207)(307,207)])
}
Add(Memory,5362397,469,133)
{
link(onData,3731564:doCalc,[])
}
Add(DoData,11682113,609,133)
{
link(onEventData,877187:doWork2,[])
link(Data,7779374:Var,[])
}
Add(LineBreak,4088562,182,350)
{
Caption="b"
Type=1
link(Data,14767397:Item,[])
Primary=[7779374,427,-245]
}
Add(StrList,13536637,770,133)
{
}
Add(MathParse,3731564,525,133)
{
DataCount=1
MathStr="%1 - 1"
link(onResult,931945:doEvent1,[])
}
Add(Hub,931945,574,133)
{
link(onEvent1,11682113:doData,[])
link(onEvent2,15067827:doWrite,[(595,146)(595,190)(359,190)(359,230)])
}
Add(HubEx,877187,700,133)
{
link(onEvent,13536637:doAdd,[])
}
Add(DoData,3555161,658,140)
{
Data=String( )
link(onEventData,877187:doWork3,[(704,146)])
}
Add(DoData,14095146,770,196)
{
link(onEventData,11364581:doReplace,[])
link(Data,13536637:Text,[])
}
Add(StrList,13226017,168,224)
{
Strings=#1:C|1: |1:д|1:н|1:е|1:м|1: |1:п|1:р|1:о|1:г|1:р|1:а|1:м|1:м|1:и|1:с|1:т|1:а|1:!|
}
Add(Memory,237252,301,168)
{
link(onData,13408080:doGetString,[])
}
Add(Replace,11364581,819,196)
{
SubStr="
"
link(onReplace,9166956:doEvent1,[])
}
Add(ArraySum,372869,413,252)
{
ArrayType=1
link(onSum,5547542:doCase,[])
link(Array,16418868:Var3,[(419,194)])
}
Add(GetDataEx,16418868,371,189)
{
link(Data,13408080:Array,[])
}
Add(LineBreak,14917506,364,252)
{
Caption="wo"
link(Out,372869:doSum,[])
Primary=[6832758,539,-49]
}
Add(Case,5547542,455,252)
{
Value=Integer(0)
link(onNextCase,1774722:doWork3,[(494,258)(494,286)])
link(onTrue,4931312:doOperation,[])
}
Add(StrList,13771164,945,196)
{
}
Add(Hub,9166956,868,196)
{
link(onEvent1,13771164:doAdd,[])
link(onEvent2,6832758:In,[])
}
Add(HubEx,1774722,156,280)
{
Angle=1
link(onEvent,14767397:doEnum,[(160,300)])
}
Add(Replace,2551932,70,105)
{
SubStr=" "
link(onReplace,8767582:doLoad,[])
}
Add(ArrayRW,5657784,959,259)
{
link(onRead,6531054:doReplace,[])
link(Array,13771164:Array,[])
}
Add(Math,4931312,910,259)
{
OpType=1
Op2=1
link(onResult,5657784:doRead,[])
link(Op1,13771164:Count,[(916,250)(958,250)])
}
Add(Replace,6531054,1008,259)
{
SubStr="!"
DestStr="!
"
link(onReplace,12743634:onEvent1,[(1083,265)(1083,27)])
}
END_SDK
Add(Message,13023161,378,371)
{
}



карма: 0

0
Разработчик
Ответов: 4698
Рейтинг: 426
#2: 2010-09-13 14:38:21 ЛС | профиль | цитата
Хы, а так твоя не работает
code_20575.txt
И кстати, моя что-то выдает лишние строки, но вот лишние ли они? Либо в примере неверно показаны результаты, либо я напортачил:
code_20576.txt
карма: 10
0
файлы: 2code_20575.txt [3.9KB] [688], code_20576.txt [4.7KB] [649]
2
Сообщение
...
Прикрепленные файлы
(файлы не залиты)