Program samooceny

15

Mamy wyzwanie, aby wygenerować własny wynik , ale wydaje się, że wszystkie odpowiedzi tam po prostu zakodowały wynik i to jest nudne 1 . Więc miejmy nowe wyzwanie. Twój koniecznością wyjścia programu własnej długość w bajtach, po której następuje ciąg " bytes", ale w celu uniknięcia Hardcoded rozwiązań gdybyśmy zmniejszyć jego rozmiar poprzez usunięcie jakiegokolwiek jeden bajt, nowy program musi również wyjście to nowa liczba bajtów, nadal następuje " bytes". Dane wyjściowe nie muszą uwzględniać wielkości liter. Możesz również zdecydować się na wydrukowanie nowej linii końcowej.

Twoje odpowiedzi zostaną ocenione w bajtach, przy czym mniej bajtów będzie lepszych.


1: Właściwie podoba mi się niektóre odpowiedzi.

Post Rock Garf Hunter
źródło
Być może mógłbyś zmienić nazwę wyzwania na „program umożliwiający samodzielne ocenianie” lub coś podobnego.
dylnan
Czy możesz używać zgodnych języków lub tylko tłumaczyć?
Logern
@Logern Możesz użyć dowolnego z nich.
Post Rock Garf Hunter
2
Argh. Spędziłem pół godziny, tworząc roztwór sześciokątny , ale kiedy poszedłem go przetestować, usunięcie bajtu sprawiło, że sześciokąt się skurczył ! :(
Jo King
1
@WW Mam na myśli „ 1 bytestechnicznie niepoprawną gramatykę, ale przy założeniu, że języki nie mają wbudowanej funkcji wysyłania ciągu„ bajtów ”w <= 2 bajtach, program będzie dłuższy niż 3 bajty, więc nie ma znaczenie ”- to i tak nie ma znaczenia.
user202729,

Odpowiedzi:

16

Backhand , 40 36 29 bajtów

vv""sseettyybb  ""jjHHOO]

Wypróbuj online! Weryfikacja!

W razie wątpliwości podwój wszystko. Wykorzystuje to zdolność Backhanda do poruszania się więcej niż o jeden krok na raz, aby wprowadzić redundancję. Wszystkie niedrukowalne mają wartość bajtu 28.

Wyjaśnienie:

Program nienapromieniowany:

v       Reduce step count to 2
  "    Start string literal
    s e t y b        Push the " bytes" part of the output
                  " Push 28 twice and end the string literal
                       j    Jump to the 28th position (0 indexed) 
                             ]   Increment the 28 to 29
                           O     Print the 29
                         H       Halt and output the entire stack

Program naświetlany:

Jeśli jakikolwiek znak zostanie usunięty, każdy następny znak zostanie przesunięty w dół.

vv"sseettyybb
v " s e t y b     The same instructions are still executed

Jednak zamiast przeskakiwać do ], zamiast tego odbija się od końca programu i ląduje na nim O.

                             v  28th character (0 indexed)
vv""sseettyybb       ""jjHHOO]
v""sseettyybb       ""jjHHOO]OOHHjj"".....
                             ^ 28th character, reflecting off the end of the code
Jo King
źródło
3

Runiczne Zaklęcia , 47 bajtów

>>yyLL     @"setyb 64"/
"47 bytes"@"setyb 64"L\

Wypróbuj online!

Który jest mniej więcej portem mojej odpowiedzi Licznika Geigera , ale z innym wyjściem (który sam jest portem odpowiedzi Kleina).

>>yyLLjest wymagane, aby Runic wygenerowała (co najmniej) jeden adres IP, scaliła dwa IPS i odbiła się z powrotem w lewo, tak aby wszystkie zmiany skutkowały pojedynczym ruchomym adresem IP w lewo. Można zastąpić, yy<<ale nie zapisuje żadnych bajtów.

Odbłyśniki po prawej stronie wymuszają IP na lewy dolny ciąg, więc usunięcie prawego górnego z nich pozwala na IP na prawy górny ciąg. Usunięcie bajtu gdziekolwiek indziej wzdłuż górnej linii powoduje dostosowanie górnego reflektora do położenia powyżej L (pozwalając programowi w prawym dolnym rogu). Usunięcie bajtu wzdłuż dołu dostosowuje ten reflektor (lub usuwa go), tak że ostatni znak zostaje domyślnie wypełniony spacją, co pozwala IP odbić się od obu stron prawego górnego reflektora i do prawego górnego ciągu.

