Os líderes do mundo se encontraram e finalmente admitiram que a melhor (e única) maneira de resolver os problemas econômicos globais é fazer um balanço do quanto eles devem um ao outro e pagar um ao outro com cheques enormes. Eles o contrataram (ironicamente, com a menor taxa de contrato possível) para descobrir os melhores meios de fazê-lo.
Depois de muita deliberação, e pedindo a alguém para desenhar um exemplo simples, eles apresentaram as seguintes especificações.
Cada país é representado pelo código ISO 3166-1 alfa-2 : US
nos EUA, AU
na Austrália, JP
no Japão, CN
na China e assim por diante ...
- Um razão é elaborado como uma série de entradas de países e os valores devidos a cada país.
- A entrada de cada país começa com seu ID de domínio em dois pontos e quanto eles têm excedente / déficit (em bilhões de euros), seguidos por ponto e vírgula, depois uma lista dos países separados por vírgula e quanto (em bilhões de Euro) eles devem.
- Se um país não deve nada a outro país, nenhuma menção a esse país é inserida após esse separador de ponto e vírgula.
- Os déficits são indicados como números negativos, o excedente é indicado como um número positivo.
- Os valores também podem ser flutuadores.
- O razão deve ser retirado do STDIN. O final do razão é indicado por um retorno de carro em uma linha em branco. A contagem deve ser entregue à STDOUT.
Um exemplo de um razão:
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
O sistema então calcula quanto cada país deve e deve e determina seu superávit / déficit, por exemplo, para a UA:
AU = 8 (superávit atual) -10 (para EUA) -15 (para CN) -3 (para JP) +12 (dos EUA) +8 (da CN) +6 (da JP) = 6
Quando toda a computação estiver concluída, uma contagem deve ser mostrada:
Output:
AU:6
US:-5
CN:35
JP:8
Seu trabalho é criar esse sistema, capaz de receber qualquer número de entradas do razão para qualquer número de países e capaz de determinar quanto cada país tem déficit / superávit quando tudo é pago.
O teste final é para você usar seu código para resolver a dívida entre os seguintes países no caso de teste abaixo. Esses números foram retirados da BBC News em junho de 2011. ( http://www.bbc.com/news/business-15748696 )
Para os fins do exercício, usei o respectivo PIB como excedente atual ... Lembre-se de que este é estritamente um exercício de garantia de qualidade do código ... não se fala em resolução econômica global aqui nesta pergunta ... Se você quer falar sobre economia, tenho certeza de que existe outro subdomínio no SE que lida com isso ...
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
Agora, seja o salvador econômico do mundo!
Regras:
- O menor código vence ... afinal de contas, este é o código-golfe ...
- Forneça sua saída do principal caso de teste com sua resposta de código ...
JP:4100
?Respostas:
K, 66
.
fonte
Perl,
139137134119112Here's another working piece of code... I will document it later.
Golfed code
With dictionary (112):
Without dictionary (137):
Output
See it in action!
http://ideone.com/4iwyEP
fonte
Python,
211185183Output with major test case:
(test it here: http://ideone.com/CjWG7v)
fonte
C -
257253 if no CR at end of lineDepends on sizeof(short)==2.
No check for buffer overflow.
Output:
Less golfed:
fonte
PHP -
338, 280Should work with any version of PHP 5.
Golfed:
Un-golfed:
Output:
fonte
preg_match_all()
and then just looped once?perl (184 characters)
Code
Output
fonte
Perl -
116114112Output:
Ungolfed:
fonte
C++ - 1254
I realize the code is very long, but enjoyed the good fun. This is my first time code golfing, and I am new to C++, so suggestions for improving my code are much appreciated.
Final Challenge Results
Ungolfed Code
fonte
cout << "Output:\n";
either... That's a 20 byte saving there...AWK -
138120And the results
Ungolfed
(test it here: http://ideone.com/pxqc07)
fonte
Ruby - 225
First try in a challenge like this, sure it could be a lot better...
And the results
fonte
JS,
254240245Well..I know it is quite long but this is my second code golf.
Suggestions are welcome!
BTW, Interesting Javascript preserves the order of elements in hashmaps, so, even if p contains an array of dictionaries, I can iterate each dictionary as an array and I'm sure that the first element of a dict is the first inserted. (the name of the country referred to the current line)
Ungolfed:
Note: the input is a
prompt()
which should be a single line. But if you copy/paste a multi line text (like the proposed input) in aprompt()
window thenJS
read it all.Output:
fonte
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)
as(!w)
!w
was not a good idea to checkw!=null
and the script wasn't working anymore :p. Now I'll update it with the resultsz="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"))
for 229 bytes... What I've done here is reduced theif(!c)
sequence to a single ternary operator, and I've also incorporated it in its parentfor
loop... I've also done something similar with the otherfor
loop... comma operators can work wonderfully to join multiple statements within a loop...JavaScript(ES6)
175,166,161,156,153147Golfed
Ungolfed
Output
fonte
R[b] ? R[b] += +v : R[b] = +v
toR[b]=R[b]||0+ +v
i=0;i++%2==0?b=v
tob=isNaN(+v)?v:
isNaN(+v)
->!+v
Groovy 315
Ungolfed:
fonte
PHP, 333
Ungolfed version :
fonte