मेटा की तरह: सबसे छोटे उत्तरों में से सबसे लंबे समय तक प्राप्त करें


14

आपका कार्य - यदि आप इसे स्वीकार करते हैं - एक प्रोग्राम लिखना है जो प्रतियोगिता के विजेता की गणना करके मेटा पर मेरे प्रस्ताव को समझने में मदद करता है । बेशक, इस प्रश्न के उत्तर को प्रस्तावित माना जाएगा, इसलिए आपका कार्यक्रम (यदि सही है) गणना कर सकता है कि आपका उत्तर स्वीकृत उत्तर बन जाएगा या नहीं।

नियम

  • कार्यक्रम निम्न प्रारूप की कई पंक्तियों के साथ एक फ़ाइल पढ़ता है (नीचे उदाहरण देखें): [भाषा] TAB [नंबरऑफ़च्रेक्टर्स] 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

अपडेट करें

कुछ कार्यक्रम इस तथ्य पर भरोसा करते हैं कि एक एकल अधिकतम है (जैसे सी # 210 चरित्र कार्यक्रम)। वास्तविकता से व्युत्पन्न, कोई व्यक्ति 210 अक्षरों के साथ एक गोल्फस्क्रिप्ट कार्यक्रम भी लिख सकता है। आउटपुट वही रहेगा। मैंने इस तरह के एक गोल्फस्क्रिप्ट को इनपुट में जोड़ा है।

अपडेट २

जैसा कि मैंने सुझाव दिया था कि मैं (अभी भी कोड-गोल्फ के रूप में) सेवानिवृत्त हो गया हूं और समय सीमा 2014-03-06 है (जो एक मनमाना तारीख की तरह दिखता है, लेकिन मैं फिर यात्रा से जर्मनी लौटूंगा )।

अंतिम परिणाम

मैंने निम्नलिखित की तरह मतदान करने का निर्णय लिया:

  • उत्तर जहां वर्णों की संख्या की पुष्टि नहीं की जा सकती है, वहां गिनती समझाने के लिए टिप्पणी प्राप्त करें।
  • उत्तर जिन्हें आसानी से कम किया जा सकता है, एक टिप्पणी, एक संपादन सुझाव और कम गिनती मूल्य के साथ परिणाम में जा सकते हैं। (उम्मीद है कि मैंने पहले ही देख लिया है)।
  • जो उत्तर संकलित नहीं होते हैं वे एक डाउनवोट प्राप्त करते हैं। (जैसा कि यह पता चला है एक कठिन काम काफी)।
  • जिन उत्तरों पर विचार नहीं किया गया है, उन्हें डाउनवोट मिलता है (जैसा कि पहले ही नियमों में वर्णित है)।
  • अपेक्षित आउटपुट देने वाले उत्तर एक उत्थान को प्राप्त करते हैं। कुछ उत्तरों के कारण जो अपेक्षित रूप से काम नहीं करते हैं, मैं 4 अलग-अलग इनपुट फ़ाइलों का उपयोग करता हूं और अपेक्षित परिणाम के खिलाफ जांच करता हूं।

अंत में, विजेता को मेरे संदर्भ कार्यक्रम के इनपुट के रूप में क्वालिफाइंग उत्तर तालिका प्रदान करके निर्धारित किया जाता है (साथ ही परिणाम को दोहराता है)। यदि मेरा खुद का जवाब जीतने वाला होगा, तो मैं इसे सूची से बाहर कर दूंगा। कई विजेताओं के मामले में, मुझे केवल एक चुनना होगा। इसलिए, कुछ बोनस अर्जित किए जा सकते हैं:

  • ऐसे उत्तर जो अपेक्षित से अधिक इनपुट को स्वीकार करते हैं (जैसे परिभाषित सीमा के बाहर)
  • उत्तर जो इसे छोटा बनाने के एक चतुर विचार का उपयोग करते हैं

मैंने 6 मार्च 2014, 19:45 UTC + 1 पर उत्तरों का एक स्नैपशॉट लिया है। विश्लेषण जारी है। सभी उत्तरों की जाँच करना अपेक्षा से अधिक कठिन है ...


यह अब के लिए कोड-चुनौती टैग नहीं होना चाहिए ? इसके अलावा समय सीमा कब है?
TheConstructor

2
इसके लिए ऑल्ट-नाम कोड-लाठी है
वोरोनोई पोपटो

जवाबों:


2

जावा - 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होता है या यदि इनपुट नई लाइन को पीछे किए बिना समाप्त हो जाता है)। प्रत्येक पंक्ति रीड को जोड़ा जाता है TreeMap m, जिसे TreeMap<String, TreeMap<Long, TreeMap<String,String[]>>>(बाएं से दाएं: भाषा, कोड-आकार, URL, इनपुट) के रूप में परिभाषित किया जा सकता था ।
  2. फिर एक परिणाम- TreeSet<Long, TreeSet<String, String[]>> n(बाएं से दाएं: कोड-आकार, URL, इनपुट) का निर्माण होता है, जहां हर भाषा की सामग्री firstEntry()एकत्र की जाती है।
  3. lastEntry()कुल TreeMapमें हमारा परिणाम होता है - हमें केवल इसे प्रिंट करने की आवश्यकता होती है।

