Les dirigeants du monde se sont rencontrés et ont finalement admis que le meilleur (et le seul) moyen de résoudre les problèmes économiques mondiaux est de faire le bilan de ce qu'ils se doivent et de se payer les uns les autres avec d'énormes chèques. Ils vous ont engagé (ironiquement, au taux contractuel le plus bas possible) pour trouver les meilleurs moyens de le faire.
Après de longues délibérations et après avoir demandé à quelqu'un de dessiner un exemple simple, il a proposé la spécification suivante.
Chaque pays est représenté par son code ISO 3166-1 alpha-2 : US
pour les USA, AU
pour l'Australie, JP
pour le Japon, CN
pour la Chine ...
- Un grand livre est constitué d'une série d'écritures par pays et des montants dus à chaque pays.
- L'entrée de chaque pays commence par leur identifiant de domaine un colon, et combien ils ont en excédent / déficit (en milliards d'euros), suivi d'un point-virgule, puis d'une liste de pays séparés par des virgules et combien (en milliards de Euro) qu'ils doivent.
- Si un pays ne doit rien à un autre pays, aucune mention de ce pays n'est inscrite après ce séparateur point-virgule.
- Les déficits sont indiqués comme des nombres négatifs, l'excédent est indiqué comme un nombre positif.
- Les valeurs peuvent également être des flottants.
- Le grand livre doit être extrait de STDIN. La fin du grand livre est indiquée par un retour chariot sur une ligne vierge. Le décompte doit être remis à STDOUT.
Un exemple de grand livre:
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
Le système détermine ensuite le montant que chaque pays doit et doit et détermine leur excédent / déficit, par exemple pour l'UA:
AU = 8 (excédent courant) -10 (vers US) -15 (vers CN) -3 (vers JP) +12 (depuis US) +8 (depuis CN) +6 (depuis JP) = 6
Lorsque tout le calcul est terminé, un décompte doit être affiché:
Output:
AU:6
US:-5
CN:35
JP:8
Votre travail consiste à créer ce système, capable de prendre n'importe quel nombre d'entrées de grand livre pour n'importe quel nombre de pays et capable de déterminer combien chaque pays a un déficit / excédent lorsque tout est payé.
Le test ultime consiste à utiliser votre code pour résoudre la dette due entre les pays suivants dans le cas de test ci-dessous. Ces chiffres ont été extraits de BBC News en juin 2011. ( http://www.bbc.com/news/business-15748696 )
Aux fins de l'exercice, j'ai utilisé leur PIB respectif comme excédent actuel ... Veuillez garder à l'esprit qu'il s'agit strictement d'un exercice d'assurance de la qualité du code ... il ne sera pas question ici de résolution économique mondiale dans cette question ... Si vous voulez parler d'économie, je suis sûr qu'il y a un autre sous-domaine en SE qui le gère ...
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
Maintenant, soyez le sauveur économique du monde!
Règles:
- Le code le plus court gagne ... c'est le code-golf après tout ...
- Veuillez fournir votre sortie du cas de test principal avec votre réponse de code ...
JP:4100
?Réponses:
K, 66
.
la source
Perl,
139137134119 119112Voici un autre morceau de code de travail ... Je le documenterai plus tard.
Code golf
Avec dictionnaire (112):
Sans dictionnaire (137):
Sortie
Voyez-le en action!
http://ideone.com/4iwyEP
la source
Python,
211185183Sortie avec cas de test majeur:
(testez-le ici: http://ideone.com/CjWG7v )
la source
C -
257253 si aucun CR à la fin de la ligneDépend de sizeof (short) == 2.
Aucune vérification du dépassement de tampon.
Sortie:
Moins golfé:
la source
PHP -
338, 280Devrait fonctionner avec n'importe quelle version de PHP 5.
Golfé :
Non-golfé :
Sortie :
la source
preg_match_all()
et que vous boucliez une seule fois?perl (184 caractères)
Code
Sortie
la source
Perl -
116114112Sortie:
Ungolfed:
la source
C ++ - 1254
Je me rends compte que le code est très long, mais j'ai apprécié le bon plaisir. C'est la première fois que je joue au code, et je suis nouveau en C ++, donc les suggestions pour améliorer mon code sont très appréciées.
Résultats du défi final
Code non golfé
la source
cout << "Output:\n";
plus ... C'est une économie de 20 octets là-bas ...AWK -
138120Et les résultats
Ungolfed
(testez-le ici: http://ideone.com/pxqc07 )
la source
Rubis - 225
Essayez d'abord un défi comme celui-ci, bien sûr, cela pourrait être beaucoup mieux ...
Et les résultats
la source
JS,
254240245Eh bien ... je sais que c'est assez long mais c'est mon deuxième golf de code.
Les suggestions sont les bienvenues!
BTW, Javascript intéressant préserve l'ordre des éléments dans les hashmaps, donc, même si p contient un tableau de dictionnaires, je peux itérer chaque dictionnaire en tant que tableau et je suis sûr que le premier élément d'un dict est le premier inséré. (le nom du pays référé à la ligne actuelle)
Ungolfed:
Remarque: l'entrée est un
prompt()
qui devrait être une seule ligne. Mais si vous copiez / collez un texte sur plusieurs lignes (comme l'entrée proposée) dans uneprompt()
fenêtre,JS
lisez tout.Sortie:
la source
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)
aussi(!w)
!w
n'était pas une bonne idée de vérifierw!=null
et le script ne fonctionnait plus: p. Maintenant, je vais le mettre à jour avec les résultatsz="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"))
pour 229 octets ... Ce que j'ai fait ici est de réduire laif(!c)
séquence à un seul opérateur ternaire, et je l'ai également incorporé dans safor
boucle parent ... J'ai également fait quelque chose de similaire avec l'autrefor
boucle ... les opérateurs de virgule peuvent fonctionner à merveille pour joindre plusieurs instructions dans une boucle ...JavaScript (ES6)
175,166,161,156,153147Golfé
Ungolfed
Sortie
la source
R[b] ? R[b] += +v : R[b] = +v
àR[b]=R[b]||0+ +v
i=0;i++%2==0?b=v
deb=isNaN(+v)?v:
isNaN(+v)
->!+v
Groovy 315
Ungolfed:
la source
PHP, 333
Version non golfée:
la source