Wyzwanie
Biorąc pod uwagę ciąg wejściowy, przejdź w dół do programu Fouriera, który wypisuje ten ciąg.
W Fourier nie ma łatwego sposobu na wyprowadzenie łańcucha: musisz przejść przez każdy kod znaku i wyprowadzić go jako znak.
Fourier
Język oparty jest na akumulatorze, zmiennej globalnej, która jest inicjowana na 0 na początku programu. Z tego korzysta prawie każdy operator w danym języku. Tylko niektóre nie zmieniają wartości akumulatora.
Wyróżnij się
a
Pobiera wartość akumulatora jako kod ASCII i wyprowadza znak. Nie zmienia wartości akumulatora.
Jeśli akumulator jest większy niż 255, program zwróci błąd. Podobnie, jeśli akumulator jest mniejszy niż 0.
Numeruj
o
Zwraca wartość akumulatora. Nie zmienia wartości akumulatora.
Zwiększać
^
Zwiększyć akumulator o jeden.
Zmniejszać
v
Zmniejsz akumulator o jeden.
Dodaj
+x
Ustawia akumulator na wartość akumulatora powiększoną o wartość x.
Odejmować
-x
Ustawia akumulator na wartość akumulatora minus wartość x.
Zwielokrotniać
*x
Ustawia akumulator na wartość akumulatora pomnożoną przez wartość x.
Podzielić
/x
Ustawia akumulator na wartość akumulatora podzieloną przez wartość x. (Zauważ, że jest to podział na liczby całkowite, więc 1/6
wyniki 0
)
Numer
n
Ustaw akumulator na liczbę całkowitą n.
Uwaga
Tutaj, x
i n
może być dowolną liczbą całkowitą od 0
do 2^32-1
włącznie.
Więcej informacji
Musisz korzystać wyłącznie z operatorów opisanych powyżej. Dlatego wyprowadzony program Fouriera jest nieprawidłowy, jeśli korzysta z któregokolwiek z poniższych (pamiętaj, że następujące nagrody są dozwolone dla nagrody):
- Powtórz pętle
- Jeśli oświadczenia
- Zmienne
- Losowy
- Modulo
- Wprowadzane przez użytkownika
- Większy / mniejszy niż operatorzy
- Operatorzy równości
- Czysty ekran
- Opóźnienie
- Funkcje daty
Twój program może być pełnym programem lub funkcją, przyjmującą dane wejściowe przez STDIN, argumenty pliku lub funkcji. Możesz również pobierać dane bezpośrednio z Internetu.
Pamiętaj, że jeśli vv
kod zawiera kod, należy go zastąpić -2
. To samo dotyczy ^^
zastąpienia go +2
.
Przykłady
Jeśli dane wejściowe to 7n
, oczekiwany program to:
55a110a
Ale możesz zaoszczędzić jeden bajt
55a*2a
Innym sposobem jest
7o110a
Używanie numeru.
Podobnie, jeśli dane wejściowe to Hello
, oczekiwany program to:
72a101a108a108a111a
Możesz zagrać w golfa o 3 bajty (ponieważ wyjście nie zmienia akumulatora):
72a101a108aa111a
Ale poczekaj, możemy użyć operatora dodawania, oszczędzając 2 bajty:
72a101a+7aa+3a
Formatowanie
Ponieważ będę używać tabeli liderów Stack Snippet Martina Büttnera, proszę sformatować tytuł w następujący sposób:
# <Language name>, <length of total output> bytes
Następnie możesz umieścić pod tytułem wszystko, co chcesz.
Zwycięski
Powinieneś opublikować długość programów Fouriera (wytworzonych przez twój kod), aby wyprowadzić ten plik tekstowy i ten plik tekstowy . Twój wynik to łączna długość obu programów Fouriera w bajtach (znaki spoza ASCII nie są używane w Fourierze, więc to tak naprawdę nie robi różnicy).
Osoba z najniższymi wynikami wygrywa. W przypadku remisu wygrywa najkrótszy program w bajtach.
Hojność
Ta nagroda za 500 powtórzeń to nowa odpowiedź, która gra w golfa przy użyciu dowolnej funkcji Fouriera. Obejmuje to zmienne, pętle i instrukcje if itp. Nowa odpowiedź nie zostanie zaakceptowana.
Tabela liderów
Patrz sekcja dotycząca formatowania powyżej:
var QUESTION_ID=55384;function answersUrl(e){return"http://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),e.has_more?getAnswers():process()}})}function shouldHaveHeading(e){var a=!1,r=e.body_markdown.split("\n");try{a|=/^#/.test(e.body_markdown),a|=["-","="].indexOf(r[1][0])>-1,a&=LANGUAGE_REG.test(e.body_markdown)}catch(n){}return a}function shouldHaveScore(e){var a=!1;try{a|=SIZE_REG.test(e.body_markdown.split("\n")[0])}catch(r){}return a}function getAuthorName(e){return e.owner.display_name}function process(){answers=answers.filter(shouldHaveScore).filter(shouldHaveHeading),answers.sort(function(e,a){var r=+(e.body_markdown.split("\n")[0].match(SIZE_REG)||[1/0])[0],n=+(a.body_markdown.split("\n")[0].match(SIZE_REG)||[1/0])[0];return r-n});var e={},a=1,r=null,n=1;answers.forEach(function(s){var t=s.body_markdown.split("\n")[0],o=jQuery("#answer-template").html(),l=(t.match(NUMBER_REG)[0],(t.match(SIZE_REG)||[0])[0]),c=t.match(LANGUAGE_REG)[1],i=getAuthorName(s);l!=r&&(n=a),r=l,++a,o=o.replace("{{PLACE}}",n+".").replace("{{NAME}}",i).replace("{{LANGUAGE}}",c).replace("{{SIZE}}",l).replace("{{LINK}}",s.share_link),o=jQuery(o),jQuery("#answers").append(o),e[c]=e[c]||{lang:c,user:i,size:l,link:s.share_link}});var s=[];for(var t in e)e.hasOwnProperty(t)&&s.push(e[t]);s.sort(function(e,a){return e.lang>a.lang?1:e.lang<a.lang?-1:0});for(var o=0;o<s.length;++o){var l=jQuery("#language-template").html(),t=s[o];l=l.replace("{{LANGUAGE}}",t.lang).replace("{{NAME}}",t.user).replace("{{SIZE}}",t.size).replace("{{LINK}}",t.link),l=jQuery(l),jQuery("#languages").append(l)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",answers=[],page=1;getAnswers();var SIZE_REG=/\d+(?=[^\d&]*(?:<(?:s>[^&]*<\/s>|[^&]+>)[^\d&]*)*$)/,NUMBER_REG=/\d+/,LANGUAGE_REG=/^#*\s*([^,]+)/;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script><link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"><div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr></thead> <tbody id="answers"> </tbody> </table></div> <tbody id="languages"> </tbody> </table></div><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody></table>
źródło
Odpowiedzi:
Python, 14307118 bajtów
601216 dla Hamleta + 13705902 dla Rodzaju = 14307118
Zdecydowanie istnieją pewne senarios, w których to rozwiązanie nie jest optymalne, na przykład w przypadku
1111
, gdy będzie ono generowane1111o
w przeciwieństwie do tego11oo
. Myślę jednak, że jest prawie optymalna.Edycja: Zapisano kilka bajtów, ulepszając
0o0o
do0oo
.Nazwa pliku zawierającego dane wejściowe jest odbierana na STDIN, a następnie wysyłana do STDOUT.
Wyniki zweryfikowane z oficjalnym tłumaczem.
źródło
> <>, 14310665 bajtów
601398 dla wioski + 13709267 dla genezy
Jest to wciąż praca w toku i jej ukończenie zajmuje dużo czasu.
źródło
Java, 14307140 bajtów
Hamlet - 601,218
Księga Rodzaju - 13 705 922
Chodzi o to, aby wykonać całą pracę z góry, tworząc mapę postaci>. Następnie możesz po prostu przejść przez pętlę i złapać najkrótsze struny.
Trzeba zrobić wyjątek dla cyfr, więc sprawdzam je w głównej pętli. Jest jednak nadal szybki i obsługuje większy przypadek testowy w ciągu kilku sekund. I może być w stanie dostosować tę sekcję na kilka bajtów więcej, ale jestem pewien, że to dość blisko optimum.
Dane wejściowe to nazwa pliku jako argument. Dane wyjściowe są zapisywane w pliku
inputFilename_out.4
, a liczba znaków jest wysyłana do STDOUT.Jest to 1737 bajtów dla rozstrzygającego remisu, zupełnie nie golfisty. Mogę dużo zagrać w golfa, jeśli zajdzie taka potrzeba, ale nadal będzie trochę duży.
źródło
01
, wydaje mi się, że wypisuje01o
, co nie jest poprawne.else
klauzuli głównej pętli wybierasz między użyciem rzeczywistej wartości akumulatora a wartością znaku poprzedniego znaku. Nie możesz dokonać drugiego wyboru, jeśli oba są różne, ponieważ oznacza to, że wykorzystałeśo
wcześniej czas, a akumulator nie zawiera wartości poprzedniego znaku.PHP, 14307118 bajtów
601,216 (Hamlet) + 13 705 902 (Biblia)
Wyjście Fouriera dla Hamleta
Działa w następujący sposób:
źródło