Loại meta: nhận được câu trả lời dài nhất trong số các câu trả lời ngắn nhất


14

Nhiệm vụ của bạn - nếu bạn chấp nhận nó - là viết một chương trình giúp hiểu đề xuất của tôi về meta bằng cách tính người chiến thắng trong một cuộc thi . Tất nhiên, câu trả lời cho câu hỏi này sẽ được coi là đề xuất, vì vậy chương trình của bạn (nếu đúng) có thể tính toán xem câu trả lời của bạn có trở thành câu trả lời được chấp nhận hay không.

Quy tắc

  • Chương trình đọc một tệp có nhiều dòng có định dạng sau (xem ví dụ bên dưới): [Ngôn ngữ] TAB [NumberOfChar character] TAB [LinkToAnswer]
  • Tên tệp được truyền làm đối số cho chương trình của bạn hoặc tệp được chuyển hướng đến đầu vào tiêu chuẩn của chương trình của bạn. Đó là lựa chọn của bạn, vui lòng đề cập đến phương pháp khi đưa ra câu trả lời
  • Dự kiến ​​định dạng đầu vào là chính xác. Không cần xử lý lỗi.
  • Số lượng nhân vật là tích cực. Chương trình của bạn phải xử lý độ dài lên tới 65535. 64k là đủ cho tất cả mọi người :-)
  • Chương trình đưa ra các dòng trên đầu ra tiêu chuẩn đáp ứng ý tưởng của đề xuất meta, đó là
    • mã ngắn nhất của một ngôn ngữ lập trình cụ thể sẽ thắng (giai đoạn giảm)
    • mã dài nhất trong số tất cả các ngôn ngữ lập trình sẽ thắng (giai đoạn sắp xếp)
    • trong trường hợp bốc thăm, tất cả các câu trả lời có cùng độ dài sẽ được in
  • Thứ tự của đầu ra không quan trọng
  • Mặc dù mã dài nhất chiến thắng, đây không phải là . Mã của bạn phải càng ngắn càng tốt cho ngôn ngữ lập trình của bạn.
  • Câu trả lời về các ngôn ngữ lập trình hiếm khi không cố rút ngắn mã đáng bị downvote, vì họ cố gắng bỏ qua ý định của loại câu hỏi này. Nếu chỉ có một câu trả lời cho một ngôn ngữ lập trình cụ thể, nó sẽ được coi là một ứng cử viên chiến thắng, vì vậy bạn có thể bắt đầu thổi mã của nó.

Ví dụ về tệp đầu vào (được phân tách bằng các tab đơn nếu có vấn đề với định dạng):

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

Sản lượng dự kiến ​​(thứ tự không quan trọng):

C#  208 http://short.url/answer/poi
C#  208 http://short.url/answer/yac
Java    208 http://short.url/answer/jav

Cập nhật

Một số chương trình dựa trên thực tế là có một mức tối đa duy nhất (như chương trình ký tự C # 210). Xuất phát từ thực tế, ai đó cũng có thể viết chương trình GolfScript với 210 ký tự. Đầu ra sẽ giữ nguyên. Tôi đã thêm một GolfScript như vậy vào đầu vào.

Cập nhật 2

Như đã đề xuất, tôi đã thử lại (vẫn là golf-code) và hạn chót là 2014 / 03-06 (có vẻ như là một ngày tùy ý, nhưng sau đó tôi sẽ trở lại Đức sau khi đi du lịch).

Kết quả cuối cùng

Tôi quyết định bỏ phiếu như sau:

  • Câu trả lời trong đó số lượng ký tự không thể được xác nhận nhận được một nhận xét để giải thích số lượng.
  • Câu trả lời có thể dễ dàng được giảm nhận nhận xét, đề xuất chỉnh sửa và đi vào kết quả với giá trị đếm thấp hơn. (Hy vọng tôi đã thấy điều đó trước).
  • Câu trả lời không biên dịch được một downvote. (Khá là một nhiệm vụ khó khăn khi nó bật ra).
  • Các câu trả lời không được đánh gôn sẽ nhận được một downvote (như được mô tả trong các quy tắc đã có).
  • Câu trả lời tạo ra sản lượng dự kiến ​​sẽ nhận được một upvote. Do một số câu trả lời không hoạt động như mong đợi, tôi sử dụng 4 tệp đầu vào khác nhau và kiểm tra kết quả mong đợi.

Cuối cùng, người chiến thắng được xác định bằng cách cung cấp bảng câu trả lời đủ điều kiện làm đầu vào cho chương trình tham chiếu của tôi (cộng với kiểm tra lại kết quả bằng tay). Nếu câu trả lời của riêng tôi là câu trả lời, tôi sẽ loại nó khỏi danh sách. Trong trường hợp có nhiều người chiến thắng, tôi sẽ chỉ chọn một. Do đó, một số tiền thưởng có thể kiếm được:

  • câu trả lời chấp nhận đầu vào nhiều hơn mong đợi (ví dụ: ngoài phạm vi được xác định)
  • câu trả lời sử dụng một ý tưởng thông minh làm cho nó ngắn

Tôi đã chụp nhanh các câu trả lời vào ngày 6 tháng 3 năm 2014, 19:45 UTC + 1. Việc phân tích đang diễn ra. Kiểm tra tất cả các câu trả lời khó hơn dự kiến ​​...


Bây giờ không nên gắn thẻ thử thách mã này phải không ? Ngoài ra khi nào là hạn chót?
TheConstructor

2
Tên thay thế cho cái này là Code-Blackjack
VoronoiPotato

Câu trả lời:


2

Java - 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);}}

