Masas molares de compuestos

14

Tarea

Escriba un programa que tome un compuesto hecho únicamente de elementos con un número atómico menor o igual a 92 (Uranio), y genera la masa molar del compuesto en grams/mole.

Reglas y restricciones

  • No puede usar una función que calcule directamente las masas molares por usted.
  • Su programa debe poder ejecutarse en una máquina fuera de línea.
  • PUEDE usar un archivo de datos separado. Se debe proporcionar el contenido de este archivo.
  • Su puntaje es la longitud de su programa en bytes, más la longitud de su archivo de datos en bytes, en caso de que elija usar uno.
  • Este es el , por lo tanto, gana la puntuación más baja.

Entrada

Una cadena que contiene el compuesto. Esta cadena puede leerse STDIN, pasarse como argumento o establecerse en una variable (especifique cuál). Las siguientes son todas las entradas válidas:

  • CH2 (un carbono, dos hidrógenos)
  • (CH2)8 (8 Carbones, 16 Hidrógenos)
  • U (1 uranio)

No es necesario que su programa funcione para paréntesis incrustados (es decir ((CH3)2N4)4 ), ni para ningún compuesto que contenga un elemento con un número atómico mayor que 92. Si su programa no funciona para ninguno de los dos casos anteriores, debe generar resultados Invalid formulapara tales casos: Sin comportamiento indefinido.

Salida

Debe generar, STDOUTao para una variable, la masa molar del compuesto en grams/mole. Una lista de masas atómicas de elementos está disponible aquí (Wikipedia) . Su respuesta debe ser precisa al lugar decimal para los compuestos que contienen menos de 100 átomos (redondeados).

Si la entrada no es válida, se Invalid formuladebe generar.

Información sobre el cálculo de la masa molar de un compuesto en grams/mole(Wikipedia).

Ejemplos

Input                   Output
H2O                     18.015
O                       15.999 (16 acceptable)
C6H2(NO2)3CH3           227.132
FOOF                    69.995
C6H12Op3                Invalid formula
Np                      237 (or Invalid formula)
((C)3)4                 144.132 (or Invalid formula)
CodeGolf                Invalid formula
es1024
fuente
1
"al punto decimal" - ¿para qué tan grandes moléculas? La masa de U1000000es más difícil de determinar al punto decimal que la masa deU2
John Dvorak
al punto decimal para moléculas con menos de 100 átomos. Se agregó esto a la declaración de la pregunta.
es1024
También supongo que se me permite salir 13si la masa atómica es 12.999?
John Dvorak
1
Eso no suena bien @ es1024. 13, ok, pero 12?
RubberDuck
1
"Su respuesta debe ser precisa al lugar decimal" ¿eso significa un decimal o el entero más cercano?

Respuestas:

5

Golpetazo, 978 708 675 673 650 636 632 631 598 594

211 bytes para el programa y 382 bytes para los datos.

La entrada está en STDIN, la salida está en STDOUT. ADVERTENCIA: crea archivos llamados gy a, si existen, se sobrescribirán.

