Wyzwanie
Napisz kompletny program, który zapisuje na standardowym wyjściu dwa razy więcej bajtów niż długość programu.
Zasady
Program musi zapisać znaki ASCII na standardowym wyjściu.
Zawartość wyniku nie ma znaczenia.
Dane wyjściowe, mierzone w bajtach, muszą być dokładnie dwukrotnie dłuższe od programu, również mierzone w bajtach, chyba że bonus zostanie spełniony.
Każda nowa linia jest wliczana do liczby bajtów danych wyjściowych.
Premia
Twój program może opcjonalnie przyjąć liczbę n
jako dane wejściowe. Jeśli tak, dane wyjściowe muszą być dokładnie n * program length
bajtami. Możesz założyć, że n zawsze będzie dodatnią liczbą całkowitą. Jeśli nie podano danych wejściowych, n
domyślnie musi to być 2.
Jeśli to zrobisz, możesz odjąć 25 bajtów od wyniku.
Najkrótszy program wygrywa.
Ograniczenia
Brak standardowych luk.
Program musi mieć co najmniej 1 bajt.
Bez dodawania niepotrzebnych białych znaków do kodu źródłowego w celu zmiany jego długości. Podobnie komentarze się nie liczą.
O ile nie zrealizujesz bonusu, program nie może przyjmować żadnych danych wejściowych. Jeśli spełnisz premię, jedyną wartością wejściową musi być liczba całkowita.
Najniższy wynik (długość programu w bajtach - bonus) wygrywa.
Najkrótsza odpowiedź dla każdego języka wygrywa dla tego języka .
Liderów
Oto fragment kodu, który pozwala wygenerować zarówno zwykłą tabelę wyników, jak i przegląd zwycięzców według języka.
Aby upewnić się, że twoja odpowiedź się pojawi, zacznij od nagłówka, korzystając z następującego szablonu Markdown:
# Language Name, N bytes
gdzie N
jest rozmiar twojego zgłoszenia. Jeśli poprawić swój wynik, to może zachować stare porachunki w nagłówku, uderzając je przez. Na przykład:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Jeśli chcesz umieścić w nagłówku wiele liczb (np. Ponieważ twój wynik jest sumą dwóch plików lub chcesz osobno wymienić kary za flagi tłumacza), upewnij się, że rzeczywisty wynik jest ostatnią liczbą w nagłówku:
# Perl, 43 + 2 (-p flag) = 45 bytes
Możesz także ustawić nazwę języka jako link, który pojawi się we fragmencie tabeli wyników:
# [><>](http://esolangs.org/wiki/Fish), 121 bytes
źródło
n * program length
bajtami, czy to minimum?Odpowiedzi:
HQ9 + , 2 bajty
wyjścia
Myślę, że nie jest to tutaj zabronione.
źródło
QQ
w tłumaczu.Szekspir, 768
Tak, Szekspir nie jest zbyt golfistą. Wyprowadza 1536 spacji.
Edycja: 256
Okej, właściwie to zagram w golfa. Zauważ, że powyższe nie kompiluje się w żadnej istniejącej implementacji Szekspira, ponieważ napisałem ją starannie z ręcznie (ale jestem gotowy bronić jej poprawności).
Poniżej tłumaczy się na C z jednym ostrzeżeniem w spl-1.2.1 i wyświetla 512 spacji:
źródło
Przypomnijmy, 17 bajtów
16 NOOP. Następnie
!
wywoływany jest debuger i zrzuca pamięć do konsoli. Pamięć jest pusta, ale nagłówek ma 34 bajty:Wypróbuj tutaj .
źródło
Mathematica REPL, 1 bajt
Wydruki
#1
.źródło
CJam, -17 bajtów
Kod źródłowy ma 8 bajtów i kwalifikuje się do bonusu -25 bajtów .
Wypróbuj online w interpretatorze CJam .
Jak to działa
źródło
Python 2.6, 10
Drukuje
-0.10000000000000001
, czyli 20 znaków.Zauważ, że napis repr wykazuje większą precyzję.
print-.1
po prostu daje-.1
iprint.1/3
daje0.0333333333333
tylko 13 cyfr dokładności.źródło
print`+.1`
?Ziarno , 10 bajtów
To kompiluje się do programu Befunge (znalezionego przez brutalną siłę)
która po uruchomieniu generuje następujące 20 bajtów (testowane w CCBI, zwróć uwagę na spację końcową):
Nie znając Befunge 98, musiałem kilka razy dwukrotnie sprawdzić specyfikację tego:
k
wydaje mi się dość zepsuty, wykonując go jeszcze raz, niż zamierzałem, ze względu na przejście IP do powtarzającej się instrukcji.
wyprowadza jako liczbę, po której następuje spacjaźródło
R,
32 bajtyKod
Wyjścia
Wow, wreszcie R., w końcu.
Wygląda na to, że
{}
też działa, wydajeNULL
Premia
3316 bajtów:Kod
Wyjścia
źródło
Matlab,
75 bajtów2 bajty mniej dzięki @flawr!
Wynik:
Dane wyjściowe zawierają więc 10 bajtów.
newline
ans =
newline
newline
3
newline
źródło
format compact
domyślnie :)format loose
jest to domyślna preferencja123;4
? Jest trzy bajty krótszy =)JavaScript, 2 bajty!
Rozwiązanie nawet krótsze niż 3 bajty:
Zwraca
true
po uruchomieniu.źródło
Python 2, 11
Wydrukuj reprezentację ciągu wbudowanego
id
, która ma 22 znaki:Ma
*1
to na celu uzyskanie kodu do 11 znaków. Ty też możesz to zrobićprint id;00
.Bardziej nudne alternatywy 11 to:
źródło
print.8/-9j
print id,;1
wystarczy, aby stłumić końcowy znak nowej linii. Nie dodaje też spacji końcowej.print 9**21
nie działa. Ma 21 znaków.print 9**23
działa jednakdc, 10-25 = -15
Zajmuje pusty wiersz dla „brak danych wejściowych”.
Oblicza 10 ^ (10 * n) - 1, gdzie n jest wejściem, lub 2, jeśli wejście jest puste. Drukuje ciąg
9
s o wymaganej długości.2
pchnij 2 na stos, jeśli dane wejściowe są puste?
wypychaj dane wejściowe do stosuA
pchnij 10 na stos (dc ma skrótyA
-F
dla 10-15)*
pop dwukrotnie i pomnóż (pomnóż wejście przez 10)A
pchnij 10 na stosr
odwróć górne dwa elementy stosu^
wykładnik 10 ^ (10 * wejście)1-
odejmij 1 od góry stosun
drukuj bez nowej linii.źródło
n
zamiastp
.TI-Basic, 3 bajty
Wydruki
100000
.źródło
0
dla 1 bajtu.ᴇ3
? I @lirtosiast, ponieważ TI-Basic nie ma nowych linii, jestem sceptyczny.Brainfuck, 14 bajtów
To jest małe ćwiczenie matematyczne. Oznaczmy liczbę
+
znaków w kodzie przeza
i liczbę.
znaków przezb
.Kod generuje
a*b
bajty, z wartościami oda
do do1
(są to bajty inne niż ASCII, ale zgodnie ze specyfikacją wydaje się OK). Długość kodu wynosia+b+3
. Więc mamyPróbując różnych wartości dla
a
ib
, widzimy, że minimalne dlaa+b+3
jest osiągane dlaźródło
+[[>....]-<<+]
opcję.gs2 , -18 bajtów
CP437 :
W↕0!↨.2
Zrzut szesnastkowy:
57 12 30 21 17 2e 32
W
wczytuje liczby ze STDIN do listy.↕0
dodaje 2 do listy i!
wyodrębnia pierwszy element. Następnie↨.
(lista[0,1,2,3,4,5,6]
) jest powtarzana (2
) tyle razy.Jest to bardzo podobne do Dennisa CJam odpowiedź - GS2 tylko łączy
r
ii
do jednego bajta.Uwaga : Musiałem naprawić błąd w
gs2
implementacji, aby to działało: wcześniej do każdego programu dołączono ukryty znak nowej linii na wyjściu, co było całkowicie niezamierzone. Pojawił się dopiero po tym, jak spróbowałem rozwiązać ten program (język został zaprojektowany dla anarchii golfa, która ignoruje końcowe linie we wszystkich problemach), a teraz tylko poprawiłem, aby opanować, więc nie wahaj się wziąć tej odpowiedzi z odrobiną Sól.źródło
Perl 5, 16 bajtów - 25 = -9
To dziwne podejście do problemu.
Uruchom z
-p
argumentem wiersza poleceń.Poniżej zobaczyłem odpowiedź Perla, która użyła specjalnej zmiennej do wydrukowania większej ilości tekstu - a tym samym skróciła ich liczbę bajtów. Użyłem więc dużo bardziej szczegółowej zmiennej specjalnej. Drukuje 8 znaków z 2-znakową nazwą zmiennej. Tak więc, z liczbą bajtów 16 (wypełnioną jednym białym znakiem, aby uzyskać 16), drukuje
2 * $]
, gdzie$]
jest drukowana wersja Perla5.xxxxxx
, w zależności od wersji Perla. Bez danych wejściowych drukuje go cztery razy, równa się8*4
lub32
, co jest dwukrotnością liczby bajtów kodu.Kocham Perla.
źródło
pop
ishift
popracuj nad nimi@ARGV
(w tymsub
, nad czym pracują@_
), abyś mógł zrobić coś takiego, jak$n=pop||2
zablokowanie pierwszego bloku kodu, i to;}
na końcu , co prawie zawsze może być tylko}
uratowaniem kolejnego. Coś, co może pomóc Ci zaoszczędzić więcej znaków, to operator powtarzania ciągówx
, rozważprint 1x20
lub coś w tym stylu ... :) Mam nadzieję, że to pomaga!print"n"x(21*pop||42)
. Uruchom w wierszu polecenia za pomocą opcjiperl -e'print"n"x(21*pop||42)' 3 | wc -c
Pyth ,
109 - 25 = -16-1 przez Dennis
Drukuje [dane wejściowe] * 9 znaków cudzysłowu lub 2 * 9, jeśli dane wejściowe są puste.
isaacg ma tutaj krótszą odpowiedź
Pyth , 1 bajt
Wydruki
10
. Jest to wbudowana zmienna, która inicjuje się do 10.źródło
Q
że Pyth sprawdza ewolucję danych wejściowych przed wykonaniem właściwego kodu.**N9.xvz2
działa zgodnie z oczekiwaniami, ale nie jest krótszy niż**N9?zvz2
.T
wyniki10
i nowa linia. Użyjd
, jest to przestrzeń, do której dołączany jest nowy wierszMakaron 0.0.2 , 23 znaków
Drukuje binarnie 32 9 , co okazuje się dogodnie mieć długość 46 znaków (it
1000000000000000000000000000000000000000000000
), bez końca nowej linii.źródło
JavaScript, 4 bajty
Myślę, że jest to najkrótsze możliwe rozwiązanie JS bez ES6: P
źródło
v0.10.40
ogóle nic nie drukuje, ponieważ nie ma polecenia drukowania. Czy masz inną wersję Node.js, czy działa to tylko w powłoce, która drukuje ocenę linii? (w takim przypadku nie sądzę, aby ta odpowiedź była poprawna).C,
2725• Dzięki @Titus za strącenie 2 bajtów
A dla mojego niekonkurencyjnego 16-bajtowego rozwiązania w C przejdź tutaj: https://codegolf.stackexchange.com/a/111330/16513
^ Mówię, że nie konkuruje, ponieważ kod błędu może zależeć od twojego kompilatora. Pamiętaj też, że używam GCC w tym rozwiązaniu. Nie jestem też pewien, czy łamie to zasadę 1, czy nie, myślę, że tak, więc poszedłem naprzód i oznaczyłem ją jako niekonkurencyjną
źródło
main(){printf("%0.XXf",0);}
działa.#include
. Kompilator wyśle ostrzeżenie i czasami zawiesza się, ale zwykle działa .V , 2 bajty
To wychodzi
Wypróbuj online!
Wyjaśnienie
To jest naprawdę cholerna odpowiedź i działa poprzez nadużywanie wewnętrznych elementów V. Zasadniczo działa to, że
ÿ
jest to polecenie w V, które sygnalizuje zakończenie programu, a wszelkie oczekujące polecenia muszą zostać zakończone. W przeciwnym razie niektóre domniemane zakończenia nie działałyby, a interpretacja wisiałaby częściej. To polecenie jest automatycznie wysyłane kilka razy na koniec programu i przez większość czasu nie ma wpływu na wynik.é
to polecenie, które wstawia pojedynczy znak. Robi to jednak, chwytając nieprzetworzony bajt, więc nie interpretuje goÿ
jako „koniec”, interpretuje to jako „to znak, który należy wstawić”.4é
sprawia, że wstawia ten znak 4 razy zamiast jednego.źródło
bash, 11 bajtów
Oto przyjemnie ironiczne użycie narzędzia do kompresji danych :) ...
gzip -f<<<2
Oto zrzut heksowy danych wyjściowych (22 bajty) ...
źródło
dc, 19-25 = -6
Pobiera liczbę (2 jest wypychany na stos jako kopię zapasową) i mnoży ją przez 19. Drukuje
1
(bez nowej linii) i zmniejsza liczbę. Pętle, gdy liczba jest większa niż 0.źródło
C ++, 80 bajtów
zwróć uwagę, że znak nowej linii to dwa znaki. (jeśli nie chcesz, aby tak było, zmień i <20 na i <= 19, aby wrócić do tej samej liczby bajtów).
Przykładowe wyjście (zmieni się za każdym razem)
ten sam adres pamięci 8 znaków 20 razy.
źródło
for
pętla jest krótsza niżwhile
pętla i pozwala upuścić aparat ortodontyczny, jest nieco tańszy w użyciucstdio
i tylkoprintf
sznurku, i nie musisz nic zwracać.#include<iostream> int main(){for(int i=10;--i;)std::cout<<&i;}
Ale odpowiedź jest już krótsza z nieco innym podejściem.CJam, -9
Wyjaśnienie
q_,
Odczytuje całe dane wejściowe i przesuwa je, a następnie przesuwa długość.
{i}{;2}?
Jeśli długość wejścia jest większa od zera, przekonwertuj go na liczbę całkowitą. W przeciwnym razie pop wejdź i wciśnij 2.
G*
Naciska 16 (długość programu), a następnie mnoży przez 2, jeśli nie ma danych wejściowych, lub przez dane wejściowe.
'X*
Przesuwa X i mnoży go przez górę stosu.
źródło
q2e|i
da ci numer, który chceszr_{i}2?SB**
.> <> , 19 + 2 (flaga -v) - 25 = -4 bajty
przetestuj to tutaj!
Dzięki Cole i Sp3000
Najpierw sprawdza długość stosu, jeśli wynosi 0, umieść 2 na stosie. Mnoży to przez 21 (długość kodu), a następnie wyświetla reprezentację Unicode tej liczby i zmniejsza ją o 1, zapętla do 0. (będziesz musiał sprawdzić wynik, aby zobaczyć znaki, ponieważ przeglądarka ich nie wyświetli)
źródło
l0=?2f6+*v
jako pierwsza i1-::0=?;o>
druga linia powinna być poprawna.?!
jest zwykle lepszy niż0=?
JavaScript (ES5), 68 bajtów - 25 bonusów = 43
(jeśli Twoja przeglądarka nie zezwala na uruchomienie fragmentu ze względów bezpieczeństwa, wypróbuj ten skrzypek http://jsfiddle.net/thePivottt/c3v20c9g/ )
Ten skrypt działa tylko w przeglądarce po co najmniej DOM3 (z
Node.textContent
) i ECMAScript 5 (lub może starszej wersji). Starałem się, aby był jak najbardziej zgodny i zgodny z normami. Zakłada również, że skrypt znajduje się w pierwszymscript
elemencie dokumentu.W rzeczywistości łączy wiele kopii samego skryptu, co jest dość niesamowite . Zauważ, że narzędzie fragmentu w SE umieszcza dodatkowe spacje wokół skryptu. Możemy zignorować ten biały znak,
.trim()
ale nie uważam tego za konieczne, biorąc pod uwagę, że program jest idealny bez ingerencji SE. Po prostu zapisz ten plik HTML5, jeśli chcesz, aby działał idealnie.Ten skrypt używa
prompt
ialert
ponieważconsole.log
nie jest częścią żadnego standardu, nawet jeśli używa go większość współczesnych przeglądarek. Jeśli liczba przekazanych powtórzeń nie jest prawidłową liczbą lub jest pusta, domyślnie jest to 2. Jeśli wejście jest liczbą dziesiętną, program ulega awarii z powodu nieprawidłowej długości tablicy.Kod wykorzystuje kilka interesujących funkcji JavaScript:
Array(1+(+prompt()||2))
Array(INT)
tworzy tablicę komórek INT.+prompt()
przyjmuje dane wejściowe i przekształca je w liczbę. Gdybyśmy przekazali dane wejściowe jako ciąg,Array
funkcja po prostu zawinąłaby je w tablicę jednoelementową.+prompt()||2
zwraca dane wejściowe, jeśli są prawdziwe , w przeciwnym razie zwraca 2.Cały ten kod tworzy tablicę N pustych elementów, gdzie N jest o jeden większy niż liczba żądanych powtórzeń.
.join(document.scripts[0].textContent)
Metoda tablicowa
join(STRING)
tworzy ciąg łącząc wszystkie komórki, umieszczając podany STRING między wartościami. W tym programie jest N + 1 pustych elementów w tablicy lub dokładnie N między punktami. Wynik będzie ciągiem zawierającym N razy podany STRING.document.scripts[o]
jest pierwszym<script>
elementem dokumentu.textContent
ONode
przypadkach zwraca cały tekst znajdujący się wewnątrz nich i ich potomnych, w tym skrypty.źródło
str.repeat
i nadal wypisujesz sam kod, obniża on wynik do 26, ale jest to trochę zbyt nudne: PJavaScript ES6, 33–25 = 8
Wypróbuj online!
źródło
33
to tak naprawdę długość kodu. Tworzy nową tablicę o długości, w33*a
któreja
parametr wejściowy ma wartość domyślną 2 według OP, wypełnia ją i zwraca połączony ciąg.Arrary(1+a*<length>)
ijoin`0`
Julia, 42 bajty - 25 = 17
Odczytuje wiersz ze STDIN za pomocą
readline()
. Jeśli jest pusty, tzn. Nie podano danych wejściowych, wówczas n jest definiowane jako dane wejściowe przekonwertowane na liczbę całkowitą. W przeciwnym razie n wynosi 2. Następnie wydrukować 42 n@
s na standardowe wyjście.źródło
Perl, 18–25 = -7
Specjalna zmienna
$=
, znana również jako$FORMAT_LINES_PER_PAGE
, zaczyna swoje życie jako60
i dlatego musi być powielona tylko o połowę tyle razy, ile potrzeba danych wyjściowych bajtów.źródło
print$=x9x(pop||2)
miło!