๋น์ ์ ์๋ฌด-๋น์ ์ด ๊ทธ๊ฒ์ ๋ฐ์๋ค์ด๋ฉด- ์ฝ๋ ๊ณจํ ์ญ๊ฒฝ ๊ฒฝ์ ์ ์น์๋ฅผ ๊ณ์ฐํ์ฌ ๋ฉํ ์ ๋ํ ๋์ ์ ์์ ์ดํดํ๋ ๋ฐ ๋์์ด๋๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ ๊ฒ์ ๋๋ค. ๋ฌผ๋ก ์ด ์ง๋ฌธ์ ๋ํ ๋ต๋ณ์ ์ ์ ๋๋๋ก ์ฒ๋ฆฌ๋๋ฏ๋ก ๊ทํ์ ํ๋ก๊ทธ๋จ (์ ํํ ๊ฒฝ์ฐ)์ ๊ทํ์ ๋ต๋ณ์ด ์๋ฝ ๋ ๋ต๋ณ์ด ๋ ์ง ์ฌ๋ถ๋ฅผ ๊ณ์ฐํ ์ ์์ต๋๋ค.
๊ท์น
- ํ๋ก๊ทธ๋จ์ ๋ค์ ํ์์ ์ฌ๋ฌ ์ค์ด์๋ ํ์ผ์ ์ฝ์ต๋๋ค (์๋ ์ ์ฐธ์กฐ). [Language] TAB [NumberOfCharacters] TAB [LinkToAnswer]
- ํ์ผ ์ด๋ฆ์ด ํ๋ก๊ทธ๋จ์ ์ธ์๋ก ์ ๋ฌ๋๊ฑฐ๋ ํ์ผ์ด ํ๋ก๊ทธ๋จ์ ํ์ค ์ ๋ ฅ์ผ๋ก ๊ฒฝ๋ก ์ฌ ์ง์ ๋ฉ๋๋ค. ๊ทธ๊ฒ์ ๋น์ ์ ์ ํ์ ๋๋ค, ๋ต๋ณ์ ์ค ๋ ๋ฐฉ๋ฒ์ ์ธ๊ธํ์ญ์์ค
- ์ ๋ ฅ ํ์์ด ์ฌ๋ฐ๋ฅธ ๊ฒ์ผ๋ก ์์๋ฉ๋๋ค. ์ค๋ฅ ์ฒ๋ฆฌ๊ฐ ํ์ํ์ง ์์ต๋๋ค.
- ๋ฌธ์ ์๋ ์์์ ๋๋ค. ํ๋ก๊ทธ๋จ์ ์ต๋ 65535๊น์ง์ ๊ธธ์ด๋ฅผ ์ฒ๋ฆฌํด์ผํฉ๋๋ค. 64k์ด๋ฉด ๋๊ตฌ๋ ์ถฉ๋ถํฉ๋๋ค ๐
- ์ด ํ๋ก๊ทธ๋จ์ ๋ฉํ ์ ์์ ์์ด๋์ด๋ฅผ ์ถฉ์กฑ์ํค๋ ํ์ค ์ถ๋ ฅ์ผ๋ก ํด๋น ํ์ ์ถ๋ ฅํฉ๋๋ค.
- ํน์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๊ฐ์ฅ ์งง์ ์ฝ๋๊ฐ ์น๋ฆฌํฉ๋๋ค (๊ฐ์ ๋จ๊ณ)
- ๋ชจ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ์ค์์ ๊ฐ์ฅ ๊ธด ์ฝ๋๊ฐ ์น๋ฆฌํฉ๋๋ค (์ ๋ ฌ ๋จ๊ณ).
- ์ถ์ฒจ์ ๊ฒฝ์ฐ ๊ธธ์ด๊ฐ ๊ฐ์ ๋ชจ๋ ๋ต๋ณ์ด ์ธ์๋ฉ๋๋ค.
- ์ถ๋ ฅ ์์๋ ์ค์ํ์ง ์์ต๋๋ค
- ๊ฐ์ฅ ๊ธด ์ฝ๋๊ฐ์ด๊ธฐ๋ํ์ง๋ง ์ด๊ฒ์ ์ฝ๋ ๋ณผ๋ง ์ด ์๋๋๋ค . ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋ํ ์ฝ๋๋ ๊ฐ๋ฅํ ์งง์์ผํฉ๋๋ค.
- ์ฝ๋๋ฅผ ๋จ์ถํ๋ ค๊ณ ์๋ํ์ง ์๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋ํ ๋๋ต์ ์ด๋ฌํ ์ข ๋ฅ์ ์ง๋ฌธ์ ์๋๋ฅผ ์ฐํํ๋ ค๊ณ ์๋ํ๊ธฐ ๋๋ฌธ์ ๊ณต๊ฐํ ๊ฐ์น๊ฐ ์์ต๋๋ค. ํน์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋ํ ๋ต๋ณ์ด ํ๋๋ง์๋ ๊ฒฝ์ฐ ์น์ ํ๋ณด๋ก ๊ฐ์ฃผ๋๋ฏ๋ก ์ฝ๋๋ฅผ ๋ ๋ฆด ์ ์์ต๋๋ค.
์ ๋ ฅ ํ์ผ ์ (์์์ ๋ฌธ์ ๊ฐ์๋ ๊ฒฝ์ฐ ๋จ์ผ ํญ์ผ๋ก ๊ตฌ๋ถ) :
GolfScript 34 http://short.url/answer/ags
GolfScript 42 http://short.url/answer/gsq
C# 210 http://short.url/answer/cs2
Java 208 http://short.url/answer/jav
C# 208 http://short.url/answer/poi
J 23 http://short.url/answer/jsh
Ruby 67 http://short.url/answer/rub
C# 208 http://short.url/answer/yac
GolfScript 210 http://short.url/answer/210
์์ ์ถ๋ ฅ (์์๋ ์ค์ํ์ง ์์) :
C# 208 http://short.url/answer/poi
C# 208 http://short.url/answer/yac
Java 208 http://short.url/answer/jav
์ต์ ์ ๋ณด
์ผ๋ถ ํ๋ก๊ทธ๋จ์ ๋จ์ผ ์ต๋ ๊ฐ (C # 210 ๋ฌธ์ ํ๋ก๊ทธ๋จ๊ณผ ๊ฐ์)์ด ์๋ค๋ ์ฌ์ค์ ์์กดํฉ๋๋ค. ํ์ค์์ ํ์ ๋ ์ฌ๋์ 210 ์๋ก ๋ GolfScript ํ๋ก๊ทธ๋จ์ ์์ฑํ ์๋ ์์ต๋๋ค. ์ถ๋ ฅ์ ๋์ผํ๊ฒ ์ ์ง๋ฉ๋๋ค. ์ด๋ฌํ GolfScript๋ฅผ ์ ๋ ฅ์ ์ถ๊ฐํ์ต๋๋ค.
์ ๋ฐ์ดํธ 2
์ ์ํ๋๋ก ๋ค์ ํ๊ทธ๋ฅผ ์ถ๊ฐํ๊ณ (์ฌ์ ํ ์ฝ๋ ๊ณจํ) ๋ง๊ฐ์ผ์ 2014-03-06์ ๋๋ค (์์์ ๋ ์ง์ฒ๋ผ ๋ณด์ด์ง๋ง ์ฌํ์ ๋ง์น๋ฉด ๋ ์ผ๋ก ๋์๊ฐ๋๋ค).
์ต์ข ๊ฒฐ๊ณผ
๋ค์๊ณผ ๊ฐ์ด ํฌํํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค.
- ๋ฌธ์ ์๋ฅผ ํ์ธํ ์์๋ ๋ต๋ณ์ ๊ฐ์๋ฅผ ์ค๋ช ํ๋ ์ฃผ์์๋ฐ์ต๋๋ค.
- ์ฝ๊ฒ ์ค์ผ ์์๋ ๋ต๋ณ์ ์๊ฒฌ, ํธ์ง ์ ์์ ๋ฐ๊ณ ๋ ๋ฎ์ ์นด์ดํธ ๊ฐ์ผ๋ก ๊ฒฐ๊ณผ๋ฅผ ์ป์ต๋๋ค. (๋๋ ๊ทธ๊ฒ์ ๋ฏธ๋ฆฌ ๋ณด์์ต๋๋ค).
- ์ปดํ์ผํ์ง ์์ ๋ต๋ณ์ ๊ณต๊ฐ๋๋ฅผ ์ป์ต๋๋ค. (๋งค์ฐ ์ด๋ ค์ด ์์ ์ด ๋์ต๋๋ค).
- ๊ณจ์ ๋ฃ์ง ์์ ๋ต๋ณ์ ์ด๋ฏธ ๊ท์น์ ์ค๋ช ๋๋๋ก ๋ค์ด ๋ณดํธ๋ฅผ๋ฐ์ต๋๋ค.
- ์์ ์ถ๋ ฅ์ ์์ฑํ๋ ๋ต๋ณ์ ๊ณต๊ฐ๋๋ฅผ ์ป์ต๋๋ค. ์์๋๋ก ์๋ํ์ง ์๋ ์ผ๋ถ ๋ต๋ณ์ผ๋ก ์ธํด 4 ๊ฐ์ง ์ ๋ ฅ ํ์ผ์ ์ฌ์ฉํ๊ณ ์์ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํฉ๋๋ค.
๋ง์ง๋ง์ผ๋ก, ์ ๊ฒฉ ๋ต๋ณ ํ๋ฅผ ์ฐธ์กฐ ํ๋ก๊ทธ๋จ์ ๋ํ ์ ๋ ฅ์ผ๋ก ์ ๊ณตํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ์๋์ผ๋ก ๋ ๋ฒ ํ์ธํ์ฌ ๋น์ฒจ์๋ฅผ ๊ฒฐ์ ํฉ๋๋ค. ๋ด ๋๋ต์ด์ด๊ธฐ๋ ๊ฒ์ด๋ฉด ๋ชฉ๋ก์์ ์ ์ธํฉ๋๋ค. ์น์๊ฐ ์ฌ๋ฌ ๋ช ์ธ ๊ฒฝ์ฐ ํ๋๋ง ์ ํํ๋ฉด๋ฉ๋๋ค. ๋ฐ๋ผ์ ๋ช ๊ฐ์ง ๋ณด๋์ค๋ฅผ ์ป์ ์ ์์ต๋๋ค.
- ์์๋ณด๋ค ๋ง์ ์ ๋ ฅ์๋ฐ๋ ๋ต๋ณ (์ : ์ ์ ๋ ๋ฒ์๋ฅผ ๋ฒ์ด๋)
- ์งง๊ฒ ๋ง๋๋ ์๋ฆฌํ ์์ด๋์ด๋ฅผ ์ฌ์ฉํ๋ ๋ต๋ณ
2014 ๋ 3 ์ 6 ์ผ 19:45 UTC + 1์ ๋ํ ๋ต๋ณ์ ์ค๋ ์ท์ ์์ฑํ์ต๋๋ค. ๋ถ์์ด ์งํ ์ค์ ๋๋ค. ๋ชจ๋ ๋ต๋ณ์ ํ์ธํ๋ ๊ฒ์ด ์์๋ณด๋ค ์ด๋ ต์ต๋๋ค โฆ
๋ต๋ณ
์๋ฐ-556
import java.util.*;class G{public static void main(String[]x){TreeMap<?,TreeMap>m=new TreeMap();try{Scanner s=new Scanner(System.in);for(;;){String[]a=s.nextLine().split("\t");a(new Long(a[1]),a(a[0],m)).put(a[2],a);}}catch(Exception e){}TreeMap<?,Map<?,String[]>>n=new TreeMap();for(TreeMap o:m.values())a(o.firstEntry().getKey(),n).putAll((Map)o.firstEntry().getValue());for(String[]o:n.lastEntry().getValue().values())System.out.println(o[0]+"\t"+o[1]+"\t"+o[2]);}static<T>Map a(T t,Map m){if(m.get(t)==null)m.put(t,new TreeMap());return(Map)m.get(t);}}
ํ๋ก๊ทธ๋จ์ STDIN์์ ์ฝ์ต๋๋ค.
import java.util.Map;
import java.util.Scanner;
import java.util.TreeMap;
class G {
public static void main(String[] x) {
TreeMap<?, TreeMap> m = new TreeMap();
try {
Scanner s = new Scanner(System.in);
for (; ; ) {
String[] a = s.nextLine().split("\t");
a(new Long(a[1]), a(a[0], m)).put(a[2], a);
}
} catch (Exception e) {
}
TreeMap<?, Map<?, String[]>> n = new TreeMap();
for (TreeMap o : m.values())
a(o.firstEntry().getKey(), n).putAll((Map) o.firstEntry().getValue());
for (String[] o : n.lastEntry().getValue().values())
System.out.println(o[0] + "\t" + o[1] + "\t" + o[2]);
}
static <T> Map a(T t, Map m) {
if (m.get(t) == null)
m.put(t, new TreeMap());
return (Map) m.get(t);
}
}
- ํ๋ก๊ทธ๋จ์ ์์ธ
ArrayIndexOutOfBoundsException
๊ฐ ๋ฐ์ํ ๋ ๊น์ง ํ ์ค์ฉ ์ฝ์ต๋๋ค ( ๋น ์ค์ด ์๊ฑฐ๋NoSuchElementException
์ ๋ ฅ์ด ์ค ๋ฐ๊ฟ์์ด ์ข ๋ฃ๋๋ ๊ฒฝ์ฐ). ๊ฐ ํ ์ฝ๊ธฐ๋ (์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก : ์ธ์ด, ์ฝ๋ ํฌ๊ธฐ, URL, ์ ๋ ฅ)TreeMap m
์ผ๋ก ์ ์ ๋ ์์๋์ ์ถ๊ฐ๋ฉ๋๋คTreeMap<String, TreeMap<Long, TreeMap<String,String[]>>>
. - ๊ทธ๋ฐ ๋ค์
TreeSet<Long, TreeSet<String, String[]>> n
๋ชจ๋ ์ธ์ด์ ๋ด์ฉfirstEntry()
์ด ์ง๊ณ ๋๋ ๊ฒฐ๊ณผ (์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก : ์ฝ๋ ํฌ๊ธฐ, URL, ์ ๋ ฅ)๊ฐ ์์ฑ ๋ฉ๋๋ค. lastEntry()
์ง๊ณTreeMap
๋ ๊ฒฐ๊ณผ ์ค ํ๋์ ๊ฒฐ๊ณผ๊ฐ ํฌํจ๋ฉ๋๋ค. ์ธ์ ๋งํ๋ฉด๋ฉ๋๋ค.
ideone.com์์ ์๋ํ์ญ์์ค (๋ง์ง๋ง ๋ ์ค์ ์ ๋ ฅ์ ์ ํํ์ฌ ๋ชจ๋ ์ค์ ์ฝ์ ์์ ๋ณด์ฌ์ค๋๋ค)
๋ต๋ณ
ํ, 195 ๋ฐ์ดํธ
while(<>){/(\S+)\t(\d+)\t(.+)/;push@{$a{$1}},$3if$2==$l{$1};$l{$1}=$2,$a{$1}=[$3]if $2<($l{$1}//65536)}$m=(sort{$b<=>$a}values%l)[0];map{$l=$_;map{print"$l\t$m\t$_\n"if$l{$l}==$m}@{$a{$l}}}keys%l
STDIN์ ์ ๋ ฅ์ด ์์๋๋ฉฐ STDOUT์ ๊ฒฐ๊ณผ๊ฐ ๊ธฐ๋ก๋ฉ๋๋ค.
C# 208 http://short.url/answer/poi
C# 208 http://short.url/answer/yac
Java 208 http://short.url/answer/jav
์ธ ๊ณจํ ๋ฒ์
#!/usr/bin/env perl
use strict;
$^W=1;
# hash %language remembers the minimum count for a language
# %language: <language> => <minimum count>
my %language;
# hash %array remembers the URLs for the minimum count of the language
# %array: <language> => [<url>, <url>, ....]
my %array;
while(<>){
# parse input line (no error checking)
/(\S+)\t(\d+)\t(.+)/;
my ($lang, $count, $url) = ($1, $2, $3);
# add URL, if the count is the current minimum for the language
if ($count == ($language{$lang}//0)) {
# better, but longer version:
# if (defined $language{$lang} and $count == $language{$lang}) {
push @{$array{$lang}}, $url;
}
# create a new entry for the language, if there is a new minimum
if ($count < ($language{$lang}//65536)) {
# better, but longer version:
# if (not defined $language{$lang} or $count < $language{$lang}) {
$language{$lang} = $count;
$array{$lang} = [$url];
}
}
# Sort the minimal values in numerical descending order and
# get the first entry as maximum.
my $maximum = (sort { $b <=> $a } values %language)[0];
# Loop over all URLs of minimal answers for the language,
# but print only the entries for the languages with the largest
# minima.
foreach my $lang (keys %language) {
foreach my $url (@{$array{$lang}}) {
if ($language{$lang} == $maximum) {
print "$lang\t$maximum\t$url\n";
}
}
}
__END__
๋ต๋ณ
ํ์ด์ฌ 378 377 372
import sys
d=__import__("collections").defaultdict(list)
o={}
x=int
n="\n"
for i,l,u in[a.split()for a in sys.stdin.read().strip().split(n)]:d[i]+=[(l,u)]
for e,b in d.items():o[e]=[i for i in b if i[0]==str(min([x(i[0])for i in b]))]
print("".join(n.join("\t".join([u,s[0],s[1]])for s in y if x(s[0])==max(x(i[0][0])for i in o.values()))+n for u,y in o.items()).strip())
stdin์ ์ ๋ ฅ :
C:\Users\gcq\Documents\python>type m.txt | python test.py
C# 208 http://short.url/answer/poi
C# 208 http://short.url/answer/yac
Java 208 http://short.url/answer/jav
๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ 551 ์๋ก ์์ถํ๊ธฐ ์ ์ ๋ด๊ฐ ๊ฐ์ง ๊ฒ์ ๋๋ค.
from collections import defaultdict
import sys
d = defaultdict(list)
for language, length, url in [a.split() for a in sys.stdin.read().strip().split("\n")]:
d[language].append((length, url))
o = {}
for language, data in d.items():
winval = data[0][0]
for i in data:
if int(i[0]) < int(winval):
winval = i[0]
o[language] = [i for i in data if i[0] == winval]
maxlen = max(int(i[0][0]) for i in o.values())
for language, dataa in o.items():
for data in dataa:
if int(data[0]) == maxlen:
print("\t".join([language, data[0], data[1]]))
๋ต๋ณ
C #-628
๋ค์์ ์ฌ์ฉํ๋ ๋ ๊ธด ๋์์
๋๋ค DataTable
.
using Microsoft.VisualBasic.FileIO;namespace System{using T=Data.DataTable;using R=Data.DataRow;using V=Data.DataView;using C=Data.DataColumn;class p{static void Main(string[] a){var I=typeof(Int32);T t=new T();t.Columns.AddRange(new[]{new C("a"),new C("b",I),new C("c"),new C("d",I)});var f=new TextFieldParser(a[0]);f.SetDelimiters("\t");while(!f.EndOfData){var r=t.NewRow();r.ItemArray=f.ReadFields();t.Rows.Add(r);}foreach(R r in t.Rows){r[3]=t.Compute("min(b)","a='"+r[0]+"'");}V v=new V(t);T s=v.ToTable();foreach(R r in s.Select("b='"+t.Compute("max(d)","")+"'")){Console.WriteLine(String.Join("\t",r[0],r[1],r[2]));}}}}
๋๋ ์๋ max / min์ ์ฌ์ฉํ์ฌ ์ฝ๊ฐ์ ์ฝ๋ ์ถ์๋ฅผ ์ป์ ์ ์๋ค๊ณ ์๊ฐ DataTable
ํ์ง๋ง DataTable
(ํ / ์ด /๋ณด๊ธฐ)๋ฅผ ์์ฑ ํ๋ ๋ฐ ํ์ํ ์ ํ ์ ๋ถํํ๋ ๋ง์ ๊ธธ์ด๋ฅผ ์ถ๊ฐํฉ๋๋ค. ์ฝ๋ ๊ณจํ๋ฅผ ์ฒ์ ๋ดค์ผ๋ฏ๋ก ๋๊ตฐ๊ฐ ๋ ์ค์ผ ์์์ ๊ฒ์
๋๋ค. ์ฌ์ ํ ์ฌ๋ฏธ์๋ ๋์ ์
๋๋ค.
๋ต๋ณ
DG โ 286 281 260 251 218 ๋ฐ์ดํธ
import '/sys'
d=dict!
for(a,b,c)in(map str.split$(sys.stdin.read!).splitlines!)=>d!!a=(d.get a list!)+(list'(int b,c))
for(i,l)in(d.items!)=>for(s,u)in l=>s==(max$map(i->fst$min i)d.values!)=>print$i+' '+(str s)+' '+u
์:
$ cat langs.txt | dg langs.dg
C# 208 http://short.url/answer/poi
C# 208 http://short.url/answer/yac
Java 208 http://short.url/answer/jav
์ธ ๊ณจํ ๋ฒ์ :
import '/sys'
s = sys.stdin.read!
d = dict!
# convert the string into a list of tuples (name, score, url)
u = map str.split $ s.splitlines!
# add all the values to the dict (converting the score to an integer)
for (a, b, c) in u =>
d!!a = (d.get a list!) + (list' (int b, c))
# computes the maximum value amongst the mins
m = max $ map (i -> fst $ min i) d.values!
for (i, l) in (d.items!) =>
for (s, u) in l =>
# if the score equals the maximum then print all the line
s == m => print $ i + ' ' + (str s) + ' ' + u # actually here .format()
# would be better
Q : dg๋ ๋ฌด์์
๋๊น?
A : Scala๊ฐ JVM์ผ๋ก ์ปดํ์ผํ๋ ๊ฒ์ฒ๋ผ CPython ๋ฐ์ดํธ ์ฝ๋๋ก ์ปดํ์ผํ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์
๋๋ค. ์ด๋ ๋ณธ์ง์ ์ผ๋ก dg๊ฐ Python 3์ ๋์ ๊ตฌ๋ฌธ์์ ์๋ฏธํฉ๋๋ค. ๊ธฐ์กด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ชจ๋ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์์ธํ ์ ๋ณด๋ ์ฌ๊ธฐ (์์ต์!) : https://pyos.github.io/dg
๋ต๋ณ
๋ฆฌ๋ณผ-314
d: map[]foreach r read/lines to-file system/script/args[r: split r tab p: take r r/1: to-integer r/1 r/2: reduce[r/2]either none? d/:p[repend d[p r]][case[d/:p/1 > r/1[d/:p: r]d/:p/1 = r/1[append d/:p/2 r/2]]]]l: 0 foreach[k v]d[l: max l v/1]foreach[k v]d[if l = v/1[foreach n v/2[print rejoin[k tab v/1 tab n]]]]
๊ณจํผ๊ฐ์๋
d: map []
foreach r read/lines to-file system/script/args [
r: split r tab
p: take r
r/1: to-integer r/1
r/2: reduce [r/2]
either none? d/:p [repend d [p r]] [
case [
d/:p/1 > r/1 [d/:p: r]
d/:p/1 = r/1 [append d/:p/2 r/2]
]
]
]
l: 0 foreach [k v] d [l: max l v/1]
foreach [k v] d [
if l = v/1 [
foreach n v/2 [print rejoin [k tab v/1 tab n]]
]
]
์ฌ์ฉ ์ :
$ rebol script.reb data.txt
C# 208 http://short.url/answer/poi
C# 208 http://short.url/answer/yac
Java 208 http://short.url/answer/jav
๋ต๋ณ
C #-515
ํ์ผ ์ด๋ฆ์ ์ธ์๋ก ์์ํฉ๋๋ค
using System.Collections.Generic;namespace N{using S=SortedList<int,T>;class T:List<string>{static void Main(string[]a){var d=new Dictionary<string,S>();int n,m=0;T w=new T();foreach(var l in System.IO.File.ReadAllLines(a[0])){var p=(a=l.Split('\t'))[0];n=int.Parse(a[1]);if(!d.ContainsKey(p))d.Add(p,new S());if(!d[p].ContainsKey(n))d[p].Add(n,new T());d[p][n].Add(l);}foreach(var e in d){n=e.Value.Keys[0];if(n==m)w.AddRange(e.Value[n]);if(n>m)w=e.Value[m=n];}foreach(var e in w)System.Console.WriteLine(e);}}}
๋จผ์ ์ผ์ข ์ ์ฐธ์กฐ ํ๋ก๊ทธ๋จ์ ์ํ๊ธฐ ๋๋ฌธ์ C # ํ๋ก๊ทธ๋จ์ ๊ฐ๋จํ๊ฒ ์ค๊ณํ์ต๋๋ค. ๊ทธ๋ฌ๋ ๋๋ ๋ํ ๋ํ์ ๋ฐ์ด ๋ค๊ธฐ๋ก ๊ฒฐ์ฌํ๊ณ ๊ณจํ๋ฅผ ์ณค๋ค. ์ด๊ฒ์ ์ฝ๋์ ์ด์ ๋ฒ์ ์ค ํ๋์ด๋ฉฐ ์ฃผ์์ ๋๋ค.
// N: namespace
// P: Program
// S: type definition: sorted dictionary
// a: arguments
// d: data container
// r: lines read from text file
// l: single line from r
// t: tabbed part of l after splitting
// p: programming language name
// n: character count
// m: maximum character count
// w: list of winners
// e: entry in data container
// c: winner candidate
using System.Collections.Generic;
namespace N
{
using S = SortedList<int, P>;
public class P : List<string>
{
public static void Main(string[] a)
{
var r = System.IO.File.ReadAllLines(a[0]);
// Make it a data structure
var d = new Dictionary<string, S>();
foreach (var l in r)
{
var t = l.Split('\t');
var p = t[0];
var n = int.Parse(t[1]);
if (!d.ContainsKey(p)) d.Add(p, new S());
if (!d[p].ContainsKey(n)) d[p].Add(n, new P());
d[p][n].Add(l);
}
// Get the maximum values
var m = 0;
P w = null;
foreach (var e in d)
{
foreach (var s in e.Value.Keys)
{
if (s > m)
{
w = e.Value[s];
m = s;
}
else if (s == m)
{
w.AddRange(e.Value[s]);
}
break; // Break here to get the shortest solution per language
}
}
// Print everything on console
foreach (var e in w)
{
System.Console.WriteLine(e);
}
}
}
}