Utwórz wynik dwukrotnie dłuższy niż kod


85

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ę njako dane wejściowe. Jeśli tak, dane wyjściowe muszą być dokładnie n * program lengthbajtami. Możesz założyć, że n zawsze będzie dodatnią liczbą całkowitą. Jeśli nie podano danych wejściowych, ndomyś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 Njest 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


1
W przypadku premii, czy dane wyjściowe muszą być dokładnie n * program lengthbajtami, czy to minimum?
xnor

2
To musi być dokładne
Daniel M.

3
Wygląda na to, że fragment kodu musi zostać zmodyfikowany, aby obsługiwał ujemne wyniki.
El'endia Starman

40
Bonus w wysokości -25 jest w zasadzie obowiązkowy dla niektórych języków, ponieważ pozwala im uzyskać ujemny wynik. W przyszłości sugerowałbym użycie premii procentowej lub po prostu uczynienie premii pytaniem, jeśli naprawdę chcesz uzyskać odpowiedzi. Lub po prostu nie masz bonusu.
xnor

4
W przypadku „nie podano danych wejściowych”, czy zakładamy, że przekazano pusty ciąg? Nie widzę, jak poradziłby sobie użytkownik, który nigdy nie wpisuje danych wejściowych, a program tylko czeka.
xnor

Odpowiedzi:


138

HQ9 + , 2 bajty

QQ

wyjścia

QQQQ

Myślę, że nie jest to tutaj zabronione.


14
Może nie jest to zabronione, ale nie jest zbyt inter ... poczekaj, jak to się stało, że uzyskał osiem głosów pozytywnych?
John Dvorak

58
@JanDvorak Tak jak nie lubię HQ9 +, jest to dla mnie twórcze zastosowanie. To użycie najprawdopodobniej nie było przewidziane podczas tworzenia HQ9 +, co jest więcej niż można powiedzieć o większości innych programów Hq9 +. +1 ode mnie
Digital Trauma

13
Nawet nie wiedziałem, że Q wypisuje „kod źródłowy programu”. Myślałem, że właśnie wydrukowałem Q. Dobra robota w wykrywaniu zasadniczej różnicy!
Timwi,

7
@ LegionMammal978 Technicznie jest to ciągłe wyzwanie wyjściowe, co oznacza, że ​​języki nieprogramowe są dozwolone.
spaghetto

3
Ma 120 głosów. 1200 powtórzeń za wpisanie QQw tłumaczu.
Stan Strum,

95

Szekspir, 768

Tak, Szekspir nie jest zbyt golfistą. Wyprowadza 1536 spacji.

Rosencrantz and Guildenstern: A Series of Tedious Events.

Rosencrantz, a count of extraordinary determination.
Guildenstern, a spacy character.

Act I: The Long Conversation

Scene I: A Tortured Friendship

[Enter Rosencrantz and Guildenstern]

Rosencrantz:
 You are a gentle, noble, valiant, loyal, loving companion.

Guildenstern:
 You are nothing!

Scene II: Asking the Hard Questions

Rosencrantz:
 Speak your mind.

Guildenstern:
 You are as fair as the sum of yourself and a daisy. Are you as
 daring as the sum of a big, bold, fiery, feisty, rough, rowdy,
 ham-fisted, hawk-eyed, broad-shouldered, bright-eyed lad and a
 large, yellow, vicious, hairy, wild, scary, long-tailed,
 sharp-clawed, small-eared lion?

Rosencrantz:
 If not, let us return to scene II.

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:

Ummm.Ajax,1.Puck,2.Act I:I.Scene I:A.[Enter Ajax and Puck]Ajax:You old old old old old cow.Puck:You are zero!Scene II:B.Ajax:Speak thy mind.Puck:You are the sum of you and a red cat.Are you as big as the square of me?Ajax:If not, let us return to scene II.

15
Daję +1, jeśli faktycznie to grasz w golfa.
lirtosiast

1
Co to za czary? Nawet nie wiedziałem, że coś takiego istnieje ...
Malavos

10
woah, grałeś w golfa. Święte raje.
Malavos

