Гость
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Интересная задачка на Developer Community / 25 сообщений из 48, страница 1 из 2
30.05.2016, 16:59
    #39246363
Шваров Евгений
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересная задачка на Developer Community
Собственно задача

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

Блог InterSystems на Хабре http://habrahabr.ru/company/intersystems/
Каталог статей по технологиям InterSystems http://intersystems.ru/cache/devcorner/habrahabr.html
Видеоканал InterSystems Russia http://www.youtube.com/user/intersystemsrus
...
Рейтинг: 0 / 0
30.05.2016, 17:59
    #39246412
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересная задачка на Developer Community
Шваров Евгений,

как считать символы? пробелы, знаки учитываются? Программу в одну строку записывать?
...
Рейтинг: 0 / 0
30.05.2016, 18:13
    #39246429
DAiMor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересная задачка на Developer Community
Блок А.Н.Шваров Евгений,

как считать символы? пробелы, знаки учитываются? Программу в одну строку записывать?Пробелы значение имеют, в одну строку можно.
...
Рейтинг: 0 / 0
30.05.2016, 18:41
    #39246447
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересная задачка на Developer Community
Не, ребят, вы простите, но в одну строку - это ад.
Код: plaintext
1.
2.
3.
4.
5.
p(t,l="")
 q:t=""
 f i=1:1:9 s p=$f($lg($lb("","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"),i),$e(t)) q:p
 w:l=i " "
 f j=1:1:p-1 w i
 d p($e(t,2,*),i)
Я насчитал у себя (не считая строки с именем программы)
7+93+10+17+18=145 символов.
...
Рейтинг: 0 / 0
30.05.2016, 18:45
    #39246449
DAiMor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересная задачка на Developer Community
Блок А.Н.Не, ребят, вы простите, но в одну строку - это ад.
Код: plaintext
1.
2.
3.
4.
5.
p(t,l="")
 q:t=""
 f i=1:1:9 s p=$f($lg($lb("","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"),i),$e(t)) q:p
 w:l=i " "
 f j=1:1:p-1 w i
 d p($e(t,2,*),i)
Я насчитал у себя (не считая строки с именем программы)
7+93+10+17+18=145 символов.нужна функция, и тут 168 байт, считается вообще все, переводы строк тоже
...
Рейтинг: 0 / 0
30.05.2016, 18:51
    #39246454
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересная задачка на Developer Community
DAiMor,

уу, какие вы злые. Ладно, у меня все равно там ошибка (пробел неправильно кодируется).
Кстати, как он должен быть? У Евгения он кодируется нулем, это точно так было? Я уже забыл.
...
Рейтинг: 0 / 0
30.05.2016, 18:56
    #39246459
DAiMor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересная задачка на Developer Community
Блок А.Н.,

да в оригинальной задаче, пробел должен быть нулем
...
Рейтинг: 0 / 0
30.05.2016, 19:58
    #39246486
DAiMor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересная задачка на Developer Community
вот мой вариант на 153
Код: plaintext
1.
2.
3.
ToPhone(s = "")
{
 s r="",c=96,p=1 f p=2:1:9{s k="" f j=1:1:3+(p=7)+(p=9) s k=k_p,c($c($i(c)))=k} f i=1:1:$l(s){s n=$g(c($e(s,i)),0) s:$e(n)=$e(r,*) r=r_" " s r=r_n} q r
}
...
Рейтинг: 0 / 0
30.05.2016, 20:24
    #39246499
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересная задачка на Developer Community
DAiMor,

не понимаю, как вы считаете, у вас я насчитал 151 символ
А у себя 139
Код: plaintext
1.
p(t)
 s s="" f i=1:1:$l(t){s p=$f(" #######abc#def#ghi#jkl#mno#pqrstuv#wxyz",$e(t,i))-2 s:p\4=$e(s,*,*) s=s_" " f j=1:1:p#4+1 {s s=s_(p\4)}} q s
Но вообще у меня такое ощущение, что я делаю на спор что-то постыдное и мне завтра будет неудобно об этом вспоминать.
И глядя на это я уже перестаю понимать, как это работает.
...
Рейтинг: 0 / 0
30.05.2016, 21:20
    #39246533
DAiMor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересная задачка на Developer Community
Блок А.Н.,

Мощное решение, и тут даже можно сократить немного
Код: plaintext
1.
2.
p(t) {
 s s="" f i=1:1:$l(t){s p=$f(" #######abc#def#ghi#jkl#mno#pqrstuv#wxyz",$e(t,i))-2 s:p\4=$e(s,*) s=s_" " f j=1:1:p#4+1 s s=s_(p\4)} q s 
}
...
Рейтинг: 0 / 0
30.05.2016, 22:01
    #39246554
Шваров Евгений
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересная задачка на Developer Community
Блок А.Н.DAiMor,

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

Александр, опубликуйте на том форуме ваш вариант?
...
Рейтинг: 0 / 0
31.05.2016, 06:02
    #39246640
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересная задачка на Developer Community
Шваров Евгений,

опубликовал, хотя вообще боюсь писать на англоязычных форумах, у меня он на уровне неуверенного чтения.
если пишу, то приходится пользоваться переводчиками, а потом подбирать варианты многозначных слов, что довольно геморно.
Ну и с форумом пришлось побороться, как-то не с первого раза получилось.
...
Рейтинг: 0 / 0
31.05.2016, 09:42
    #39246752
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересная задачка на Developer Community
Блок А.Н. ,

Можно ещё немного ужать Ваш код:
Код: plaintext
1.
2.
3.
4.
5.
ClassMethod ToPhone(
  t,
  a = " #######abc#def#ghi#jkl#mno#pqrstuv#wxyz") As %String
{
 f i=1:1:$l(t){s p=$f(a,$e(t,i))-2,q=p\4 s:q=$e(s,*) s=s_" " f j=0:1:p#4 s s=s_q} q s
}
Примечание:
1) поскольку изначально приводился в качестве примера метод класса, то и я привожу метод класса;
2) код выше рассчитан на Undefined = 2 ;
3) я так и не понял как рассчитывается "размер кода", поэтому считайте сами, но в любом случае он на 11 символов дожен быть меньше.
...
Рейтинг: 0 / 0
31.05.2016, 10:31
    #39246819
