গ্লোবাল wayণ, কোড গল্ফ উপায় সমাধান করুন


32

বিশ্বের নেতারা সাক্ষাত করেছেন এবং শেষ পর্যন্ত স্বীকার করেছেন যে বৈশ্বিক অর্থনৈতিক সমস্যাগুলি সমাধানের সর্বোত্তম (এবং একমাত্র) উপায় হ'ল তারা একে অপরের প্রতি কতটা eণী এবং কেবল একে অপরকে বিশাল চেক দিয়ে payণ প্রদান করে stock তারা আপনাকে সর্বোত্তমভাবে কাজ করার জন্য (বিদ্রূপাত্মকভাবে, সর্বনিম্ন চুক্তির হারে) ভাড়া করেছে।

অনেক চিন্তা-ভাবনা করার পরে এবং কাউকে একটি সাধারণ উদাহরণ আঁকতে বলার জন্য তারা নিম্নলিখিত অনুমানটি নিয়ে এসেছেন।

প্রতিটি দেশ তাদের আইএসও 3166-1 আলফা -2 কোড দ্বারা প্রতিনিধিত্ব করে : USমার্কিন যুক্তরাষ্ট্রের AUজন্য, অস্ট্রেলিয়া, JPজাপানের পক্ষে, CNচীনের জন্য এবং আরও কিছু ...

  1. একটি খাতায় প্রতিটি দেশ প্রবেশের সিরিজ এবং প্রতিটি দেশ হিসাবে পরিমাণ হিসাবে অঙ্কিত হয়।
  2. প্রতিটি দেশের প্রবেশ তাদের ডোমেন আইডি দিয়ে একটি কোলন দিয়ে শুরু হয় এবং উদ্বৃত্ত / ঘাটতিতে তাদের কতটা থাকে (বিলিয়ন ইউরোতে), তারপরে একটি সেমিকোলন, তারপরে দেশগুলির একটি কলোনি কমা-বিচ্ছিন্ন তালিকা এবং কত (বিলিয়নে ইউরো) তারা .ণী।
  3. যদি কোনও দেশের অন্য দেশের কাছে nothingণী থাকে তবে সেমিকোলন বিভাজকের পরে সেই দেশের কোনও উল্লেখ প্রবেশ করা হয় না।
  4. ঘাটতিগুলি নেতিবাচক সংখ্যা হিসাবে চিহ্নিত করা হয়, উদ্বৃত্তকে ধনাত্মক সংখ্যা হিসাবে চিহ্নিত করা হয়।
  5. মানগুলিও ভাসমান হতে পারে।
  6. খাতাটি অবশ্যই STDIN থেকে নেওয়া উচিত। খাতাটির শেষটি ফাঁকা লাইনে একটি ক্যারেজ রিটার্ন দ্বারা নির্দেশিত। ট্যালি অবশ্যই STDOUT এ পৌঁছে দিতে হবে।

খাতাটির উদাহরণ:

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

সিস্টেমটি তখন প্রতিটি দেশ কতটা owণী এবং তার উদ্বৃত্ত / ঘাটতি নির্ধারণ করে তা কার্যকর করে, উদাহরণস্বরূপ, এটিউয়ের জন্য:

এউ = 8 (বর্তমান উদ্বৃত্ত) -10 (মার্কিন যুক্তরাষ্ট্রে) -15 (সিএন থেকে) -3 (জেপি থেকে) +12 (মার্কিন যুক্তরাষ্ট্র থেকে) +8 (সিএন থেকে) +6 (জেপি থেকে) = 6

সমস্ত কম্পিউটিং শেষ হয়ে গেলে অবশ্যই একটি টেলি প্রদর্শিত হবে:

Output:
AU:6
US:-5
CN:35
JP:8

আপনার কাজ হ'ল এই সিস্টেমটি তৈরি করা, যে কোনও দেশের জন্য সংখ্যক খাত্তর এন্ট্রি গ্রহণে সক্ষম এবং যখন সমস্ত কিছু পরিশোধিত হয় তখন প্রতিটি দেশ ঘাটতি / উদ্বৃত্তে কতটা নির্ধারণ করতে সক্ষম।