2
@Malavos Żartowałem tylko ze sposobu, w jaki źle napisałeś czary, przepraszam - zarówno co, jak i które są prawdopodobnie w porządku
kot

2
Nie, proszę o wybaczenie, jeśli zabrzmiało to jako obraźliwe lub defensywne. Właśnie nawiązałem do Futurama! :) Mówiąc poważnie, nadal jestem zaskoczony tą odpowiedzią. Potrzebujemy więcej na stronie.
Malavos,

69

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:

-- STATE DUMP --
----------------

Wypróbuj tutaj .


13
To jedna z fajniejszych odpowiedzi IMO.
kot


60

CJam, -17 bajtów

r2e|i8,*

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         e# Read a token from STDIN.
 2        e# Push 2.
  e|      e# Logical OR; keep the token if it's not empty, 2 otherwise.
    i     e# Cast to integer.
     8,   e# Push [0 1 2 3 4 5 6 7].
       *  e# Repeat the array the corresponding number of times.

4
Bzdury. Dobra robota.
The_Basset_Hound

1
Jak to jest bajtów ujemnych?
Nick T

3
@NickT 8 bajtów (kod źródłowy) - 25 bajtów (premia).
Dennis

16
Możesz zaoszczędzić kilka milionów kopii, jeśli zabraknie Ci miejsca na dysku.
Robert Fraser

Nie, myślę, że metadane uczynią to pozytywnym
CalculatorFeline

47

Python 2.6, 10

print`-.1`

Drukuje -0.10000000000000001, czyli 20 znaków.

Zauważ, że napis repr wykazuje większą precyzję. print-.1po prostu daje -.1i print.1/3daje 0.0333333333333tylko 13 cyfr dokładności.


5
To już nie działa w Pythonie 2.7 lub 3.1.
Anders Kaseorg

@AndersKaseorg Więc więc repl.it jest źle?
mbomb007

2
@ mbomb007 Najwyraźniej. GitHub sugeruje, że nie jest to jedyna rzecz, w której się myli. Ideone zgadza się z CPython.
Anders Kaseorg,

Ten sam komentarz, co do twojej drugiej odpowiedzi: czy to nie wypisuje końcowego nowego wiersza, dając 21 bajtów wyniku?
Martin Ender

1
Masz na myśli print`+.1`?
mbomb007

46

Ziarno , 10 bajtów

4 56111240

To kompiluje się do programu Befunge (znalezionego przez brutalną siłę)

9k.@

która po uruchomieniu generuje następujące 20 bajtów (testowane w CCBI, zwróć uwagę na spację końcową):

0 0 0 0 0 0 0 0 0 0 

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
  • Stosy Befunge 98 mają na dole nieskończone zera
  • . wyprowadza jako liczbę, po której następuje spacja

18
.... ja .... po prostu .... nie mogę.
Daniel M.

44

R, 3 2 bajty

Kod

!0           # NOT FALSE

Wyjścia

TRUE

Wow, wreszcie R., w końcu.

Wygląda na to, że {}też działa, wydajeNULL

Premia 33 16 bajtów:

Kod

rep(1,number*16)

Wyjścia

# if number is not defined
> rep(1,number*16)                     
> Error: object 'number' not found     # output is 32 (or 2*16) bytes long error

# if number is defined
> number = 3                            
> rep(1,number*16)                     # output is 16*number bytes long
> 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

2
Mam nadzieję, że użycie nazwy „liczba” dla zmiennej nie jest równoważne z „dodaniem niepotrzebnych białych znaków do kodu źródłowego”
Mutador,

26

Matlab, 7 5 bajtów

2 bajty mniej dzięki @flawr!

123;3

Wynik:

wprowadź opis zdjęcia tutaj

Dane wyjściowe zawierają więc 10 bajtów.newline ans = newline newline 3 newline


1
Miejmy nadzieję, że nikt nie ma format compactdomyślnie :)
Sanchises

2
@sanchises :-) Tak, to zależy od ustawień preferencji Matlaba. Ale format loosejest to domyślna preferencja
Luis Mendo