zcat y>g 2>a
s=(`sed 's/[A-Z][a-z]*/& /g;q'<g`)
p=1.008
v=`sed 's/[0-9]\+/*&/g;s/(/+(0/g'`
r=(`tail -1 g`)
for n in {0..91};{
p=`bc<<<$p+${r[n]}`
v=${v//${s[n]}/+$p}
}
o=`bc<<<0$v 2>a`
echo ${o:-Invalid formula}

Archivo de datos

Esto requiere un archivo llamado y, que es la forma comprimida con zopfli de estos datos (sin línea nueva). zopfli es un algoritmo de compresión compatible con gzip y puede descomprimirse con herramientas estándar de gzip. Se ejecutó con 1024 iteraciones (esto probablemente sea demasiado). Los últimos 8 bytes fueron eliminados.

HHeLiBeBCNOFNeNaMgAlSiPSClKArCaScTiVCrMnFeNiCoCuZnGaGeAsSeBrKrRbSrYZrNbMoTcRuRhPdAgCdInSnSbITeXeCsBaLaCePrNdPmSmEuGdTbDyHoErTmYbLuHfTaWReOsIrPtAuHgTlPbBiPoAtRnFrRaAcPaThU
0 2.995 2.937 2.072 1.798 1.201 1.996 1.992 2.999 1.182 2.81 1.315 2.677 1.103 2.889 1.086 3.39 3.648 .850 .130 4.878 2.911 3.075 1.054 2.942 .907 2.848 .24 4.613 1.834 4.346 2.904 2.292 4.038 .944 3.894 1.670 2.152 1.286 2.318 1.682 3.054 2.04 3.07 1.836 3.514 1.448 4.543 2.407 3.892 3.050 5.144 .696 3.693 1.612 4.422 1.578 1.211 .792 3.334 .758 5.36 1.604 5.286 1.675 3.575 2.43 2.329 1.675 4.120 1.913 3.523 2.458 2.892 2.367 4.023 1.987 2.867 1.883 3.625 3.788 2.82 1.78 .02 1 12 1 3 1 4.036 1.002 5.991

La base64 de yes (se usa base64 -dpara reproducir el archivo original):

H4sIAAAAAAACAwTB226DMAwA0G9LvEJQIbVi70LfHPBoJAiSaR729zsnBB2LVw/x0UWNMm1up4IE
+90ZCC1cvsCm2mkscEJ71l56dRept7ulTDY/Lebp5CW19MLVbbAOlSrlgfVH4fIyCihaXPGg49b6
lfPHXzhvxsecxxZ+Wb6TPq7B8O1a2HjH7Aue7p1qZ0ncgsKvz/8WxuRGoigGgfcfxYvA8r7kn9iA
ei6ohAt/+lzuihmD1PFnMrdIV0PeNfOczh3Ylrw8hnHaM6w1WC8V3X4hcYjOfbKlTyz0pewsP5nh
plOUK9mkPzkd4HLiCbktIGyQI5uaUvZzNBrwLhOf9hJij+Jo5WBf6mHLfh2OFqeaxOHbaGAZl5mL
h5UBI3Hlx99GX4llPumDjgw+NIee7uCaRbrZkzluIhJYi2E0ZU2gb5OnYBTSJQMRfv91irmCz4KK
B5Va5J7T7IGjHnR22PeAd+m3F3KW/voz4BMFPGNgxHE0Loq65M6+Pw==

El md5sum es d392b0f5516033f2ae0985745f299efd.

Explicación

Los números en el archivo son incrementos de la masa atómica relativa (por lo que la masa atómica relativa del litio es 1.008 + 0 + 2.995 + 2.937).

Este script funciona convirtiendo la fórmula química en una expresión aritmética con +y *, reemplazando cada símbolo con su masa atómica relativa, luego alimentando la expresión a bc. Si la fórmula contiene símbolos inválidos, bcdará un error de sintaxis y no enviará nada a STDOUT; en ese caso, la salida es Invalid formula.

Si STDIN está vacío, la salida es 0. Soportes anidados son compatibles.

zcat y>g 2>a # Unzip the file y and output result to the file g. Send standard error to file a (there will be an error because the last 8 bytes are missing)
s=(`sed 's/[A-Z][a-z]*/& /g;q'<g`)  # Read from g to sed; append a space after any capital letter optionally followed by a lowercase letter; exit at the end of the first line so the atomic masses are not processed in this way; parse result as space-separated array and save to variable $s
p=1.008 # In the upcoming loop, $p is the value obtained in the previous iteration
v=`sed 's/[0-9]\+/*&/g;s/(/+(0/g'` # Read from standard input to sed; prepend a * after any sequence of digits; replace ( with +(0; save to $v
r=(`tail -1 g`) # Get the last line of file g; parse as space-separated array; save to $r
for n in {0..91};{ # Loop once for each number from 0 to 91; set $n to the current number each iteration
p=`bc<<<$p+${r[n]}` # Concatenate $p, + and the next number from $r; send to bc and evaluate as arithmetic expression; save to $p (i.e. add the next increment from the file to $p)
v=${v//${s[n]}/+$p} # Replace every occurence of the current element symbol with + and $p (i.e. replace each symbol with a + and its relative atomic mass
} # end loop
o=`bc<<<0$v 2>a` # Prepend 0 to $v; send to bc and evaluate as arithmetic expression; redirect any errors on standard error to the file a; save result to $o
echo ${o:-Invalid formula} # If $o is empty (if there was a syntax error), output Invalid formula; otherwise output $o

Ejemplo

C6H2(NO2)3CH3  #input
C*6H*2+(0NO*2)*3CH*3  #after line 3
+12.011*6+*1.008*2+(0+14.007+15.999*2)*3+12.011+1.008*3  #after the loop in lines 4-6
0+12.011*6+*1.008*2+(0+14.007+15.999*2)*3+12.011+1.008*3  #given to bc in line 7
227.132 #output as evaluated by bc

fuente
1
Podría ahorrar mucho almacenando las diferencias entre las masas de los elementos y calculando sobre la marcha. Las diferencias mínima y máxima son -1.002 y +6.993 (a ambos lados de Pa.) Al reorganizar los elementos en orden de masa atómica en lugar de orden de número atómico, el rango se convierte en 0 a 5.991. Cuando se diseñó la tabla periódica, hubo mucho debate sobre qué orden era mejor. (Obviamente, a partir de un Química punto de vista, el orden de número atómico es mejor, pero tomó un poco de tiempo para decidir eso.)
el nivel del río San
@steveverrill Pensé en eso cuando escribí el código, lo investigaré pronto
@steveverrill Hecho, el ahorro fue de aproximadamente 33 caracteres
2

Perl - 924

Utiliza una serie de operaciones de sustitución de expresiones regulares en la fórmula ingresada para expandir los elementos y grupos suscritos, reemplazar los elementos con pesos atómicos y transformarlos en una secuencia de adiciones que luego evalúa.

$_=<>;chop;@g='H1008He4003Li6940Be9012B10810C12011N14007O15999F18998Ne20179Na22989Mg24305Al26981Si28085P30974S32060Cl35450Ar39948K39098Ca40078Sc44955Ti47867V50942Cr51996Mn54938Fe55845Co58933Ni58693Cu63546Zn65380Ga69723Ge72630As74922Se78960Br79904Kr83798Rb85468Sr87620Y88906Zr91224Nb92906Mo95960Tc98Ru101070Rh102906Pd106420Ag107868Cd112411In114818Sn118710Sb121760Te127600I126904Xe131293Cs132905Ba137327La138905Ce140116Pr140907Nd144242Pm145Sm150360Eu151964Gd157250Tb158925Dy162500Ho164930Er167259Tm168934Yb173054Lu174967Hf178490Ta180948W183840Re186207Os190230Ir192217Pt195084Au196967Hg200592Tl204380Pb207200Bi208980Po209At210Rn222Fr223Ra226Ac227Th232038Pa231036U238028'=~/(\D+)([\d\.]+)/g;for$b(0..91){$d=2*$b+1;$g[$d]=$g[$d]>999?$g[$d]/1000:$g[$d]}%h=@g;for$a('(\(((?>[^()]|(?1))*)\))(\d+)','()([A-Z][a-z]?)(\d+)'){for(;s/$a/$2x$3/e;){}}s/([A-Z][a-z]?)/($h{$1}||_).'+'/ge;if(/_/){print'Invalid formula';exit}$_.=0;print eval;
faubi
fuente
2

Mathematica 9 - 247 227

Esto es claramente una trampa ya que estoy usando una función que calcula directamente las masas atomáticas (¡pero no las masas molares!):

r=StringReplace;f[s_]:=Check[ToExpression@r[r[r[s,x:RegularExpression["[A-Z][a-z]*"]:>"ElementData[\""<>x<>"\",\"AtomicWeight\"]+"],x:DigitCharacter..:>"*"<>x<>"+"],{"+*"->"*","+"~~EndOfString->"","+)"->")"}],"Invalid formula"]

Uso: llame a la función fcon una cadena que contenga la fórmula, la salida será la masa.

Prueba:

f["H2O"]           (* => 18.0153 *)
f["O"]             (* => 15.9994 *)
f["C6H2(NO2)3CH3"] (* => 227.131 *)
f["FOOF"]          (* => 69.9956 *)
f["C6H12Op3"]      (* => Invalid formula *)
f["Np"]            (* => 237 *)
f["((C)3)4"]       (* => 144.128 *)
f["CodeGolf"]      (* => Invalid formula *)

Mathematica 10 no genera un número sin formato, sino un número con una unidad, por lo que puede no ser aceptable.

Tyilo
fuente
@ MartinBüttner Gracias, básicamente solo copié una función de mi archivo init y la jugué un poco. El golf sin duda podría mejorarse.
Tyilo
2

Javascript, 1002

La entrada está adentro qy la salida está adentro a. No estaba seguro de cuáles eran las reglas para el redondeo, por lo que trunqué a 3 lugares después del decimal (o menos, si los dígitos no estaban disponibles en Wikipedia).

H=1.008
He=4.002
Li=6.94
Be=9.012
B=10.812
C=12.011
N=14.007
O=15.999
F=18.998
Ne=20.179
Na=22.989
Mg=24.305
Al=26.981
Si=28.085
P=30.973
S=32.06
Cl=35.45
Ar=39.948
K=39.098
Ca=40.078
Sc=44.955
Ti=47.867
V=50.941
Cr=51.996
Mn=54.938
Fe=55.845
Co=58.933
Ni=58.693
Cu=63.546
Zn=65.38
Ga=69.723
Ge=72.630
As=74.921
Se=78.96
Br=79.904
Kr=83.798
Rb=85.467
Sr=87.62
Y=88.905
Zr=91.224
Nb=92.906
Mo=95.96
Tc=98
Ru=101.07
Rh=102.905
Pd=106.42
Ag=107.868
Cd=112.411
In=114.818
Sn=118.710
Sb=121.760
Te=127.60
I=126.904
Xe=131.293
Cs=132.905
Ba=137.327
La=138.905
Ce=140.116
Pr=140.907
Nd=144.242
Pm=145
Sm=150.36
Eu=151.964
Gd=157.25
Tb=158.925
Dy=162.500
Ho=164.930
Er=167.259
Tm=168.934
Yb=173.054
Lu=174.966
Hf=178.49
Ta=180.947
W=183.84
Re=186.207
Os=190.23
Ir=192.217
Pt=195.084
Au=196.966
Hg=200.592
Tl=204.38
Pb=207.2
Bi=208.980
Po=209
At=210
Rn=222
Fr=223
Ra=226
Ac=227
Th=232.038
Pa=231.035
U=238.028
try{a=eval(q.replace(/(\d+)/g,'*$1').replace(/(\w)(?=[A-Z\(])/g,'$1+'))}catch(e){a="Invalid formula"}
Zaq
fuente
+1 por la idea de usar variables simples ... ahora puedo dejar mi respuesta sobrecompleja para vergüenza futura
edc65
La entrada está en realidad q, aunque todo lo demás parece estar bien. +1
es1024
Usted podría ahorrar algunos bytes mediante la supresión de los ceros a la derecha: 121.760 = 121.76
Fels
1

Javascript (E6) 1231

Como una función con la entrada como argumento y devolviendo la salida. Precisión: 3 dígitos decimales

Use regexp para transformar la fórmula química en una expresión aritmética simple, con sumas y productos, reemplazando:

  • ( con +(
  • cualquier secuencia numérica con '*', luego la secuencia numérica
  • cualquier letra mayúscula seguida de letras con '+', luego la masa atómica del elemento correspondiente (si se encuentra)

Luego se evalúa la expresión y se devuelve el valor. En caso de errores o si el valor es NaN (o cero), la función devuelve 'Fórmula no válida'

Ahora veo que todas las demás respuestas usan el mismo método ... bueno, aquí está la versión de JavaScript

F=f=>{
  T={H:1.008,He:4.002,Li:6.94,Be:9.012,B:10.81,C:12.011
  ,N:14.007,O:15.999,F:18.998,Ne:20.179,Na:22.989,Mg:24.305
  ,Al:26.981,Si:28.085,P:30.973,S:32.06,Cl:35.45,Ar:39.948
  ,K:39.098,Ca:40.078,Sc:44.955,Ti:47.867,V:50.941,Cr:51.996,Mn:54.938
  ,Fe:55.845,Co:58.933,Ni:58.693,Cu:63.546,Zn:65.38,Ga:69.723,Ge:72.630
  ,As:74.921,Se:78.96,Br:79.904,Kr:83.798,Rb:85.467,Sr:87.62,Y:88.905,Zr:91.224
  ,Nb:92.906,Mo:95.96,Tc:98,Ru:101.07,Rh:102.905,Pd:106.42,Ag:107.868,Cd:112.411
  ,In:114.818,Sn:118.710,Sb:121.760,Te:127.60,I:126.904,Xe:131.293
  ,Cs:132.905,Ba:137.327,La:138.905,Ce:140.116,Pr:140.907,Nd:144.242,Pm:145
  ,Sm:150.36,Eu:151.964,Gd:157.25,Tb:158.925,Dy:162.500,Ho:164.930,Er:167.259
  ,Tm:168.934,Yb:173.054,Lu:174.966,Hf:178.49,Ta:180.947,W:183.84,Re:186.207
  ,Os:190.23,Ir:192.217,Pt:195.084,Au:196.966,Hg:200.592,Tl:204.38,Pb:207.2
  ,Bi:208.980,Po:209,At:210,Rn:222,Fr:223,Ra:226,Ac:227,Th:232.038,Pa:231.035
  ,U:238.028,Np:237,Pu:244,Am:243,Cm:247,Bk:247,Cf:251,Es:252,Fm:257,Md:258
  ,No:259,Lr:266,Rf:267,Db:268,Sg:269,Bh:270,Hs:269,Mt:278
  ,Ds:281,Rg:281,Cn:285,Uut:286,Fl:289,Uup:289,Lv:293,Uus:294,Uuo:294};
  e='Invalid formula';
  try{return eval(f.replace(/([A-Z][a-z]*)|(\d+)|(\()/g,(f,a,b,c)=>c?'+(':b?'*'+b:a='+'+T[a]))||e}
  catch(x){}return e
}
edc65
fuente
Usé casi el mismo método, pero creé la función hace al menos un año, así que al menos no te copié. ;)
Tyilo
1

PHP - 793 (583 + 210)

En gran medida superado por la respuesta del profesorfish , que está utilizando un método similar, pero bueno ... Los símbolos y las masas están comprimidos con gzip en el archivo aobtenido con el siguiente código:

$symbolsList = ['H', 'He', 'Li', 'Be', 'B', 'C', 'N', 'O', 'F', 'Ne', 'Na', 'Mg', 'Al', 'Si', 'P', 'S', 'Cl', 'Ar', 'K', 'Ca', 'Sc', 'Ti', 'V', 'Cr', 'Mg', 'Fe', 'Co', 'Ni', 'Cu', 'Zn', 'Ga', 'Ge', 'As', 'Se', 'Br', 'Kr', 'Rb', 'Sr', 'Y', 'Zr', 'Nb', 'Mo', 'Tc', 'Ru', 'Rh', 'Pd', 'Ag', 'Cd', 'In', 'Sn', 'Sb', 'Te', 'I', 'Xe', 'Cs', 'Ba', 'La', 'Ce', 'Pr', 'Nd', 'Pm', 'Sm', 'Eu', 'Gd', 'Tb', 'Dy', 'Ho', 'Er', 'Tm', 'Yb', 'Lu', 'Hf', 'Ta', 'W', 'Re', 'Os', 'Ir', 'Pt', 'Au', 'Hg', 'Tl', 'Pb', 'Bi', 'Po', 'At', 'Rn', 'Fr', 'Ra', 'Ac', 'Th', 'Pa', 'U'];
$massesList = [1.008, 4.003, 6.94, 9.012, 10.81, 12.011, 14.007, 15.999, 18.998, 20.18, 22.99, 24.305, 26.982, 28.085, 30.974, 32.06, 35.45, 39.948, 39.098, 40.078, 44.956, 47.867, 50.942, 51.996, 54.938, 55.845, 58.933, 58.6934, 63.546, 65.38, 69.726, 72.630, 74.922, 78.96, 79.904, 83.798, 85.468, 87.62, 88.906, 91.224, 92.906, 95.96, 98, 101.07, 102.906, 106.42, 107.868, 112.411, 114.818, 118.710, 121.760, 127.60, 126.904, 131.293, 132.905, 137.327, 138.905, 140.116, 140.908, 144.242, 145, 150.36, 151.964, 157.25, 158.925, 162.5, 164.93, 167.259, 168.934, 173.054, 174.967, 178.49, 180.948, 183.84, 186.207, 190.23, 192.217, 195.084, 196.967, 200.592, 204.38, 207.2, 208.98, 209, 210, 222, 223, 226, 227, 232.038, 231.036, 238.029];

$fileArrayContent = [$symbolsList, $massesList];
$fileStringContent = json_encode($fileArrayContent);

$file = gzopen('a', 'w9');
gzwrite($file, $fileStringContent);
gzclose($file);

La fórmula debe almacenarse en la $fvariable:

$a=json_decode(gzfile('a')[0]);$r=@eval('return '.str_replace($a[0],$a[1],preg_replace(['#(?<=(?!\().)(\(|'.implode('|',$a[0]).')#','#\d+#'],['+${1}','*$0'],$f)).';');echo error_get_last()?'Invalid formula':$r;

Aquí está la versión no comentada y comentada:

// Recover the data stored in the compressed file
$fileStringContent = gzfile('a')[0];
$fileArrayContent = json_decode($fileStringContent);
$symbolsList = $fileArrayContent[0];
$massesList = $fileArrayContent[1];

$formula = preg_replace('#(?<=(?!\().)(\(|'. implode('|', $symbolsList) .')#', '+${1}', $formula); // Add a "+" before each opening paranthesis and symbol not at the beginning of the string and not preceded by an opening paranthesis
$formula = preg_replace('#\d+#', '*$0', $formula); // Add a "*" before each number

$formula = str_replace($symbolsList, $massesList, $formula); // Replace each symbol with its corresponding mass

$result = @eval('return '. $formula .';'); // Evaluate the value without showing the errors
echo error_get_last() ? 'Invalid formula' : $result; // Print the value, or "Invalid formula" if there was an error
Agujero negro
fuente
Te estoy ganando un byte ahora, tengo 673 bytes
@professorfish De hecho! Además, he contado mal el tamaño del archivo, que es más grande que lo que he dicho antes. ¡Eres, con mucho, el ganador, actualmente ^^!
Blackhole
1

Scala, 1077

Veo todas sus soluciones en lenguajes dinámicamente tipados con cop-outs como evalo función de masa atómica incorporada y le ofrezco una solución de lenguaje tipado estáticamente:

object M{type S=String;type Z=(Int,S)
val d="H  *dHe JVLi inBe!!rB !5\"C !AiN !W!O !l3F \".*Ne\":_Na\"XUMg\"fUAl#%#Si#0iP #OOS #[&Cl$!,Ar$P|K $GxCa$RBSc%(7Ti%G5V %gwCr%s.Mn&4JFe&>)Co&^yNi&\\ECu'2\"Zn'ERGa'seGe(4^As(M#Se(x Br)$$Kr)MLRb)_5Sr)v,Y *%kZr*>LNb*PBMo*ppTc+(TRu+I4Rh+\\ePd,$,Ag,3RCd,cqIn,}LSn-HrSb-i>Te.IJI .B$Xe.peCs/#sBa/RwLa/ccCe/pXPr/y!Nd0>NPm0FTSm1!VEu12\\Gd1jrTb1|aDy2DdHo2^VEr2wATm3+0Yb3W Lu3k@Hf42nTa4L{W 4kfRe5&wOs5QdIr5fqPt6'BAu6;DHg6azTl7,8Pb7J8Bi7]2Po7]FAt7h$Rn9+bFr96@Ra9V8Ac9`tTh:8NPa:-mU :x4".grouped(5).map{s=>(s.take(2).trim,s(2)*8836+s(3)*94+s(4)-285792)}.toMap
def k(n:S):Z={val x=n.takeWhile(_.isDigit);(if(x=="")1 else x.toInt,n drop x.length)}
def o(m:S):Z={if(m(0)==40){val(i,s)=a(m.tail);if(s(0)!=41)???;val(j,t)=k(s.tail);(j*i,t)}else{val l=if(m.size>1&&m(1).isLower)2 else 1;val(i,s)=d(m.take(l))->m.drop(l);val(j,t)=k(s);(j*i,t)}}
def a(m:S)={var(r,s)=(m,0);do{val(y,z)=o(r);r=z;s+=y}while(r!=""&&r(0)!=41);s->r}
def main(q:Array[S]){println(try{val(m,s)=a(io.Source.stdin.getLines.next);if(s!="")???;m/1e3}catch{case _=>"Invalid formula"})}}

Debería considerar un poco de compresión para los datos, pero por ahora solo tengamos las masas atómicas en la base 94, sin comprimir.

Karol S
fuente
Me damolarmass.scala:5: error: ';' expected but identifier found. def a(m:S)={var(r,s)=(m,0);do{val(y,z)=o(r);r=z;s+=y}while(r!=""&&r(0)!=41)s->r}
es1024
Fijo. También descubrí que el analizador de Scala es extraño.
Karol S