Written by

Senior Cloud Architect at InterSystems
MOD
Question Eduard Lebedyuk · Jun 6, 2017

Output 9876543210 without using numbers

Hi, Community!

Last weekend we held the Final of InterSystems Contest on InterSystems Caché and DeepSee as a part of IT Planet Student Championship in Sochi. BTW, this year we had about 2 000 participants in InterSystems Contest.

One of the tasks for the finals was to solve the following  with Caché ObjectScript and use the minimum code. 

Problem description

Write a method that would return the string 9876543210, however cls code should not contain numbers 0-9.

The goal is to write the shortest method.

Here's a method signature (it can't be modified):

ClassMethod main() As %String

And call sample:

USER>write ##class(ITPlanet.Task2).main()
9876543210

Also, here's the code to  check your result's length:

ClassMethod length(class = {$classname()}, method = "main") As %Integer
{
    #dim methodObj As %Dictionary.MethodDefinition
    set methodObj = ##class(%Dictionary.MethodDefinition).IDKEYOpen(class, method)
    quit methodObj.Implementation.Size
}

The best result was 25.

What's yours? ;)

Comments

Dmitry Maslennikov · Jun 6, 2017

It is not possible to past my result here, it will not work after that. But my result is 22.

Attached source with this method

contest.xml.zip

in expression mode it become 19

0
Alexander Koblov  Jun 6, 2017 to Vitaliy Serdtsev

So the question boils down to "How to represent 0 using two symbols"

0
Eduard Lebedyuk  Jun 6, 2017 to Sean Connelly

Awesome!

Check method reports 19.

0
Timothy Leavitt  Jun 6, 2017 to Timothy Leavitt

Oops, looks like Sean beat me by a few minutes!

0
Eduard Lebedyuk  Jun 6, 2017 to Timothy Leavitt

I think you need  to call:

Do UpdClsDef^%occLibrary("ITPlanet.Task2")

before compile.

0
Vitaliy Serdtsev  Jun 8, 2017 to Alexander Koblov

Do not forget about the method signature:

<FONT COLOR="#000080">ClassMethod </FONT><FONT COLOR="#000000">main() </FONT><FONT COLOR="#000080">As %String</FONT>
Need not print the number, but return it.
0
Vitaliy Serdtsev  Jun 6, 2017 to Alexander Koblov

Rhetorical question - for what?
If for fun, then this is possible.
But I will tell the solution here later.

0
Vitaliy Serdtsev  Jun 7, 2017 to Alexander Koblov

Ok, exclusively for fun.

I made some improvements and now my score is 9, but if you try very hard, even - 0!
Who less ? ;)

Here is the code:

Class ITPlanet.Task2 Abstract ]
{

Parameter p = {$zwbunpack("㤸㜶㔴㌲㄰")};

ClassMethod main() As %String
{
 ..#p
}

}Class ITPlanet.Test Abstract ]
{

ClassMethod length(
  class = {$classname()},
  method "main"As %Integer CodeMode = expression ]
{
##class(%Dictionary.MethodDefinition).IDKEYOpen(classmethod).Implementation.Size
}

ClassMethod test(makeDeploy = {$$$NO})
{
  ;do ##class(ITPlanet.Test).test()

  set classname="ITPlanet.Task2"
  set check=9876543210
  do:makeDeploy $system.OBJ.MakeClassDeployed(classname)
  set result=$classmethod(classname,"main")
  write !,result,!,check,
        !,"correct: ",$select(result=check:"yes",1:"no"),
        !,"length: ",..length(classname)
}

}
USER>do ##class(ITPlanet.Test).test()
 
9876543210
9876543210
correct: yes
length: 9
USER>do ##class(ITPlanet.Test).test(1)
 
9876543210
9876543210
correct: yes
length: 0
0
Alexander Koblov  Jun 7, 2017 to Vitaliy Serdtsev

Nice! Next step is "-1" or less :-)

0
Alexander Koblov  Jun 6, 2017 to Sean Connelly

Not always, If $T was set to 1 before, then it is not reseted on entering the method Main()

0
Vitaliy Serdtsev · Jun 6, 2017

My result is 21.

It is similar to the variant of Alexander, but only _+"".

0
Adam Skurek · Jun 6, 2017
Class ITPlanet.Task2 [ Abstract ]
{
 
ClassMethod Main() As %String
{
q $tr($h,",")
}
 

}

*You may need to set your date and time settings to 2111-05-30 12:00:10  ;)

0
Timothy Leavitt · Jun 6, 2017

19 in non-expression mode:

Set ^oddDEF("ITPlanet.Task2","m","main",30,1)=" q $lg("""_$c(7,4)_"ê"_$c(22)_"°L"_$c(2)_""")"
Do $System.OBJ.Compile("ITPlanet.Task2")

The actual class code contains a few control characters, but not ASCII 0-9.

0
Alexey Maslov · Jun 8, 2017

As large as 20 chars in expression mode.

/// ("鑔" = chǎ - small cymbals) * ("斚" = jiǎ - a small ancient stone cup for libations)ClassMethod main() As %String [ CodeMode = expression ]{$a("鑔")_$q*$a("斚")}
0