Jenis meta: dapatkan jawaban terpanjang dari yang terpendek

14

Tugas Anda - jika Anda menerimanya - adalah menulis sebuah program yang membantu memahami proposal saya tentang meta dengan menghitung pemenang kompetisi . Tentu saja, jawaban atas pertanyaan ini akan diperlakukan seperti yang diusulkan, sehingga program Anda (jika benar) dapat menghitung apakah jawaban Anda akan menjadi jawaban yang diterima.

Aturan

  • Program membaca file dengan beberapa baris format berikut (lihat contoh di bawah): [Bahasa] TAB [NumberOfCharacters] TAB [LinkToAnswer]
  • Nama file dilewatkan sebagai argumen ke program Anda atau file diarahkan ke input standar program Anda. Itu pilihan Anda, tolong sebutkan metodenya ketika memberikan jawabannya
  • Diharapkan format input sudah benar. Tidak perlu penanganan kesalahan.
  • Jumlah karakter positif. Program Anda harus menangani panjang hingga 65535. 64k harus cukup untuk semua orang :-)
  • Program mengeluarkan garis-garis tersebut pada keluaran standar yang memenuhi gagasan proposal meta, yaitu
    • kode terpendek dari bahasa pemrograman tertentu menang (fase reduksi)
    • kode terpanjang di antara semua bahasa pemrograman yang menang (fase penyortiran)
    • dalam hal pengundian, semua jawaban dengan panjang yang sama harus dicetak
  • Urutan output tidak penting
  • Meskipun kode terpanjang menang, ini bukan . Kode Anda harus sesingkat mungkin untuk bahasa pemrograman Anda.
  • Jawaban pada bahasa pemrograman yang jarang yang tidak berusaha memperpendek kode layak mendapat downvote, karena mereka mencoba untuk memotong maksud pertanyaan semacam ini. Jika hanya ada satu jawaban untuk bahasa pemrograman tertentu, itu akan dianggap sebagai kandidat pemenang, sehingga Anda dapat mulai meniup kodenya.

Contoh file input (dipisahkan oleh satu tab jika ada masalah dengan pemformatan):

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

Output yang diharapkan (urutan tidak penting):

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

Memperbarui