চূড়ান্ত পরীক্ষাটি হল নীচের পরীক্ষার ক্ষেত্রে নিম্নলিখিত দেশগুলির মধ্যে ণ পরিশোধের জন্য আপনার কোডটি ব্যবহার করার জন্য। এইগুলো জুন 2011 হিসাবে BBC নিউস থেকে নেওয়া হয়েছে ( http://www.bbc.com/news/business-15748696 )

মহড়ার উদ্দেশ্যগুলির জন্য, আমি তাদের নিজ নিজ জিডিপিকে তাদের বর্তমান উদ্বৃত্ত হিসাবে ব্যবহার করেছি ... দয়া করে মনে রাখবেন যে এটি কোডের মান নিশ্চিতকরণের কঠোর অনুশীলন ... এই প্রশ্নে এখানে বিশ্বব্যাপী অর্থনৈতিক সমাধানের কোনও আলোচনা হবে না ... আপনি যদি অর্থনীতির কথা বলতে চান তবে আমি নিশ্চিত যে এসইতে আরও একটি সাবডোমেন রয়েছে যা এটি পরিচালনা করে ...

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

এখন, বিশ্বের অর্থনৈতিক ত্রাণকর্তা হন!

নিয়মাবলী:

  1. সংক্ষিপ্ততম কোড জয় ... এটি সর্বোপরি কোড-গল্ফ ...
  2. আপনার কোড উত্তর দিয়ে বড় পরীক্ষার ক্ষেত্রে আপনার আউটপুট সরবরাহ করুন ...

1
"চূড়ান্ত পরীক্ষা" -র পরে সেমিকোলন থাকা উচিত নয় JP:4100?
ম্যাথিউ রডিক

9
আমি সাহায্য করতে পারি না তবে ভাবতে পারি যে এটি আপনার জন্য কোনও হোমওয়ার্ক অ্যাসাইনমেন্ট সম্পন্ন করার খুব চালাক উপায়। যদি তাই হয়, আপনি এটি প্রাপ্য।
মকিংস্টন

2
হ্যাঁ, আপনি যদি এটি করেন তবে আসল সংখ্যাগুলি আপনি একটি আশ্চর্যজনক বৈপরীত্য লক্ষ্য করবেন। সমস্ত উদ্বৃত্ত এবং ঘাটতির যোগফল নেতিবাচক হবে।
ক্রাঙ্কার

3
আসলে, এটি ছদ্মবেশে হোমওয়ার্ক নয় ... এটি আমার বন্ধুদের সাথে আমার সাপ্তাহিক জুজু টুর্নামেন্ট থেকে অনুপ্রাণিত হয়েছিল ... প্রতিটি খেলোয়াড়ের জন্য জয়ের কাজ দ্রুত করার উপায় বের করার চেষ্টা করছে;)
ওয়েলওয়েস্ট

1
@ ওয়েলওয়েস্ট এলএলএল;) বিটিডব্লিউ, ওটি মন্তব্যের জন্য ক্ষমা চাইছেন, তবে এটি এমন বিষয় যা সম্পর্কে আমি বেশ আগ্রহী। এখন আসুন কিছু মজাদার কোডিংয়ে ফিরে আসি এবং বিশ্বের
দুঃখগুলি

উত্তর:


11

কে, 66

