Każdy może zwiększyć wydajność programu, dodając znaki, więc zróbmy dokładnie odwrotnie.
Napisz pełny program, funkcję wewnętrzną lub fragment kodu dla środowiska REPL w wybranym języku, który spełnia następujące kryteria:
Twój kod musi mieć co najmniej 1 znak.
Uruchomienie oryginalnego kodu powoduje wygenerowanie x znaków wyjściowych do STDOUT (lub najbliższej alternatywy), gdzie 0 ≤ x <+ ∞ .
Usunięcie dowolnego dowolnego pojedynczego znaku z oryginalnego kodu powoduje ponownie powstanie poprawnego kodu, który generuje co najmniej x + 1 znaków wyjściowych do STDOUT.
Ani oryginalny kod, ani modyfikacje nie mogą generować żadnych błędów, na przykład do STDOUT, STDERR, syslog lub gdzie indziej. Jedynymi wyjątkami od tej reguły są ostrzeżenia kompilatora.
Twój program może nie wymagać żadnych flag ani ustawień, aby ukryć wyjście błędu.
Twój program może nie zawierać żadnych krytycznych błędów, nawet jeśli nie generują żadnych wyników.
Zarówno oryginalny kod, jak i modyfikacje muszą być deterministyczne i ostatecznie zakończyć (bez nieskończonych pętli).
Ani oryginalny kod, ani modyfikacje nie mogą wymagać wprowadzania jakichkolwiek danych.
Funkcje lub fragmenty mogą nie utrzymywać żadnego stanu między wykonaniami.
Biorąc pod uwagę, że to zadanie jest trywialne w niektórych językach i wręcz niemożliwe w innych, jest to konkurs popularności .
Podczas głosowania należy wziąć pod uwagę „względną skrótowość” kodu, tj. Krótszą odpowiedź należy uznać za bardziej kreatywną niż dłuższą odpowiedź w tym samym języku .
111111111111111111^111111111111111111
(jeśli miałeś na myśli najniższy stosunek).k
instrukcji, wynik każdego programu jest ściśle większy niż wynik oryginału od tego czasu (ponieważ drugi programy zapętlałyby się szybciej lub generowały więcej pętli). Wyglądało całkiem interesująco. Może i tak zobaczę, czy uda mi się to ukończyć i podjąć kolejne wyzwanie.Odpowiedzi:
Dowolny REPL z operacją doczołową XOR, 5 bajtów
11^11
jest oczywiście 0. Jedynymi innymi możliwościami są1^11
lub11^1
które są 10 lub1111
które same się wytwarzają.źródło
99|99
-10
jest dłuższy niż0
.TI-BASIC,
31Gdy ostatnim wierszem programu jest wyrażenie, kalkulator wyświetli to wyrażenie. W przeciwnym razie kalkulator wyświetla się
Done
po zakończeniu programu. Wyrażenie tutaj jest pustym ciągiem, ale może również działać z dowolną liczbą jednocyfrową.2 bajty:
To samo co powyżej, ale z 2-bajtowym tokenem.
3 bajty:
Drukuje z
1
powodu domniemanego mnożenia. Może być przedłużony w nieskończoność poprzez dodanie par⁻¹
. Poniższe również działają.Dłuższe rozwiązania:
Prawdopodobnie są też rozwiązania wieloliniowe, ale nie mogę ich znaleźć.
źródło
Done
tokena; kalkulator wyświetla sięDone
po zakończeniu wykonywania dowolnego programu bez wyrażenia w ostatnim wierszu (w tym pustego programu).CJam, JavaScript, Python itp. 18 bajtów
Wyjściami w CJam są:
JavaScript i Python działają w podobny sposób. Nie jest konkurencyjny w JavaScript i Python,
ale nie jest łatwo znaleźć krótszy w CJam.źródło
Oktawa, 5 bajtów
(x: y) daje tablicę liczb między xiy w przyrostach co 1, więc między 10 a 10 jedynym elementem jest 10:
Gdy drugi argument jest mniejszy niż pierwszy, oktawa wypisuje pustą macierz i jej wymiary:
Po usunięciu znaku z pierwszej liczby w tablicy jest więcej elementów:
Po usunięciu okrężnicy liczba zwraca się:
źródło
Microscript, 1 bajt
Nie powoduje to żadnych wydruków, ponieważ
h
pomija ukryte drukowanie języka. Usunięcie jedynego znaku powoduje utworzenie programu, którego wynikiem jest0\n
.Później postaram się znaleźć lepszą odpowiedź.EDYCJA 17 LISTOPADA:
Działa to również w Microscript II, z tym wyjątkiem, że zamiast ustępować
0\n
, daje pusty programnull
.źródło
Pyth, 3 bajty
G
jest wstępnie zainicjowany małymi literami w alfabecie.c
jest funkcją podziału.cGG
dzieli alfabet według wystąpień alfabetu, które kończą się na['', '']
(8 bajtów).Gdy brakuje drugiego parametru,
c
dzieli ciąg według białych znaków, tabulatorów lub nowych linii. Ponieważ żaden z nich się nie pojawiaG
, dane wyjściowe dlacG
to['abcdefghijklmnopqrstuvwxyz']
(30 bajtów).I
GG
po prostu drukuje dwa razy alfabet na dwóch osobnych wierszach:abcdefghijklmnopqrstuvwxyz\nabcdefghijklmnopqrstuvwxyz
(53 bajty).Wypróbuj online: demonstracja
źródło
Python REPL, 6 bajtów
Nie najkrótszy, ale oto kolejna odpowiedź na nadużycie zmiennoprzecinkowe:
Ale...
źródło
JavaScript (i wiele więcej), 5 bajtów
44/44
lubźródło
CJam, 5
Wypróbuj online
źródło
Lenguage , 5 bajtów
Długość programu wynosi 5, co odpowiada programowi *** mózg
,
odczytującego koniec znaku wejściowego i kończącym się bez wyjścia.Usunięcie dowolnego znaku powoduje, że kod
0000
o długości 4 odpowiada programowi brainf ***.
drukującemu jeden znak ( punkt kodowy0
) i kończąc.Jednoargumentowy równoważne byłoby
0000000000000
(13 zer) bo trzeba poprzedzić wiodącym1
do binarnego długości kodu więc101
staje1101
.źródło
PHP, 6 bajtów
Obserwuję tę grupę od kilku tygodni i jestem zdumiony twoimi technikami programowania. Teraz musiałem się zalogować, jest coś, co mogę zrobić, przepraszam :-) Jednak może to być mój ostatni post tutaj ...
(zwróć uwagę na spację po drugiej
p
)To wyświetla pusty ciąg. Usunięcie dowolnego znaku powoduje wyświetlenie tekstu bez znaku. Pamiętaj, że może powodować błędy HTML (np. Treści nie renderowane przez przeglądarki
<?ph
).Próbowałem też z
echo
tagiem. to znaczy. na przykład.:Ten wychodzi
1
. Jeśli=
pominięto,<? __LINE__;;
oznacza wynik. Jednak usunięcie dowolnej stałej magicznej spowoduje E_NOTICE : Uwaga: Użycie niezdefiniowanej stałej LNE - przyjęto „ LNE ” w ...Jeśli powiadomienia nie są uważane za błędy (punkt 4 zasad), dotyczy to również :-)
źródło
<HTML>
tagu itp.)php test.php
. Nawiasem mówiąc, drugi kod jest nieprawidłowy. Pytanie nie zabrania błędy, ale wyjście błędów , błędów znaczenie, ostrzegawczych, ogłoszeń, itd.#!
w pliku skryptu działa również.Python,
108 bajtówDziała w Pythonie i znajomych. Dzięki Jakube za pokazanie, jak zmniejszyć o 2 bajty.
Z IDLE:
pierwotnie miałem to (10 bajtów):
Z IDLE:
i na tej samej notatce:
działa identycznie dzięki ładnemu zaokrągleniu przez Python, w 17 bajtach.
źródło
56...
,26...
a potem56...
znowu, ale jest tylko jeden sposób na uzyskanie 56, więc należy to uwzględnić tylko raz, prawda?Tłumacz SWI-Prolog
Uwaga: nie można usunąć finału
.
. Tłumacze Prologa zawsze będą szukać ostatecznego terminu na uruchomienie zapytania, więc jeśli będziemy ściśle przestrzegać zasad tego konkursu i pozwolimy sobie na usunięcie okresu, w którym nie będzie on biegał, przeskoczy o linię i zaczeka na dodatkowe polecenia, aż do jednego kończy się kropką.Pierwotne zapytania
__A=__A.
wyjściatrue.
.Dane
_A=__A.
wyjściowe zapytania_A = '$VAR'('__A')
. Podobne modyfikacje (tj. Usunięcie jednego_
lub jednego z dwóchA
) spowodują podobne wyniki.Wreszcie
__A__A.
wyniki zapytania w SWI-Prolog:źródło
Sed, 1 bajt
Jak
sed
wymaga strumienia wejściowego, zaproponuję konwencję, że sam program powinien być dostarczany jako dane wejściowe.Program jest alternatywą
x
, lecz jedynie zmienia się od1
do2
bajtów wyjściu gdy usunięte.źródło
K, 3 bajty
Dane wyjściowe
0
w REPL. Usunięcie pierwszych 2 wyników0 1
, usunięcie wykrzyknika powoduje22
, a usunięcie ostatnich 2 powoduje, że łańcuch znaków różni się między implementacjami K, ale zawsze ma co najmniej 2 znaki (w ok, to(2!)
; zgodnie z danymi @Dennis, Kona2!
).źródło
*
tylko wydruków 2. Usuwanie 2 wydruków(*!)
(funkcja niekompletna) w ok; Nie wiem o innych tłumaczach (np. Kona, k2 itp.), Chociaż uważam, że Kona wydrukowałby*[!;]
lub coś podobnego. Usunąłem gwiazdę, ponieważ wydawało się to najbezpieczniejsze.MATLAB,
97 bajtówJest o 2 bajty dłuższy niż inna odpowiedź MATLAB / Octave, ale mimo to podoba mi się, ponieważ jest nieco bardziej złożony.
'
Operator Matlaba jest złożoną sprzężoną transpozycją. Używając tego na wyimaginowanej liczbie skalarnej, otrzymujeszi' = -i
. Ponieważ liczby urojone można zapisać tak, jak2i
można to zrobić:Usunięcie jednej z postaci spowoduje jedną z poniższych czynności:
źródło
GolfScript, 2 bajty
Ta odpowiedź nie jest konkurencyjna, ale ponieważ jest to fragment kodu, który zainspirował to wyzwanie, i tak chciałem się nią podzielić.
Domyślnie wszystkie programy GolfScript drukują cały stos, a następnie wysuwają wiersz, wykonując
puts
na całym stosie. Sama funkcjaputs
jest zaimplementowana tak, jak{print n print}
w interpretatorze, gdzieprint
jest ona rzeczywiście wbudowana in
jest zmienną, która"\n"
domyślnie przechowuje ciąg .Teraz program GolfScript zawsze wypycha dane wejściowe ze STDIN na stos. W tym przypadku, ponieważ nie ma żadnych danych wejściowych, wypychany jest pusty ciąg. Przypisanie zmiennej
:n
zapisuje ten pusty ciąg znakówn
, tłumiąc niejawne podawanie linii i powodując, że dane wyjściowe są całkowicie puste.Po wyeliminowaniu
n
pozostaje ci niepełne przypisanie zmiennych:
(można by pomyśleć, że to błąd składniowy, ale nie), więc domyślny wysuw wiersza jest drukowany jak zwykle.Po wyeliminowaniu
:
pozostajesz zn
, który przesuwa linię na stosie, więc program drukuje dwa linie.źródło
APL, J i ewentualnie inne warianty, 3 bajty
Wyprowadza
1
w APL.-1
wypisuje¯1
i--
wypisuje następujące w TryAPL :źródło
J, 5 bajtów
Wielkość liczby zespolonej
5 + 12i
w REPL..
J, 9 bajtów
Na podstawie precyzji zmiennoprzecinkowej, odwrotności i odwrotności macierzy.
Wypróbuj online tutaj.
źródło
Mathematica, 3 bajty
źródło
Dyalog APL , 2 bajty
⍴0
zwraca pusty ciąg (długość 0)⍴
zwroty⍴
(długość 1)0
zwroty0
(długość 1)źródło
Szybki (i wiele więcej), 8 bajtów
wyjście (4 znaki):
Po usunięciu n-tego znaku wyjściowego jest:
Istnieje 78 możliwych rozwiązań tego typu w formacie
a^b<c
.Myślę, że celem tego wyzwania powinno być jak najwięcej bajtów, ponieważ im więcej bajtów, tym więcej możliwych bajtów do usunięcia, a zatem trudniejsze.
źródło
MathGolf , 2 bajty
Wypróbuj online!
Wyjaśnienie
Dlaczego to działa?
Zwykłe wyjście to
9
. Jeśli(
zostanie usunięty, wynikiem jest 10. Jeśli♂
zostanie usunięty, program domyślnie wyskakuje ze stosu 0, aby podać(
operatorowi, który wyprowadza-1
.źródło
Clojure, 11 bajtów
Na początku pomyślałem, żeby po prostu zamieścić w REPL odpowiedź na jeden znak, tak jak inne języki, np
Problem polega na tym, że jeśli usuniesz tę postać, REPL nic nie robi po naciśnięciu klawisza Enter. Zamiast tego musiała zostać owinięta funkcją dozwoloną przez reguły pytania. Po wywołaniu tej funkcji zwraca 1. Jeśli usuniesz jedyny znak w funkcji,
funkcja zwraca,
nil
która wypisuje dodatkowe dwa bajty.źródło
1
w tym przypadku byłaby (1 bajt).05AB1E (starsza wersja), 1 bajt
Każdy bajt w 05AB1E (starsza wersja) działałby, z wyjątkiem
[
(nieskończonej pętli).Zobacz tutaj wszystkie możliwe wyjścia dla wszystkich możliwych jednobajtowych programów 05AB1E.
Usunięcie tego pojedynczego bajtu, aby pozostał pusty program, domyślnie wyświetli zawartość pliku info.txt do STDOUT.
Wypróbuj online.
05AB1E , 1 bajt
Wypróbuj online.
Niestety pusty program w nowej wersji 05AB1E domyślnie wyświetla tylko 1-bajtową nową linię ( Wypróbuj online ), więc prawie żaden z 1-bajtowych znaków nie jest możliwy, ponieważ nie będzie musiał nic wypisywać. Jedyny możliwy program, który nic nie wypisuje (a więc także niejawna nowa linia),
?
o ile wiem.źródło
Japt , 2 bajty
Wypróbuj online!
A
jest wstępnie inicjowane 10,É
odejmuje 1, a wynik jest jeden bajt:9
.Usunięcie É powoduje, że program
A
generuje wartość A10
, więc wynik to 2 bajty.Podobnie, usunięcie A skutkuje właśnie tym,
É
co jest interpretowane jako -1, a wyjście jako-1
, więc wynik to 2 bajty.źródło
Runiczne Zaklęcia , 6 (modyfikowalnych) bajtów
Wypróbuj online!
Runic nie ma środowiska REPL i napisanie pełnego programu w celu spełnienia ograniczeń nie jest łatwo wykonalne (co prowadzi do nieprawidłowych programów lub braku danych wyjściowych). Część kodu
11-{{B
działa więc jako funkcja wewnętrzna i tylko tę część można modyfikować.B
Instrukcja jest wystarczająco blisko do wskaźnika funkcji i instrukcji return, że klasyfikacja ta powinna być dopuszczalna (jak to skacze IP do położenia, w kodzie, a także popychanie lokalizację powrotną do stosu, które mogą być dostępne przez późniejszeB
lub wyrzucić) .0
1
:05
-
:11
{
:Error051
B
:120
Ostateczna
\
na końcu pierwszego wiersza stanowi zewnętrzną granicę wokół funkcji wewnętrznej w przypadku, gdy instrukcja return jest usuwany, tak że IP nie wykracza meandrujące całym wszędzie chcąc nie chcąc (a drukowanie nie ma wyjścia).Zauważ, że
Error051
to tylko dowolny ciąg, mógłbym wstawić wszystko, co chciałem, w tę część kodu, a „Błąd” był zabawnym rezultatem posiadania kodu, który wyszukuje współrzędne powrotu i teleportuje IP w dowolne miejsce.źródło