Beberapa program bergantung pada fakta bahwa ada maksimum tunggal (seperti program karakter C # 210). Berasal dari kenyataan, seseorang juga dapat menulis program GolfScript dengan 210 karakter. Outputnya akan tetap sama. Saya telah menambahkan GolfScript ke input.

Perbarui 2

Seperti yang disarankan saya telah retagged (masih kode-golf juga) dan batas waktunya adalah 2014-03-06 (yang terlihat seperti tanggal yang sewenang-wenang, tetapi saya akan kembali ke Jerman dari bepergian kemudian).

Hasil akhir

Saya memutuskan untuk memilih seperti berikut:

  • Jawaban di mana jumlah karakter tidak dapat dikonfirmasi mendapatkan komentar untuk menjelaskan jumlah.
  • Jawaban yang dapat dengan mudah direduksi mendapatkan komentar, saran edit, dan masuk ke hasil dengan nilai hitung yang lebih rendah. (Semoga saya sudah melihat itu sebelumnya).
  • Jawaban yang tidak dikompilasi mendapatkan downvote. (Cukup sulit ternyata).
  • Jawaban yang tidak golf mendapatkan downvote (seperti yang sudah dijelaskan dalam aturan).
  • Jawaban yang menghasilkan keluaran yang diharapkan mendapat upvote. Karena beberapa jawaban yang tidak berfungsi seperti yang diharapkan, saya menggunakan 4 file input berbeda dan memeriksa hasil yang diharapkan.

Akhirnya, pemenang ditentukan dengan memberikan tabel jawaban yang memenuhi syarat sebagai input untuk program referensi saya (ditambah memeriksa ulang hasilnya secara manual). Jika jawaban saya sendiri yang akan menang, saya akan mengecualikannya dari daftar. Dalam hal beberapa pemenang, saya harus memilih hanya satu. Oleh karena itu, beberapa bonus dapat diperoleh:

  • jawaban yang menerima lebih banyak input dari yang diharapkan (mis. di luar rentang yang ditentukan)
  • jawaban yang menggunakan ide cerdik untuk membuatnya pendek

Saya telah mengambil snapshot dari jawaban pada 6 Maret 2014, 19:45 UTC +1. Analisis sedang berlangsung. Memeriksa semua jawaban lebih sulit dari yang diharapkan ...

Thomas Weller
sumber
Tidakkah ini seharusnya ditandai dengan tantangan kode untuk saat ini? Juga kapan batas waktu?
TheConstructor
2
Alt-nama untuk ini adalah Code-Blackjack
VoronoiPotato

Jawaban:

2

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

Program akan membaca dari 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. Programm akan membaca baris demi baris sampai terjadi pengecualian (baik ArrayIndexOutOfBoundsExceptionketika baris kosong ditemukan atau NoSuchElementExceptionjika input berakhir tanpa mengikuti baris baru). Setiap baris dibaca ditambahkan ke TreeMap m, yang dapat didefinisikan sebagai TreeMap<String, TreeMap<Long, TreeMap<String,String[]>>>(kiri-ke-kanan: bahasa, ukuran kode, URL, input).
  2. Kemudian hasil- TreeSet<Long, TreeSet<String, String[]>> n(kiri-ke-kanan: ukuran kode, URL, input) dibangun di mana konten dari setiap bahasa firstEntry()dikumpulkan.
  3. lastEntry()dari agregat TreeMapberisi hasil kami - kami hanya perlu mencetaknya.

Coba di ideone.com (beralih dua baris input terakhir untuk menunjukkan bahwa semua baris dibaca)

Korektor
sumber
Harus menambahkan variabel untuk menyimpan BufferedReader -.-
TheConstructor
1
Mungkin Java menang kali ini, karena tidak memiliki kata kunci var ...
Thomas Weller
@ Thomas. baru sadar saya meninggalkan beberapa {} yang tidak perlu di dalam versi golf -.-
TheConstructor
Juga baru saja relaized saya menggunakan Integer. Sementara int lebih pendek dari panjang, Integer shurely harus di-golf ke 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

Input diharapkan dalam STDIN, hasilnya ditulis ke STDOUT:

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

Versi tidak disatukan

#!/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 Oberdiek
sumber
Heiko, seperti yang ditunjukkan @grovesNL, beberapa program mungkin mengandalkan fakta bahwa ada maksimum satu. Mungkin Anda dapat memeriksa apakah program Anda terpengaruh. Cukup tambahkan GolfScript 210 http://short.url/answer/210baris ke input dan lihat apakah outputnya tetap sama. Sebenarnya saya pikir milik Anda tidak terpengaruh, karena Anda menggunakan [0] untuk maksimum, tetapi saya tidak memiliki Perl saat ini untuk mencobanya.
Thomas Weller
@ThomasW .: Tidak terpengaruh. Saya telah menambahkan baris dan hasilnya tetap sama. Setelah bagian pertama yang membaca file, struktur data %l/%language berisi bahasa dan nilai minimalnya. Struktur data %a/ %arrayhanya berisi pasangan bahasa / URL, yang nilainya minimum untuk bahasa ini. Kemudian nilai minimum diurutkan dalam urutan menurun dan yang pertama digunakan sebagai global maksimum dan sebagai kondisi filter untuk %a/ %array.
Heiko Oberdiek
2

Python 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())

Masukan pada 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

Dan inilah yang saya miliki sebelum mulai memampatkannya, pada 551 karakter:

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]]))
gcq
sumber
1

C # - 628

Berikut alternatif yang lebih lama dari Anda yang menggunakan 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]));}}}}

Saya awalnya berpikir saya mungkin telah memperoleh sedikit pengurangan kode dari menggunakan max / min dengan DataTable, tetapi jenis yang diperlukan untuk membangun DataTable(baris / kolom / tampilan) menambahkan banyak panjang, sayangnya. Saya baru mengenal kode golf sehingga mungkin seseorang akan dapat mengurangi lebih jauh. Masih tantangan yang menyenangkan.

grovesNL
sumber
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

Contoh:

$ 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

Versi tidak disatukan :

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

T: Apa-apaan itu dg?
SEBUAH: Bahasa pemrograman yang mengkompilasi ke bytecode CPython, seperti kompilasi Scala ke JVM. Itu pada dasarnya berarti bahwa dg adalah sintaks alternatif untuk Python 3. Ini memungkinkan Anda untuk menggunakan semua pustaka yang ada juga.