Nadmiar przestrzeni jest jednak rozczarowujący. Ale wszystkie próby ich zmniejszenia zaowocowały większymi programami, programami o tej samej wielkości lub programami, które nie są w 100% odporne na promieniowanie. Zarówno odpowiedzi Kleina, jak i> <> używają funkcji niedostępnych w Runicznej.

Draco18s nie ufa już SE
źródło
2

> <> , 43 39 bajtów

||vn-{"' bytes"-10/
 o>o<"38 bytes"[0/0

Wypróbuj online! Weryfikacja!

W programie nienapromieniowanym dodajemy 0do '(39), aw programie napromieniowanym pomijamy 0 i dodajemy -1do niego. Jeśli coś zostanie usunięte z górnego rzędu, zamiast tego przechodzimy do dolnego rzędu i po prostu wyprowadzamy dane 38 bytes.

Jo King
źródło
2

Sześciokąt , 71 bajtów

//.........||.>e;s;@..\;t;y;b<>}F"+!P0;/|/F!P0$@;<...t;ye;bs/.........)

Wypróbuj online! Weryfikacja!

Spędziłem dużo czasu próbując przekształcić to w sześciokąt wielkości 5, ale zamiast tego musiałem zadowolić się mniejszym rozmiarem 6 :(.

Rozszerzony:

      / / . . . .
     . . . . . | |
    . > e ; s ; @ .
   . \ ; t ; y ; b <
  > } F " + ! P 0 ; /
 | / F ! P 0 $ @ ; < .
  . . t ; y e ; b s /
   . . . . . . . . .
    ) . . . . . . .
     . . . . . . .
      . . . . . .

Początkowo zrobiłem to z )jednym rzędem niższym, ale okazuje się, że dokładnie tam jest podział na sześciokąty wielkości 5 i 6. Oznacza to, że po usunięciu bajtu rozmiar przesuwa się w dół i niszczy ścieżki. Jestem zdecydowanie pewien, że rozmiar 5 jest możliwy.

Jo King
źródło
Jeśli dobrze to rozumiem, czy nie możesz umieścić )rzędu niżej, a następnie po prostu położyć po sobie zakaz, aby był to sześciokąt wielkości 6?
EdgyNerd
@EdgyNerd Jeśli po tym postawisz no-op, można go usunąć bez wpływu na program
Jo King,
2

Klein 000, 41 bajtów

<<@"setyb "$"4"+"0"/
..@"setyb 04"(....<1

Wypróbuj online! Weryfikator JoKinga

Myślę, że ta odpowiedź jest podobna do odpowiedzi JoKing> <> , ale nie czytam> <>, więc nie jestem pewien.

Istnieją tutaj 4 różne rodzaje usuwania bajtów

  1. Bajt jest usuwany z pierwszej linii wcześniej /. W tym przypadku ukośnik jest skutecznie przesuwany w lewo o jedną spację, co powoduje odchylenie go do dolnej linii i uniemożliwia wykonanie zmodyfikowanej części kodu. To powoduje, że uruchamiamy kod ("40 bytes"@, który wyprowadza 40 bytes.

  2. Pierwszy /jest usuwany z pierwszego wiersza. W tym przypadku uruchamiamy kod "0"+"4"$" bytes"@, który jest skomplikowanym sposobem lub drukowaniem 40 bytes.

  3. Nowa linia została usunięta. To powoduje, że zaczynamy od końca drugiego wiersza, a wynikowy kod (bez usuniętej noops) to 1("40 bytes"@, który po prostu drukuje 40 bytes.

  4. Bajt z ostatniego wiersza jest usuwany. Powoduje 1to przesunięcie końca pierwszej linii w lewo i zapobiega dodawaniu jej do stosu, gdy ostrze jest odchylane o /. Kod"0"+ z tego powodu wypycha 0zamiast 1, reszta kodu zamienia 0w 40 bytes.

Klein 001, 41 bajtów

\("40 bytes"@......1
..@"setyb "$"4"+"0"/

Wypróbuj online! Weryfikator JoKinga

Oto odpowiedź przy użyciu innej topologii. Jest tego samego rozmiaru, ale myślę, że jest miejsce na ulepszenia.

Post Rock Garf Hunter
źródło