2
Jak o 123;4? Jest trzy bajty krótszy =)
błąd

@flawr Dobry pomysł! Opublikuj to sam!
Luis Mendo

Nie, zbyt wiele inspiracji twoją odpowiedzią =)
flawr

25

JavaScript, 2 bajty!

Rozwiązanie nawet krótsze niż 3 bajty:

!0

Zwraca truepo uruchomieniu.


2
Należy pamiętać, że działa to tylko w środowisku REPL
Cyoce

21

Python 2, 11

print`id`*1

Wydrukuj reprezentację ciągu wbudowanego id, która ma 22 znaki:

<built-in function id>

Ma *1to na celu uzyskanie kodu do 11 znaków. Ty też możesz to zrobić print id;00.

Bardziej nudne alternatywy 11 to:

print'1'*22
print 9**21

print.8/-9j
Bawiłem się

Czy nie wypisują one końca nowej linii, zwiększając liczbę bajtów wyjściowych do 23?
Martin Ender

1
@ MartinBüttner Ta reguła została zredagowana później, ale jej zmiana print id,;1wystarczy, aby stłumić końcowy znak nowej linii. Nie dodaje też spacji końcowej.
xnor

@xnor print 9**21nie działa. Ma 21 znaków. print 9**23działa jednak
Koishore Roy

18

dc, 10-25 = -15

2?A*Ar^1-n

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 9s o wymaganej długości.

  • 2 pchnij 2 na stos, jeśli dane wejściowe są puste
  • ? wypychaj dane wejściowe do stosu
  • Apchnij 10 na stos (dc ma skróty A- Fdla 10-15)
  • * pop dwukrotnie i pomnóż (pomnóż wejście przez 10)
  • A pchnij 10 na stos
  • r odwróć górne dwa elementy stosu
  • ^ wykładnik 10 ^ (10 * wejście)
  • 1- odejmij 1 od góry stosu
  • n drukuj bez nowej linii.

cholera, to takie mądre. I mam szczęście, że tam jest długość kodu :) Ale może powinieneś dodać małe wyjaśnienie dla niewtajemniczonych. I myślę, że newline się liczy, więc prawdopodobnie powinieneś użyć nzamiast p.
daniero

17

TI-Basic, 3 bajty

1ᴇ5

Wydruki 100000.


Właściwie myślę, że nowa linia by się liczyła, więc możesz zrobić tylko 0dla 1 bajtu.
lirtosiast

1
Jak o ᴇ3? I @lirtosiast, ponieważ TI-Basic nie ma nowych linii, jestem sceptyczny.
Jakob,

16

Brainfuck, 14 bajtów

+++++++[....-]

To jest małe ćwiczenie matematyczne. Oznaczmy liczbę +znaków w kodzie przez ai liczbę .znaków przez b.

Kod generuje a*bbajty, z wartościami od ado do 1(są to bajty inne niż ASCII, ale zgodnie ze specyfikacją wydaje się OK). Długość kodu wynosi a+b+3. Więc mamy

a*b = 2 * (a+b+3)

Próbując różnych wartości dla ai b, widzimy, że minimalne dla a+b+3jest osiągane dla

a = 4       or       a = 7
b = 7                b = 4

Doświadczony programista pieprzenia mózgu dostrzeże tę +[[>....]-<<+]opcję.
orthoplex

@orthoplex Kiedy czytam twój komentarz, natychmiast portmanteau'd brainfuck i programista: brainfucker
Poke

15

gs2 , -18 bajtów

CP437 :W↕0!↨.2

Zrzut szesnastkowy: 57 12 30 21 17 2e 32

Wwczytuje liczby ze STDIN do listy. ↕0dodaje 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 ri ido jednego bajta.

Uwaga : Musiałem naprawić błąd w gs2implementacji, 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.


1
Pierwsza odpowiedź GS2, którą widziałem, która nie ma żadnych znaków koloru karty!
Cyoce 30.04.16

14

Perl 5, 16 bajtów - 25 = -9

$_ =$]x($_*2||4)

To dziwne podejście do problemu.