Ideone.com पर प्रयास करें (सभी लाइनों को पढ़ने के लिए इनपुट की अंतिम दो पंक्तियों को दिखाया गया है)



1
हो सकता है कि जावा इस बार जीत जाए, क्योंकि इसमें एक var कीवर्ड नहीं है ...
थॉमस वेलर

@ThomasW। सिर्फ महसूस किया कि मैं golfed संस्करण के अंदर -.- कुछ अनावश्यक {} छोड़ दिया
TheConstructor

इसके अलावा, बस मैं इंटेगर का उपयोग कर रहा था। जबकि पूर्णांक लंबे तुलना में कम है, पूर्णांक shurely लांग को -.- golfed किया जाना चाहिए
TheConstructor

2

पर्ल, 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__

जैसा कि @grovesNL ने बताया, कुछ कार्यक्रम इस तथ्य पर भरोसा कर सकते हैं कि एक अधिकतम है। शायद आप देख सकते हैं कि आपका कार्यक्रम प्रभावित है या नहीं। बस GolfScript 210 http://short.url/answer/210इनपुट में एक पंक्ति जोड़ें और देखें कि क्या आउटपुट समान रहता है। वास्तव में मुझे लगता है कि आपका प्रभाव प्रभावित नहीं हुआ है, क्योंकि आप अधिकतम के लिए [0] का उपयोग कर रहे हैं, लेकिन मेरे पास इसे उपलब्ध कराने के लिए फिलहाल पर्ल उपलब्ध नहीं है।
थॉमस वेलर

@ThomasW: यह प्रभावित नहीं है। मैंने लाइन जोड़ दी है और आउटपुट समान है। पहले भाग के बाद जो फ़ाइल, डेटा संरचना पढ़ता है %l/ %languageउसमें भाषाएं और उनके न्यूनतम मूल्य शामिल हैं। डेटा संरचना %a/ %arrayकेवल उन्हीं भाषा / यूआरएल जोड़े, जिसका मूल्य इस भाषा के लिए कम से कम होता है। तब न्यूनतम मूल्यों को अवरोही क्रम में क्रमबद्ध किया जाता है और पहले वाले को वैश्विक अधिकतम के रूप में और %a/ के लिए फ़िल्टर स्थिति के रूप में उपयोग किया जाता है %array
हेइको ओबर्डिएक

2

अजगर 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())

स्टड पर इनपुट:

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

1

सी # - 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]));}}}}

मैंने मूल रूप से सोचा था कि मैंने अधिकतम / मिनट का उपयोग करने से मामूली कोड की कमी प्राप्त की हो सकती है DataTable, लेकिन DataTable(पंक्तियों / कॉलम / दृश्य) के निर्माण के लिए आवश्यक प्रकार बहुत अधिक लंबाई जोड़ते हैं, दुर्भाग्य से। मैं कोड गोल्फिंग में नया हूँ इसलिए शायद कोई इसे और कम कर सकेगा। फिर भी एक मजेदार चुनौती।


1

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

Ungolfed संस्करण:

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

प्रश्न: बिल्ली डीजी क्या है?
A: एक प्रोग्रामिंग भाषा जो CPython bytecode को संकलित करती है, बहुत कुछ जैसे स्काला JVM के लिए संकलित करता है। यह अनिवार्य रूप से इसका मतलब है कि dg अजगर 3 के लिए एक वैकल्पिक वाक्यविन्यास है। यह आपको सभी मौजूदा पुस्तकालयों का भी उपयोग करने की अनुमति देता है।

यहां अधिक जानकारी (यहां तक ​​कि एक ट्यूटोरियल भी!): Https://pyos.github.io/dg


अगर मैं इसे एक फ़ाइल में रखूं, तो इसमें केवल 217 बाइट्स (लिनक्स लाइन एंडिंग)
थॉमस वेलर

@ThomasW। अजीब! का उपयोग कर cat langs.dg | wc -cमैं 218 मिलता है!
माणिक