{(((!)."SF"$+":"\:'*+a)-+/'d)+/d:"F"$(!).'"S:,"0:/:last'a:";"\:'x}

k)input:0:`:ledg.txt
k){(((!)."SF"$+":"\:'*+a)-+/'d)+/d:"F"$(!).'"S:,"0:/:last'a:";"\:'x} input
US| 9439.3
FR| 2598.9
ES| 852.1
PT| 90.1
IT| 887.5
IE| 48
GR| 116.8
JP| 4817.4
DE| 2903.7
UK| 1546.2

এটির সাথে অবিশ্বাস্যভাবে মুগ্ধ ... আপনি কে প্রোগ্রামিং দৃষ্টান্তের কোনও লিঙ্ক সরবরাহ করতে পারেন এমন কোনও সুযোগ?
ওলিওয়েস্ট

@WallyWest code.kx.com q এর উপর প্রচুর তথ্য সরবরাহ করে, যা সিনট্যাকটিক চিনি যা কে শীর্ষে বসে। কি, মোরসো কে কে ধন্যবাদ, আপনি যা প্রযোজনা সিস্টেমে পাবেন তবে গল্ফিংয়ের জন্য কিনারা রয়েছে। এছাড়াও কোনা ( github.com/kevinlawler/kona ) দেখুন যা কে
টিমার্টিন

10

পার্ল, 139 137 134 119 112

এখানে কোডের আরও একটি কার্যকারী অংশ রয়েছে ... আমি এটি পরে নথিভুক্ত করব।

গল্ফ কোড

অভিধান সহ (112):

for(<>){~/:(.+);/g;$d{$c=$`}+=$1;$l=$';$d{$1}+=$2,$d{$c}-=$2while$l=~/(..):([^,]+)/g}print"$_:$d{$_}
"for keys%d

অভিধান ছাড়া (137):

for($T=$t.=$_ for<>;$t=~/(..:)(.+);(.+)/g;print"$c$s\n"){$c=$1;$l=$3;$s=$2;$s-=$&while$l=~/[\d.]+/g;$s+=$1while$T=~/$c([\d.]+)(?!;|\d)/g}

আউটপুট

US:9439.3
FR:2598.9
ES:852.1
PT:90.1
IT:887.5
IE:48
GR:116.8
JP:4817.4
DE:2903.7
UK:1546.2

কর্মে দেখুন!

http://ideone.com/4iwyEP


4
"সংক্ষিপ্ত" সংজ্ঞাটি অক্ষর দ্বারা নয়, টোকেনের পরিমাণ দ্বারা বিচার করা উচিত। পাঠযোগ্যতা 4 জীবন!
ডোমি

10
@ ডোমি - আপনি এখানে নতুন, আপনি কি না ;-)
জিম্বোবমসিজি

4
@ জিম্বোবমসিজি: আমারও বোধ হয় এই ওয়েবসাইটটি
পড়ার যোগ্যতা

4

পাইথন, 211 185 183

import sys,re;t,R,F=sys.stdin.read(),re.findall,float;S=lambda e,s:sum(map(F,R(e,s)))
for m in R('(..:)(.+);(.+)',t):print m[0]+`F(m[1])+S(m[0]+'([\d.]+)(?!;|\d)',t)-S('[\d.]+',m[2])`

বড় পরীক্ষার ক্ষেত্রে আউটপুট:

US:9439.300000000001
FR:2598.9
ES:852.0999999999999
PT:90.09999999999997
IT:887.5
IE:48.0
GR:116.8
JP:4817.4
DE:2903.7
UK:1546.2000000000003

