Similar to previous years I will provide the results of our private leaderboard 

  • It will sort by published ranking but separate DC members from "guests"
  • The matching of DC members is a manual task 
  • if I missed you pls. let me know your identity in AoC by DC mail  to add your DC flag
  • due to private issue my updates might show delays sometimes
  • 2 test sets with results are available on OEX: AoC2024-test or GitHub: AoC2024_test
  • I just added a column to show completion of parts in the exercises
    • -  no part
    • 1 only part 1  (silver star)
    • 2 only part 2 (another silver star)
    • 3 1+2 both parts completed (gold star) 
DCrank  AOCrank Scores  Stars   ok%     ----- Code Parts OK -----       Name
0       ---     ----    ----    ---     ----*----*----*----*----*       --- DC Members ---
1       7       7361    50      100     3333333333333333333333333       abdul-manaan
2       8       7296    50      100     3333333333333333333333333       Yuval Golan
3       9       5310    36      72      3333333333333331331------       JFerreB
4       11      2598    18      36      333333333----------------       Peter Zubiago
5       13      2537    17      34      333333331----------------       Oskari Kosonen
6       14      2052    14      28      3333313---1--------------       Keith Avery
7       15      1928    13      26      3333331------------------       Jani Hurskainen
8       17      1639    11      22      333311--1----------------       Ivo ver eecke
9       18      1278    9       18      33331--------------------       TylerFeldhege
10      21      875     6       12      333----------------------       rhodery
11      23      695     5       10      331----------------------       Chris Marais
12      24      565     4       8       33-----------------------       Oliver Wilms
13      ---     ----    ----    ---     -------------------------       --- ISC internals ---
14      2       7592    50      100     3333333333333333333333333       TestSet 1
15      3       7545    50      100     3333333333333333333333333       TestSet 2
16      22      811     6       12      333----------------------       Junhee Lee
17      ---     ----    ----    ---     -------------------------       --- unknow in DC ---
18      1       7683    50      100     3333333333333333333333333       Dominik Znidar
19      4       7540    50      100     3333333333333333333333333       Joaquin Derrac Rus
20      5       7539    50      100     3333333333333333333333333       Jarjar 314
21      6       7527    50      100     3333333333333333333333333       (anonymous user #1128565)
22      10      3295    23      46      3333313-1331311----------       (anonymous user #4293990)
23      12      2569    18      36      33333-331-1-3------------       Sloan Kanaski
24      16      1902    13      26      33331111--1--------------       Chhayank Warad
25      19      1083    8       16      3333---------------------       Noah Dohrmann
26      20      1064    8       16      3333---------------------       (anonymous user #214666)
27      25      427     3       6       31-----------------------       Gary Nguyen
 
28 Rows(s) Affected
 
UTC 2024-12-30 08:28:42
EST 2024-12-30 03:28:42
 
ObjectScript
ObjectScript

Hi @Jeffrey Drumm ;
different approach: use your own datatype that always returns fixed MAXLEN string:

 

/// Make fixlength String according to MAXLEN parameter
Class rcc.GetFix Extends %Library.String
{
/// Fill value <var>%val</var> to <a href="#MAXLEN">MAXLEN</a> characters.
Method Get() As %String [ CodeMode = generator, ServerOnly = 1 ]
{
	set code="$e(%val_"""_$j("",+%parameter("MAXLEN"))
	set code=code_""",1,"_+%parameter("MAXLEN")_")"
	$$$GENERATE( "  Quit "_code)
	QUIT $$$OK
}
}
ObjectScript
ObjectScript

and a test class:

Class rcc.FixTest Extends %RegisteredObject
{
Property test As rcc.GetFix(MAXLEN = 12);
}
ObjectScript
ObjectScript

and now some check from terminal:
 

SAMPLES>set z=##class(rcc.FixTest).%New() set z.test="rob"
SAMPLES>write z.test,$L(z.test)
rob         12

SAMPLES>;some oversized string
SAMPLES>set z.test=";some oversized string"
SAMPLES>write z.test,$L(z.test)
;some oversi12
SAMPLES>  
ObjectScript
ObjectScript

Hope this helps you along
 

  • .MAC  and much more .INT  are an almost 1:1 image of the runtime .OBJ code
  • they get implicitely compiled by ZSAVE command
  • while any .CLS gets first stored with a lot of internal parameters where XML is faster than UDL
  • then it's translated to .INT(at least) including all extra params,  
  • and inherited pieces and other features for comfort 
  • and then compiled as any other .INT for the final .OBJ 

So comparing .CLS  to .MAC/.INT is like comparing a goat to the final cheese you buy.

A few questions:

  • my local IPv4 address in the ODBC connection
    • in ODBC you have to specify the IP address of the Caché server 
    • there you create the connection FROM YOUR local server
    • by default there's no connection outgoing from Caché
    • No need for your local IP - eventually for some firewalls
  • enabling remote access 
    • if you have username + PW from Caché you should have access
    • only some firewalls on server or client may block you
  • more important: what OS do you run on server and client ?    
  • and what type of connection do you try to establish ?  Web, SuperServer, Terminal, ... ?

To get the property position dynamically by program you may use this ClassMethod
 

ClassMethod PropSeq(classname As %String = "", propname As %String = "")
   As %String [ SqlProc ]
{
    if classname="" set classname=..%ClassName(1)
    set pos=0
    &sql(
        SELECT SequenceNumber INTO :pos 
        FROM %Dictionary.CompiledProperty
        WHERE transient=0
        AND parent=:classname
        AND name=:propname
    )
    if SQLCODE set pos="-1;"_SQLCODE
    quit pos
}
ObjectScript
ObjectScript

the example builds on the fact that the storage structure of the serial object is known

 Storage Default
{
<Data name="serItemState">
<Value name="1">
<Value>Subject</Value>
</Value>
<Value name="2">
<Value>Change</Value>
</Value>
<Value name="3">
<Value>Color</Value>
</Value>
</Data>
<State>serItemState</State>
<StreamLocation>^rcc.IC.serItemS</StreamLocation>

in this case color  is #3 in serial storage  ==>>  $list(%Value,3)

So you need to know the position of FamilyName in  HS.SDA3.Name (e.g.7 ?)

then you can use $list(%value,7) =  'Twain'   as condition

7 is just a guess as I don't have any HS* classes at hands