Uruchom z -pargumentem 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 Perla 5.xxxxxx, w zależności od wersji Perla. Bez danych wejściowych drukuje go cztery razy, równa się 8*4lub 32, co jest dwukrotnością liczby bajtów kodu.

Kocham Perla.


Myślę, że to się nie powiedzie przy pustym wejściu. Zgodnie z regułami, jeśli nie podano żadnych danych wejściowych, wielokrotność powinna mieć wartość domyślną 2.
Alex A.

@AlexA. Cholera, tęskniłem za tym. Nowość w kodowaniu golfa. Edytuj przychodzące, ale moja odpowiedź ma teraz wiele znaków, ponieważ nie mam pojęcia, jak to zrobić bardziej twórczo w perlu :(
Codefun64

2
Hej, jeszcze kilka wskazówek, które mogą ci w tym pomóc, domyślnie w skrypcie programu, popi shiftpopracuj nad nimi @ARGV(w tym sub, nad czym pracują @_), abyś mógł zrobić coś takiego, jak $n=pop||2zablokowanie 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ów x, rozważ print 1x20lub coś w tym stylu ... :) Mam nadzieję, że to pomaga!
Dom Hastings,

@DomHastings Man, dzięki! Dzięki twojej pomocy zmniejszyłem go do 2 bajtów :) Dziękuję bardzo za sugestie.
Codefun64

1
Myślę, że można to do tego skrócić print"n"x(21*pop||42). Uruchom w wierszu polecenia za pomocą opcjiperl -e'print"n"x(21*pop||42)' 3 | wc -c
hmatt1

14

Pyth , 10 9 - 25 = -16

-1 przez Dennis

**N9?zvz2

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

T

Wydruki 10. Jest to wbudowana zmienna, która inicjuje się do 10.


Byłoby użyteczne, gdyby .x działał z błędami. Czy jest uzasadnienie, dlaczego tak nie jest?
lirtosiast

2
Domyślam się, Qże Pyth sprawdza ewolucję danych wejściowych przed wykonaniem właściwego kodu. **N9.xvz2działa zgodnie z oczekiwaniami, ale nie jest krótszy niż **N9?zvz2.
Dennis

2
Każda nowa linia jest wliczana do liczby bajtów danych wyjściowych. Twyniki 10i nowa linia. Użyj d, jest to przestrzeń, do której dołączany jest nowy wiersz
Stan Strum

9

Makaron 0.0.2 , 23 znaków

print tobase pow 32 9 2

Drukuje binarnie 32 9 , co okazuje się dogodnie mieć długość 46 znaków (it 1000000000000000000000000000000000000000000000), bez końca nowej linii.


9

JavaScript, 4 bajty

~$ cat main.js
+1/0
~$ nodejs main.js
Infinity

Myślę, że jest to najkrótsze możliwe rozwiązanie JS bez ES6: P


Jaką masz wersję NodeJS? To nie działa z moim.
Dennis

1
Działa to również na konsoli Firefox.
n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨d̷̰̀ĥ̷̳

1
Końcowy znak nowej linii powinien być zawarty w długości wyjściowej.
lirtosiast

Node.js w v0.10.40ogó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).
Nateowami,

4 bajty? Zrób to tak, żeby miał właściwy rozmiar.
Star OS

9

C, 27 25

main(){printf("%50f",0);}

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ą


1
Nie sądzę, że liczy się to jako poprawny program w C, ale main(){printf("%0.XXf",0);}działa.
wefwefa3

2
@Zereges Nie, C ma zasadę „niejawnej deklaracji”, która zwykle pozwala używać rzeczy bez właściwego #include. Kompilator wyśle ​​ostrzeżenie i czasami zawiesza się, ale zwykle działa .
anatolyg

1
@AlbertRenshaw Nie sądzę też, żeby to tutaj działało .
Zereges

1
Zauważ, że 27 * 2! = 38.
mbomb007

