ग्लोबल डेट, कोड गोल्फ तरीका हल करें


32

दुनिया के नेताओं ने बैठक की और अंततः स्वीकार किया कि वैश्विक आर्थिक संकटों को हल करने का सबसे अच्छा (और एकमात्र) तरीका है कि वे एक-दूसरे पर कितना बकाया है और बस एक-दूसरे को भारी चेक देकर भुगतान करें। उन्होंने ऐसा करने के सर्वोत्तम साधनों को पूरा करने के लिए आपको (विडंबना यह है कि न्यूनतम अनुबंध दर पर संभव है) काम पर रखा है।

बहुत विचार-विमर्श के बाद, और किसी को एक सरल उदाहरण बनाने के लिए कहकर वे निम्नलिखित कल्पना के साथ आए।

प्रत्येक देश को उनके आईएसओ 3166-1 अल्फा -2 कोड द्वारा दर्शाया गया है : USसंयुक्त राज्य अमेरिका के लिए, AUऑस्ट्रेलिया के लिए, JPजापान के लिए, CNचीन के लिए और इसी तरह ...

  1. एक बहीखाता देश प्रविष्टियों की एक श्रृंखला के रूप में तैयार किया गया है और प्रत्येक देश के कारण राशि है।
  2. प्रत्येक देश की प्रविष्टि उनके डोमेन आईडी के साथ शुरू होती है, और उनके पास अधिशेष / घाटा (यूरो के अरबों में) कितना है, इसके बाद अर्धविराम, फिर एक उपनिवेश अल्पविराम से अलग देशों की सूची और कितना (अरबों में) यूरो) वे बकाया हैं।
  3. यदि किसी देश का दूसरे देश पर कुछ भी बकाया है, तो उस देश का कोई भी उल्लेख उस अर्धविराम विभाजक के बाद दर्ज नहीं किया जाता है।
  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

सिस्टम तब काम करता है जब प्रत्येक देश का बकाया है और बकाया है और उनके अधिशेष / घाटे को निर्धारित करता है, उदाहरण के लिए, AU के लिए:

एयू = 8 (वर्तमान अधिशेष) -10 (अमेरिका से) -15 (सीएन से) -3 (जेपी में) +12 (अमेरिका से) +8 (सीएन से) +6 (जेपी से) = 6

जब सभी कंप्यूटिंग की जाती है, तो एक टैली दिखाना होगा:

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

आपका काम इस प्रणाली का निर्माण करना है, जो किसी भी संख्या में देशों के लिए किसी भी तरह की लेज़र प्रविष्टियाँ लेने में सक्षम है और यह निर्धारित करने में सक्षम है कि प्रत्येक देश को भुगतान किए जाने पर कितना घाटा / अधिशेष है।

अंतिम परीक्षा आपके लिए नीचे दिए गए परीक्षण मामले में निम्नलिखित देशों के बीच बकाया ऋण को हल करने के लिए अपने कोड का उपयोग करने के लिए है। ये आंकड़े बीबीसी समाचार से जून 2011 तक लिए गए थे। ( 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
दरअसल, यह भटकाव में होमवर्क नहीं है ... यह मेरे दोस्तों के साथ मेरे साप्ताहिक पोकर टूर्नामेंट से प्रेरित था ... प्रत्येक खिलाड़ी के लिए जीत हासिल करने का एक तेज़ तरीका जानने की कोशिश करना;)
20

1
@AllyWest LOL;) btw, OT टिप्पणियों के लिए माफी माँगता हूँ, लेकिन यह एक ऐसी बात है जिसके बारे में मैं काफी भावुक हूँ। चलिए अब कुछ मजेदार कोडिंग पर लौटते हैं और दुनिया के संकटों को भूल जाते हैं ...
तोबिया

जवाबों:


11

के, ६६

