TON Smart Challenge #2

TON Smart Challenge es un concurso para desarrolladores de FunC con un fondo total de premio de más de 16.000 TON.

El objetivo del concurso

El objetivo del concurso

FunC tiene una empinada curva de aprendizaje y queremos ver más ejemplos de contratos fáciles y sencillos con amplios comentarios y documentación. Así que el objetivo principal es proporcionar un espacio lúdico de fácil acceso donde los desarrolladores puedan practicar y perfeccionar sus habilidades básicas de programación en FunC y tal vez recibir un premio en Toncoin. Tenga en cuenta que las mejores presentaciones se publicarán en GitHub.

Formato del concurso

Formato del concurso

Habrá 5 conceptos simples para implementar. Los conceptos se eligen para que sean fáciles de entender incluso para personas sin experiencia previa en FunC o en el desarrollo de contratos inteligentes.

Cada tarea se puntúa de 0 a 100 puntos dependiendo del número de pruebas superadas.

Cada ejecución del método get está limitada por 100 000 000 unidades de gas. Este límite es lo suficientemente alto como para descartar los bucles infinitos. Cualquier solución práctica, independientemente de lo optimizada que se encuentre, tendrá cabida.

El bot para recibir envíos es @toncontests_bot. El participante podrá enviar soluciones y recibir el resultado tras un breve retraso en la evaluación cualquier número de veces, pero no más de 5 veces por hora. La mejor solución enviada (con la mayor puntuación total entre las 5 tareas) se utilizará para determinar la clasificación final.

Los organizadores del concurso se reservan el derecho de publicar las soluciones de los participantes con nombres de usuario (decididos por los propios participantes) después del concurso.

El uso de gas no afectará a la clasificación. Las firmas de todas las funciones descritas en la tarea, las condiciones no deben ser modificadas.

Tarea 1: Máximo común divisor

Escriba el método que calcula el común divisor mayor de dos enteros mayores o iguales a 1 y menores que 1048576.

() recv_internal() { }(int) gcd(int a, int b) method_id { }

Leer más
Tarea 2: Fusionar hashmaps (diccionarios)

Escriba el método que fusiona dos hashmaps en uno. Cuando las claves de los hashmaps se cruzan - los valores del primer hashmap deben ser utilizados, mientras que los pares clave/valor descartados deben ser almacenados en un hashmap separado. El método debe devolver dos hashmaps (diccionario_fusionado, diccionario_descartado). Si alguno de los hashmaps resultantes está vacío, debe ser representado por un valor "nulo". La longitud de la clave del hashmap es de 256 bits. Cada hashmap tiene como máximo 256 elementos.

() recv_internal() { } (cell, cell) merge_hashmaps(cell dict1, cell dict2) method_id { }

Leer más
Tarea 3: (De)Serializar a la celda

Escriba el método que compruebe que la celda contiene un mensaje válido de acuerdo con repository Si el mensaje no es válido por cualquier razón - el método debería devolver (0, null), de lo contrario debería devolver (-1, [slice src, slice dest, int amount] ), donde src, dest y amount representan el origen del mensaje, el destino del mensaje y la cantidad adjunta de TON. Si alguno de esos valores no se presenta (o se presenta como slice addr_none) en la celda del mensaje - debe ser sustituido por null. Se garantiza que para todas las pruebas cualquier tipo de datos HashmapE en la estructura del mensaje es hashmaps vacío (tiene el constructor hme_empty).

() recv_internal() { } (int, tuple) validate_message(cell message) method_id { }

Leer más
Tarea 4: (De)Serializar hacia la celda

Escriba los métodos: a) para la serialización de la tupla de valores arbitrarios de diferentes tipos a la celda b) para la deserialización de la celda creada por el método anterior a la tupla original

El método serialize recibe como entrada una tupla con un número arbitrario de elementos de 0 a 128 (tanto 0 como 128 elementos están permitidos) y da como resultado la celda. Los elementos de la tupla pueden ser null, int, cell, slice, tuple (con las mismas limitaciones que la tupla original). Se garantiza que el nivel máximo de anidamiento de las tuplas es inferior a 4 y el número total de elementos inferior a 1024. El método deserialize obtiene una celda producida por el método serialize y debe devolver la tupla de origen.

() recv_internal() { } (cell) serialize(tuple values) method_id { } (tuple) deserialize(cell serialized) method_id { }

Leer más
Tarea 5: Codificador de direcciones

Escriba el método que para cualquier MsgAddressInt válido con el constructor addr_std (revise el repository) devuelve el slice que contiene la dirección rebotada codificada en ASCII base64url (sin test-only flag), revise la documentation

() recv_internal() { } (slice) encode_address(slice Address) method_id { }

Leer más

Premios y distinciones

Premios y distinciones

Los ganadores del concurso obtendrán premios nominados en Toncoin, la criptomoneda nativa de la cadena de bloques TON, que también se utiliza como recurso para la ejecución de contratos. Los premios se estiman sobre la base de que habrá alrededor de 500 participantes y pueden ajustarse si se obtienen muchas o pocas soluciones. Se prestará especial atención a la eliminación de bots. Los premios se otorgarán de acuerdo con la fórmula:
P = A*exp(-x*(B+1/N)), donde х - clasificación, N - número de participantes, A=100 y B=0,005.

Ganadores del concurso

Ganadores del concurso

Lugar

Nombre de usuario

Puntuación

Premio

