ํƒœ๊ทธ ๋ณด๊ด€๋ฌผ: code-challenge

code-challenge

๋ฉ”ํƒ€์˜ ์ข…๋ฅ˜ : ๊ฐ€์žฅ ์งง์€ ๋‹ต๋ณ€ ์ค‘ ๊ฐ€์žฅ ๊ธธ๋‹ค ์Šน์ž ํ›„๋ณด๋กœ ๊ฐ„์ฃผ๋˜๋ฏ€๋กœ ์ฝ”๋“œ๋ฅผ ๋‚ ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž…๋ ฅ

๋‹น์‹ ์˜ ์ž„๋ฌด-๋‹น์‹ ์ด ๊ทธ๊ฒƒ์„ ๋ฐ›์•„๋“ค์ด๋ฉด- ๊ฒฝ์Ÿ ์˜ ์Šน์ž๋ฅผ ๊ณ„์‚ฐํ•˜์—ฌ ๋ฉ”ํƒ€ ์— ๋Œ€ํ•œ ๋‚˜์˜ ์ œ์•ˆ์„ ์ดํ•ดํ•˜๋Š” ๋ฐ ๋„์›€์ด๋˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฌผ๋ก ์ด ์งˆ๋ฌธ์— ๋Œ€ํ•œ ๋‹ต๋ณ€์€ ์ œ์•ˆ ๋œ๋Œ€๋กœ ์ฒ˜๋ฆฌ๋˜๋ฏ€๋กœ ๊ท€ํ•˜์˜ ํ”„๋กœ๊ทธ๋žจ (์ •ํ™•ํ•œ ๊ฒฝ์šฐ)์€ ๊ท€ํ•˜์˜ ๋‹ต๋ณ€์ด ์ˆ˜๋ฝ ๋œ ๋‹ต๋ณ€์ด ๋ ์ง€ ์—ฌ๋ถ€๋ฅผ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทœ์น™

  • ํ”„๋กœ๊ทธ๋žจ์€ ๋‹ค์Œ ํ˜•์‹์˜ ์—ฌ๋Ÿฌ ์ค„์ด์žˆ๋Š” ํŒŒ์ผ์„ ์ฝ์Šต๋‹ˆ๋‹ค (์•„๋ž˜ ์˜ˆ ์ฐธ์กฐ). [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);
    }
}
  1. ํ”„๋กœ๊ทธ๋žจ์€ ์˜ˆ์™ธ ArrayIndexOutOfBoundsException๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ ๊นŒ์ง€ ํ•œ ์ค„์”ฉ ์ฝ์Šต๋‹ˆ๋‹ค ( ๋นˆ ์ค„์ด ์žˆ๊ฑฐ๋‚˜ NoSuchElementException์ž…๋ ฅ์ด ์ค„ ๋ฐ”๊ฟˆ์—†์ด ์ข…๋ฃŒ๋˜๋Š” ๊ฒฝ์šฐ). ๊ฐ ํ–‰ ์ฝ๊ธฐ๋Š” (์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ : ์–ธ์–ด, ์ฝ”๋“œ ํฌ๊ธฐ, URL, ์ž…๋ ฅ) TreeMap m์œผ๋กœ ์ •์˜ ๋  ์ˆ˜์žˆ๋Š”์— ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค TreeMap<String, TreeMap<Long, TreeMap<String,String[]>>>.
  2. ๊ทธ๋Ÿฐ ๋‹ค์Œ TreeSet<Long, TreeSet<String, String[]>> n๋ชจ๋“  ์–ธ์–ด์˜ ๋‚ด์šฉ firstEntry()์ด ์ง‘๊ณ„ ๋˜๋Š” ๊ฒฐ๊ณผ (์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ : ์ฝ”๋“œ ํฌ๊ธฐ, URL, ์ž…๋ ฅ)๊ฐ€ ์ž‘์„ฑ ๋ฉ๋‹ˆ๋‹ค.
  3. 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);
            }
        }
    }
}