Wyzwanie Bowling Code
Napisz program lub funkcję, która generuje to samo wyjście, bez względu na to, jak zmienisz kod źródłowy. (Wynik nie może być błędem)
Punktacja Pangram
Twój wynik to liczba unikalnych znaków w kodzie źródłowym.
Program z kodem źródłowym
AJB
miałby wynik3
A Program z kodem źródłowymAAJ
miałby wynik2
A Program z kodem źródłowym111
miałby wynik1
To jest wariant gry w kręgle . Program z najwyższym wynikiem wygrywa!
(Dla Twojej wygody utworzono tutaj automatyczne narzędzie oceniania )
Zasady Wyzwania
Wejście
Program / funkcja może pobierać dane wejściowe, ale jest to całkowicie opcjonalne.Dane wyjściowe Dane
wyjściowe mogą być dowolne , ale powinny być inne niż zero, niepuste, niepuste i niepoprawne. (W związku z tym dane wyjściowe muszą mieć co najmniej 1 bajt)- Przegrupowanie
Bez względu na sposób zmiany kodu źródłowego, dane wyjściowe powinny być takie same.
Przykład:
Program:ABJ
wyjściahello world
, tak jak programy [AJB
,JAB
,JBA
itp]
To jest wariant gry w kręgle . Program z największą liczbą znaków wygrywa!
źródło
0
wiecznie?)Odpowiedzi:
Lenguage, 1112,064 punktów, jeśli UTF-8
Mój program składa się z każdej możliwej postaci UTF-8. Drukuje „Witaj świecie” i zużywa 1,75 * 1076 yottabajtów przestrzeni.
(Aby wygenerować program, wystarczy utworzyć plik zawierający 17498005810995570277424757300680353162371620393379153004301136096632219477184361459647073663110750484 znaków, upewniając się, że w pliku znajduje się każdy możliwy znak UTF-8)
źródło
Wiele języków, 2 punkty
Produkuje
0.0
jako0.
lub.0
. Wymaga parsowania dowolnej liczby, która jest OK z kropką dziesiętną na początku lub na końcu, przyjmując 0 dla brakującej części całkowitej lub dziesiętnej.0000000.
dałby ten sam wynik.Działa to również w następujących językach (w niektórych przypadkach z innym wyjściem, jak wskazano):
ans = 0
)ans = 0
)0
)0
)0
)Myślę, że w przypadku Pythona jest to jedyny sposób na uzyskanie wyniku powyżej 1, ponieważ możliwości można wyczerpać.
[](){}
wymaga dopasowania i zakończy się niepowodzeniem, jeśli ostatni będzie pierwszy,
może być pierwszą postacią#
Umieszczony pierwszy chciał komentować wszystko i nie produkują wyjście\
jest niepoprawną kontynuacją linii$
,!
,?
, I@
nie może być używany bez innych znaków bezużytecznychPozostawia to litery, cyfry
_
,.
oraz cytaty._
tworzą nazwy zmiennych, których pewna permutacja nie zawsze istnieje.Liście cyfry i
.
. Dopuszczenie różnych cyfr daje inną liczbę, chyba że wszystkie cyfry są0
. Więc myślę, że zera i.
to jedyny sposób na uzyskanie wyniku powyżej1
. Ale nie znam dobrze leksemu Python, więc mogłem coś przeoczyć.źródło
CJam , ocena 15
Wypróbuj online!
Zawsze drukuje
0000
:0
popycha zero.T
,U
,V
Są zmienne, które są wstępnie inicjalizowane na zero.L
,M
,O
,Q
,R
Są zmiennymi, które są wstępnie inicjalizacja do pustej listy, więc nie pojawiają się na wyjściu.[
i]
mogą, ale nie muszą, owijać rzeczy w listę, ale nie muszą być one odpowiednio dopasowane, a wydruk i tak jest spłaszczony.q
odczytuje wejście, które jest puste i dlatego też nie pojawia się na wyjściu.źródło
r
osiągając coś podobnego do małychq
?MATL ,
356 punktówPomysł dodania białych znaków został zaczerpnięty z odpowiedzi Bijana .
Kod lub dowolna jego permutacja generuje trzy oddzielone znakami nowej linii.
Wypróbuj online!
Wyjaśnienie
l
domyślnie wypycha numer jeden na stos.1
robi to samo.T
naciśnięciatrue
, które są wyświetlane jako numer jeden.v
łączy dotychczas cały stos w wektor kolumnowy. Na przykładv
po następnieT
połączy dwie pierwsze liczby w kolumnę (a następnie zostanie wypchnięta kolejna liczba). Inicjałv
wytworzyłby pustą tablicę.Na końcu kodu stos jest domyślnie wyświetlany z następującymi regułami:
Tak więc każda permutacja znaków wejściowych powoduje
1
trzykrotnie w różnych wierszach.źródło
Removing any part of the source code however should cause that specific output to not be produced.
w momencie, gdy pisałeś, nie chciałem go dodać i został usunięty. Być może pomoże Ci to zwiększyć wynikGalaretka , zdobądź
53101Używanie tylko znaków, które są częścią strony kodowej Jelly .
Galaretka ma niejawne dane wejściowe
0
, a pierwsza połowa (do włącznieạị«»
) powyższego ciągu kodu składa się głównie z atomów monadycznych (wielkie litery) i dyadycznych (małe litery i symbole), które po podaniu zera lub listy zawierającej tylko jedno zero ( lub dwa takie dane wejściowe w przypadku dyad) zwracają zero lub listę zawierającą tylko jedno zero.Wyjątkami są:
Spacja: jest ignorowana (mimo że znajduje się na stronie kodowej).
Pilcrow
¶
oddziela linki (podobnie jak wiersz, ale tak naprawdę jest to ten sam bajt), ale żadne inne bajty i tak nie odwołują się do kodu przed nim.skarabeusz
¤
instruuje parser, aby traktował wszystko, co pozostało, zaczynając od niladu (lub stałej) jako stałą (i działa jako pierwszy atom).Dollar,
$
poinstruuj parser, aby traktował dwa łącza do niego jako monadę (i, co nieco zaskakujące, działa jako pierwszy atom)jen,
¥
podobnie instruuje parser, aby traktował dwa łącza do jego pozostawione jak diadę.Zalecane,
®
początkowo przypomina wartość rejestru0
(jest to odpowiednik praw autorskich,©
psuje się, gdy zostanie użyty jako pierwszy atom, ponieważ jest on znaleziony na podstawie linku do jego lewej strony, który nie jest jeszcze ustawiony).Kod z nawiasami,
(
a)
i są obecnie niewykorzystane punkty kodowe, to wszyscy się analizowany i każdy powoduje nowego łańcucha (podobnie jak znak nowej linii, choć nie mają one wpływu tworzenia powiązań wywołalnych jak znak nowej linii, ale to nie jest problem, ponieważ nic nie próbuje tego zrobić).źródło
TI-Basic (seria 83), 93 punkty (99 na TI-84 Plus)
Wszystkie cyfry, wszystkie zmienne jednego bajtów (w tym θ i n , niezależnych zmiennych dla polarnych i kolejno wykresy), stałe gatunku, e , i I , niektóre nie całkiem zmienne (
Ans
,rand
igetKey
) i 59 różni zmienne okna (wszystkie, które mają być zdefiniowane).Implikowane mnożenie gwarantuje, że wynik wyniesie 0, gdy przyjmiemy to w dowolnej kolejności. Jeśli działa to na nowym kalkulatorze, wszystkie zmienne będą miały wartość 0; nawet jeśli nie,
getKey
wyniesie 0, ponieważ nie ma czasu na naciśnięcie klawisza, zanim program zwróci wartość.Na TI-84 Plus lub wyższy, możemy dostać 6 więcej punktów dodając znaki
getDate
,getTime
,startTmr
,getDtFmt
,getTmFmt
,isClockOn
. Rezultatem będzie teraz zawsze{0 0 0}
ponieważgetDate
igetTime
zwraca listy o długości 3, a domniemane mnożenie rozkłada się na elementy.Myślę, że są to wszystkie możliwe tokeny, których można użyć: wszelkie rzeczywiste polecenia to przedrostek, przyrostek lub postfiks (co oznacza, że nie będą działać na początku lub na końcu programu), a wszelkie inne zmienne mogą być niezdefiniowane (i powodować błąd, gdy używany).
źródło
(niekonkurencyjny) Brainf-ck, 63 bajty
Nie wiem, czy uważa się to za oszustwo, ale ...
Kropka wypisuje bieżący znak (0x00), a reszta znaków nic nie robi. Technicznie można to rozszerzyć w nieskończoność, więc daj mi znać, jeśli uważa się to za oszustwo.
źródło
Haskell, 3 punkty
Bez względu na to, jak przestawiony, ten kod zawsze zwraca funkcję zwiększającą wprowadzane wartości. Przykłady użycia w repl:
źródło
√ å ı ¥ ® Ï Ø ¿ , 128.234 (?) Punktów
Doszedłem do 128.234 z pomocą @DestructibleLemon. Ten program wykorzystuje wszystkie znaki Unicode (128,237) z wyjątkiem
o
,O
ił
. Co dziwne, dwa z nich to polecenia wyjściowe.Z pewnością jednak żaden język nie mógłby używać wszystkich tych znaków, prawda? Cóż, ten język po prostu ignoruje polecenia, których nie rozpoznaje. Problem rozwiązany.
Ten język domyślnie wyświetli następujące informacje:
który jest niepuste, niepuste, niepuste i niepoprawne.
Uwaga: jeśli narusza to jakąś niepisaną regułę, powiadom mnie w komentarzach, a ja to zmienię. Jeśli znasz mój wynik (zakładając, że jest to dozwolone), opublikuj również w komentarzach.
źródło
J, 3 bajty
Znaki 1, spacja i nowa linia zawsze będą drukować 1.
źródło
/// ,
12 punktyWypróbuj online!
Nie mam pojęcia, jak to zrobić w innym języku kompletnym Turinga. Oczywiście jest HQ9, ale to po prostu oszustwo.
1 bajt dzięki @Martin Ender.
źródło
Kropki , 1114111 znaków (jeśli używasz Unicode).
<87 dots here> Every Unicode character except NUL and . here
Wyjaśnienie:
Tak więc otrzymany ciąg binarny jest
1010111
, który zamieniony na dziesiętny to 87, więc potrzebujemy 87 kropek.Każdy inny znak jest komentarzem, dlatego używamy każdego znaku z wyjątkiem NUL, ponieważ Python3 przestaje wtedy czytać plik i kropki, ponieważ kropki nie są komentarzami.
źródło
Preludium , wynik 1.112.051
(Jeśli wziąć pod uwagę tylko ASCII do wydrukowania
[\t\n -~]
, wynik to 84. Jeśli weźmiemy pod uwagę wszystkie punkty kodowe Unicode , wynik to 1 112 051. )(następnie dodaj
[\u{7f}-\u{10ffff}]
po nim wszystkie znaki ).Zawsze drukuj
0
.Preludium jest językiem stosu równoległego, w którym stos jest wstępnie wypełniony nieskończoną liczbą zer.
+
: Podaj dwie wartości (zawsze 0), dodaj je (0) i wciśnij, aby ułożyć w stos.-
: Podaj dwie wartości (zawsze 0), odejmij je (0) i wciśnij, aby ułożyć w stos.#
: Podaj wartość i odrzuć ją.!
: Wpisz wartość i wyślij ją jako liczbę (zawsze 0) (spec mówi „znak”, ale interpreter mówi „liczba”; w każdym przypadku drukowany jest bajt)0
: Przesuwa 0.^
,v
,V
: Popycha wartość górna poprzedni / następny programów równoległych ( „Głosy”), ale stosy wszystkich „głosy” są wypełnione 0, więc oni zawsze naciskać 0.Jest więc tylko 13 znaków, których musimy unikać:
(
,)
: Niesparowany nawias spowoduje błąd1
-9
: Chcemy tylko wygenerować 0.?
: Nie chcemy niczego wpisywać.*
: Powoduje bardzo skomplikowaną kontrolę spójności kodu przed i po linii składającej się z samotnego*
. Musimy więc usunąć nową linię lub usunąć*
. Implementacja referencyjna używa języka Python 2,.readline()
co „nowy wiersz” może oznaczać\r
lub\n
. Lepiej więc po prostu usunąć*
.źródło
Deadfish , wynik 86
Jeśli jest to nielegalne, to też jest
(ocena 1)
źródło