1
Tindarid
500
190 + 500
1
BorMor
500
190 + 300
1
octechnics/6b75fc55-b8af-5105-9932-283525095768
500
190 + 200 + 30
1
admiral_karkar
500
190 + 100
1
pyAndr3w
500
190 + 400 + 30
1
Stanislav Povolotsky
500
190 + 100
1
noone
500
190
1
darkkcyan
500
190
1
crazyministr
500
190 + 100
1
nocriz
500
190 + 30
1
Gusarich
500
190 + 250
1
moadib
500
190
1
klim0v
500
190
1
denull
500
190
1
XaBbl4
500
190 + 30
1
Cobakka
500
190
1
mrboorger
500
190 + 50
1
@monnttes
500
190
1
stardust
500
190
1
️edudukin
500
190
1
kosrk
500
190
1
nns2009 | Igor Konyakhin
500
190
1
enikesha
500
190
1
NZT
500
190
1
Dong
500
190 + 30
1
receed
500
190
27
donjaron777
495
145
28
narco1eptic
486
143
29
stuxjkee
466
142
30
NO
451
140
31
a desirable username
450
139
31
rsj
450
139
31
wildstyl3r
450
139
31
mastooram
450
139
31
GSA05
450
139
31
vonavi
450
139
37
maxrr_
444
130
38
Arsenicum12
429
129
39
Ant16
420
128
39
Eugene40a
420
128
41
max_martynov
400
125
41
GhazalKazemi1998
400
125
43
nonam3e
394
122
44
Evgeny E
389
121
45
@trinketer22
380
120 + 30
46
chernovArs
359
119
47
vladimirtamara
355
117
48
flypew
350
116
49
R0m4n
340
115
49
d0rm1k
340
115
51
Piteryo
330
113
52
Modest Dolphin
321
111
53
overtired
300
110
53
arseny
300
110
53
thainik
300
110
53
tanya-creator
300
110
53
imtabako
300
110
58
behrang
294
105
58
JeffreyLC
294
105
58
Maxxi
294
105
58
zile
294
105
58
fjolne
294
105
63
zw
290
99
64
maxsimych
289
98
65
dsx
278
97
66
triangolooo
272
96
66
zvero60y
272
96
68
Shayan.To
266
94
69
azrael
265
93
70
Zalupa Konya
262
92
71
BunnyC
260
91
72
Konstantin Klyuchnikov | @knstntn_asuoki
257
90
73
aliravan
252
89 + 30
73
smirnoffkin
252
89
75
flag10
250
87
75
polka125
250
87
75
Virv
250
87
75
Vasilisa Gricocyeva
250
87
75
@SmartCoder_0
250
87
75
george
250
87
75
fme
250
87
75
littlefall
250
87
83
sulatskovalex
249
80
84
gultai4ukr
244
80
85
temazzz
226
79
86
aedobrynin
225
78
87
ser398
222
77
88
tikerlade
221
76
88
panzuwagen
221
76
90
ihorb
216
75
91
ivzakharov
211
74
92
ontawho
205
73
93
velkonost
201
72
93
andreyyurin
201
72
93
Crypto Maine Coon
201
72
93
PeskovMustaches
201
72
97
Igorfardoc
200
69
97
NKuznetosv
200
69
97
wselfjes
200
69
97
alina-erokhina
200
69
97
pantemon
200
69
97
AlbertoTDNeto
200
69
97
Saeed.Odak
200
69
97
@elnikovs
200
69
97
Andy Russo
200
69 + 30
97
Splish_Splash
200
69
97
kingsfoill
200
69
97
creatorAnastasia
200
69
97
vox
200
69
97
dimazhornyk
200
69
97
@thekiba
200
69
97
falcon-feather
200
69
97
Qzarov
200
69
97
robertoarmando
200
69
97
cat
200
69
97
vadim777
200
69
97
L Neres
200
69
97
DmitrijCode
200
69
97
FarAwayyFromHere
200
69
97
golova
200
69
97
jusikX
200
69
97
mmx86
200
69
97
Amin0x443
200
69
124
WayLander
190
52
125
GoodWolf
187
52
126
BelieveYourDream
185
51
126
LovelyEther
185
51
126
MexaHIK
185
51
129
seriouzly
155
50
130
Valera_Grinenko
150
49
130
jannis756
150
49
130
romanychev
150
49
130
vshemm
150
49
134
atread
136
47
135
available3124
135
47
135
PastDream
135
47
135
della
135
47
135
hel O world
135
47
140
imyster1o
130
44
140
psydvl
130
44
142
ArseniyTheParrot
115
43
142
smehnov
115
43
144
elis_alech
105
42
144
AlexLim78
105
42
144
Siddharth
105
42
147
RinRi
100
41
147
spike1236
100
41
147
Youssef El Shabrawii
100
41
147
XIN11
100
41
147
Niko919
100
41
147
truecarry
100
41
147
Visible1
100
41
147
miklemouse
100
41
147
karfly
100
41
147
psylopunk
100
41
147
leoriether
100
41
147
Denis Dvoretskiy
100
41
147
Everule
100
41
147
k_dizzled
100
41
147
makroz
100
41
147
Antony
100
41
147
belliavesha
100
41
147
nescampos
100
41
147
NickFromBSU
100
41
147
altershaman
100
41
147
dogIsuper
100
41
147
Mansurbek
100
41
147
liqwake
100
41
147
AntonIX
100
41
147
ihatecrypto
100
41
147
jorra
100
41
147
dwalkerr
100
41
147
desired-username-in-public-list
100
41
147
mishania2005
100
41
147
dersik
100
41
177
aleksv
95
30
178
mariocynicys
80
30
179
ThreeJ
75
30
180
Meress
50
29
181
vegan-cat
40
29

También hay bonificaciones más allá del fondo de premios básico, que se describen en el chat oficial del concurso.

Únase a la comunidad

Únase a la comunidad

Únase a una comunidad de desarrolladores interesados en construir sobre TON, desde el grupo de chat general sobre el lenguaje de programación FunC hasta el canal TON Contest.