Twoim zadaniem - jeśli je zaakceptujesz - jest napisanie programu, który pomoże zrozumieć moją propozycję dotyczącą meta , obliczając zwycięzcę zawodów z odwróconym golfem . Oczywiście odpowiedzi na to pytanie będą traktowane jak zaproponowane, więc twój program (jeśli jest poprawny) może obliczyć, czy twoja odpowiedź stanie się odpowiedzią zaakceptowaną.
Zasady
- Program odczytuje plik z wieloma wierszami o następującym formacie (patrz przykład poniżej): [Język] TAB [NumberOfCharacters] TAB [LinkToAnswer]
- Nazwa pliku jest przekazywana jako argument do programu lub plik jest przekierowywany na standardowe wejście programu. To twój wybór, proszę podać metodę, podając odpowiedź
- Oczekuje się, że format wejściowy jest prawidłowy. Nie ma potrzeby obsługi błędów.
- Liczba znaków jest dodatnia. Twój program musi obsługiwać długości do 65535. 64k powinno wystarczyć wszystkim :-)
- Program wypisuje te wiersze na standardowe wyjście, które spełniają ideę meta propozycji, to znaczy
- wygrywa najkrótszy kod danego języka programowania (faza redukcji)
- najdłuższy kod spośród wszystkich języków programowania wygrywa (faza sortowania)
- w przypadku losowania należy wydrukować wszystkie odpowiedzi o tej samej długości
- Kolejność danych wyjściowych nie jest ważna
- Chociaż wygrywa najdłuższy kod, nie jest to kręgle kodu . Twój kod musi być jak najkrótszy dla twojego języka programowania.
- Odpowiedzi na rzadkie języki programowania, które nie próbują skrócić kodu, zasługują na negatywną opinię, ponieważ próbują ominąć intencję tego rodzaju pytań. Jeśli jest tylko jedna odpowiedź dla określonego języka programowania, zostanie uznana za kandydata na zwycięzcę, więc możesz zacząć wysadzać jego kod.
Przykładowy plik wejściowy (oddzielony pojedynczymi kartami, jeśli wystąpi problem z formatowaniem):
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
Oczekiwany wynik (kolejność nie jest ważna):
C# 208 http://short.url/answer/poi
C# 208 http://short.url/answer/yac
Java 208 http://short.url/answer/jav
Aktualizacja
Niektóre programy polegają na tym, że istnieje jedno maksimum (jak program znaków C # 210). Pochodzący z rzeczywistości, ktoś może również napisać program GolfScript zawierający 210 znaków. Dane wyjściowe pozostaną takie same. Dodałem taki kod GolfScript do danych wejściowych.
Aktualizacja 2
Jak zasugerowałem, dokonałem ponownej tagacji (również wciąż golfa kodowego), a termin upływa 2014-03-06 (który wygląda jak dowolna data, ale wrócę wtedy do Niemiec z podróży).
Ostateczne rezultaty
Postanowiłem głosować w następujący sposób:
- Odpowiedzi, w przypadku których nie można potwierdzić liczby znaków, zawierają komentarz wyjaśniający liczbę.
- Odpowiedzi, które można łatwo zmniejszyć, otrzymują komentarz, sugestię edycji i przechodzą do wyniku o niższej wartości zliczania. (Mam nadzieję, że widziałem to wcześniej).
- Odpowiedzi, które się nie kompilują, otrzymują opinię negatywną. (Jak się okazuje dość trudne).
- Odpowiedzi, które nie są rozgrywane w golfa, otrzymują ocenę negatywną (jak opisano już w zasadach).
- Odpowiedzi, które przynoszą oczekiwany wynik, otrzymują opinię pozytywną. Ze względu na niektóre odpowiedzi, które nie działają zgodnie z oczekiwaniami, używam 4 różnych plików wejściowych i sprawdzam pod kątem oczekiwanego wyniku.
Ostatecznie zwycięzca jest określany poprzez dostarczenie tabeli kwalifikujących się odpowiedzi jako danych wejściowych do mojego programu referencyjnego (oraz dwukrotne ręczne sprawdzenie wyniku). Jeśli moja własna odpowiedź byłaby zwycięska, wykluczyłbym ją z listy. W przypadku kilku zwycięzców musiałbym wybrać tylko jednego. Dlatego niektóre bonusy można zdobyć:
- odpowiedzi, które akceptują więcej danych wejściowych niż oczekiwano (np. poza zdefiniowanymi zakresami)
- odpowiedzi, które wykorzystują sprytny pomysł skrócenia
Zrobiłem migawkę odpowiedzi 6 marca 2014 r., 19:45 UTC + 1. Analiza jest w toku. Sprawdzanie wszystkich odpowiedzi jest trudniejsze niż oczekiwano ...
źródło
Odpowiedzi:
Java - 556
Program odczyta ze STDIN.
ArrayIndexOutOfBoundsException
przypadku napotkania pustej linii, alboNoSuchElementException
gdy wejście zakończy się bez kończenia nowej linii). Każdy odczytany wiersz jest dodawany doTreeMap m
, który mógł być zdefiniowany jakoTreeMap<String, TreeMap<Long, TreeMap<String,String[]>>>
(od lewej do prawej: język, rozmiar kodu, adres URL, dane wejściowe).TreeSet<Long, TreeSet<String, String[]>> n
(od lewej do prawej: rozmiar kodu, adres URL, dane wejściowe), w którym zawartość wszystkich językówfirstEntry()
jest agregowana.lastEntry()
zagregowanychTreeMap
zawiera nasz wynik - wystarczy go wydrukować.Spróbuj na ideone.com (przełączone dwa ostatnie wiersze wprowadzania, aby pokazać, że wszystkie wiersze zostały odczytane)
źródło
Perl, 195 bajtów
Dane wejściowe są oczekiwane w STDIN, wynik zapisywany jest do STDOUT:
Wersja bez golfa
źródło
GolfScript 210 http://short.url/answer/210
linię do wejścia i sprawdzić, czy dane wyjściowe pozostają takie same. Właściwie myślę, że nie dotyczy to twojego, ponieważ używasz [0] maksymalnie, ale nie mam w tej chwili Perla dostępnego, aby spróbować.%l
/%language
zawiera języki i ich minimalne wartości. Struktura danych%a
/%array
zawiera tylko te pary język / adres URL, których wartość jest minimalna dla tego języka. Następnie wartości minimalne są sortowane w kolejności malejącej, a pierwsza z nich jest używana jako globalne maksimum i jako warunek filtru dla%a
/%array
.Python
378377372Wejście na standardowe wejście:
I to właśnie miałem przed skompresowaniem, przy 551 znakach:
źródło
C # - 628
Oto twoja dłuższa alternatywa, która wykorzystuje
DataTable
:Początkowo myślałem, że mogłem uzyskać nieznaczną redukcję kodu przy użyciu max / min z
DataTable
, ale typy wymagane do zbudowaniaDataTable
(wierszy / kolumn / widoku) dodają dużo długości, niestety. Jestem nowy w golfie, więc może ktoś mógłby to jeszcze bardziej zmniejszyć. Wciąż fajne wyzwanie.źródło
dg -
286281260251218 bajtówPrzykład:
Wersja bez golfa :
P: Co to do cholery jest dg?
Odp .: Język programowania, który kompiluje się do kodu bajtowego CPython, podobnie jak Scala kompiluje się do JVM. Zasadniczo oznacza to, że dg jest alternatywną składnią dla Pythona 3. Pozwala także na użycie wszystkich istniejących bibliotek.
Więcej informacji tutaj (nawet samouczek!): Https://pyos.github.io/dg
źródło
cat langs.dg | wc -c
dostaję 218!Rebol - 314
bez golfa
Przykład użycia:
źródło
C # - 515
Oczekuje nazwy pliku jako argumentu
Najpierw zaprojektowałem program C #, aby był prosty, ponieważ chciałem mieć coś w rodzaju programu referencyjnego. Ale potem postanowiłem także wziąć udział w zawodach i zagrać w golfa. To jedna z wcześniejszych wersji kodu + kilka komentarzy:
źródło
C # -
460359Po uświadomieniu sobie, jak nieporęczne było moje
DataTable
rozwiązanie, stworzyłem następujący przykład za pomocą Linq. Używa tej samej metodologii, co moje poprzednie rozwiązanie.Grał w golfa
Nie golfił
Nadal jestem dość nowy w Linq, więc jestem prawie pewien, że te wyrażenia można jeszcze bardziej zmniejszyć.
Z twojego pytania nie wynika, czy istnieje jedno rozwiązanie maksymalnej długości. W moich odpowiedziach wykorzystałem założenie, że istnieje jeden maksymalny punkt (tj. Jeśli byłby również GolfScript maksymalnie 210, może się nie powieść na podstawie zwróconego rekordu Single maximum). Rozwiązanie Heiko miałoby ten sam problem. Aby to naprawić, musielibyśmy dodać kolejny krok, który zawierał listę powiązanych maksimów w celu sprawdzenia minimów dla każdego języka.
źródło
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 ...
. To prawdopodobnie wymaga przeróbekC ++ - 535
Wyśle tylko odpowiedzi związane z najdłuższą pozycją po wybraniu tylko najkrótszych odpowiedzi każdego języka jako potencjalnych zwycięzców.
Gra w golfa (nie tak nieczytelny jak niektóre języki):
źródło