{(((!)."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

अविश्वसनीय रूप से इस एक से प्रभावित ... किसी भी मौका आप K प्रोग्रामिंग प्रतिमान के लिए एक लिंक प्रदान कर सकते हैं?
वैलेस्ट

@WallyWest code.kx.com q पर बहुत सारी जानकारी प्रदान करता है, जो कि वाक्यगत चीनी है जो k के शीर्ष पर बैठता है। q, moreso धन्यवाद k, वह है जो आप उत्पादन प्रणालियों में पाएंगे लेकिन गोल्फ के लिए किनारा है। इसके अलावा कोना देखें ( github.com/kevinlawler/kona ) जो k
tmartin

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
"लघु" की परिभाषा को टोकन की मात्रा से आंका जाना चाहिए, न कि पात्रों से। पठनीयता ४ जीवन!
डोमी

10
@ डोमी - तुम यहाँ नए हो, तुम नहीं हो ;-)
jimbobmcgee

4
@jimbobmcgee: मुझे यह भी लगता है कि यह वेबसाइट पठनीयता के बारे में ज्यादा नहीं है ...
मैथ्यू रोडिक

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

PHP - 338, 280

PHP 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;}

मुझे लगता है कि कोड बहुत लंबा है, लेकिन अच्छा मज़ा आया। यह मेरी पहली बार कोड गोल्फिंग है, और मैं C ++ में नया हूं, इसलिए मेरे कोड को बेहतर बनाने के सुझावों की बहुत सराहना की गई है।

अंतिम चुनौती परिणाम

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
नमस्ते, C ++ में एक उदाहरण देखकर अच्छा लगा। आप वर्णनात्मक नामों के अनुसार एक-अक्षर पहचानकर्ताओं का उपयोग करके वर्णों की संख्या कम कर सकते हैं, अर्थात मैं इनपुट के लिए उपयोग कर सकता हूं , देशों के लिए सी और इसी तरह।
अय्य 1

यहाँ @ ahy1 से सहमत ... यदि आप अपने चरों को 1 अक्षर तक कम कर देते हैं, तो आप इसमें बहुत कमी कर सकते हैं ... आपको भविष्य की गोल्फ चुनौतियों के लिए यह रुचि भी मिल सकती है: codegolf.stackexchange.com/questions/132/ips -for-golfing-in-c
वैलीवेस्ट

ओह, और आपको cout << "Output:\n";या तो ज़रूरत नहीं होगी ... कि वहाँ 20 बाइट की बचत है ...
WallyWest

3

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


क्यों उन हेडर में भी डाल दिया? आप उनके बिना अधिक बाइट्स बचाएंगे ... वे मेरे द्वारा निर्धारित की गई कल्पना का हिस्सा भी नहीं थे ...;)
वैलीवेस्ट

@WallyWest: ठीक है, इसलिए मुझे यह समझ में नहीं आया, क्योंकि वे इनपुट और आउटपुट उदाहरण के आपके पहले उदाहरण में प्रदर्शित हैं: (..) एक टैली दिखाया जाना चाहिए: आउटपुट: (..) इसके बारे में कोई चिंता नहीं है, मैं हटाता हूं मेरा पहला उदाहरण अभी।
प्रातः

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

खैर.. मुझे पता है कि यह काफी लंबा है लेकिन यह मेरा दूसरा कोड गोल्फ है।

सुझावों का स्वागत है!

BTW, दिलचस्प जावास्क्रिप्ट हैशैप्स में तत्वों के क्रम को संरक्षित करता है, इसलिए, भले ही p में शब्दकोशों की एक सरणी हो, मैं प्रत्येक शब्दकोश को एक सरणी के रूप में प्रसारित कर सकता हूं और मुझे यकीन है कि एक तानाशाही का पहला तत्व पहले डाला गया है। (देश का नाम वर्तमान लाइन के लिए संदर्भित)

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')):?
user2428118

वाह यह मुझे 7 * 4- (3 * 4 + 11) अक्षर बचा लिया! (मैं भी डाल (w!=null)के रूप में(!w)
एंटोनियो Ragagnin

@AntonioRagagnin क्या आप कृपया अपना आउटपुट दिखा सकते हैं?
वैलीवेस्ट

अपने संदेश के लिए धन्यवाद @WallyWest। टर्न आउट !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"))229 बाइट्स के लिए ... मैंने यहां जो किया है वह if(!c)एक एकल टर्नरी ऑपरेटर के अनुक्रम को कम कर देता है , और मैंने इसे अपने मूल forलूप में भी शामिल किया है ... मैंने दूसरे forलूप के साथ भी कुछ ऐसा ही किया है ... अल्पविराम ऑपरेटर एक लूप के भीतर कई कथनों में शामिल होने के लिए आश्चर्यजनक रूप से काम कर सकते हैं ...
वैलीवेस्ट

2

जावास्क्रिप्ट (ईएस 6) 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

क्या आप अपना उत्पादन दिखा सकते हैं?
12

1
R[b] ? R[b] += +v : R[b] = +vR[b]=R[b]||0+ +v
बजे

1
निकाला गया सूचकांक i=0;i++%2==0?b=vकरने के लिएb=isNaN(+v)?v:
tt.Kilew

1
isNaN(+v)->!+v
tt.Kilew

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
    }
}

क्या आपके पास ऐसा लिंक होना चाहिए जहां मुझे ग्रूवी के बारे में अधिक जानकारी मिल सके?
वैलीवेस्ट

@WallyWest: मेरे पास यह पुस्तक है, और इससे मैंने बहुत कुछ सीखा है। मुझे लगता है कि यह उन भाषाओं में से एक है जिसका शेल्फ पर संदर्भ होना अच्छा है। लिंक , यहाँ भी जानकारी के टन: लिंक
md_rasler

1

PHP, 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;}

Ungolfed संस्करण:

$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;
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.