1
@Zereges. Ten kod nie wykazuje niezdefiniowanego zachowania. Funkcje „niejawnej deklaracji” i „niejawnego typu zwrotu” są przestarzałe w najnowszych standardach, ale ich użycie jest nadal dozwolone, a wyniki są dobrze zdefiniowane. Istnieją okoliczności, w których korzystanie z takich funkcji powoduje niezdefiniowane zachowanie, ale ten kod ich nie obejmuje.
Piotra,

7

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ć”. sprawia, że ​​wstawia ten znak 4 razy zamiast jednego.


7

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) ...

0000000: 1f 8b 08 00 e3 ce 32 59 00 03 33 e2 02 00 90 af  ......2Y..3.....
0000010: 7c 4c 02 00 00 00                                |L....

Daje to 22 bajty „rozszerzonego ASCII” (np. 8 bitów na znak). Wydaje się, że spełnia to definicję ASCII OP, jeśli przeczytasz komentarze do pytania.
Wossname

Na TIO mam 16, ale na moim komputerze z linuksem mam 34
Stan Strum

@StanStrum, nie wiem co to jest TIO, ale 34 w Linuksie jest dziwne. Być może masz gzip alias, aby używać różnych przełączników do normalnego?
Wossname

Nie wiem, czy tak jest, ale wydaje się to dziwne. Wypróbuję to na niektórych LiveCD, aby zobaczyć, czy nie pomieszałem go z jednym z moich programów @Wossname
Stan Strum

1
Nie jestem tym facetem i nie skorzystam z mojego nowo zdobytego 129 powtórzeń. Zobaczę, czy uda mi się stworzyć wersję, która działa na mojej instalacji Linuksa
Stan Strum,

6

dc, 19-25 = -6

2?19*[1n1-d0<l]dslx

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.


6

C ++, 80 bajtów

#include<iostream>
int main(){int i=0;while(i<20){std::cout<<&i;i++;}return 0;}

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)

0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C

ten sam adres pamięci 8 znaków 20 razy.


Kilka wskazówek do gry w golfa: forpętla jest krótsza niż whilepętla i pozwala upuścić aparat ortodontyczny, jest nieco tańszy w użyciu cstdioi tylko printfsznurku, i nie musisz nic zwracać.
Łukasz

Możesz usunąć swoje podejście do 63 bajtów: #include<iostream> int main(){for(int i=10;--i;)std::cout<<&i;}Ale odpowiedź jest już krótsza z nieco innym podejściem.
movatica

6

CJam, -9

q_,{i}{;2}?G*'X*

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.


@ThomasKwa Whoops. Aktualizacja za sekundę
The_Basset_Hound

Przecinek nie jest konieczny, jednak można całkowicie uniknąć „jeśli”, jeśli zrobisz logiczne ”lub„: q2e|ida ci numer, który chcesz
aditsu

Możesz także użyć S zamiast „X”, jedynym problemem jest to, że wynik nie będzie widoczny, dopóki go nie wybierzesz (cóż, jeśli uruchomisz go offline i przekierujesz do pliku, to nie jest problem)
aditsu

Uh .. nieważne, właśnie widziałem odpowiedź Dennisa: p
aditsu

Nawet z warunkiem możesz to skrócić. Nie musisz obliczać długości, ponieważ pusty ciąg znaków jest już falsey. Nie musisz również usuwać pustego łańcucha ze stosu, ponieważ nie ma on wpływu na wynik. Co także pozwala ci uniknąć nawiasów klamrowych dla gałęzi else. Wpadłem na to zanim spojrzałem na któregokolwiek z odpowiedziami: r_{i}2?SB**.
Reto Koradi

6

> <> , 19 + 2 (flaga -v) - 25 = -4 bajty

l?!2f4+*v
-1o;!?::<

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)


1
Tak, przepraszam, że zrujnowałem twoją odpowiedź (ale jest krótsza niż moja, jeśli dzięki temu poczujesz się lepiej). Edycja: wciśnięty klawisz enter za wcześnie, wpis w obecnym stanie jest niepoprawny zgodnie z regułą „Możesz założyć, że n będzie zawsze dodatnią liczbą całkowitą. Jeśli nie zostanie podane żadne wejście, n musi mieć domyślną wartość 2.” Wydaje mi się również, że może wypisać o jedną za dużo znaków (z mojej liczby to 14, czyli 15, a nie 14). Jeśli mam rację, l0=?2f6+*vjako pierwsza i 1-::0=?;o>druga linia powinna być poprawna.
cole