MX-9
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересная задачка на Developer Community
129
Код: plaintext
s R="" f %=1:1:$l(t) f N=0:1:3 s 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
...
Рейтинг: 0 / 0
31.05.2016, 10:46
    #39246843
MX-9
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересная задачка на Developer Community
можно еще подсократить:
Код: plaintext
s R="" f %=1:1:$l(t) f N=0:1:3 s 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
...
Рейтинг: 0 / 0
31.05.2016, 10:58
    #39246857
MX-9
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересная задачка на Developer Community
Код: plaintext
s R="" f %=1:1:$l(t) f N=0:1:3 s 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)) надо
...
Рейтинг: 0 / 0
31.05.2016, 11:00
    #39246861
MX-9
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересная задачка на Developer Community
спасибо servit

исправлюсь
...
Рейтинг: 0 / 0
31.05.2016, 11:09
    #39246877
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересная задачка на Developer Community
servit Блок А.Н. ,

Можно ещё немного ужать Ваш код:
Код: plaintext
1.
2.
3.
4.
5.
ClassMethod ToPhone(
  t,
  a = " #######abc#def#ghi#jkl#mno#pqrstuv#wxyz") As %String
{
 f i=1:1:$l(t){s p=$f(a,$e(t,i))-2,q=p\4 s:q=$e(s,*) s=s_" " f j=0:1:p#4 s s=s_q} q s
}
Примечание:
1) поскольку изначально приводился в качестве примера метод класса, то и я привожу метод класса;
2) код выше рассчитан на Undefined = 2 ;
3) я так и не понял как рассчитывается "размер кода", поэтому считайте сами, но в любом случае он на 11 символов дожен быть меньше.Мне кажется, что это уже читерство.
...
Рейтинг: 0 / 0
31.05.2016, 11:13
    #39246883
DAiMor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересная задачка на Developer Community
Блок А.Н.Мне кажется, что это уже читерство.поддерживаю
...
Рейтинг: 0 / 0
31.05.2016, 11:40
    #39246936
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересная задачка на Developer Community
Блок А.Н.Мне кажется, что это уже читерство.Это обсуждаемо .
Но в любом случае f j=1:1:p#4+1 можно заменить на f j=0:1:p#4

PS: вариант MX-9 всё равно пока короче.
...
Рейтинг: 0 / 0
31.05.2016, 11:55
    #39246963
eduard93
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересная задачка на Developer Community
servit3) я так и не понял как рассчитывается "размер кода", поэтому считайте сами, но в любом случае он на 11 символов дожен быть меньше.
Проверка правильности и подсчёт длины
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
Class User.Validator
{

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

ClassMethod CheckOne(class, method, in, out)
{
  Return $ClassMethod(class, method, in) = out
}

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

}
...
Рейтинг: 0 / 0
31.05.2016, 13:53
    #39247172
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересная задачка на Developer Community
eduard93 ,

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

Особое спасибо за внесение ясности в формализацию подсчёта длины кода. Такие принципиальные вещи нельзя замалчивать, ведь это кардинально меняет подход к "решению" задачи.
Учитывая новые данные, окончательный код примет следующий вид:
Код: plaintext
1.
2.
3.
4.
5.
ClassMethod ToPhone(
  t,
  a = "(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.
...
Рейтинг: 0 / 0
31.05.2016, 13:55
    #39247174
Шваров Евгений
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересная задачка на Developer Community
Блок А.Н.Шваров Евгений,

опубликовал, хотя вообще боюсь писать на англоязычных форумах, у меня он на уровне неуверенного чтения.
если пишу, то приходится пользоваться переводчиками, а потом подбирать варианты многозначных слов, что довольно геморно.
Ну и с форумом пришлось побороться, как-то не с первого раза получилось.
Хорошо получилось, спасибо!
...
Рейтинг: 0 / 0
31.05.2016, 14:05
    #39247185
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересная задачка на Developer Community
Вот ещё https://wwwx.youtube.com/watch?v=-h2EuNe9AOA#t=70
...
Рейтинг: 0 / 0
31.05.2016, 16:38
    #39247396
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересная задачка на Developer Community
MX-9
Код: plaintext
s R="" f %=1:1:$l(t) f N=0:1:3 s 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
Ваш код можно ещё немного ужать:
Код: plaintext
s R="" f %=1:1:$l(t) f N=0:1:3 s 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
...
Рейтинг: 0 / 0
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Интересная задачка на Developer Community / 25 сообщений из 48, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]