(এটি এখানে পরীক্ষা করুন: http://ideone.com/CjWG7v )


4

সি - 257 253 লাইনের শেষে সিআর না হলে

আকারের উপর নির্ভর করে (সংক্ষিপ্ত) == 2।

বাফার ওভারফ্লোয়ের জন্য কোনও চেক নেই।

#define C(c) x[*(short*)c]
main(i){double x[23131]={0},d;char*q,b[99],*(*s)()=strtok;for(;gets(b);)for(s(b,":"),C(b)+=atof(s(0,";"));q=s(0,":");C(b)-=d=(atof(s(0,","))),C(q)+=d);for(i=b[2]=0;i<23131;memcpy(b,&i,2),x[i]?printf("%s:%f\n",b,x[i++]):++i);}

আউটপুট:

DE:2903.700000  
IE:48.000000    
UK:1546.200000  
JP:4817.400000  
FR:2598.900000  
GR:116.800000   
ES:852.100000   
US:9439.300000  
IT:887.500000   
PT:90.100000   

কম গল্ফড:

#define C(c) x[*(short*)c]

main(i)
{
    double x[23131]={0}, d;
    char *q, b[99], *(*s)()=strtok;
    for(;gets(b);) 
        for(s(b, ":"),C(b)+=atof(s(0, ";")); 
            q=s(0, ":"); 
            C(b)-=d=(atof(s(0, ","))), C(q)+=d) ;

    for(i=b[2]=0; 
        i<23131; 
        memcpy(b, &i, 2), x[i]?printf("%s:%f\n", b, x[i++]):++i) ;
}

3

পিএইচপি - 338, 280

পিএইচপি 5 এর যে কোনও সংস্করণ নিয়ে কাজ করা উচিত।

গল্ফড :

while(preg_match("#(..):(.+);(.*)#",fgets(STDIN),$m)){$l[$m[1]][0]=(float)$m[2];foreach(explode(",",$m[3])as$x){$_=explode(":",$x);$l[$m[1]][1][$_[0]]=(float)$_[1];}}foreach($l as$c=>$d)foreach($d[1]as$_=>$o){$l[$_][0]+=$o;$l[$c][0]-=$o;}foreach($l as$c=>$d)echo$c,":",$d[0],"\n";

আন-গল্ফড :

<?php

while( preg_match( "#(..):(\d+);(.*)#", fgets( STDIN ), $m ) )
{
    $l[$m[1]][0] = (float)$m[2];

    foreach( explode( ",", $m[3] ) as $x )
    {
        $_ = explode( ":", $x );
        $l[$m[1]][1][$_[0]] = (float)$_[1];
    }
}

foreach( $l as $c => $d )
    foreach( $d[1] as $_ => $o )
    {
        $l[$_][0] += $o;
        $l[$c][0] -= $o;
    }

foreach( $l as $c => $d )
    echo $c, ":", $d[0], "\n";

আউটপুট :

US:9439.3
FR:2598.9
ES:852.1
PT:90.1
IT:887.5
IE:48
GR:116.8
JP:4817.4
DE:2903.7
UK:1546.2

আপনি যদি এটি ব্যবহার করেন preg_match_all()এবং তারপরে কেবল একবার লুপ করেন তবে এটি কি খাটো হবে না ?
দামির ক্যাসিপোভিচ

3

পার্ল (184 টি অক্ষর)

কোড

%c,%d,%e=();while(<>){$_=~/(..):(.+);(.*)/;$n=$1;$c{$1}=$2;for $i(split /,/,$3){$i=~/(..):(.+)/;$d{$1}+=$2;$e{$n}+=$2;}}for $i(keys %c){$c{$i}+=$d{$i}-$e{$i};print $i.":".$c{$i}."\n";}

আউটপুট

UK:1546.2
DE:2903.7
IT:887.5
FR:2598.9
PT:90.1
US:9439.3
JP:4817.4
ES:852.1
IE:48
GR:116.8

3

পার্ল - 116 114 112

for(<>){($n,$m,@l)=split/[:;,]/;$h{$n}+=$m;$h{$n}-=$p,$h{$o}+=$p while($o,$p,@l)=@l}print"$_:$h{$_}\n"for keys%h

আউটপুট:

GR:116.8
UK:1546.2
DE:2903.7
IE:48
IT:887.5
US:9439.3
PT:90.1
ES:852.1
FR:2598.9
JP:4817.4

Ungolfed:

for(<>) {
    ($n, $m, @l)=split(/[:;,]/);
    $h{$n}+=$m;

    $h{$n}-=$p, $h{$o}+=$p while ($o,$p,@l)=@l
}
print "$_:$h{$_}\n" for keys%h

নিস! আমি আপনার পদ্ধতির পছন্দ করি :)
ম্যাথিউ রডিক

3

সি ++ - 1254

