Wyzwanie
Twoim zadaniem jest napisanie fragmentu kodu, który wyświetli inny fragment kodu. Ten kod musi z kolei generować kolejny kod, dopóki kod końcowy nie wyśle liczby całkowitej 1 . Łańcuch kończy się przy pierwszym wyprowadzeniu 1 .
Żaden z twoich programów nie może dzielić żadnych znaków (jest jeden wyjątek w sekcji Reguły).
Zwycięskie zgłoszenie będzie zgłoszeniem o najdłuższym łańcuchu. Łącznik będzie najkrótszą całkowitą długością kodu.
Zasady:
- Możesz używać zarówno funkcji, programów, jak i fragmentów. Możesz założyć środowisko REPL.
- Wszystkie funkcje muszą być napisane w tym samym języku
- Języki niezależne od symboli są niedozwolone. Obejmuje to częściowo niezależne od symboli języki, takie jak Zagłówki.
- Domyślne formatowanie wyjściowe można opcjonalnie pominąć w danych wyjściowych funkcji. Obejmuje to końcowe znaki nowej linii
ans =
itp. - Możesz ponownie użyć znaku spacji (punkt kodu ASCII 32), ale zwróć uwagę na następujące kwestie:
- Możesz użyć tyle znaków spacji, ile chcesz w jednej z funkcji, ale ogranicz ją do maksymalnie 5 we wszystkich innych funkcjach
- Nie możesz ponownie używać żadnych znaków, jeśli kod 32 nie jest spacją w twoim języku.
Żaden z programów nie może pobierać danych wejściowych
Łańcuch musi mieć co najmniej dwa programy.
Przykład:
Twój początkowy kod to abc+cab+bac
. Daje to:, foofoo*123
co z kolei daje disp(~0)
, co daje 1
. Jest to łańcuch 3 programów o łącznej długości 29 (remis).
code-challenge
code-generation
Stewie Griffin
źródło
źródło
2^3
, co tylko do oceny1
, czy to ma być przykładlambda:2^3
,print(2^3)
itd?1
być zarówno programem, jak i wynikiem tego programu, czy też łańcuch kończy się, kiedy1
jest wynikiem?Odpowiedzi:
05AB1E , 5-łańcuchowy: 236 + 29 + 13 + 3 + 1 = 282 bajtów
Wypróbuj online!
który drukuje program
Wypróbuj online!
który drukuje program
Wypróbuj online!
który drukuje program
Wypróbuj online!
który drukuje program
Wypróbuj online!
który drukuje
1
źródło
8784>žxB
i prawdopodobnie jestem KO'd. Brak liczb do konwersji podstawowej jest całkowitym crapshootem, chyba że go wyliczysz. Celem, jeśli chcesz pokonać emignę, jest użycie jak najmniejszej liczby unikalnych liczb na iterację. Jego odpowiedź jest najwyższa z powodu 88 w drugiej do ostatniej iteracji. Naprawdę świetna odpowiedź.10
i zrobić coś w systemie binarnym. Ale nie wiem, czy możemy wygenerować pierwszy program z pliku binarnego bezB
.Java 8, łańcuch 2 funkcji,
90 + 1037 + 428 + 4 = 32 bajtyCo odpowiada:
-57 bajtów dzięki @ OlivierGrégoire .
Wypróbuj online.
Który zwraca ciąg znaków:
Wypróbuj online.
Która zwraca liczbę całkowitą:
źródło
\u0076\u002D\u003E\u0022\u0076\u002D\u003E\u0022+(3\u002D2)
(59 bajtów + 4 bajty). Reguła mówi: „Żaden z twoich programów nie może dzielić żadnych znaków”, więcv->1
jest ważny, ponieważ finał1
nie jest programem.v->1
zwracanie 1 jest ważne, ale w mojej pierwotnej odpowiedzi\u0031
zawierało 1, av->1
następnie zawierało również 1. Fajna kombinacja zarówno Java Unicode, jak i zwykłej Java. I grałem w golfa jeszcze 2, zmieniając(2/2)
na2/2
. (PS: Jakob również ma już odpowiedź Java 3 łańcucha )."\44\55\76"
zamiast"\u0076\u002D\u003E"
R , 3-łańcuchowy 198 + 44 + 3 bajty
Wypróbuj online!
Zwroty:
Wypróbuj online!
Zwroty:
Wypróbuj online!
Zwroty
1
Objaśnienie:
Pierwszy program jest prawie całkowicie napisany w postaci ósemkowej, gdzie każdy znak jest zapisany tak, jak
\xxx
gdziexxx
jest kod ASCII w trybie ósemkowym. W formie czytelnej dla człowieka byłoby:Tutaj, aby uniknąć użycia nawiasów okrągłych, redefiniujemy operator prefiksu
+
równycat
funkcji, a następnie używamy go do wydrukowania następnego łańcucha. Nawet po przypisaniucat
do+
tego ostatniego, operator zachowuje swój „prefiks” operatora prefiksu i po prostu przyjmuje to, co następuje po nim, jako jego pierwszy parametr.Drugi program po prostu drukuje znaki
F^F
otrzymujące je z dziesiętnego ASCII:70,94,70
Ponieważ w pierwszym programie użyliśmy reprezentacji ósemkowej, tylko liczby
8
i9
można z nich korzystać; stąd otrzymujemy70
iz94
pewnymi różnicami między liczbami tylko8's
i9's
.Wreszcie ostatni program
F^F
, wykorzystuje^
funkcję (moc), który wymuszaFALSE
na0
i oblicza0^0
powracającego1
Kredyty dla:
+
w celu uniknięcia nawiasów klamrowychPoprzednia wersja :
R , 2-łańcuchowy
27 + 324 + 2 bajtyWypróbuj online!
Zwroty:
Wypróbuj online!
Powraca
1
.źródło
cat
obowiązkowe"wri\164e"(function args)
aby uniknąć innegot
lub podobnego kodowaniacat(intToUtf8(c(49,76)))
to zadziałałoby i jest nieco krótsze. Nie rozwija jednak łańcucha.Python 2 , 2-łańcuchowy, 7 + 44 = 51 bajtów
i
Wypróbuj online!
Podstawowy kod 16 tłumaczy
print 1
, który jest zwracany przez funkcję anonimową.źródło
Perl 5, 3-łańcuchowy,
151139 znaków (114 + 20 + 5)Brzydota wewnątrz
&{ }
ewaluujeCORE::syswrite
, więc ciąg znaków ucieczki heksów jest drukowany na standardowe wyjście jako:Należy pamiętać, że ^ C i ^ R powyżej reprezentują dosłowne znaki kontrolne. (I nie mylić z dosłownością
^
kursorem, który występuje pomiędzy dwoma strunami.)Ten program z kolei generuje:
źródło
Oktawa , 3 programy, Długość 42 bajtów
Wyjścia:
[[63 24]*2 '']
. Wypróbuj online!Wyjścia:
~0
. Wypróbuj online!Wyjścia:
1
. Wypróbuj online!źródło
Cjam, 4-łańcuchowy, 28 + 20 + 3 + 1 = 52 bajty
Fragment 1:
Snippet 2:
Fragment 3:
Snippet 4:
Który następnie drukuje 1.
Wypróbuj online!
Uwaga:
Ponieważ Cjam nie ma interpretacji znaków ucieczki, te we fragmencie 1 są dostępne tylko po to, aby uzyskać lepszy widok strony. Aby uruchomić fragment, musisz użyć odpowiednich rzeczywistych znaków.
Jeśli nie mogę ogolić więcej postaci, to dobra robota na @Emigna po
05AB1E
odpowiedź!źródło
1
użyłeś postaci użytej w fragmencie 1Excel, Łańcuch 2, 27 + 3 bajty
Nie jestem pewien, czy to jest w porządku ...
źródło
CHAR(61)&
na początku łańcucha 2?CHAR
zostańCAR
, 3 bajty zapisane), nie jestem pewien, czy inny język zmniejszy go bardziej--1
komórkę i wcisnął Enter, po prostu pokazałby1
się na ekranie ...=
domyślnie, jeśli piszesz--1
.=
znaku+1
(ale robi to--1
), więc nie będę go uważał za wyrażenie. I nie jestem pewien, czy po prostu zapisywanie1
w komórce i nazywanie jej „wyjście 1” jest prawidłowe. Dlatego--1
jest używany.kod bajtowy x86, łańcuch 2, 10 + 4 bajty
(Zmontowany z FASM, format PE)
ÇA.Ï?¿<÷Y.
tworzy1À@Ã
w adresie obok niego i wykonuje go, który zwraca1
eax (zgodnie z fastcall). W obu przypadkach.
faktycznie reprezentujeA
lub LF.W hex:
C7 41 0A CF 3F BF 3C F7 59 0A
i31 C0 40 C3
.Zdemontowano:
produkuje
To (ab?) Wykorzystuje fakt, że punkt wejścia programu jest przechowywany w ecxie, a następnie zapisuje odwrotność kodu do wykonania na adres 10 bajtów i neguje go.
Może, ale nie musi się zepsuć, jeśli jest złożony z niczym innym niż fasm, do niczego poza PE lub z innym punktem wejścia.
źródło
JavaScript REPL, dużo bajtów, 4 iteracje
Zbyt leniwy, aby zoptymalizować kod JSFUCK
JavaScript REPL, 164 bajty, 3 iteracje
może być w stanie się rozwinąć
Wypróbuj online!
źródło
1
z innych profesjonalistów, więc pierwszy1
to program, a drugi to wynik{}
?CJam, 7 łańcuchów, 92365 + 1819 + 79 + 14 + 9 + 3 + 1 bajtów
Ten 92365-bajtowy program zostanie wydrukowany
który drukuje
który drukuje
który drukuje
który drukuje
który drukuje
który drukuje
1
.źródło
MATL , 5 programów, 404 + 159 + 35 + 4 + 1 = 603 bajtów
Dotarcie do 4 programów było trudne. 5 programów było bardzo trudne!
Wypróbuj online!
Wypróbuj online!
To może być mój ulubiony program, który napisałem na PPCG:
Wypróbuj online!
Wypróbuj online!
Wypróbuj online!
Wyjaśnienie:
Po spędzeniu wielu godzin na tym programie nie napiszę teraz całego wyjaśnienia! Napiszę to później!
Krótkie podsumowanie:
Aby przekonwertować to na ciąg zamiast kodów znaków, musimy połączyć go z ciągiem za pomocą
h
. Aby uzyskać ciąg, bez użycia cudzysłowów lub modyfikatorów XY, wykonujemy konwersję podstawową i przekształcamy liczbę całkowitą na spacje.źródło
CJam, 10 programów, 5,751,122,990 bajtów
Byłem zbyt leniwy, żeby grać w golfa ... Ale najwyraźniej nie muszę grać w golfa, aby być konkurencyjnym. Ale bez gry w golfa trudno jest opublikować rozwiązanie w odpowiedzi.
Teoretycznie powinien on działać w interpretatorze JavaScript , ale program jest zbyt długi, aby przetestować go w przeglądarce. Powinien on wypisywać to samo w interpretatorze Java, z wyjątkiem ostatniego programu. Ale może również zabraknąć pamięci w interpretera Java dla kilku pierwszych programów.
Statystyka
Pierwsze bajty
\n
jest nowa linia w drugim programie.Generator
źródło
APL (Dyalog) , 2 łańcuchy, 15 + 2 = 17 bajtów
Wypróbuj online!
Wysyła program
To wychodzi
źródło
JavaScript (ES6), 2 funkcje, 31 + 4 = 35 bajtów
zwraca
_=>1
, która zwraca1
Pokaż fragment kodu
źródło
Galaretka ,
38 37 3635 bajtów, Łańcuch 4Wypróbuj online! ( 18 bajtów)
Wypróbuj online! ( 13 bajtów)
Wypróbuj online! ( 3 bajty)
Wypróbuj online! ( 1 bajt)
18 + 13 + 3 + 1 = 35 bajtów
W jaki sposób?
źródło
Python 2 , 3 fragmenty, 68 + 12 + 3 = 83 bajty
który tworzy ciąg literałów ósemkowych:
który produkuje:
Który w końcu produkuje
1
.Wypróbuj online!
źródło
Java 8, 3 programy, 431 bajtów
Program 1, 332 bajty
Lambda z jednego (pustego) parametru dowolnego typu na
String
.Jest to po prostu lambda ze znakami strzałek, które uniknęły znaków Unicode, zwracając tekst drugiego programu zakodowanego ósemkowymi sekwencjami ucieczki.
Wypróbuj online
Program 2, 93 bajty
Snippet produkujący a
String
.Wypróbuj online (z dodanym zwrotem)
Program 3, 6 bajtów
Lambda z jednego (pustego) parametru dowolnego typu na
int
.Wypróbuj online
źródło
\166
w golfa\44
dla -1 bajtu, ponieważ$
jest to również poprawna nazwa zmiennej. Wypróbuj online , w wyniku czego$->9-8
( Wypróbuj online. )\uXXXX
in the first code to avoid->
. Then you need eitherreturn
(function) orSystem.out
(snippet or function), both contain au
which you already used in\uXXXX
. So I personally think this entry is invalid and I downvoted it accordingly.System.console().printf
można zastosować, aby zapobiec użyciuu
. Coś podobnego zostało zrobione w tej odpowiedzi i użyłem jej również w tych dwóch moich odpowiedziach .x->"\146\157\162\50\143\150\141\162\40\44\72\156\145\167\40\143\150\141\162\133\135\173\47\171\47\54\47\54\47\54\47\75\47\54\47\70\47\54\47\56\47\54\47\70\47\175\51\123\171\163\164\145\155\56\143\157\156\163\157\154\145\50\51\56\160\162\151\156\164\146\50\53\53\44\53\156\145\167\40\123\164\162\151\156\147\50\51\51\73"
(319 bajtów) zamienia się wfor(char $:new char[]{'y',',','=','8','.','8'})System.out.printf(++$+new String());
(89 bajtów) zamienia się wz->9/9
(6 bajtów). Łącznie: 404 bajty.System.console()
drugi program, który ma poprawnie 89 bajtów (podczas gdySystem.out
robi to 83 bajty).SmileBASIC, łańcuch 3, 375 bajtów
Wyjścia:
Wyjścia:
Wyjścia:
źródło
PHP 7.0, 2-łańcuchowy, 35 + 8 = 43 bajty
Podczas pisania pierwszej odpowiedzi zdałem sobie sprawę, że mogę po prostu użyć kodu base64 dla drugiego echa. Ogolił 11 bajtów, więc oto jest. Poniżej możesz znaleźć mój oryginalny pomysł.
Uruchom używając php -r:
To daje:
Który następnie oczywiście drukuje:
Wydajność:
Mój kod po uruchomieniu w terminalu. Załączonych && echo jest tylko dla czytelności.
Komentarze:
Naprawdę nie ma w tym wiele. Bardzo proste, gdy wiesz o „?>” Domyślnie działającym jako „;”. „Podstępna” część polegała na ustaleniu, co należy zakodować:
Alternatywnie możemy również użyć „echO” i „ECHo” (36 + 7 = 43 bajty).
Możemy również zmienić; i?> używając tego. Działa równie dobrze i ma taką samą długość.
Moje wstępne rozwiązanie:
PHP 7.0, 2-łańcuchowy, 44 + 10 = 54 bajtów
To jest najlepsze, co mogłem wymyślić na początku. Zrozumiałem, że „unikalne znaki” oznaczają, że „echo” nie jest równe „ECHO”. Mam nadzieję, że mam rację!
Uruchom używając php -r:
To daje:
Co z kolei daje nam nasz numer:
Wydajność:
Mój kod po uruchomieniu w terminalu. Załączonych && echo jest tylko dla czytelności.
Kilka komentarzy:
Dzięki za wyzwanie. Nauczyłem się czegoś dzisiaj!
źródło
Lua, 2 łańcuchy, 83 + 8 = 91 bajtów
Wyjścia
Które wyjścia
źródło
Węgiel drzewny, 2 programy, 10 + 2 = 12 bajtów
Wypróbuj online! Wyjścia
Wypróbuj online! Które wyjścia 1.
źródło
Braingolf , 2 łańcuchy, 9 + 2 = 11 bajtów
Wypróbuj online!
To wychodzi
Wypróbuj online!
(Plus niektóre domyślne dane wyjściowe, które można zignorować zgodnie z regułami PO)
To z kolei daje wynik
źródło
Röda, 2 chain, 31 + 3 = 34 bytes
Fragment 1:
Wypróbuj online!
Snippet 2:
Wypróbuj online!
Są to fragmenty, ponieważ każdy prawidłowy program Rödy musi zawierać
main{...}
wzdęcia. Są to również ważne programy REPL firmy Röda.źródło
dc, 3 programs, 48 bytes
Pierwszy:
Daje drugi:
Daje trzeci:
Plony
1
.Wypróbuj online!(ma wrzucony kod czyszczenia stosu i drukowania nowego wiersza, aby wszystkie trzy bity działały za jednym razem).
Być może najlepiej zacząć w programie trzy,
KZn
. Jest tylko kilka sposobów na wydrukowanie rzeczydc
i zdałem sobie sprawę, że na tym etapie prawdopodobnie utknęłbym w jednym z nichp
lubn
w obu przypadkach w setnych ASCII. Oznacza to, że prawie na pewno będę musiał wygenerować 1 zamiast korzystać z programu1n
.K
wypycha bieżącą precyzję (domyślnie: 0) na stos iZ
wypycha liczbę cyfr na szczycie stosu, co daje nam 1 do wydrukowania.Drugi program jest dość prosty.
P
wypisuje znak o podanej wartości ASCII, więc wypisujemy75
(K
)90
(Z
) i wreszcie110
(n
), co działa wspaniale. Oznacza to również, że oprócz wyżej wymienionego 1, nie mogę używać cyfr 5, 7, 9 lub 0 w innym miejscu. Potrzebuję też innej metody niżP
przekształcanie liczb w znaki.The first program, then, has to make four numbers without using the digits 1, 5, 7, 9, or 0. It needs to make
80
(ASCII value ofP
):82 2-
;75
:AA
(110)I-
(subtract the default input radix, 10)I2/
(so, 5)2^
(so, 5^2, 25)-
(75);90
:AA
(110)I2*
(twice the default input radix of 10, so 20)-
(90); and110
: well, it's justAA
. After making80
, we usea
to convert a number to a string. There are somer
everse andd
uplicate commands in there to put theP
s in the right spots, and then finally we print the whole stack withf
.I'm pretty sure I didn't screw this up, but I did have my head spinning a little bit...
źródło
05AB1E, 5 + 3 = 8 bytes
Try it online!
which right off the bat returns
I am taking the output 1.0 as not equalling 1, so I run that code:
Try it online!
which returns
And there you go!
Number of programs =
2
źródło
h
(convert to hexadecimal). Theg
(get length, default 0) witht
(square-root) already gives a decimal0.0
. With<
(decrease by 1) it becomes-1.0
and thenn
(square) changes this into1.0
. You could also replace the<n
with>
(increase by 1). ;) So in total it's 3 bytes (gt>
). Alternatively you could useXt
(1
and square-root). PS: I'm not sure if1.0
to1
is a valid part of the chain. I've asked OP to verify. Welcome to PPCG and enjoy your stay.Ruby, 2-chain, 24+3 = 27 bytes
Output is
źródło