Twoim zadaniem jest napisanie programu, funkcji lub fragmentu kodu (tak, fragmenty są dozwolone), które po prostu wypisują liczbę całkowitą. Jednakże , trzeba być w stanie oddzielić swojego zgłoszenia do przedrostków, które również produkują różne liczby całkowite. Nie można używać żadnych bajtów, które pojawiały się w poprzednich prefiksach. Na przykład możemy mieć prefiksy:
1 # 1 (Now we can't use 1)
1-6 # -5 (Now we can't use - or 6)
1-6/3 # -1 (Now we can't use / or 3)
1-6/3+0xA # 9 Final submission
Zasady
- Twoim celem jest stworzenie, aby spróbować stworzyć najbardziej unikalne liczby całkowite, jednocześnie utrzymując je blisko zera.
- System punktacji jest taki
((number of unique integers)**3)/(sum of absolute values)
, że im wyższy wynik, tym lepiej. Powyższe przykładowe wyniki .
- System punktacji jest taki
- Powinny istnieć co najmniej dwie unikalne liczby całkowite (bez dzielenia przez zero!)
- Sformatuj swoją odpowiedź podobnie do:
# Language, \$(4^{3})/16 = 4\$
1-6/3+0xA (the full program)
- Wspomnij, jeśli przesłanie składa się z fragmentów, które oceniają na wartość, funkcje lub pełne programy.
- Wymień każdy z prefiksów i (opcjonalnie) objaśnienie ich działania.
number
code-challenge
restricted-source
Jo King
źródło
źródło
print 123-len(open(__file__).read())
a#
następnie jeden z nieużywanych do tej pory bajtów (z wyjątkiem niektórych znaków kontrolnych), z prefiksami odcinającymi te bajty. Dostosuj 123 do dowolnego środka zakresu wyników około 0. Aby uzyskać lepszy wynik, część programu bez komentarza można przepisać, używając tylko 7 różnych znaków, które są uniwersalne dla Pythona. Czy to wszystko jest ważne?Odpowiedzi:
TI-Basic (TI-84 + SD)2383/14161=952.0
256 bajtów w TI-BASIC rozkłada się w następujący sposób:
"
,→
znaki, które przerwa ciągi i linią.Ciąg zawiera wszystkie 237 dozwolonych bajtów w pierwszej kategorii, które nie są jeszcze w
118-length(
.Program oblicza 238 różnych liczb całkowitych, od 118 do -119. Wynik wynosi zatem2383∑118n=−119|n|=952.
źródło
mean({1,2,3
, co by się wypełniłomean({1,2,3})
. ciągi są również uzupełniane:Disp "Hi!
uzupełnia doDisp "Hi!"
. Dlatego ostateczny cytat końcowy nie jest koniecznyvim, 14³ / 53 = 51,77
Wypróbuj online!(wszystkie prefiksy)
Awaria:
źródło
<esc>
reprezentuje klawisz Escape i<c-char>
reprezentuje ctrl + charLenguage , 256³ / 16384 = 1024
Kod źródłowy rozwiązania można opisać w następujący sposób:
Każdy ciąg identycznych bajtów w połączeniu z poprzednimi uruchomieniami stanowi prefiks, a pełny program zawiera wszystkie łańcuchy opisane powyżej połączone.
To optymalny wynik. (Programy drukują wszystkie liczby od -127 do 128 włącznie.)
Aby utworzyć tę odpowiedź, najpierw skopiowałem tutaj odpowiedź Java do generowania programów typu „pieprzenie mózgu” w celu wydrukowania łańcucha. Uruchomiłem go z tą
main
funkcją:Następnie uruchomiłem ten skrypt Ruby, aby wygenerować tekst czytelny dla człowieka pokazany tutaj:
Największy program ma 3594571896764310192036774345469579167648804468538578264427 bajtów (i drukuje
-90
).źródło
(Podziękowania dla tego interesującego narzędzia do konwersji.) Powyższe skutecznie tworzy następujący kod:
... który tworzy serwer proxy, który przekształca długość nazwy właściwości na liczbę. Pierwszy prefiks kończy jeden znak po
.
i używa tylko 6 unikalnych znaków, z wyłączeniem.$
. Kolejne 63 wycinki dołączają 63 inne znaki jednobajtowe, które są poprawne w nazwach właściwości obiektu JS. Kolejne 44 wycinki dołączają prawidłowe znaki dwubajtowe złożone z nieużywanych bajtów. Ostateczne plastry dołączyć&''
,|""**""
i,~{}
. Pierwsze powroty kawałek-2
, drugi2
, a potem-3
, potem3
,-4
,4
,-5
, itd. Aż do ostatnich trzech plastrów, które są0
,1
i-1
.źródło
W tym przypadku korzystamy z urywków mózgu, więc troszczymy się o wartość, a nie o to, co robią.
Kompletny program:
Prefiksy i wyjście
Wypróbuj online!
Wyjaśnienie
Jest to prawdopodobnie najlepsza odpowiedź, jaką można uzyskać od uderzenia mózgu, ponieważ zużyliśmy już całą postać, o którą troszczy się mózg, i nie możemy grupować liczb bliżej zera.
Pierwszy fragment jest
<>
,<>
zmienia stos ale inaczej ocenia na zero, więc zaczynamy od zera. Stąd dodajemy,(())
że to czyni jeden. Moglibyśmy właśnie to zrobić()
, ponieważ jest to również jeden, ale jeśli teraz go popchniemy, będziemy mogli później go przywołać za pomocą{}
i[]
. Jest to właściwie jedyny sposób{}
i[]
może tworzyć wartość, więc to robimy. Ponieważ na stosie jest jedna rzecz,[]
liczy się jako 1, więc odejmujemy 3 od sumy,[[][][]]
doprowadzając nas do -2. Na koniec używamy{}
tego, który popchnęliśmy wcześniej, co doprowadziło nas do -1.źródło
Python 2 ,( 113)) / 32 = 41,59375
3234,740Po dwóch godzinach prób i błędów w końcu dostałem wszystkie liczby całkowite od
-4
do+5
(i7
).To jest fragment kodu z następującymi fragmentami przedrostka:
Wypróbuj online!
źródło
2*2
na22&7
(-3 i 6 zamiast -3 i 4), aby rozwiązać ten powtórzenia*
.'
i_
używająccmp(cmp,())
zamiastcmp('','_')
Jeśli to jest pomocne.--[-1-1-1-1-1]
, ale nie poprawi to twojego wyniku.Partia, 176³ / 7744 = 704
Pierwszy prefiks zawiera dwukropek i zwraca liczbę -88. Kolejne prefiksy wyprowadzają rosnące liczby, a wynik końcowy programu 87.
źródło
Pyth( 2493)) / 15500 = 996,0
Wszystkie znaki ucieczki są jednobajtowe - przedstawiłem program w tej formie, aby ułatwić kopiowanie i wklejanie. Ten link prowadzi do pełnego programu bez znaków specjalnych; jak widać, istnieje wiele symboli zastępczych używanych znaków niedrukowalnych.
Zastosowane podejście jest podobne do odpowiedzi TIR-BASIC'a lirtosiasta , chociaż napisałem odpowiedź przed przeglądaniem innych wpisów. Przewód działa w następujący sposób:
Ciąg składa się z każdego jednobajtowego znaku innego niż 0 (NULL), 127 (backspace) i znaków na płycie głównej (
-C\|l"
). W ten sposób każdy znak ciągu można usunąć pojedynczo, aby utworzyć ciągi o długości od 248 do 0. Programy te dają wyniki w zakresie [-124 - 124], z sumą wartości bezwzględnych 15500.Kod został wygenerowany przy użyciu tego programu :
Za pomocą tego programu znaleziono sumę liczb wygenerowanych z każdego obciętego programu :
źródło
Galaretka , 984
Wypróbuj online!
Widać prefiksy (oddzielone podwójnym znakiem nowej linii) tutaj .
Drukowane liczby są w kolejności:
źródło
Python 2,113)/ 53=25,1132075472
Prefiksy:
Nie optymalne, ale najlepsze, co mogłem osobiście znaleźć w tej konkretnej strukturze.
źródło
Python 263)/ 9=24
Oto prefiksy i ich wynik
źródło
Czyste , 403) / 400 = 160
Wypróbuj online!
Określa,
n
które produkuje w-20, -19, ..., 18, 19
zależności od długości typuG
.Najmniejszy prefiks
G
wygląda:: G = G
, poprzedzony różnymi importami i definicjami.Największy prefiks
G
wygląda podobnie , podobnie jak poprzednio.:: G = GABCFHIJKMNOPQRUVWXYZcjkqxyz_0123456789`
źródło
Japt ,2453)/ 15006=980,0163268026123
Wypróbuj online!
Podobnie jak inne wpisy, używa długości ciągu. Znaki w początkowym fragmencie, a także
\r
(obszary{
tekstowe nie bawią się z tym dobrze) i (znak interpolacji łańcucha) są wykluczone z łańcucha.Pierwszy program polega na tym
_Ê-122}$($"
, że każdy program jest dłuższy o jeden znak, z wyjątkiem momentu dodania\\
.źródło
122
ze#z
jednak nie poprawi swój wynik.Python 3,( 63)) / 12 = 18
To jest fragment kodu.
Poszczególne fragmenty prefiksów to:
Bitowe operatory Pythona traktują ujemne liczby całkowite jako uzupełnienie dwóch z nieograniczoną liczbą
1
s po prawej stronie, więc-5
jest traktowane jako...11111011
, które gdy ORed z...000010
daje...11111011
niezmienione.źródło
Przewyższać,( 63)) / 12 = 18
Prefix
wyzwanie nie żeluje dobrze ze strukturą formuły programu Excelźródło
Runic Zaklęcia , 117 3 /3422 = 468.034
Wypróbuj online!
I przedrostek .
Wydruki [-58,58] włącznie.
Stosuje podobną taktykę jak inne wpisy, stosując stopniowo dłuższy ciąg, uzyskując jego długość, odejmując
B
(wartość dziesiętna66
) i drukuje wynik. Wykorzystuje znak, który nie jest drukowany(pokazany w bloku kodu,
€
ponieważ najwyraźniej to właśnie€
ocenia w HTML), aby wykorzystać wartość bajtu0x80
(i zużyć inaczej bezużyteczne0x00
) i zdobyć jeszcze jedną wartość. Tylko wartości bajtów do 127, które nie mogą być reprezentowane w jakikolwiek sposób są10
i13
, ponieważ będą one spowodować, że program się dwie linie wysoki i nie być poprawnie odczytane przez wskaźnik instrukcji.źródło
Węgiel drzewny ,
95³ / 2256 = 380,0421196³ / 2304 = 384Pierwszy prefiks to pierwsze 7 bajtów i wyświetla liczbę
47
. Wypróbuj online! Kolejne prefiksy wyprowadzają malejące liczby i wyjścia programu końcowego-48
. Wypróbuj online! Edycja: Zwiększony wynik o 3,95789 dzięki tylko @ ASCII.źródło