Hm, nie jestem pewien, co masz na myśli. W żadnym wypadku nie powinien drukować 0. Umieszczenie 2 jako wyjściowego stosu wyjściowego (EDYCJA: rzeczy, których nie mogę wkleić), co najmniej przy użyciu tego licznika znaków, to 28 znaków.
torcado

Rozumiem co teraz mówisz. Zinterpretowałem: „Twój program może opcjonalnie przyjmować liczbę, n, jako dane wejściowe”, co oznacza, że ​​jeśli dane wejściowe to 2. Będę edytować odpowiedź, dzięki! (również mogę zapisać niektóre za pomocą ciągu zamiast liczb)
torcado

Chętnie Ci pomoże, szczególnie jeśli jest to> <>.
cole

2
?!jest zwykle lepszy niż0=?
Sp3000,

6

JavaScript (ES5), 68 bajtów - 25 bonusów = 43

alert(Array(1+(+prompt()||2)).join(document.scripts[0].textContent))

(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 pierwszym scriptelemencie 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.

<!DOCTYPE html>
<html>
  <head>
    <title>Minimalist HTML5 page</title>
    <script>alert(Array(1+(+prompt()||2)).join(document.scripts[0].textContent))</script>
  </head>
</html>

Ten skrypt używa prompti alertponieważ console.lognie 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, Arrayfunkcja po prostu zawinąłaby je w tablicę jednoelementową.

    • +prompt()||2zwraca 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.

    • textContentO Nodeprzypadkach zwraca cały tekst znajdujący się wewnątrz nich i ich potomnych, w tym skrypty.


Zauważ, że jeśli używasz ES6 str.repeati nadal wypisujesz sam kod, obniża on wynik do 26, ale jest to trochę zbyt nudne: P
Domino

Emm, nie wiem skąd pochodzi 26, teraz dostaję 33. Prawdopodobnie powinienem się trochę przespać.
Domino,

Pamiętaj, że niektóre ustawienia przeglądarki mogą uniemożliwić korzystanie z monitu we fragmencie. Być może będziesz musiał go zapisać, aby go uruchomić.
Domino,

6

JavaScript ES6, 33–25 = 8

(a=2)=>Array(a*33).fill(0).join``

Wypróbuj online!


Nie mogę sprawić, by ten kod działał na konsoli. Czy to jest poprawne? „
Nieprzechwycony błąd składni

@Malavos potrzebujesz przeglądarki zgodnej z ES6, takiej jak najnowszy Firefox. Chrome nie obsługuje domyślnych argumentów
afaik

Używam UCBrowser, ale zgadza się! W każdym razie jest oparty na chromie i gekonie. Próbowałem tego w nocy, otrzymałem „0000000000000000000000000000000000000000000000000000000000000000”. Miły! Czy mógłbyś mi wyjaśnić swój kod? Jestem nowicjuszem.
Malavos,

2
@Malavos Zakodowane na stałe 33to tak naprawdę długość kodu. Tworzy nową tablicę o długości, w 33*aktórej aparametr wejściowy ma wartość domyślną 2 według OP, wypełnia ją i zwraca połączony ciąg.
DankMemes,

2
Tworząc tablicę z jednym dodatkowym elementem, możesz wypełnić złączeniem Arrary(1+a*<length>)ijoin`0`
Shaun H

5

Julia, 42 bajty - 25 = 17

print("@"^42((r=readline())>""?int(r):2))

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.


5

Perl, 18–25 = -7

print$=x(<>*9||18)

Specjalna zmienna $=, znana również jako $FORMAT_LINES_PER_PAGE, zaczyna swoje życie jako 60i dlatego musi być powielona tylko o połowę tyle razy, ile potrzeba danych wyjściowych bajtów.


1
Miałem bardzo podobną odpowiedź: print$=x9x(pop||2)miło!
Dom Hastings,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.