W tym wyzwaniu użytkownicy wykonują kolejno trzy dość proste zadania kodowania w językach programowania, które mogą być stopniowo starsze.
Pierwsza odpowiedź musi korzystać z języka programowania, który został utworzony w 2015 roku. Gdy jest co najmniej jedna odpowiedź z języka 2015, odpowiedzi mogą używać języków programowania, które zostały utworzone w 2014 roku. Podobnie, odpowiedzi, które używają języków z 2013 roku są niedozwolone dopóki nie będzie co najmniej jednej odpowiedzi z 2014 r.
Zasadniczo użycie języka programowania z roku Y jest niedozwolone, dopóki nie zostanie złożona odpowiedź w języku z roku Y + 1. Jedynym wyjątkiem jest Y = 2015.
Znalezienie roku swojego języka
Aby odpowiedzieć na to pytanie, musisz znać rok, w którym Twój język programowania został „wyprodukowany”. Jest to oczywiście pojęcie subiektywne; niektóre języki były rozwijane przez wiele lat, a wiele języków wciąż jest aktualizowanych każdego roku. Niech rokiem, w którym dany język został „wyprodukowany”, będzie pierwszy rok, w którym implementacja tego języka pojawiła się w opinii publicznej.
Na przykład Python został „wyprodukowany” w 1991 r. , Choć jego rozwój trwał od 1989 r., A wersja 1.0 została wydana dopiero w 1994 r.
Jeśli ten rok jest nadal subiektywny, użyj zdrowego rozsądku, aby wybrać najbardziej odpowiedni rok. Nie daj się wciągnąć w lekkie nieporozumienia dotyczące rocznych wyborów. Podaj link do źródła, które mówi, kiedy powstał Twój język.
Różne wersje lub standardy języka programowania (np. Python 1, 2, 3) są liczone jako ten sam język z tym samym początkowym rokiem.
Tak więc, chyba że rokiem Twojego języka jest rok 2015, możesz przesłać odpowiedź dopiero po przesłaniu odpowiedzi, której rokiem jest rok tuż przed twoim.
Jeśli istnieje już prawidłowa odpowiedź z tego samego roku co twój, możesz odpowiedzieć. Nie ma znaczenia, czy Twój język został opracowany wcześniej czy później w tym roku.
Zadania
Musisz wykonać zadania od 1 do 3. Zadanie 0 jest opcjonalne.
Zadania te zostały mniej więcej wybrane tak, aby odpowiadały trzem ważnym aspektom programowania: dostarczaniu danych wyjściowych (Zadanie 1), zapętlaniu (Zadanie 2) i rekurencji (Zadanie 3).
Zadanie 0 - Historia języka (opcjonalnie)
Napisz co najmniej akapit wyjaśniający historię wybranego języka programowania: kto go opracował, dlaczego, jak itp. Jest to szczególnie zalecane, jeśli osobiście byłeś w pobliżu, kiedy powstał język, a może nawet odegrałeś rolę w jego rozwoju. Zapraszam do relacjonowania osobistych anegdot na temat wpływu, jaki język wywarł na ciebie lub twoją pracę, czy coś w tym rodzaju.
Jeśli jesteś zbyt młody, aby wiedzieć dużo o historii Twojego języka bez wielu badań, zastanów się nad pozostawieniem notatki starszym użytkownikom, która mówi, że mogą edytować Twój post i dodać trochę historii z pierwszej ręki.
Zadanie 1 - „Witaj, świecie!” Wariant
Napisz program, który drukuje
[language name] was made in [year made]!
do standardowego obszaru wyjściowego twojego języka (standardowe dla najnowszych języków).
Na przykład, jeśli językiem byłby Python, wynikiem byłoby:
Python was made in 1991!
Zadanie 2 - ASCII art
Napisz program, który pozwala użytkownikowi wprowadzić nieparzystą liczbę całkowitą dodatnią (możesz założyć, że dane wejściowe są zawsze poprawne) i wydrukuje literę N ASCII wykonaną za pomocą znaku N
.
Jeśli wejście to 1, wyjście to:
N
Jeśli wejście wynosi 3, wyjście to:
N N
NNN
N N
Jeśli wejście wynosi 5, wyjście to:
N N
NN N
N N N
N NN
N N
Jeśli wejście wynosi 7, wyjście to:
N N
NN N
N N N
N N N
N N N
N NN
N N
Wzór trwa w ten sposób. Dane wyjściowe mogą zawierać końcowe spacje.
Zadanie 3 - GCD
Napisz program, który pozwala użytkownikowi wprowadzić dwie liczby całkowite dodatnie (możesz założyć, że dane wejściowe są zawsze prawidłowe) i wypisuje ich największy wspólny dzielnik . Jest to definiowane jako największa dodatnia liczba całkowita, która dzieli obie liczby bez pozostawiania reszty. Można go łatwo obliczyć za pomocą algorytmu euklidesowego .
Przykłady:
8
, 12
→ 4
12
, 8
→ 4
3
, 30
→ 3
5689
, 2
→ 1
234
, 876
→6
Możesz użyć wbudowanej funkcji, ale spróbuj dowiedzieć się, czy była ona dostępna w pierwszej wersji Twojego języka. Jeśli nie, spróbuj go nie używać.
Zasady
- Możesz odpowiedzieć wiele razy, ale każda nowa odpowiedź musi używać języka utworzonego co najmniej 5 lat przed językiem w Twojej ostatniej odpowiedzi. Jeśli więc odpowiedziałeś językiem 2015, nie możesz odpowiedzieć ponownie, dopóki 2010 nie będą dozwolone. Jeśli zaczniesz od odpowiedzi z 2010 r., Nie możesz uczynić odpowiedzi z 2015 r. Drugą odpowiedzią, ponieważ rok 2015 nie jest wcześniejszy niż 2010.
- Jeśli to możliwe, napisz swój kod, aby działał w pierwszej wersji Twojego języka (lub tak starej, jak to możliwe). (Nie jest to wymagane, ponieważ znalezienie starych kompilatorów / tłumaczy dla niektórych języków może być trudne.)
- Powstrzymaj się od opublikowania języka, który został już opublikowany, chyba że na opublikowanej odpowiedzi są znaczące błędy lub masz zupełnie inny sposób wykonywania zadań.
- Gra w golfa jest w porządku, ale nie jest wymagana.
- Końcowy znak nowej linii w wynikach dowolnego programu jest w porządku.
- W przypadku zadań 2 i 3 wszystkie wartości wejściowe poniżej pewnego rozsądnego maksimum, takie jak 2 16, powinny działać (co najmniej 256).
- Twój język musiał istnieć przed opublikowaniem tego pytania.
- Bardzo stare języki programowania mogą mieć różne formy danych wejściowych i wyjściowych niż te, o których dziś myślimy. To jest w porządku. Wykonuj zadania najlepiej jak potrafisz w kontekście swojego języka.
Punktacja
Wynik Twojego zgłoszenia to:
upvotes - downvotes + (2015 - languageYear) / 2
W związku z tym do liczby głosów przed każdym rokiem 2015 dodaje się 0,5, co daje przewagę starszym językom. Zgłoszenie z najwyższym wynikiem wygrywa.
Lista odpowiedzi
Poniższy fragment kodu zawiera listę wszystkich poprawnych odpowiedzi według ich roku językowego.
Musisz rozpocząć swój post od tej linii Markdown , aby upewnić się, że jest poprawnie wymieniony:
#[year] - [language name]
Na przykład:
#1991 - Python
Nazwa języka może znajdować się w linku (będzie to ten sam link na liście odpowiedzi):
#1991 - [Python](https://www.python.org/)
Odpowiedzi, które nie są zgodne z tym formatem lub mają rok, który nie jest jeszcze dozwolony, lub pochodzą od użytkownika, który odpowiedział już w ciągu ostatnich 5 lat, są oznaczone jako nieprawidłowe.
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script><script>$(function(){function e(e,r){var a="https://api.stackexchange.com/2.2/questions/48476/answers?page="+e.toString()+"&pagesize=100&order=asc&sort=creation&site=codegolf&filter=!YOKGPOBC5Yad160RQxGLP0r4rL";$.get(a,r)}function r(e){if(e.items.forEach(function(e){var r=e.link,a=e.owner.display_name,i=e.body.match(/<h1\b[^>]*>(\d{4}) - (.*?)<\/h1>/);if(i&&i.length>=3)var h=parseInt(i[1]),u=i[2];h&&u&&n>=h&&h>=t&&(!d.hasOwnProperty(e.owner.user_id)||d[e.owner.user_id]-h>=p)?(d[e.owner.user_id]=h,h==t&&--t,o.hasOwnProperty(h)||(o[h]=[]),o[h].push({language:u,user:a,link:r,score:e.score+(n-h)/2})):s.push(' <a href="'+r+'">'+a+"</a>")}),e.has_more)runQuery(++a,r);else{for(var i=n,h=[];o.hasOwnProperty(i);){for(var u=$("<tr>").append($("<td>").text(i.toString())),l=$("<td>"),c=$("<td>"),g=$("<td>"),f=0;f<o[i].length;f++){var v=o[i][f];l.append(v.language),c.append($("<a>").html(v.user).attr("href",v.link)),g.append(v.score),f+1<o[i].length&&(l.append("<br><br>"),c.append("<br><br>"),g.append("<br><br>"))}u.append(l).append(c).append(g),h.push(u),--i}$("#answers").find("tbody").append(h),s.length>0?$("#invalid").append(s):$("#invalid").remove()}}var a=1,n=2015,t=n-1,p=5,o={},s=[],d={};e(1,r)})</script><style>html *{font-family: Helvetica, Arial, sans-serif;}table{border: 4px solid #a4a; border-collapse: collapse;}th{background-color: #a4a; color: white; padding: 8px;}td{border: 1px solid #a4a; padding: 8px;}div{font-size: 75%;}</style><table id='answers'> <tr> <th>Year</th> <th>Language</th> <th>User (answer link)</th> <th>Score</th> </tr></table><div id='invalid'><br>Invalid Answers:</div>