Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Интересная задачка на Developer Community  [new]
Шваров Евгений
Member

Откуда:
Сообщений: 845
Собственно задача

Это была задача на финал ИТ-Планеты в Екатеринбурге.
Студенты решили за 192 символа.
А у вас что получится?)

Блог InterSystems на Хабре http://habrahabr.ru/company/intersystems/
Каталог статей по технологиям InterSystems http://intersystems.ru/cache/devcorner/habrahabr.html
Видеоканал InterSystems Russia http://www.youtube.com/user/intersystemsrus
Группа Isc Meetup в Facebook https://www.facebook.com/groups/mskiscmeetup/
Группа InterSystems University в Вконтакте https://vk.com/isc.university
Твиттер InterSystems Russia http://twitter.com/InterSystemsRU
30 май 16, 16:59    [19237225]     Ответить | Цитировать Сообщить модератору
 Re: Интересная задачка на Developer Community  [new]
Блок А.Н.
Member

Откуда: Новосибирск
Сообщений: 3776
Шваров Евгений,

как считать символы? пробелы, знаки учитываются? Программу в одну строку записывать?
30 май 16, 17:59    [19237658]     Ответить | Цитировать Сообщить модератору
 Re: Интересная задачка на Developer Community  [new]
DAiMor
Member

Откуда: Volzhsky -> Moscow -> CZ, Brno
Сообщений: 2593
Блок А.Н.
Шваров Евгений,

как считать символы? пробелы, знаки учитываются? Программу в одну строку записывать?
Пробелы значение имеют, в одну строку можно.
30 май 16, 18:13    [19237739]     Ответить | Цитировать Сообщить модератору
 Re: Интересная задачка на Developer Community  [new]
Блок А.Н.
Member

Откуда: Новосибирск
Сообщений: 3776
Не, ребят, вы простите, но в одну строку - это ад.
+
p(t,l="")
 
q:t=""
 
i=1:1:9 p=$f($lg($lb("","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"),i),$e(t)) q:p
 
w:l=" "
 
j=1:1:p-1 i
 
p($e(t,2,*),i)
Я насчитал у себя (не считая строки с именем программы)
7+93+10+17+18=145 символов.
30 май 16, 18:41    [19237843]     Ответить | Цитировать Сообщить модератору
 Re: Интересная задачка на Developer Community  [new]
DAiMor
Member

Откуда: Volzhsky -> Moscow -> CZ, Brno
Сообщений: 2593
Блок А.Н.
Не, ребят, вы простите, но в одну строку - это ад.
+
p(t,l="")
 
q:t=""
 
i=1:1:9 p=$f($lg($lb("","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"),i),$e(t)) q:p
 
w:l=" "
 
j=1:1:p-1 i
 
p($e(t,2,*),i)
Я насчитал у себя (не считая строки с именем программы)
7+93+10+17+18=145 символов.
нужна функция, и тут 168 байт, считается вообще все, переводы строк тоже
30 май 16, 18:45    [19237852]     Ответить | Цитировать Сообщить модератору
 Re: Интересная задачка на Developer Community  [new]
Блок А.Н.
Member

Откуда: Новосибирск
Сообщений: 3776
DAiMor,

уу, какие вы злые. Ладно, у меня все равно там ошибка (пробел неправильно кодируется).
Кстати, как он должен быть? У Евгения он кодируется нулем, это точно так было? Я уже забыл.
30 май 16, 18:51    [19237872]     Ответить | Цитировать Сообщить модератору
 Re: Интересная задачка на Developer Community  [new]
DAiMor
Member

Откуда: Volzhsky -> Moscow -> CZ, Brno
Сообщений: 2593
Блок А.Н.,

да в оригинальной задаче, пробел должен быть нулем
30 май 16, 18:56    [19237890]     Ответить | Цитировать Сообщить модератору
 Re: Интересная задачка на Developer Community  [new]
DAiMor
Member