Info lebih lanjut di sini (bahkan tutorial!): Https://pyos.github.io/dg

rubik
sumber
Jika saya memasukkannya ke dalam file, file itu hanya memiliki 217 byte (akhir jalur Linux)
Thomas Weller
@ Thomas. Aneh! Menggunakan cat langs.dg | wc -csaya mendapatkan 218!
rubik
Mungkin membuntuti baris baru vs. tidak membuntuti baris baru?
TheConstructor
@TheConstructor bisa jadi, meskipun seharusnya tidak menyimpannya dengan baris baru oO
rubik
1

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

tidak golf

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

Contoh penggunaan:

$ 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
draegtun
sumber
0

C # - 515

Mengharapkan nama file sebagai argumen

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

Pertama saya mendesain program C # saya agar mudah, karena saya ingin memiliki semacam program referensi. Tetapi kemudian saya memutuskan untuk ikut terjun ke dalam kontes dan bermain golf. Ini adalah salah satu versi kode sebelumnya + beberapa komentar:

// 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);
            }
        }
    }
}
Thomas Weller
sumber
Tampaknya ukuran file 515 pada disk saya termasuk tanda urutan byte. Salin / tempel dari sini hanya 512 byte.
Thomas Weller
0

C # - 460 359

Setelah menyadari betapa DataTablebesarnya solusi saya , saya membuat contoh berikut ini menggunakan Linq. Ia menggunakan metodologi yang sama dengan solusi saya sebelumnya.

Golf

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

Tidak disatukan

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

Saya masih cukup baru untuk Linq jadi saya hampir positif ekspresi itu dapat dikurangi lebih jauh.

Dari pertanyaan Anda, tidak jelas apakah ada solusi panjang maksimum tunggal. Untuk jawaban saya, saya telah menggunakan asumsi bahwa ada satu titik maksimum tunggal (mis. Jika ada GolfScript maksimum 210 juga, mungkin gagal berdasarkan catatan maksimum tunggal yang dikembalikan). Solusi Heiko akan memiliki masalah yang sama. Untuk memperbaiki ini, kita harus menambahkan langkah lain yang berisi daftar maxima terikat untuk memeriksa minima untuk setiap bahasa.

grovesNL
sumber
1
Sepertinya saya bahwa Anda dapat menyimpan f sebagai Item3 (bukan s [2]) dan kemudian menulis f.Item3 ke Konsol tanpa perlu menggabungkan kembali Item1 dan Item2.
Thomas Weller
Terima kasih atas klarifikasi persyaratannya. Berasal dari kenyataan saya akan mengatakan itu bisa terjadi bahwa seseorang (tidak berpengalaman, jelas) menulis GolfScript dengan 210 karakter.
Thomas Weller
1
Jika Anda mengonversi foreach-loop pertama ke LINQ, itu menjadi lebih pendek: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 .: Ide bagus untuk perpecahan. Terima kasih atas konversi loop foreach, saya telah memikirkannya menambahkan itu awalnya tapi saya tidak tahu saya bisa menggunakan biarkan seperti itu.
grovesNL
Saya rasa saya mulai memahami apa permintaan Anda tidak :) dan akan juga gagal untuk input sederhana seperti ini: Golfscript 100 ..., C# 1 ..., C# 200 .... Ini mungkin membutuhkan beberapa pengerjaan ulang
Thomas Weller
0

C ++ - 535

Hanya akan menampilkan jawaban yang diikat untuk posisi terlama setelah memilih hanya jawaban terpendek dari setiap bahasa sebagai pemenang potensial.

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

Golf (tidak terbaca seperti beberapa bahasa):

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

sumber
Sudahkah Anda memeriksa output Anda terhadap output yang diharapkan? Dengan 8 baris input, itu hanya akan memberikan 3 baris sebagai output. Program Anda tampaknya menghasilkan segalanya.
Thomas Weller
@ Thomas. Oh, saya salah paham bagian itu. Saya akan menghapusnya sekarang.
@ Thomas. Apakah ini terlihat benar?
Jika saya memasukkannya ke dalam file saya mendapatkan 540 byte, bukan 535. Bisakah Anda memeriksa panjangnya, tolong?
Thomas Weller
Ini adalah 535 karakter. Kami berdua benar. Saya bisa mengubahnya jika Anda mau.