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? ;)

  • + 4
  • 457
  • 14
  • 9

Answers

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

My result is 21.

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

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

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

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

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

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  ;)

16

https://gist.github.com/SeanConnelly/a5c603399109bcaca9d196a0d19be205

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.

I think you need  to call:

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

before compile.

I and [@Eduard Lebedyuk] came up with another solution. 28 symbols, though:

f p='""_+""-'"":-'"":"" w p

Do not forget about the method signature:

ClassMethod main() As %String

Need not print the number, but return it.

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("斚")
}