Chương trình sẽ đọc 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. Chương trình sẽ đọc từng dòng cho đến khi xảy ra ngoại lệ ( ArrayIndexOutOfBoundsExceptionkhi gặp một dòng trống hoặc NoSuchElementExceptionnếu đầu vào kết thúc mà không theo dõi dòng mới). Mỗi dòng đọc được thêm vào TreeMap m, có thể được định nghĩa làTreeMap<String, TreeMap<Long, TreeMap<String,String[]>>> (từ trái sang phải: ngôn ngữ, kích thước mã, URL, đầu vào).
  2. Sau đó, một kết quả- TreeSet<Long, TreeSet<String, String[]>> n(từ trái sang phải: kích thước mã, URL, đầu vào) được xây dựng trong đó nội dung của mọi ngôn ngữ firstEntry()được tổng hợp.
  3. lastEntry()của tổng hợp TreeMapchứa kết quả của chúng tôi - chúng tôi chỉ cần in nó.

Hãy thử trên ideone.com (đã chuyển hai dòng đầu vào cuối cùng để hiển thị rằng tất cả các dòng được đọc)


Phải thêm một biến để lưu trữ BufferedReader -.-
TheConstructor

1
Có thể Java thắng lần này, vì nó không có từ khóa var ...
Thomas Weller

@ThomasW. chỉ nhận ra rằng tôi đã để lại một số {} không cần thiết bên trong phiên bản được đánh gôn -.-
TheConstructor

Tôi cũng vừa mới sử dụng Integer. Trong khi int ngắn hơn dài, Integer nên chơi golf thành Long -.-
TheConstructor

2

Perl, 195 byte

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

Đầu vào được mong đợi trong STDIN, kết quả được ghi vào STDOUT:

C#      208     http://short.url/answer/poi
C#      208     http://short.url/answer/yac
Java    208     http://short.url/answer/jav

Phiên bản ung dung

#!/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__

Heiko, như @grovesNL đã chỉ ra, một số chương trình có thể dựa vào thực tế là có một mức tối đa duy nhất. Có lẽ bạn có thể kiểm tra xem chương trình của bạn có bị ảnh hưởng hay không. Chỉ cần thêm một GolfScript 210 http://short.url/answer/210dòng vào đầu vào và xem nếu đầu ra vẫn giữ nguyên. Trên thực tế tôi nghĩ rằng bạn không bị ảnh hưởng bởi vì bạn đang sử dụng tối đa [0], nhưng hiện tại tôi không có sẵn Perl để dùng thử.
Thomas Weller

@ThomasW.: Nó không bị ảnh hưởng. Tôi đã thêm dòng và đầu ra vẫn giữ nguyên. Sau phần đầu tiên đọc tệp, cấu trúc dữ liệu %l/ %languagechứa các ngôn ngữ và giá trị tối thiểu của chúng. Cấu trúc dữ liệu %a/ %arraychỉ chứa các cặp ngôn ngữ / URL, có giá trị là tối thiểu cho ngôn ngữ này. Sau đó, các giá trị tối thiểu được sắp xếp theo thứ tự giảm dần và giá trị đầu tiên được sử dụng làm tối đa toàn cầu và làm điều kiện lọc cho %a/ %array.
Heiko Oberdiek

2

Trăn 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())

Đầu vào trên 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

Và đây là những gì tôi đã có trước khi bắt đầu nén nó xuống, ở 551 ký tự:

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

1

C # - 628

