Los líderes del mundo se han reunido y finalmente han admitido que la mejor (y única) forma de resolver los problemas económicos mundiales es hacer un balance de cuánto se deben unos a otros y simplemente pagarse unos a otros con grandes cheques. Lo han contratado (irónicamente, a la tasa de contrato más baja posible) para encontrar la mejor manera de hacerlo.
Después de mucha deliberación y de pedirle a alguien que dibuje un ejemplo simple, se le ocurrió la siguiente especificación.
Cada país está representado por su código ISO 3166-1 alpha-2 : US
para EE. UU., AU
Australia, JP
Japón, CN
China, etc.
- Un libro mayor se elabora como una serie de entradas de país y los montos adeudados a cada país.
- La entrada de cada país comienza con su ID de dominio, dos puntos, y cuánto tienen en superávit / déficit (en miles de millones de euros), seguido de un punto y coma, luego una lista de países separados por comas y cuánto (en miles de millones de Euro) que deben.
- Si un país no le debe nada a otro país, no se menciona ese país después de ese separador de punto y coma.
- Los déficits se indican como números negativos, el excedente se indica como un número positivo.
- Los valores también pueden ser flotantes.
- El libro mayor debe tomarse de STDIN. El final del libro mayor se indica mediante un retorno de carro en una línea en blanco. La cuenta debe ser entregada a STDOUT.
Un ejemplo de un libro mayor:
Input:
AU:8;US:10,CN:15,JP:3
US:14;AU:12,CN:27,JP:14
CN:12;AU:8,US:17,JP:4
JP:10;AU:6,US:7,CN:10
Luego, el sistema calcula cuánto debe y debe cada país y determina su superávit / déficit, por ejemplo, para AU:
AU = 8 (excedente actual) -10 (a EE. UU.) -15 (a CN) -3 (a JP) +12 (de EE. UU.) +8 (de CN) +6 (de JP) = 6
Cuando se realiza toda la computación, se debe mostrar una cuenta:
Output:
AU:6
US:-5
CN:35
JP:8
Su trabajo es crear este sistema, capaz de tomar cualquier cantidad de entradas en el libro mayor para cualquier número de países y capaz de determinar cuánto tiene déficit / superávit cada país cuando todo se paga.
La prueba definitiva es que use su código para resolver la deuda contraída entre los siguientes países en el siguiente caso de prueba. Estas cifras fueron tomadas de BBC News a partir de junio de 2011. ( http://www.bbc.com/news/business-15748696 )
Para los fines del ejercicio, he usado su PIB respectivo como su excedente actual ... Tenga en cuenta que este es estrictamente un ejercicio de garantía de calidad del código ... no se hablará de resolución económica global aquí en esta pregunta ... Si quieres hablar de economía, estoy seguro de que hay otro subdominio en SE que lo maneja ...
US:10800;FR:440.2,ES:170.5,JP:835.2,DE:414.5,UK:834.5
FR:1800;IT:37.6,JP:79.8,DE:123.5,UK:227,US:202.1
ES:700;PT:19.7,IT:22.3,JP:20,DE:131.7,UK:74.9,US:49.6,FR:112
PT:200;IT:2.9,DE:26.6,UK:18.9,US:3.9,FR:19.1,ES:65.7
IT:1200;JP:32.8,DE:120,UK:54.7,US:34.8,FR:309,ES:29.5
IE:200;JP:15.4,DE:82,UK:104.5,US:39.8,FR:23.8
GR:200;DE:15.9,UK:9.4,US:6.2,FR:41.4,PT:7.5,IT:2.8
JP:4100;DE:42.5,UK:101.8,US:244.8,FR:107.7
DE:2400;UK:141.1,US:174.4,FR:205.8,IT:202.7,JP:108.3
UK:1700;US:578.6,FR:209.9,ES:316.6,IE:113.5,JP:122.7,DE:379.3
¡Ahora, sé el salvador económico del mundo!
Reglas:
- El código más corto gana ... este es el código golf después de todo ...
- Proporcione su salida del caso de prueba principal con su respuesta de código ...
JP:4100
?Respuestas:
K, 66
.
fuente
Perl,
139137134119 119112Aquí hay otro código de trabajo ... Lo documentaré más tarde.
Código de golf
Con diccionario (112):
Sin diccionario (137):
Salida
¡Véalo en acción!
http://ideone.com/4iwyEP
fuente
Pitón,
211185183Salida con caso de prueba principal:
(pruébelo aquí: http://ideone.com/CjWG7v )
fuente
C -
257253si no hay CR al final de la líneaDepende de sizeof (short) == 2.
Sin verificación de desbordamiento de búfer.
Salida:
Menos golfizado:
fuente
PHP -
338280Debería funcionar con cualquier versión de PHP 5.
Golfizado :
Sin golf :
Salida :
fuente
preg_match_all()
y luego lo conectaras una vez?perl (184 caracteres)
Código
Salida
fuente
Perl -
116114112Salida:
Sin golf:
fuente
C ++ - 1254
Me doy cuenta de que el código es muy largo, pero disfruté la buena diversión. Esta es mi primera vez jugando al golf con código, y soy nuevo en C ++, por lo que agradezco mucho las sugerencias para mejorar mi código.
Resultados finales del desafío
Código sin golf
fuente
cout << "Output:\n";
... Eso es un ahorro de 20 bytes allí ...AWK -
138120Y los resultados
Sin golf
(pruébelo aquí: http://ideone.com/pxqc07 )
fuente
Rubí - 225
Primero intente en un desafío como este, seguro que podría ser mucho mejor ...
Y los resultados
fuente
JS,
254240245Bueno ... Sé que es bastante largo, pero este es mi segundo código de golf.
¡Sugerencias son bienvenidas!
Por cierto, Javascript interesante conserva el orden de los elementos en los hashmaps, por lo que, incluso si p contiene una matriz de diccionarios, puedo iterar cada diccionario como una matriz y estoy seguro de que el primer elemento de un dict es el primero insertado. (el nombre del país referido a la línea actual)
Sin golf:
Nota: la entrada es una
prompt()
que debería ser una sola línea. Pero si copia / pega un texto de varias líneas (como la entrada propuesta) en unaprompt()
ventana,JS
léalo todo.Salida:
fuente
z='replace';r={};p=eval(('[{'+prompt()+'}]')[z](/\n/g,'},{')[z](/;/g,','));for(i in p){l=p[i];c=0;for(k in l){if(!c){c=k;r[c]=0;}else{r[c]-=l[k];}};for(j in p){w=p[j][c];if(w!=null)r[c]+=w}};alert(JSON.stringify(r)[z](/"|{|}/g,'')[z](/,/g,'\n'))
:?(w!=null)
como(!w)
!w
no era una buena idea verificarw!=null
y el script ya no funcionaba: p. Ahora lo actualizaré con los resultadosz="replace";r={};p=eval(("[{"+prompt()+"}]")[z](/\n/g,"},{")[z](/;/g,","));for(i in p){l=p[i];c=0;for(k in l)c?r[c]-=l[k]:(c=k,r[c]=0);for(j in p)w=p[j][c],null!=w&&(r[c]+=w)}alert(JSON.stringify(r)[z](/"|{|}/g,"")[z](/,/g,"\n"))
para 229 bytes ... Lo que he hecho aquí es reducir laif(!c)
secuencia a un único operador ternario, y también lo he incorporado en sufor
ciclo principal ... También he hecho algo similar con el otrofor
ciclo ... los operadores de coma pueden trabajar maravillosamente para unir múltiples declaraciones dentro de un ciclo ...JavaScript (ES6)
175,166,161,156,153147Golfed
Sin golf
Salida
fuente
R[b] ? R[b] += +v : R[b] = +v
porR[b]=R[b]||0+ +v
i=0;i++%2==0?b=v
deb=isNaN(+v)?v:
isNaN(+v)
->!+v
Maravilloso 315
Sin golf:
fuente
PHP, 333
Versión sin golf:
fuente