Откуда: Volzhsky -> Moscow -> CZ, Brno
Сообщений: 2593
вот мой вариант на 153
ToPhone(s = "")
{
 
r="",c=96,p=1 p=2:1:9{k="" j=1:1:3+(p=7)+(p=9) k=k_p,c($c($i(c)))=ki=1:1:$l(s){n=$g(c($e(s,i)),0) s:$e(n)=$e(r,*) r=r_" " r=r_nr
}
30 май 16, 19:58    [19238006]     Ответить | Цитировать Сообщить модератору
 Re: Интересная задачка на Developer Community  [new]
Блок А.Н.
Member

Откуда: Новосибирск
Сообщений: 3776
DAiMor,

не понимаю, как вы считаете, у вас я насчитал 151 символ
А у себя 139
p(t)
 
s="" i=1:1:$l(t){p=$f(" #######abc#def#ghi#jkl#mno#pqrstuv#wxyz",$e(t,i))-2 s:p\4=$e(s,*,*) s=s_" " j=1:1:p#4+1 {s=s_(p\4)}} s
Но вообще у меня такое ощущение, что я делаю на спор что-то постыдное и мне завтра будет неудобно об этом вспоминать.
И глядя на это я уже перестаю понимать, как это работает.
30 май 16, 20:24    [19238054]     Ответить | Цитировать Сообщить модератору
 Re: Интересная задачка на Developer Community  [new]
DAiMor
Member

Откуда: Volzhsky -> Moscow -> CZ, Brno
Сообщений: 2593
Блок А.Н.,

Мощное решение, и тут даже можно сократить немного
p(t) {
 
s="" i=1:1:$l(t){p=$f(" #######abc#def#ghi#jkl#mno#pqrstuv#wxyz",$e(t,i))-2 s:p\4=$e(s,*) s=s_" " j=1:1:p#4+1 s=s_(p\4)
}
30 май 16, 21:20    [19238243]     Ответить | Цитировать Сообщить модератору
 Re: Интересная задачка на Developer Community  [new]
Шваров Евгений
Member

Откуда:
Сообщений: 845
Блок А.Н.
DAiMor,

не понимаю, как вы считаете, у вас я насчитал 151 символ
А у себя 139
p(t)
 
s="" i=1:1:$l(t){p=$f(" #######abc#def#ghi#jkl#mno#pqrstuv#wxyz",$e(t,i))-2 s:p\4=$e(s,*,*) s=s_" " j=1:1:p#4+1 {s=s_(p\4)}} s
Но вообще у меня такое ощущение, что я делаю на спор что-то постыдное и мне завтра будет неудобно об этом вспоминать.
И глядя на это я уже перестаю понимать, как это работает.
Круто.
Я там предложил уже 2 варианта давать - читабельный для понимания идеи, и такой вот.

Александр, опубликуйте на том форуме ваш вариант?
30 май 16, 22:01    [19238371]     Ответить | Цитировать Сообщить модератору
 Re: Интересная задачка на Developer Community  [new]
Блок А.Н.
Member

Откуда: Новосибирск
Сообщений: 3776
Шваров Евгений,

опубликовал, хотя вообще боюсь писать на англоязычных форумах, у меня он на уровне неуверенного чтения.
если пишу, то приходится пользоваться переводчиками, а потом подбирать варианты многозначных слов, что довольно геморно.
Ну и с форумом пришлось побороться, как-то не с первого раза получилось.
31 май 16, 06:02    [19238736]     Ответить | Цитировать Сообщить модератору
 Re: Интересная задачка на Developer Community  [new]
servit
Member

Откуда: г. Кишинёв, Республика Молдова
Сообщений: 3116
Блог
Блок А.Н.,

Можно ещё немного ужать Ваш код:
ClassMethod ToPhone(
  
t,
  
" #######abc#def#ghi#jkl#mno#pqrstuv#wxyz"As %String
{
 
i=1:1:$l(t){p=$f(a,$e(t,i))-2,q=p\4 s:q=$e(s,*) s=s_" " j=0:1:p#4 s=s_qs
}
Примечание:
1) поскольку изначально приводился в качестве примера метод класса, то и я привожу метод класса;
2) код выше рассчитан на Undefined = 2;
3) я так и не понял как рассчитывается "размер кода", поэтому считайте сами, но в любом случае он на 11 символов дожен быть меньше.
31 май 16, 09:42    [19239145]     Ответить | Цитировать Сообщить модератору
 Re: Интересная задачка на Developer Community  [new]
MX-9
Member

Откуда: LIBAVA
Сообщений: 386
129
R="" %=1:1:$l(tN=0:1:3 s=$a($e(t,%)),n=$f("adgjmptw ",$c(s-N)) s:n n=n#10,R=R_$e(" ",R_-1[(n_-1))_$e(n_n_n_n,1,N+1),N=9

если оформить как функцию то 129+9 = 138
31 май 16, 10:31    [19239463]     Ответить | Цитировать Сообщить модератору
 Re: Интересная задачка на Developer Community  [new]
MX-9
Member

Откуда: LIBAVA
Сообщений: 386
можно еще подсократить:
R="" %=1:1:$l(tN=0:1:3 n=$f("adgjmptw ",$c($a($e(t,%))-N)) s:n n=n#10,R=R_$e(" ",R_-1[(n_-1))_$e(n_n_n_n,1,N+1),N=9
31 май 16, 10:46    [19239591]     Ответить | Цитировать Сообщить модератору
 Re: Интересная задачка на Developer Community  [new]
MX-9
Member

Откуда: LIBAVA
Сообщений: 386
R="" %=1:1:$l(tN=0:1:3 n=$f("adgjmptw ",$c($a($e(t,%))-N)) s:n n=n#10,R=R_$e(" ",R_-1[(n_-1))_$e(n_n_n_n,1,N+1),N=9

скобку -N)) надо
31 май 16, 10:58    [19239691]     Ответить | Цитировать Сообщить модератору
 Re: Интересная задачка на Developer Community  [new]
MX-9
Member

Откуда: LIBAVA
Сообщений: 386
спасибо servit

исправлюсь
31 май 16, 11:00    [19239717]     Ответить | Цитировать Сообщить модератору
 Re: Интересная задачка на Developer Community  [new]
Блок А.Н.
Member

Откуда: Новосибирск
Сообщений: 3776
servit
Блок А.Н.,

Можно ещё немного ужать Ваш код:
ClassMethod ToPhone(
  
t,
  
" #######abc#def#ghi#jkl#mno#pqrstuv#wxyz"As %String
{
 
i=1:1:$l(t){p=$f(a,$e(t,i))-2,q=p\4 s:q=$e(s,*) s=s_" " j=0:1:p#4 s=s_qs
}
Примечание:
1) поскольку изначально приводился в качестве примера метод класса, то и я привожу метод класса;
2) код выше рассчитан на Undefined = 2;
3) я так и не понял как рассчитывается "размер кода", поэтому считайте сами, но в любом случае он на 11 символов дожен быть меньше.
Мне кажется, что это уже читерство.
31 май 16, 11:09    [19239810]     Ответить | Цитировать Сообщить модератору
 Re: Интересная задачка на Developer Community  [new]
DAiMor
Member

Откуда: Volzhsky -> Moscow -> CZ, Brno
Сообщений: 2593
Блок А.Н.
Мне кажется, что это уже читерство.
поддерживаю
31 май 16, 11:13    [19239854]     Ответить | Цитировать Сообщить модератору
 Re: Интересная задачка на Developer Community  [new]
servit
Member

Откуда: г. Кишинёв, Республика Молдова
Сообщений: 3116
Блог
Блок А.Н.
Мне кажется, что это уже читерство.
Это обсуждаемо.
Но в любом случае j=1:1:p#4+1 можно заменить на j=0:1:p#4

PS: вариант MX-9 всё равно пока короче.
31 май 16, 11:40    [19240084]     Ответить | Цитировать Сообщить модератору
 Re: Интересная задачка на Developer Community  [new]
eduard93
Member

Откуда:
Сообщений: 163
servit
3) я так и не понял как рассчитывается "размер кода", поэтому считайте сами, но в любом случае он на 11 символов дожен быть меньше.
+ Проверка правильности и подсчёт длины
Class User.Validator
{

/// do ##class(User.Validator).Check("User.Converter","ToPhoneNew")
ClassMethod 
Check(class "User.Converter"method "ToPhoneNew")
{
  
Write "Checks: "
  
Write ..CheckOne(classmethod"hi""44 444")
  
Write ..CheckOne(classmethod"yes""999337777")
  
Write ..CheckOne(classmethod"foo  bar""333666 6660 022 2777")
  
Write ..CheckOne(classmethod"hello world","4433555 555666096667775553")
  
Write ..CheckOne(classmethod"st uvw xyz","77778088 8889099 999 9999")
  
Write ..CheckOne(classmethod"abcdefghijklmnopqrstuvwxyz","2 22 2223 33 3334 44 4445 55 5556 66 6667 77 777 77778 88 8889 99 999 9999")
  
Write !,"Length: "
  
Write ..MethodLength(classmethod)
}

ClassMethod CheckOne(classmethodinout)
{
  
Return $ClassMethod(classmethodin) = out
}

ClassMethod MethodLength(classmethod)
{
  
Set ##class(%Dictionary.CompiledMethod).IDKEYOpen(classmethod)
  
Set body m.Implementation.Read(10000)
  
Return $Length(body)
}

}
31 май 16, 11:55    [19240193]     Ответить | Цитировать Сообщить модератору
 Re: Интересная задачка на Developer Community  [new]
servit
Member

Откуда: г. Кишинёв, Республика Молдова
Сообщений: 3116
Блог
eduard93,

Т.е. метод должен быть обязательно классовым.

Особое спасибо за внесение ясности в формализацию подсчёта длины кода. Такие принципиальные вещи нельзя замалчивать, ведь это кардинально меняет подход к "решению" задачи.
+ Учитывая новые данные, окончательный код примет следующий вид:
ClassMethod ToPhone(
  
t,
  
"(t){s s="" f i=1:1:$l(t) {f N=0:1:3 s n=$f(""adgjmptw "",$c($a($e(t,i))-N)) s:n n=n#10,s=s_$e("" "",s_-1[(n_-1))_$e(n_n_n_n,1,N+1),N=9} q s}"As %String CodeMode = expression ]
{
$xecute(a,t)
}
Размер кода метода - 14 символов. Всё согласно ТЗ и для любого Undefined.
31 май 16, 13:53    [19240909]     Ответить | Цитировать Сообщить модератору
 Re: Интересная задачка на Developer Community  [new]
Шваров Евгений
Member

Откуда:
Сообщений: 845
Блок А.Н.
Шваров Евгений,

опубликовал, хотя вообще боюсь писать на англоязычных форумах, у меня он на уровне неуверенного чтения.
если пишу, то приходится пользоваться переводчиками, а потом подбирать варианты многозначных слов, что довольно геморно.
Ну и с форумом пришлось побороться, как-то не с первого раза получилось.

Хорошо получилось, спасибо!
31 май 16, 13:55    [19240916]     Ответить | Цитировать Сообщить модератору
 Re: Интересная задачка на Developer Community  [new]
servit
Member

Откуда: г. Кишинёв, Республика Молдова
Сообщений: 3116
Блог
Вот ещё другие задачки с IT-Planet 2015 (номинация InterSystems).
31 май 16, 14:05    [19240987]     Ответить | Цитировать Сообщить модератору
 Re: Интересная задачка на Developer Community  [new]
servit
Member

Откуда: г. Кишинёв, Республика Молдова
Сообщений: 3116
Блог
MX-9
R="" %=1:1:$l(tN=0:1:3 n=$f("adgjmptw ",$c($a($e(t,%))-N)) s:n n=n#10,R=R_$e(" ",R_-1[(n_-1))_$e(n_n_n_n,1,N+1),N=9
Ваш код можно ещё немного ужать:
R="" %=1:1:$l(tN=0:1:3 n=$f("adgjmptw ",$c($a($e(t,%))-N)) s:n n=n#10,R=R_$e(" ",$e(R,*)=n)_$e(n*1111,1,N+1),N=9
31 май 16, 16:38    [19242049]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M Ответить