#include<iostream>
#include<cstring>
#include<vector>
#include<sstream>
#include<cstdlib>
using namespace std;int main(){vector<string>input,countries,output;vector<double>results;string last_val;int j,k,i=0;cout<<"Input\n";do{getline(cin,last_val);if(last_val!=""){input.push_back(last_val);countries.push_back(last_val.substr(0,2));}}while(last_val!="");for(j=0;j<countries.size();j++){results.push_back(0);for(k=0;k<input.size();k++)input[k].substr(0, 2)==countries[j]?results[j]+=atof(input[k].substr((input[k].find(countries[j])+3),(input[k].find(',',input[k].find(countries[j]))-input[k].find(countries[j]))).c_str()):results[j]+=atof(input[k].substr((input[k].find(countries[j],3)+3),(input[k].find(',',input[k].find(countries[j]))-input[k].find(countries[j]))).c_str());}for(j=0;j<input.size();j++){for(k=0;k<countries.size();k++){if(input[j].substr(0,2)!=countries[k]){results[j]-=atof(input[j].substr((input[j].find(countries[k])+ 3),(input[j].find(',',input[k].find(countries[k]))-input[j].find(countries[j]))).c_str());}}}for(i=0;i<countries.size();i++){stringstream strstream;strstream<<countries[i]<<":"<<results[i];output.push_back(strstream.str().c_str());}cout<<"Output:\n";for(i=0;i<output.size();i++){cout<<output[i]<<'\n';}return 0;}

আমি বুঝতে পারি কোডটি খুব দীর্ঘ, তবে ভাল মজা পেয়েছে। এটি আমার প্রথমবারের কোড গল্ফিং, এবং আমি সি ++ তে নতুন, সুতরাং আমার কোডটি উন্নত করার জন্য পরামর্শগুলি অনেক প্রশংসাযোগ্য।

চূড়ান্ত চ্যালেঞ্জ ফলাফল

Output:
US:9439.3
FR:2598.9
ES:852.1
PT:90.1
IT:887.5
IE:48
GR:116.8
JP:4817.4
DE:2903.7
UK:1546.2

অবহেলিত কোড

#include<iostream>
#include<cstring>
#include<vector>
#include<sstream>
#include<cstdlib>

using namespace std;

int main() {
  vector<string> input, countries, output;
  vector<double> results;
  string last_val;
  int i, j, k;

  cout << "Input\n";
  do {
    getline(cin, last_val);
    if(last_val != "") {
      input.push_back(last_val);
      countries.push_back(last_val.substr(0, 2));
    }
  } while(last_val != "");

  for(j = 0; j < countries.size(); j++) {
    results.push_back(0);
    for(k = 0; k < input.size(); k++) {
      if(input[k].substr(0, 2) == countries[j]) {
        results[j] += atof(input[k].substr((input[k].find(countries[j]) + 3),
                             (input[k].find(',', input[k].find(countries[j])) -
                              input[k].find(countries[j]))).c_str());
      } else {
        results[j] += atof(input[k].substr((input[k].find(countries[j], 3) + 3),
                             (input[k].find(',', input[k].find(countries[j])) -
                              input[k].find(countries[j]))).c_str());
      }
    }
  }

  for(j = 0; j < input.size(); j++) {
    for(k = 0; k < countries.size(); k++) {
      if(input[j].substr(0, 2) != countries[k]) {
        results[j] -= atof(input[j].substr((input[j].find(countries[k]) + 3),
                             (input[j].find(',', input[k].find(countries[k])) -
                              input[j].find(countries[j]))).c_str());
      }
    }
  }

  for(i = 0; i < countries.size(); i++) {
    stringstream strstream;
    strstream << countries[i] << ":" << results[i];
    output.push_back(strstream.str().c_str());
  }

  cout << "Output:\n";
  for(i = 0; i < output.size(); i++) {
    cout << output[i] << '\n';
  }

  return 0;
}

2
হাই, সি ++ তে একটি উদাহরণ দেখে ভাল লাগল। আপনি বর্ণনামূলক নাম উপকার এক অক্ষর শনাক্তকারী ব্যবহার করে অক্ষরের সংখ্যা কমিয়ে দিতে পারে, অর্থাত্ ব্যবহার আমি জন্য ইনপুট , জন্য দেশ ইত্যাদি।
ahy1

এখানে @ অহি 1 এর সাথে একমত হয়েছেন ... আপনি যদি নিজের ভেরিয়েবলগুলি 1 টি অক্ষরে কমিয়ে দেন তবে আপনি এর মোটামুটি কিছুটা কেটে ফেলতে পারেন ... ভবিষ্যতের গল্ফ চ্যালেঞ্জগুলির জন্য আপনি এই আগ্রহটিও
-গল্ফিং