Đây là một thay thế dài hơn của bạn sử dụng 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]));}}}}

Ban đầu, tôi nghĩ rằng tôi có thể đã giảm được một chút mã từ việc sử dụng max / min với DataTable, nhưng các loại được yêu cầu để xây dựng DataTable(hàng / cột / chế độ xem) không may thêm rất nhiều chiều dài. Tôi chưa quen với việc chơi golf nên có lẽ ai đó sẽ có thể giảm nó hơn nữa. Vẫn là một thử thách thú vị.


1

dg - 286 281 260 251 218 byte

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

Thí dụ:

$ 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

Phiên bản bị đánh cắp :

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 là cái quái gì vậy?
A: Một ngôn ngữ lập trình biên dịch thành mã byte CPython, giống như Scala biên dịch thành JVM. Điều đó về cơ bản có nghĩa là dg là một cú pháp thay thế cho Python 3. Nó cũng cho phép bạn sử dụng tất cả các thư viện hiện có.

Thêm thông tin ở đây (thậm chí là một hướng dẫn!): Https://pyos.github.io/dg


Nếu tôi đặt nó vào một tệp, nó chỉ có 217 byte (kết thúc dòng Linux)
Thomas Weller

@ThomasW. Kỳ dị! Sử dụng cat langs.dg | wc -ctôi nhận được 218!
rubik

Có thể theo dõi dòng mới so với không có dòng mới?
TheConstructor

@TheConstructor có thể, mặc dù không nên lưu nó với dòng mới oO
rubik

1

Nổi loạn - 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]]]]

không chơi gô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]]
    ]
]

Ví dụ sử dụng:

$ 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

0

C # - 515

Yêu cầu tên tệp làm đối số

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

Đầu tiên tôi thiết kế chương trình C # của mình để đi thẳng, vì tôi muốn có một loại chương trình tham khảo. Nhưng sau đó tôi quyết định cũng tự mình tham gia cuộc thi và đánh gôn. Đây là một trong những phiên bản trước của mã + một số nhận xét:

// 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);
            }
        }
    }
}

Có vẻ như kích thước tệp 515 trên đĩa của tôi bao gồm một dấu thứ tự byte. Sao chép / dán từ đây chỉ 512 byte.
Thomas Weller

0

C # - 460 359

Sau khi nhận ra DataTablegiải pháp của tôi cồng kềnh như thế nào , tôi đã tạo ra ví dụ sau bằng Linq. Nó sử dụng phương pháp tương tự như giải pháp trước đây của tôi.

Chơi gôn

namespace System{using Linq;using IO;class p{static void Main(string[]i){var l=(from f in File.ReadAllLines(i[0])let s=f.Split('\t')select new Tuple<string,int,string>(s[0],Convert.ToInt16(s[1]),f)).ToList();foreach(var f in l.Where(a=>a.Item2==l.Where(b=>b.Item1==l.Single(c=>c.Item2==l.Max(d=>d.Item2)).Item1).Min(e=>e.Item2)))Console.WriteLine(f.Item3);}}}

Ung dung

namespace System
{
    using Linq;
    using IO;
    class p
    {
        static void Main(string[]i)
        {
            var l=(from f in File.ReadAllLines(i[0])
                   let s=f.Split('\t')
                   select new Tuple<string, int, string>(s[0],Convert.ToInt16(s[1]),f)).ToList();
            foreach(var f in l.
                Where(a=>a.Item2==l.
                    Where(b=>b.Item1==l.
                        Single(c=>c.Item2==l.
                            Max(d=>d.Item2)).Item1).
                                Min(e=>e.Item2)))
            Console.WriteLine(f.Item3);
        }
    }
}

Tôi vẫn còn khá mới đối với Linq vì vậy tôi gần như tích cực những biểu hiện đó có thể giảm hơn nữa.

Từ câu hỏi của bạn, không rõ liệu có một giải pháp chiều dài tối đa duy nhất. Đối với câu trả lời của tôi, tôi đã sử dụng giả định rằng có một điểm tối đa duy nhất (nghĩa là nếu có tối đa GolfScript là 210, thì nó có thể thất bại dựa trên bản ghi tối đa duy nhất được trả về). Giải pháp của Heiko sẽ có cùng một vấn đề. Để khắc phục điều này, chúng tôi sẽ phải thêm một bước khác có chứa danh sách các cực đại bị ràng buộc để kiểm tra cực tiểu cho mỗi ngôn ngữ.