शायद नई अनुगामी बनाम कोई अनुगामी नई रेखा?
द कंस्ट्रक्टर

@ TheConstructor यह हो सकता है, हालांकि यह इसे एक newline oO के साथ नहीं बचा सकता है
Rubik

1

प्रतिबल - 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]]]]

अन-golfed

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

0

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

ऐसा लगता है कि मेरी डिस्क पर 515 फ़ाइल का आकार बाइट ऑर्डर मार्क शामिल है। यहाँ से कॉपी / पेस्ट केवल 512 बाइट्स है।
थॉमस वेलर

0

सी # - 460 359

यह समझने के बाद कि मेरा DataTableसमाधान कितना भारी था, मैंने लिनक का उपयोग करके निम्नलिखित उदाहरण बनाया। यह मेरे पिछले समाधान के समान पद्धति का उपयोग करता है।

golfed

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

Ungolfed

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

मैं अभी भी Linq के लिए काफी नया हूं इसलिए मैं लगभग सकारात्मक हूं और उन भावों को और कम किया जा सकता है।

आपके प्रश्न से, यह स्पष्ट नहीं है कि क्या कोई एकल अधिकतम लंबाई समाधान है। मेरे उत्तरों के लिए मैंने इस धारणा का उपयोग किया है कि एक एकल अधिकतम बिंदु है (यानी यदि कोई अधिकतम 210 गोल्फस्क्रिप्ट था, तो यह एकल अधिकतम रिकॉर्ड के आधार पर विफल हो सकता है)। Heiko समाधान एक ही मुद्दा होगा। इसे ठीक करने के लिए, हमें एक और कदम जोड़ना होगा जिसमें प्रत्येक भाषा के लिए मिनिमा की जांच करने के लिए बंधी मैक्सिमा की एक सूची शामिल थी।


1
यह मुझे लगता है कि आप आइटम 3 (एस [2] के बजाय) के रूप में एफ को बचा सकते हैं और फिर आइटम 1 और आइटम 2 को फिर से जोड़ने की आवश्यकता के बिना कंसोल पर f.Item3 लिख सकते हैं।
थॉमस वेलर

आवश्यकताओं के स्पष्टीकरण के लिए धन्यवाद। वास्तविकता से व्युत्पन्न मैं कहूंगा कि ऐसा हो सकता है कि कोई (अनुभवहीन, जाहिर है) 210 वर्णों के साथ एक गोल्फस्क्रिप्ट लिखता है।
थॉमस वेलर

1
यदि आप पहले फॉर्च-लूप को LINQ में परिवर्तित करते हैं, तो यह और भी छोटा हो जाता है: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);}}}
थॉमस वेलर

@ThomasW .: विभाजन के लिए अच्छा विचार। फॉरच लूप रूपांतरण के लिए धन्यवाद, मैंने इसे मूल रूप से जोड़ने के बारे में सोचा था लेकिन मुझे नहीं पता था कि मैं इसका उपयोग कर सकता हूं।
ग्रूव्सएनएल

मुझे लगता है कि मैं समझता हूँ कि क्या आपकी क्वेरी करता है :) और यह भी इस तरह सरल इनपुट के लिए असफल हो जायेगी शुरू: Golfscript 100 ..., C# 1 ..., C# 200 ...। इसे शायद कुछ पुनरावृत्ति की जरूरत है
थॉमस वेलर

0

सी ++ - 535

केवल संभावित विजेताओं के रूप में प्रत्येक भाषा के सबसे कम उत्तरों का चयन करने के बाद सबसे लंबे स्थान के लिए बंधे हुए उत्तरों का उत्पादन करेंगे।

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

गोल्फ (कुछ भाषाओं की तरह अपठनीय नहीं):

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

क्या आपने अपेक्षित आउटपुट के मुकाबले अपना आउटपुट चेक किया है? इनपुट की 8 लाइनों के साथ, यह आउटपुट के रूप में केवल 3 लाइनें देगा। आपका प्रोग्राम सब कुछ आउटपुट करने लगता है।
थॉमस वेलर

@ThomasW। ओह, मैंने उस हिस्से को गलत समझा। मैं इसे अभी के लिए हटा दूंगा।

@ThomasW। क्या यह सही लगता है?

अगर मैं इसे एक फाइल में रखूं तो मुझे 540 बाइट मिलेंगे, 535 नहीं। क्या आप लंबाई की दोहरी जांच कर सकते हैं, कृपया?
थॉमस वेलर

यह 535 अक्षर है। हम दोनों सही हैं। आप चाहें तो इसे बदल सकते हैं।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.