Votre tâche - si vous l'acceptez - est d'écrire un programme qui aide à comprendre ma proposition sur les méta en calculant le gagnant d'une compétition code-golf-inversé . Bien sûr, les réponses à cette question seront traitées comme proposées, de sorte que votre programme (s'il est correct) puisse calculer si votre réponse deviendra la réponse acceptée.
Règles
- Le programme lit un fichier avec plusieurs lignes du format suivant (voir l'exemple ci-dessous): TAB [Language] [NumberOfCharacters] TAB [LinkToAnswer]
- Le nom de fichier est transmis comme argument à votre programme ou le fichier est redirigé vers l'entrée standard de votre programme. C'est votre choix, veuillez mentionner la méthode lors de la réponse
- Il est prévu que le format d'entrée soit correct. Il n'est pas nécessaire de traiter les erreurs.
- Le nombre de caractères est positif. Votre programme doit gérer des longueurs allant jusqu'à 65535. 64 Ko devraient être suffisants pour tout le monde :-)
- Le programme produit ces lignes sur une sortie standard qui répond à l'idée de la méta-proposition, c'est-à-dire
- le code le plus court d'un langage de programmation particulier gagne (phase de réduction)
- le code le plus long parmi tous les langages de programmation gagne (phase de tri)
- en cas d'égalité, toutes les réponses de même longueur doivent être imprimées
- L'ordre de sortie n'est pas important
- Bien que le code le plus long gagne, ce n'est pas du bowling . Votre code doit être aussi court que possible pour votre langage de programmation.
- Les réponses concernant rarement les langages de programmation qui n'essaient pas de raccourcir le code méritent un downvote, car ils essaient de contourner l'intention de ce genre de question. S'il n'y a qu'une seule réponse pour un langage de programmation spécifique, il serait considéré comme un candidat gagnant, vous pourriez donc commencer à souffler son code.
Exemple de fichier d'entrée (séparé par des onglets uniques en cas de problème de formatage):
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
Sortie attendue (l'ordre n'est pas important):
C# 208 http://short.url/answer/poi
C# 208 http://short.url/answer/yac
Java 208 http://short.url/answer/jav
Mise à jour
Certains programmes reposent sur le fait qu'il existe un seul maximum (comme le programme de caractères C # 210). Dérivé de la réalité, quelqu'un peut également écrire un programme GolfScript avec 210 caractères. La sortie resterait la même. J'ai ajouté un tel GolfScript à l'entrée.
Update 2
Comme suggéré, j'ai repensé (toujours le code-golf aussi) et la date limite est le 2014-03-06 (qui ressemble à une date arbitraire, mais je serai de retour en Allemagne après avoir voyagé à ce moment-là).
Résultats finaux
J'ai décidé de voter comme suit:
- Les réponses où le nombre de caractères ne peut être confirmé obtiennent un commentaire pour expliquer le nombre.
- Les réponses qui peuvent être facilement réduites obtiennent un commentaire, une suggestion de modification et entrent dans le résultat avec la valeur de comptage la plus faible. (J'espère que je l'ai vu à l'avance).
- Les réponses qui ne compilent pas obtiennent un downvote. (Une tâche assez difficile en fin de compte).
- Les réponses qui ne sont pas jouées obtiennent un downvote (comme décrit dans les règles déjà).
- Les réponses qui produisent la sortie attendue obtiennent un vote positif. En raison de certaines réponses qui ne fonctionnent pas comme prévu, j'utilise 4 fichiers d'entrée différents et vérifie le résultat attendu.
Enfin, le gagnant est déterminé en fournissant le tableau des réponses qualificatives en entrée de mon programme de référence (plus une double vérification manuelle du résultat). Si ma propre réponse était la gagnante, je l'exclurais de la liste. En cas de plusieurs gagnants, je ne devrais en choisir qu'un. Par conséquent, certains bonus peuvent être gagnés:
- réponses qui acceptent plus de données que prévu (par exemple en dehors des plages définies)
- des réponses qui utilisent une idée intelligente de faire court
J'ai pris un instantané des réponses le 6 mars 2014, 19:45 UTC + 1. L'analyse est en cours. Vérifier toutes les réponses est plus difficile que prévu ...
la source
Réponses:
Java - 556
Le programme lira à partir de STDIN.
ArrayIndexOutOfBoundsException
lorsqu'une ligne vierge est rencontrée, soitNoSuchElementException
si l'entrée se termine sans traîner de nouvelle ligne). Chaque ligne lue est ajoutée à laTreeMap m
, qui aurait pu être définie commeTreeMap<String, TreeMap<Long, TreeMap<String,String[]>>>
(de gauche à droite: langue, taille du code, URL, entrée).TreeSet<Long, TreeSet<String, String[]>> n
(de gauche à droite: taille du code, URL, entrée) est construit où le contenu de chaque languefirstEntry()
est agrégé.lastEntry()
de l'agrégatTreeMap
contient notre résultat - il suffit de l'imprimer.Essayez sur ideone.com (commuté les deux dernières lignes d'entrée pour montrer que toutes les lignes sont lues)
la source
Perl, 195 octets
Une entrée est attendue dans STDIN, le résultat est écrit dans STDOUT:
Version non golfée
la source
GolfScript 210 http://short.url/answer/210
ligne à l'entrée et voyez si la sortie reste la même. En fait, je pense que le vôtre n'est pas affecté, car vous utilisez [0] pour le maximum, mais je n'ai pas Perl disponible pour le moment.%l
/%language
contient les langues et leurs valeurs minimales. La structure de données%a
/%array
contient uniquement les paires langue / URL, dont la valeur est le minimum pour cette langue. Ensuite, les valeurs minimales sont triées par ordre décroissant et la première est utilisée comme maximum global et comme condition de filtre pour%a
/%array
.Python
378377372Entrée sur le stdin:
Et voici ce que j'avais avant de commencer à le compresser, à 551 caractères:
la source
C # - 628
Voici une alternative plus longue de la vôtre qui utilise
DataTable
:Au départ, je pensais que j'avais peut-être obtenu une légère réduction de code en utilisant max / min avec
DataTable
, mais les types requis pour construire leDataTable
(lignes / colonnes / vue) ajoutent beaucoup de longueur, malheureusement. Je suis nouveau dans le domaine du golf afin que quelqu'un puisse peut-être le réduire davantage. Encore un défi amusant.la source
dg -
286281260251218 octetsExemple:
Version non golfée :
Q: Qu'est-ce que c'est que dg?
R: Un langage de programmation qui se compile en bytecode CPython, un peu comme Scala se compile en JVM. Cela signifie essentiellement que dg est une syntaxe alternative pour Python 3. Il vous permet également d'utiliser toutes les bibliothèques existantes.
Plus d'informations ici (même un tutoriel!): Https://pyos.github.io/dg
la source
cat langs.dg | wc -c
je reçois 218!Rebol - 314
non golfé
Exemple d'utilisation:
la source
C # - 515
Attend un nom de fichier comme argument
J'ai d'abord conçu mon programme C # pour qu'il soit simple, car je voulais avoir une sorte de programme de référence. Mais j'ai alors décidé de me lancer moi aussi dans le concours et de jouer au golf. Il s'agit d'une des versions antérieures du code + quelques commentaires:
la source
C # -
460359Après avoir réalisé à quel point ma
DataTable
solution était volumineuse , j'ai créé l'exemple suivant à l'aide de Linq. Il utilise la même méthodologie que ma solution précédente.Golfé
Non golfé
Je suis encore relativement nouveau à Linq, donc je suis presque certain que ces expressions peuvent être encore réduites.
D'après votre question, il n'est pas clair s'il existe une seule solution de longueur maximale. Pour mes réponses, j'ai utilisé l'hypothèse qu'il existe un seul point maximum (c'est-à-dire que s'il y avait aussi un maximum GolfScript de 210, il pourrait échouer en fonction de l'enregistrement maximum unique renvoyé). La solution d'Heiko aurait le même problème. Pour résoudre ce problème, nous devions ajouter une autre étape qui contenait une liste de maxima liés pour vérifier les minima pour chaque langue.
la source
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);}}}
Golfscript 100 ...
,C# 1 ...
,C# 200 ...
. Cela a probablement besoin d'être retravailléC ++ - 535
Ne sortira les réponses liées pour la position la plus longue qu'après avoir sélectionné uniquement les réponses les plus courtes de chaque langue en tant que gagnants potentiels.
Golfé (pas aussi illisible que certaines langues):
la source