1
Dường như với tôi rằng bạn có thể lưu f dưới dạng Item3 (thay vì s [2]) và sau đó viết f.Item3 vào Console mà không cần kết hợp lại Item1 và Item2.
Thomas Weller

Cảm ơn đã làm rõ các yêu cầu. Xuất phát từ thực tế tôi sẽ nói có thể xảy ra việc ai đó (chưa có kinh nghiệm, rõ ràng) viết một GolfScript với 210 ký tự.
Thomas Weller

1
Nếu bạn chuyển đổi vòng lặp foreach đầu tiên thành LINQ, nó sẽ trở nên ngắn hơn:namespace System{using Linq;using IO;class p{static void Main(string[]i){var l=(from f in File.ReadAllLines(i[0])let s=f.Split('\t') select new Tuple<string, int, string>(s[0],Convert.ToInt16(s[1]),f)).ToList();foreach(var f in l.Where(a=>a.Item2==l.Where(b=>b.Item1==l.Single(c=>c.Item2==l.Max(d=>d.Item2)).Item1).Min(e=>e.Item2)))Console.WriteLine(f.Item3);}}}
Thomas Weller

@ThomasW.: Ý tưởng tốt cho sự phân chia. Cảm ơn về chuyển đổi vòng lặp foreach, tôi đã nghĩ về việc thêm nó ban đầu nhưng tôi không biết tôi có thể sử dụng theo cách đó.
GrovesNL

Tôi nghĩ rằng tôi bắt đầu hiểu những gì truy vấn của bạn :) và nó cũng sẽ thất bại cho đầu vào đơn giản như thế này: Golfscript 100 ..., C# 1 ..., C# 200 .... Điều này có lẽ cần một số làm lại
Thomas Weller

0

C ++ - 535

Sẽ chỉ đưa ra các câu trả lời được gắn cho vị trí dài nhất sau khi chỉ chọn các câu trả lời ngắn nhất của mỗi ngôn ngữ là người chiến thắng tiềm năng.

#include<fstream>
#include<iostream>
#include<string>
#include<vector>
using namespace std;
int main(){

    string s;
    vector<string>l;
    vector<int>v;
    vector<string>u;
    cin>>s;

    ifstream i(s.c_str());

    do{
        int n;
        i>>s;
        if(i.eof())break;
        l.push_back(s);
        i>>n;
        v.push_back(n);
        i>>s;
        u.push_back(s);
    }while(1);

    for(int i=0;i<l.size();i++){
        for(int j=0;j<l.size();j++){
            if(l[j]==l[i]){
                if(v[i]>v[j])l[i]="";
                else if(v[i]<v[j])l[j]="";
            }
        }
    }
    int n=0;
    for(int i=0;i<v.size();i++)
        if(n<v[i]&l[i]!="")n=v[i];

    for(int i=0;i<v.size();i++)
        if(v[i]==n)cout<<l[i]<<'\t'<<v[i]<<'\t'<<u[i]<<endl;
}

Golfed (không thể đọc được như một số ngôn ngữ):

#include<fstream>
#include<iostream>
#include<string>
#include<vector>
using namespace std;
int main(){string s;vector<string>l;vector<int>v;vector<string>u;cin>>s;ifstream i(s.c_str());do{int n;i>>s;if(i.eof())break;l.push_back(s);i>>n;v.push_back(n);i>>s;u.push_back(s);}while(1);for(int i=0;i<l.size();i++)for(int j=0;j<l.size();j++)if(l[j]==l[i]){if(v[i]>v[j])l[i]="";else if(v[i]<v[j])l[j]="";}int n=0;for(int i=0;i<v.size();i++)if(n<v[i]&l[i]!="")n=v[i];for(int i=0;i<v.size();i++)if(v[i]==n)cout<<l[i]<<'\t'<<v[i]<<'\t'<<u[i]<<endl;}

Bạn đã kiểm tra đầu ra của bạn so với đầu ra dự kiến? Với 8 dòng đầu vào, nó sẽ chỉ cung cấp 3 dòng làm đầu ra. Chương trình của bạn dường như xuất ra mọi thứ.
Thomas Weller

@ThomasW. Ồ, tôi đã hiểu nhầm phần đó. Tôi sẽ loại bỏ nó ngay bây giờ.

@ThomasW. Điều này có đúng không?

Nếu tôi đặt nó vào một tệp tôi nhận được 540 byte chứ không phải 535. Bạn có thể kiểm tra lại độ dài không?
Thomas Weller

Đó là 535 ký tự. Cả hai chúng tôi đều đúng. Tôi có thể thay đổi nó nếu bạn muốn.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.