Napisz program, który dla liczb od 1 do 255 wypisze kod BF, który wygeneruje podaną liczbę w jakimś bajcie tablicy plus nowy wiersz.
Na przykład pierwsze cztery wiersze wyniku mogą (i najprawdopodobniej będą):
+
++
+++
++++
Zwycięzcą będzie najmniejszy: source code + output
(w bajtach).
Wyjaśnienia i zmiany :
Programy BF używają zawijających się komórek.
Wyjściowy program BF musi kończyć się jedyną niezerową komórką będącą komórką zawierającą liczbę.
Programy muszą być wyprowadzane w kolejności rosnącej.
Wyprowadzenie programu dla 0 jest opcjonalne.
Negatywne wskaźniki danych są niedozwolone.
<
przy pierwszym wskaźniku nic nie zrobi. (zostaw komentarz, jeśli byłoby bardziej odpowiednie, aby go rzucić)
+>++++++++++.
prawidłowy program do wprowadzania1
?Odpowiedzi:
Perl 6 , 224 + 3964 =
58344188 bajtówWypróbuj online! (może upłynąć limit czasu. Zmień na,
^27-13
aby^25-12
nieznacznie przyspieszyć kosztem dodatkowej wydajności)Zwraca najkrótszy kod w postaci
*>[*>*<]>*
, gdzie każdy*
jest określoną liczbą+
s lub-
s. Istnieją pewne dodatkowe poprawki, takie jak usunięcie pętli, jeśli nie jest to potrzebne, a także końcowe>
s.O ile wiem, wynik jest najbardziej golfowy dla tego konkretnego formatu.
Wyjaśnienie:
źródło
Malbolge , 28 743 bajtów + 7 166 wyjścia
Nie jest zbyt kreatywny, prawda? Idę pracować nad golfem tego złego chłopca.
Wypróbuj online!
źródło
Brainfuck,
777573 + 32894 = 329673296932971bajtówWypróbuj online!
wyjście jest najprostsze z możliwych
wyjaśnienie:
źródło
Stax , wynik
47514783 (812 bajtów + 3971)Uruchom i debuguj
Zacząłem od optymalnie opublikowanych programów .
Użyłem regex-fu, aby ograniczyć go do najkrótszych programów, które używają maksymalnie 2 komórek. Następnie przyciąłem wszystkie znaki końcowe
<
lub końcowe>
. Myślę, że jest to prawdopodobnie konserwatywny sposób, aby upewnić się, że przy zakończeniu programu nie będzie żadnych obcych niezerowych komórek. Następnie przeprowadziłem go przez eksperymentalny program stax, który napisałem, aby wygenerować programy stax dla ustalonego wyjścia typu kolmogorov.Ten program działa poprzez wielokrotne stosowanie zamiany ciągów. Na każdym kroku szuka podciągów o długości> 1, które występują najczęściej i zastępuje je nieużywanym znakiem.
źródło
Węgiel drzewny ,
707698410 + 3627 =433443254037 bajtówWypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
Wyłącz wypełnianie spacją.
Przypisz duży skompresowany ciąg składający się z odpowiedzi @ JonathanAllen dla
-128
…-15
ale z+
-
transponowanymi znakami i .Narysuj trójkąt
+
s boku 14, który generuje poprawne wyniki dla 1 do 14. Kursor pozostawia się w dolnym rogu, chociaż końcowy powrót na skompresowanym ciągu przesunie następne wyjście do następnego wiersza.Podziel duży ciąg znaków na znakach powrotu i wydrukuj każdy podciąg w odwrotnej kolejności, generując w ten sposób wyniki od 15 do 128.
Przejdź w górę linii, aby wynik dla 128 został zastąpiony wynikiem zanegowanym dla 128.
Pętlę transponuj łańcuch
+
i-
ponownie, aby wygenerować prawidłowe wyniki dla 128 do 241.Narysuj trójkąt
-
s boku 14, który generuje prawidłowe wyniki dla 242 do 255.źródło
Galaretka , 1224 + 3716 = 4940 bajtów
Pełny program.
Wypróbuj online!
W jaki sposób?
Prawie całkowicie kompresja obecnych bestów na esolangach, które pozostawiają tylko jedną niezerową, z usuniętymi ruchami taśmy końcowej. Prawdopodobnie istnieje sposób oceny podzbioru programów BF w taki sposób, że zakończą się i uzyskają najkrótsze rozwiązania, które pokonałyby ten naiwny program. Może być również sposób na pokonanie tego przez inteligentniejszy program oparty na wzorcach lub budujący faktoryzację.
źródło
SuperMarioLang , 231 + 32894 bajty
Wypróbuj online!
To z pewnością można pograć w golfa, ponieważ wynik jest najbardziej podstawowy dla pieprzenia mózgów, ale napisanie tej odpowiedzi zajęło mi cały dzień (moje troje dzieci pozostawia mi mało czasu do stracenia) i jestem dumny, że przynajmniej udało mi się osiągnąć to.
źródło
Python 2, 70 + 8428 = 8498
-2 bajty dzięki A__!
-20 Bajtów Dzięki Jonathan Allan!
-229 bajtów poprzez umieszczenie liczby w drugiej komórce
-1000ish bajtów przez przełączenie z 16 na 9
Wypróbuj online!
Wydajność
źródło
Rubinowy 271 + 5363 = 5634
Wypróbuj online!
Konwertuje każdą wartość na najmniejszą bazę, która nie zawiera
zerajej początkowej cyfry w żadnym innym miejscu, a następnie konwertuje z tej bazy. Wartości większe niż 127 są obliczane jako ich odwrotności.Bez opakowania, 221 + 5888 = 6109
Stosując to samo podejście, jak powyżej, w przypadku komórek niepakujących.
Wypróbuj online!
źródło
JavaScript (Node.js) , 691 + 3627 = 4318
Stosując to samo podejście, co odpowiedź @ Neil's Charcoal , a zatem również w oparciu o odpowiedź Jellyana @ JonathanAllan .
Wypróbuj online!
źródło
Nieoficjalny beczek 16 + 32895 = 32911 bajtów
Podstawowe rozwiązanie dla języka golfowego. Jest to najprostszy, jaki mogę wymyślić.
Wypróbuj online!
źródło
Rubin 23 + 32895 = 32918 bajtów
Jako punkt odniesienia. To najprostsze rozwiązanie, jakie mogę wymyślić.
źródło
0
prawdopodobnie powinno być1
(chociaż zapytałem, czy możemy również wyprowadzać dane na zero)256.times{|n|puts ?+*n}
Nie, że to ma zbyt duże znaczenie ...Siatkówka 0,8 , 28 + 16640 = 16668 bajtów
Wypróbuj online! Obejmuje dane wyjściowe dla
0
. Po prostu wysyła za pomocą+
s do 127 i-
s do 255.źródło
Scala , 95 + 16639 = 16734 bajtów
Wypróbuj online!
Prosta odpowiedź, która oczywiście nie wygra. Wykorzystuje tylko fakt, że
-
operator (zmniejszając bajt) wraca do 255.źródło
05AB1E , wynik: 4848 ( kod źródłowy 1219 bajtów + wyjście 3629 bajtów)
Wyjście jest portem odpowiedzi na węgiel drzewny @Neil , więc pamiętajcie o nim również!
Wypróbuj online.
Wyjaśnienie:
Zobacz moją wskazówkę 05AB1E (rozdział Jak kompresować duże liczby całkowite ), aby zrozumieć, dlaczego tak
•тôm...ò´Θ•
jest183...875
.źródło