ওহ, এবং আপনার আর প্রয়োজন হবে না cout << "Output:\n";... এটি একটি 20 বাইট সংরক্ষণ করছে ...
ওয়াল ওয়েস্ট

3

এডাব্লুকে - 138 120

{l=split($0,h,"[:,;]");t[h[1]]+=h[2];for(i=3;i<l;i+=2){t[h[1]]-=h[i+1];t[h[i]]+=h[i+1]}}END{for(v in t){print v":"t[v]}}

এবং ফলাফল

$ cat data.withoutInputHeadline |awk -f codegolf.awk
IT:887.5
UK:1546.2
DE:2903.7
PT:90.1
ES:852.1
FR:2598.9
GR:116.8
Input:0
JP:4817.4
IE:48
US:9439.3

Ungolfed

{
    l=split($0,h,"[:,;]");
    t[h[1]]+=h[2];
    for(i=3;i<l;i+=2){
        t[h[1]]-=h[i+1]
        t[h[i]]+=h[i+1]
    }
}
END{
    for(v in t){
        print v":"t[v]
    }
}

(এটি এখানে পরীক্ষা করুন: http://ideone.com/pxqc07 )


এমনকি head শিরোনামগুলি কেন ?ুকিয়ে রাখবে? আপনি তাদের ব্যতীত আরও বাইট সংরক্ষণ করতে পারবেন ... সেগুলি আমি যে
নকশায়

@ ওয়েলওয়েস্ট: ঠিক আছে, তাই আমি এটি বুঝতে পারি নি, কারণ সেগুলি আপনার প্রথম ইনপুট এবং আউটপুট উদাহরণে প্রদর্শিত হয় যেমন: (..) একটি টেলি অবশ্যই দেখানো হবে: আউটপুট: (..) এ নিয়ে কোনও উদ্বেগ নেই, আমি সরিয়েছি এই মুহূর্তে আমার প্রথম উদাহরণ।
কিয়ামডে

2

রুবি - 225

প্রথমে এর মতো চ্যালেঞ্জের চেষ্টা করুন, নিশ্চিত হন যে এটি আরও অনেক ভাল হতে পারে ...

R=Hash.new(0)
def pd(s,o=nil);s.split(':').tap{|c,a|R[c]+=a.to_f;o&&R[o]-=a.to_f};end
STDIN.read.split("\n").each{|l|c,d=l.split(';');pd(c);d.split(',').each{|s|pd(s,c.split(':')[0])}}
puts R.map{|k,v|"#{k}: #{v}"}.join("\n")

এবং ফলাফল

$ cat data|ruby codegolf.rb
US: 9439.299999999997
FR: 2598.8999999999996
ES: 852.1
JP: 4817.4
DE: 2903.7
UK: 1546.2000000000003
IT: 887.5
PT: 90.09999999999998
IE: 48.0
GR: 116.8

2

জেএস, 254 240 245

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'))

ভাল..আমি জানি এটি বেশ দীর্ঘ কিন্তু এটি আমার দ্বিতীয় কোড গল্ফ।

পরামর্শ স্বাগত!

বিটিডাব্লু, আকর্ষণীয় জাভাস্ক্রিপ্ট হ্যাশম্যাপে উপাদানগুলির ক্রম সংরক্ষণ করে, সুতরাং, পি অভিধানের একটি অ্যারে থাকলেও আমি প্রতিটি অভিধানকে একটি অ্যারে হিসাবে পুনরাবৃত্তি করতে পারি এবং আমি নিশ্চিত যে ডিকের প্রথম উপাদানটি প্রথম সন্নিবেশ করা হয়েছে। (বর্তমানের লাইনে উল্লেখ করা দেশের নাম)

Ungolfed:

z='replace';
r={};
p=eval(('[{'+prompt()+'}]')[z](/\n/g,'},{')[z](/;/g,',')); // make the string JSONable and then evaluate it in a structure
for(i in p){ 
    l=p[i];
    c=0;
    for(k in l){
            if(!c){ // if c is not still defined, this is the country we are parsing.
                    c=k;
                    r[c]=0;
            }
            else r[c]-=l[k];
    }; 
    for(j in p){
            w=p[j][c];
            if(!w)  r[c]+=w
    }
};
alert(JSON.stringify(r)[z](/"|{|}/g,'')[z](/,/g,'\n')) # Stringify the structure, makes it new-line separated.

দ্রষ্টব্য: ইনপুটটি এমন একটি prompt()যা একক লাইন হওয়া উচিত। তবে আপনি যদি কোনও prompt()উইন্ডোতে একটি বহু লাইন পাঠ্য (প্রস্তাবিত ইনপুটের মতো) অনুলিপি / পেস্ট করেন তবে JSসমস্তটি পড়ুন।

আউটপুট:

US:9439.3
FR:2598.9
ES:852.1
PT:90.09999999999998
IT:887.5
IE:48
GR:116.8
JP:4817.4
DE:2903.7000000000003
UK:1546.2

1
আপনি আপনার কোডটিতে চারবার "প্রতিস্থাপন" শব্দটি ব্যবহার করেন । কেমন হয় এর মতো এটিকে সংক্ষেপিত: 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'))?
ব্যবহারকারী 2428118

ওহ এটি আমাকে 7 * 4- (3 * 4 + 11) অক্ষর বাঁচিয়েছে! (আমিও করা (w!=null)যেমন(!w)
আন্তোনিও Ragagnin

@ অ্যান্টোনিওআগাগনিন আপনি কি দয়া করে নিজের আউটপুট দেখাতে পারবেন?
ওয়ালিওয়েস্ট

আপনার বার্তা @ ওয়েলওয়েস্টের জন্য ধন্যবাদ। দেখা যাচ্ছে !wচেক করা ভাল ধারণা w!=nullছিল না এবং স্ক্রিপ্টটি আর কাজ করছে না: পি। এখন আমি ফলাফলগুলি দিয়ে এটি আপডেট করব
আন্তোনিও রাগাগনিন

ব্যবহারের চেষ্টা করুন: z="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"))২২৯ বাইটের জন্য ... আমি এখানে যা করেছি তা if(!c)একক ত্রিবারি অপারেটরের ক্রমকে হ্রাস পেয়েছে এবং আমি এটির প্যারেন্ট forলুপে অন্তর্ভুক্ত করেছি ... আমি অন্যান্য forলুপের সাথেও অনুরূপ কিছু করেছি I've ... কমা অপারেটররা একটি লুপের মধ্যে একাধিক বিবৃতিতে যোগ দিতে আশ্চর্যজনকভাবে কাজ করতে পারে ...
ওলিওয়েস্ট

2

জাভাস্ক্রিপ্ট (ES6) 175 , 166 , 161 , 156 , 153 147

Golfed

R={};prompt().split(/\s/).map(l=>{a=l.split(/[;,:]/);c=b=a[0];a.map(v=>b=!+v?v:(R[b]=(R[b]||0)+ +v c==b?b:R[c]-=+v))});for(x in R)alert(x+':'+R[x])

Ungolfed

R = {};
prompt().split(/\s/).map(l => {
    a = l.split(/[;,:]/);       // Split them all!! 
                                // Now in a we have big array with Country/Value items
    c = b = a[0];               // c - is first country, b - current country
    a.map(v =>                
         b = !+v ? v                 // If v is country (not a number), simply update b to it's value          
                 : (R[b] = (R[b] ||0) + +v   // Safely Add value to current country
                   c == b ? c : R[c] -= +v)  // If current country is not first one, remove debth 
    )
});
for (x in R) alert(x + ':' + R[x])

আউটপুট

US:9439.299999999997
FR:2598.8999999999996
ES:852.1
JP:4817.4
DE:2903.7
UK:1546.2000000000003
IT:887.5
PT:90.09999999999998
IE:48
GR:116.8

নিশ্চিত নয় যে দারুচলিত বৈকল্পিক সঠিকভাবে কাজ করবে কারণ গল্ফযুক্ত ভেরিয়েন্টে আমি এক-লাইন অপারেটর ব্যবহার করছি
tt.Kilew

আপনি কি আপনার আউটপুট দেখাতে পারেন?
ওয়ালিওয়েস্ট

1
প্রতিস্থাপিত R[b] ? R[b] += +v : R[b] = +vকরতেR[b]=R[b]||0+ +v
tt.Kilew

1
সূচি সরানো i=0;i++%2==0?b=vহয়েছেb=isNaN(+v)?v:
tt.Kilew

1
isNaN(+v)->!+v
টিটি কিলিউ

1

গ্রোভি 315

def f(i){t=[:];i.eachLine(){l=it.split(/;|,/);s=l[0].split(/:/);if(!z(s[0]))t.put(s[0],0);t.put(s[0],x(z(s[0]))+x(s[1]));(1..<l.size()).each(){n=l[it].split(/:/);t.put(s[0],x(z(s[0]))-x(n[1]));if(!z(n[0]))t.put(n[0],0);t.put(n[0],x(z(n[0]))+x(n[1]))}};t.each(){println it}};def x(j){j.toDouble()};def z(j){t.get(j)}

Output:
US=9439.299999999997
FR=2598.8999999999996
ES=852.1
JP=4817.4
DE=2903.7
UK=1546.2000000000003
IT=887.5
PT=90.09999999999998
IE=48.0
GR=116.8

Ungolfed:

input = """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"""

ungolfed(input)

def ungolfed(i){
    def tallyMap = [:]
    i.eachLine(){ 
        def lineList = it.split(/;|,/)
        def target = lineList[0].split(/:/)

        if(!tallyMap.get(target[0])){tallyMap.put(target[0],0)}
        tallyMap.put(target[0],tallyMap.get(target[0]).toDouble() + target[1].toDouble())
        (1..lineList.size()-1).each(){ e ->
            def nextTarget = lineList[e].split(/:/)
            //subtract the debt
            tallyMap.put(target[0], (tallyMap.get(target[0]).toDouble() - nextTarget[1].toDouble()))
            //add the debt
            if(!tallyMap.get(nextTarget[0])){ tallyMap.put(nextTarget[0], 0) }
            tallyMap.put(nextTarget[0], (tallyMap.get(nextTarget[0]).toDouble() + nextTarget[1].toDouble()))  
        }
    }
    tallyMap.each(){
        println it
    }
}

গ্রোভির উপর আমি আরও তথ্য কোথায় পাব তার একটি লিঙ্ক থাকার কি ঘটে?
ওয়ালিওয়েস্ট

@ ওয়েলিওয়েস্ট: আমার কাছে এই বইটি রয়েছে এবং এটি থেকে প্রচুর পরিমাণে শিখেছি। আমি অনুভব করি যে এটি সেই ভাষাগুলির মধ্যে একটি যা শেল্ফটিতে রেফারেন্স থাকা ভাল। লিঙ্ক , এছাড়াও এখানে টন তথ্য: লিঙ্ক
md_rasler

1

পিএইচপি, 333

$a='';while(($l=trim(fgets(STDIN)))!='')$a.=$l.'\n';$a=rtrim($a,'\n');$p=explode('\n',$a);foreach($p as $q){preg_match('/^([A-Z]+)/',$q,$b);preg_match_all('/'.$b[0].':(\d+(?:\.\d+)?)/',$a,$c);$e=ltrim(strstr($q,';'),';');preg_match_all('/([A-Z]+)\:(\d+(?:\.\d+)?)/',$e,$d);echo $b[0].':'.(array_sum($c[1])-array_sum($d[2])).PHP_EOL;}

অবরুদ্ধ সংস্করণ:

$a='';
while(($l=trim(fgets(STDIN)))!='')
    $a .= $l.'\n';
$a = rtrim($a,'\n');
$p = explode('\n',$a);
foreach($p as $q){
    preg_match('/^([A-Z]+)/',$q,$b);
    preg_match_all('/'.$b[0].':(\d+(?:\.\d+)?)/',$a,$c);
    $e = ltrim(strstr($q,';'),';');
    preg_match_all('/([A-Z]+)\:(\d+(?:\.\d+)?)/', $e, $d);
    echo $b[0].':'.(array_sum($c[1])-array_sum($d[2])).PHP_EOL;
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.