Przywódcy świata spotkali się i ostatecznie przyznali, że najlepszym (i jedynym) sposobem rozwiązania globalnych problemów gospodarczych jest podsumowanie, ile są sobie winni i po prostu spłacenie się ogromnymi czekami. Zatrudnili cię (jak na ironię, przy najniższej możliwej stawce umownej), aby opracować najlepsze środki.
Po długich rozważaniach i poproszeniu kogoś o narysowanie prostego przykładu wymyślili następującą specyfikację.
Każdy kraj jest reprezentowany przez kod ISO 3166-1 alfa-2 : US
dla USA, AU
Australii, JP
Japonii, CN
Chin i tak dalej ...
- Księga jest sporządzana jako seria wpisów do kraju i kwot należnych dla każdego kraju.
- Wpis każdego kraju zaczyna się od identyfikatora domeny dwukropka i tego, ile mają nadwyżki / deficyty (w miliardach euro), a następnie średnika, a następnie rozdzielonej przecinkami listy krajów i ile (w miliardach Euro) są winni.
- Jeśli kraj nic nie jest winien innemu krajowi, po separatorze średników nie jest wprowadzana żadna wzmianka o tym kraju.
- Deficyty są wskazywane jako liczby ujemne, nadwyżka jest wskazywana jako liczba dodatnia.
- Wartości mogą być również zmiennoprzecinkowe.
- Księga musi być pobrana ze STDIN. Koniec księgi jest oznaczony znakiem powrotu karetki w pustej linii. Liczbę należy dostarczyć do STDOUT.
Przykład księgi:
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
Następnie system oblicza, ile każdy kraj jest winien i jest winien, i określa ich nadwyżkę / deficyt, na przykład dla AU:
AU = 8 (bieżąca nadwyżka) -10 (do USA) -15 (do CN) -3 (do JP) +12 (z USA) +8 (z CN) +6 (z JP) = 6
Po zakończeniu wszystkich obliczeń należy wyświetlić podsumowanie:
Output:
AU:6
US:-5
CN:35
JP:8
Twoim zadaniem jest stworzenie tego systemu, który będzie mógł przyjmować dowolną liczbę wpisów do księgi rachunkowej dla dowolnej liczby krajów i będzie w stanie określić, ile każdego kraju ma deficyt / nadwyżka, gdy wszystko zostanie wypłacone.
Ostatecznym testem jest skorzystanie z kodu w celu uregulowania długu między następującymi krajami w poniższym przypadku testowym. Dane te pochodzą z BBC News z czerwca 2011 r. ( Http://www.bbc.com/news/business-15748696 )
Do celów tego ćwiczenia wykorzystałem ich odpowiedni PKB jako ich bieżącą nadwyżkę ... Proszę pamiętać, że jest to ściśle ćwiczenie w zapewnianiu jakości kodu ... w tym pytaniu nie będzie mowy o globalnej rozdzielczości gospodarczej ... Jeśli chcesz rozmawiać o ekonomii, jestem pewien, że istnieje inna subdomena w SE, która to obsługuje ...
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
Teraz bądź ekonomicznym wybawcą świata!
Zasady:
- Wygrywa najkrótszy kod ... w końcu to jest golf golfowy ...
- Proszę podać wyniki głównego przypadku testowego wraz z odpowiedzią na kod ...
JP:4100
?Odpowiedzi:
K, 66
.
źródło
Perl,
139137134119112Oto kolejny działający kod ... Udokumentuję go później.
Kod do gry w golfa
Ze słownikiem (112):
Bez słownika (137):
Wydajność
Zobacz to w akcji!
http://ideone.com/4iwyEP
źródło
Python,
211185183Dane wyjściowe z głównym przypadkiem testowym:
(przetestuj tutaj: http://ideone.com/CjWG7v )
źródło
C -
257253, jeżeli nie ma CR na końcu liniiZależy od sizeof (krótki) == 2.
Brak sprawdzania przepełnienia bufora.
Wydajność:
Mniej golfa:
źródło
PHP -
338, 280Powinien współpracować z dowolną wersją PHP 5.
Gra w golfa :
Bez golfa :
Wyjście :
źródło
preg_match_all()
a następnie tylko raz zapętlił?perl (184 znaki)
Kod
Wydajność
źródło
Perl -
116114112Wydajność:
Nie golfowany:
źródło
C ++ - 1254
Zdaję sobie sprawę, że kod jest bardzo długi, ale dobrze się bawiłem. To jest mój pierwszy raz w golfa kodu i jestem nowy w C ++, więc sugestie dotyczące ulepszenia mojego kodu są bardzo mile widziane.
Ostateczne wyniki wyzwania
Kod niepoznany
źródło
cout << "Output:\n";
... To 20-bajtowa oszczędność tam ...AWK -
138120I wyniki
Bez golfa
(przetestuj tutaj: http://ideone.com/pxqc07 )
źródło
Rubin - 225
Najpierw spróbuj w takim wyzwaniu, na pewno może być znacznie lepiej ...
I wyniki
źródło
JS,
254240245Cóż .. Wiem, że jest dość długi, ale to mój drugi golf.
Sugestie są mile widziane!
BTW, ciekawy Javascript zachowuje porządek elementów w mapach skrótów, więc nawet jeśli p zawiera tablicę słowników, mogę iterować każdy słownik jako tablicę i jestem pewien, że pierwszy element dykta jest wstawiany pierwszy. (nazwa kraju odnoszącego się do bieżącej linii)
Nie golfowany:
Uwaga: wejście to
prompt()
powinna być pojedyncza linia. Ale jeśli skopiujesz / wkleisz tekst wielowierszowy (jak proponowane dane wejściowe) wprompt()
oknie,JS
przeczytaj wszystko.Wydajność:
źródło
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)
(!w)
!w
że sprawdzenie nie było dobrym pomysłem,w!=null
a skrypt już nie działał: p. Teraz zaktualizuję go o wynikiz="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"))
dla 229 bajtów ... To, co tutaj zrobiłem, sprowadzaif(!c)
sekwencję do jednego operatora trójskładnikowego, a także umieściłem ją w jejfor
pętli nadrzędnej ... Zrobiłem też coś podobnego z drugąfor
pętlą ... operatorzy przecinków mogą pracować cudownie, łącząc wiele instrukcji w pętli ...JavaScript (ES6)
175,166,161,156,153147Grał w golfa
Bez golfa
Wydajność
źródło
R[b] ? R[b] += +v : R[b] = +v
naR[b]=R[b]||0+ +v
i=0;i++%2==0?b=v
dob=isNaN(+v)?v:
isNaN(+v)
->!+v
Groovy 315
Nie golfowany:
źródło
PHP, 333
Wersja bez golfa:
źródło