Dane wyjściowe mają taką samą długość jak kod


97

W tym wyzwaniu powinieneś napisać program lub funkcję, która nie pobiera danych wejściowych i wypisuje lub zwraca łańcuch o tej samej liczbie bajtów, co sam program. Jest kilka zasad:

  • Możesz wysyłać tylko bajty z drukowanego zakresu ASCII (0x20 do 0x7E włącznie) lub znaki nowej linii (0x0A lub 0x0D).
  • Twój kod nie może być quine, więc kod i wynik muszą różnić się co najmniej jednym bajtem.
  • Twój kod musi mieć co najmniej jeden bajt.
  • Jeśli dane wyjściowe zawierają końcowe znaki nowej linii, są one częścią liczby bajtów.
  • Jeśli kod wymaga niestandardowych flag wiersza polecenia, policz je jak zwykle (tj. Dodając różnicę do standardowego wywołania implementacji twojego języka do liczby bajtów), a długość wyjściowa musi być zgodna z wynikiem twojego rozwiązania. Np. Jeśli twój program jest abi wymaga niestandardowej flagi -n(założymy, że nie można go połączyć ze standardowymi flagami, więc są to 3 bajty), powinieneś wyprowadzić łącznie 5 bajtów.
  • Wynik nie zawsze musi być taki sam, o ile można wykazać, że każde możliwe wyjście spełnia powyższe wymagania.
  • Zwykłe zasady dotyczące quine nie mają zastosowania. Możesz przeczytać kod źródłowy lub jego rozmiar, ale wątpię, aby był on krótszy niż kodowanie na stałe w większości języków.

Możesz napisać program lub funkcję i użyć dowolnej standardowej metody dostarczania danych wyjściowych. Pamiętaj, że jeśli wydrukujesz wynik, możesz wydrukować go na standardowym wyjściu lub standardowym strumieniu błędów, ale tylko jeden z nich się liczy.

Możesz używać dowolnego języka programowania , ale pamiętaj, że te luki są domyślnie zabronione.

To jest , więc wygrywa najkrótsza ważna odpowiedź - mierzona w bajtach .

Tabela liderów



18
„Twój kod nie może być quine”, ale ... ale ... jest oznaczony quine
Okx

4
@Okx Ponieważ jest to uogólniony quine, tzn. Wymagane wyjście zależy od kodu źródłowego.
Martin Ender

4
@MartinEnder Prawdopodobnie powinieneś zabronić wyjścia przez kod wyjścia, który jest domyślny. Jeśli na to zezwolisz, prawie każdy bajtowy program w prawie każdym języku jest dozwolony. Jeden użytkownik już to zrobił
Sriotchilism O'Zaic

2
Wyjście @WheatWizard według kodu wyjścia nie jest łańcuchem, więc nie ma tutaj zastosowania.
Martin Ender

Odpowiedzi:


204

C (nowoczesny Linux), 19 bajtów

main(){puts('s');}

Po skompilowaniu i uruchomieniu zostanie wydrukowane:

Segmentation fault

20
To jest genialne: D
Beta Decay

4
jest to bardziej jak „C + język angielski unix / posix OS;)”
Florian Castellane

5
Myślę, że lepiej byłoby napisać „C, nowoczesny Linux” niż tylko „C”: pod Windows komunikat o błędzie jest inny, aw dawnych czasach programy Linux były nawet kompilowane w taki sposób, że adres 0x73 ('s') był czytelny więc nie powstał żaden wyjątek.
Martin Rosenau

9
Dołączyłem do witryny, aby głosować na tę odpowiedź.
Nitish

7
Jakkolwiek imponujące jest to, nie tak naprawdę program C drukuje dane wyjściowe, ale powłoka, w której jest uruchomiony.
Dennis

80

Excel, 11 bajtów

Norweska wersja językowa:

=SMÅ(13^9)

Wersja angielska (12 bajtów):

=LOWER(17^9)

Generuje liczbę n-cyfrową i konwertuje na tekst, konwertując na małe litery.


106
Daje to zupełnie nowe znaczenie „wybieraniu odpowiedniego języka do pracy”.
Martin Ender

4
To świetny pomysł. Byłoby to krótsze, =9^7&""co generuje 7-cyfrową liczbę w dowolnym języku i ma tylko 7 bajtów.
OpiesDad

@OpiesDad Ładne rozwiązanie, myślę, że powinieneś opublikować to jako odpowiedź, więc mogę głosować.
pajonk

4
@MartinEnder Bawi mnie to, że twoja spekulacja / potencjalny żart jest bardziej pozytywnie oceniany niż ta odpowiedź (choć jest blisko).
HyperNeutrino

55

Labirynt , 4 bajty

!!>@

Wypróbuj online!

Wydruki 0000

Wyjaśnienie

!   Print an implicit 0 from the stack.
!   Print an implicit 0 from the stack.
>   Rotate the source code right by one cell, so the code now becomes

    @!!>

    The IP is moved along, so it's now at the end of the line, which is 
    a dead end. So the IP turns around and starts moving left.
!   Print an implicit 0 from the stack.
!   Print an implicit 0 from the stack.
@   Terminate the program.

6
To jest zbyt sprytne. Miej +1 w domu!
caird coinheringaahing


40

Siatkówka , 2 bajty

no

Wypróbuj online!

Wydruki 0i podawanie linii.

Istnieje wiele rozwiązań 2-bajtowych, ale uważam, że jest to optymalne. Siatkówka domyślnie zawsze drukuje końcowy znak nowej linii, a pozbycie się go zajmuje zbyt wiele bajtów. Musielibyśmy więc znaleźć 1-bajtowy program, który pozostawia puste dane wejściowe bez zmian. Uważam, że jedynym programem, który to robi, jest program zawierający pojedynczy kanał, który jest zatem równy wyjściowi i dlatego nie jest dozwolony przez wyzwanie.

Następną najprostszą rzeczą jest życie z wyświetlaniem przez Retinę pojedynczej cyfry (liczba dopasowań wyrażenia regularnego względem pustego wejścia), i możemy to zrobić przy wielu błędnych (lub dopasowanych) 2-bajtowych wzorach.


27
+1 Za kod informujący, żebym go nie uruchamiał: P
Christopher

33

Mathematica, 2 bajty

4!

Factorial

24


1
Gah! zbyt sprytny.
tuskiomi

2
pobili mnie do tego! +1. ( Myślę, że powinieneś wspomnieć, że jest to wersja Mathematica w REPL).
Greg Martin

Jeśli jest to rozsądna odpowiedź, czy odpowiedź „1” również nie byłaby rozsądną odpowiedzią? (Umieszczenie „1” w REPL Mathematiki też zwróci „1” ...)
Mark Segal

3
@MarkSegal To naruszałoby zasadę braku quine.
AlexR

6
Reguły: ... „... kod i wynik muszą różnić się co najmniej jednym bajtem”
J42161217

29

C, 20 bajtów

f(){printf("%20d");}

Zwraca pewną liczbę, wypełnioną spacjami do długości 20. (Jaka liczba? Cokolwiek stanie się potem w pamięci.)

Niektóre próbki działają w moim systemie:

llama@llama:...code/c/ppcg121056samelen$ ./a.out 
           -666605944
llama@llama:...code/c/ppcg121056samelen$ ./a.out 
          -1391039592
llama@llama:...code/c/ppcg121056samelen$ ./a.out 
           1727404696
llama@llama:...code/c/ppcg121056samelen$ ./a.out 
             10717352
llama@llama:...code/c/ppcg121056samelen$ ./a.out 
           1485936232

Szkoda, że ​​dane wyjściowe nie mogą być dowolnymi bajtami, ponieważ pozwoliłoby to na rozwiązanie 19-bajtowe:

f(){write(1,f,19);}

który wyprowadza 19 bajtów śmieci, zaczynając od fadresu.


Cieszę się, że widzę odpowiedź, która korzysta z reguły zmiennej wydajności. :)
Martin Ender

Czy to nie może być awaria?
Daniel

Gdzie są linki TIO?
CalculatorFeline

@Daniel Nie, wydrukowany numer będzie pochodził z poprzedniej zawartości %esirejestru.
Klamka

8
@Doorknob, ale nadal jest to niezdefiniowane zachowanie, dlatego bardziej sadystyczny kompilator może zrobić tutaj coś zupełnie innego
Sarge Borsch

29

Bash w systemie Linux, 6

uname

(po którym następuje nowa linia)

Wyjścia, Linuxpo których następuje nowa linia.


2
Technicznie rzecz biorąc, unamenie jest wbudowany w bash - to osobny plik wykonywalny
Jason Musgrove


@GammaFunction Gdzie postrzegasz unamewbudowane bash? Każda dystrybucja, na którą mogę teraz włożyć ręce, to osobny plik binarny, w tym TIO . I odwrotnie, jak pokazuje linkowana odpowiedź, umaskjest wbudowany w większość / wszystkie powłoki.
Digital Trauma

I nie patrz unamejako wbudowanego polecenia. Kiedy powiedziałem „-1, a właściwie wbudowane”, miałem na myśli „Ta odpowiedź używa umaskdla -1 bajtów i umaskfaktycznie jest wbudowana”.
GammaFunction

@ GammaFunction Przepraszam - źle zrozumiałem znaczenie „-1” w twoim komentarzu - jestem przyzwyczajony do tych oznaczających głosowanie negatywne i komentarz wyjaśniający dlaczego.
Cyfrowa trauma

27

JavaScript ES6, 9 bajtów

Używanie ciągów szablonów

_=>`${_}`

f=

_=>`${_}`

console.log(f());
console.log(typeof f());


Czy jest undefineduważany za ciąg?
Kudłaty

3
@Shaggy Zobacz edycję. Używam interpolacji ciągów
Weedoze

Wow, to mój drugi post na PPCG i 14 głosów pozytywnych! Dzięki
Weedoze

1
Dlaczego zwykła serwatka może być trudna? (_=>_+'').
GOTO 0

1
@ GOTO0 Och, okej, trzymaj nawias. To kolejna opcja. Ja osobiście wolę mój hehe
Weedoze

24

Schemat piramidy , 74 43 42 bajtów

Zaoszczędzono 31 bajtów dzięki Khuldraeseth na'Barya! Oszczędność 1 bajtu dzięki przeprojektowanemu rozwiązaniu JoKing!

  ^
 /^\
^---^
-^ ^-
 -^-
 /2\
/ 8 \
-----

Wypróbuj online! Zwraca 41-cyfrowy numer 28^28 = 33145523113253374862572728253364605812736, a po nim końcowy znak nowej linii.


Stara wersja

  ^
 / \
/out\
-----^
    /^\
   ^---^
  /1\ /9\
 /606\---
/51015\
-------

Wypróbuj online!

Wyjścia 71277303925397560663333806233294794013421332605135474842607729452115234375= 160651015 ** 9lub około 10 74 .


6
Hej, próbujesz sprzedać swój język? Jeśli tak, jesteś aresztowany. - The Cops
NoOneIsHere

2
@NoOneIsHere ułaskawienie?
Conor O'Brien

3
Niestety, nazywa się to Schematem piramidy, co jest również nazwą pewnego rodzaju oszustwa.
NoOneIsHere

1
ohhhhhhhhhhh rofl
Conor O'Brien

1
Wyjściowe wyjście prowadzi do 43 bajtów .
Khuldraeseth na'Barya


23

Python 2 , 9 bajtów

print 1e5

Wyświetlany wynik zawiera końcowy znak nowej linii.

Wypróbuj online!


Czy końcowe znaki nowego wiersza liczą się jako znak, jeśli chodzi o wynik? W przeciwnym razie drukuje osiem bajtów.
OldBunny2800

@ OldBunny2800 Tak, wyzwanie mówi, że jeśli dane wyjściowe zawierają końcowe znaki nowej linii, są one częścią liczby bajtów . W każdym razie wyjaśnię to w mojej odpowiedzi
Luis Mendo

18

pieprzenie mózgu , 25 bajtów

--[-->+<]+++++[->-.....<]

Wypróbuj online! Uwaga: Wymaga implementacji z 8-bitowymi niepodpisanymi komórkami

Wynik:

~~~~~}}}}}|||||{{{{{zzzzz

Wyjaśnienie

--[         254
 -->+<]      /2 = 127 into the second cell
+++++[      Five times
 ->-.....<]  Print the second cell - 1 five times

4
Istnieje wiele odmian BF, takich jak 8-bit-cell, infite tape. lub ograniczona taśma i nieskończone komórki. Jestem prawie pewien, że twój jest 8-bitowym modelem bez znaku, ale myślę, że dobrze by było, gdybyś uwzględnił to w swojej odpowiedzi.
Roman Gräf

@ RomanGräf Dobra uwaga! Zazwyczaj dołączam te informacje, jeśli wymagana jest niestandardowa implementacja. Ta odpowiedź powinna działać na dowolnej standardowej implementacji (8-bitowe niepodpisane komórki, dowolna taśma), ale dodam notatkę, aby wyjaśnić.
Zack C.

Czy nie możesz mieć 1-bajtowego programu, .który drukuje NULLznak, który nie jest drukowany ?
Graviton

@Graviton To naruszałoby pierwszą zasadę tego wyzwania. Jest to jednak prawidłowe rozwiązanie w pochodnej BF, która domyślnie przyjmuje wartość do wydrukowania (patrz: odpowiedź na mój mózg ).
Zack C.


16

C (Ideone), 14 bajtów

f(){warn(0);}

W Ideone , który nazywa swój plik wykonywalny prog, wyświetla następujące polecenie z końcowym znakiem nowej linii.

prog: Success

C (GCC), 15 bajtów

f(){warn(00);}

Ponieważ GCC zapisuje plik wykonywalny o nazwie a.outdomyślnie (w przypadku braku dodatkowych flag, które kosztowałyby bajty), powoduje to wyświetlenie następującego ciągu z końcowym znakiem nowej linii.

a.out: Success

7
@MDXF Specyfikacja mówi o programie lub funkcji, więc przesłanie funkcji jest całkowicie poprawne. Ponieważ nazwa pliku nie jest tutaj wybrana przez użytkownika (zarówno Ideone, jak i gcc mają wartości domyślne), myślę, że jest w porządku (osobista opinia).
Dennis

15

C (gcc) , 18 17 bajtów

f(){puts('@C');}

Zauważ, że istnieje bajt STX ( 0x02 ) między @a C.

Wypróbuj online!

Ruchliwość

Zostało to przetestowane z gcc 6.3.1 i clang 3.9.1 na Fedorze 25, gcc 4.8.4 na Ubuntu 14.04.4 i gcc 4.8.3 na openSUSE 13.2, gdzie wypisuje następujące dane wyjściowe.

inux-x86-64.so.2

Oczekuję, że spowoduje to wygenerowanie tego samego wyniku dla wszystkich wersji gcc, o ile kompiluje się do pliku wykonywalnego następującego typu.

ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2

Różne platformy będą wymagały innego adresu pamięci i być może innej kolejności bajtów w wieloznakowej stałej znakowej.

Na przykład, zastępując @\2Cz @\2\4nadrukami exec/ld-elf.so.1i nowej linii FreeBSD 11 z brzękiem 3.8.0.

Weryfikacja offline

$ printf "%b\n" "f(){puts('@\2C');}main(){f();}" > quine.c
$ gcc -w -o quine quine.c
$ ./quine
inux-x86-64.so.2
$ ./quine | wc -c
17

Jak to działa

Domyślnie ld używa 0x400000 jako adresu bazowego segmentu tekstowego, co oznacza, że ​​możemy znaleźć zawartość ELF zaczynając od adresu pamięci 0x400000 .

Pierwsze 640 bajtów ELF jest w dużej mierze niezależnych od rzeczywistego kodu źródłowego. Na przykład jeśli po deklaracji f następuje main(){f();}i nic więcej, wyglądają one następująco.

00000000: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00  .ELF............
00000010: 02 00 3e 00 01 00 00 00 00 04 40 00 00 00 00 00  ..>.......@.....
00000020: 40 00 00 00 00 00 00 00 e8 19 00 00 00 00 00 00  @...............
00000030: 00 00 00 00 40 00 38 00 09 00 40 00 1e 00 1b 00  ....@.8...@.....
00000040: 06 00 00 00 05 00 00 00 40 00 00 00 00 00 00 00  ........@.......
00000050: 40 00 40 00 00 00 00 00 40 00 40 00 00 00 00 00  @.@.....@.@.....
00000060: f8 01 00 00 00 00 00 00 f8 01 00 00 00 00 00 00  ................
00000070: 08 00 00 00 00 00 00 00 03 00 00 00 04 00 00 00  ................
00000080: 38 02 00 00 00 00 00 00 38 02 40 00 00 00 00 00  8.......8.@.....
00000090: 38 02 40 00 00 00 00 00 1c 00 00 00 00 00 00 00  8.@.............
000000a0: 1c 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00  ................
000000b0: 01 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00  ................
000000c0: 00 00 40 00 00 00 00 00 00 00 40 00 00 00 00 00  ..@.......@.....
000000d0: 04 07 00 00 00 00 00 00 04 07 00 00 00 00 00 00  ................
000000e0: 00 00 20 00 00 00 00 00 01 00 00 00 06 00 00 00  .. .............
000000f0: 08 0e 00 00 00 00 00 00 08 0e 60 00 00 00 00 00  ..........`.....
00000100: 08 0e 60 00 00 00 00 00 1c 02 00 00 00 00 00 00  ..`.............
00000110: 20 02 00 00 00 00 00 00 00 00 20 00 00 00 00 00   ......... .....
00000120: 02 00 00 00 06 00 00 00 20 0e 00 00 00 00 00 00  ........ .......
00000130: 20 0e 60 00 00 00 00 00 20 0e 60 00 00 00 00 00   .`..... .`.....
00000140: d0 01 00 00 00 00 00 00 d0 01 00 00 00 00 00 00  ................
00000150: 08 00 00 00 00 00 00 00 04 00 00 00 04 00 00 00  ................
00000160: 54 02 00 00 00 00 00 00 54 02 40 00 00 00 00 00  T.......T.@.....
00000170: 54 02 40 00 00 00 00 00 44 00 00 00 00 00 00 00  T.@.....D.......
00000180: 44 00 00 00 00 00 00 00 04 00 00 00 00 00 00 00  D...............
00000190: 50 e5 74 64 04 00 00 00 b0 05 00 00 00 00 00 00  P.td............
000001a0: b0 05 40 00 00 00 00 00 b0 05 40 00 00 00 00 00  ..@.......@.....
000001b0: 3c 00 00 00 00 00 00 00 3c 00 00 00 00 00 00 00  <.......<.......
000001c0: 04 00 00 00 00 00 00 00 51 e5 74 64 06 00 00 00  ........Q.td....
000001d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
000001e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
000001f0: 00 00 00 00 00 00 00 00 10 00 00 00 00 00 00 00  ................
00000200: 52 e5 74 64 04 00 00 00 08 0e 00 00 00 00 00 00  R.td............
00000210: 08 0e 60 00 00 00 00 00 08 0e 60 00 00 00 00 00  ..`.......`.....
00000220: f8 01 00 00 00 00 00 00 f8 01 00 00 00 00 00 00  ................
00000230: 01 00 00 00 00 00 00 00 2f 6c 69 62 36 34 2f 6c  ......../lib64/l
00000240: 64 2d 6c 69 6e 75 78 2d 78 38 36 2d 36 34 2e 73  d-linux-x86-64.s
00000250: 6f 2e 32 00 04 00 00 00 10 00 00 00 01 00 00 00  o.2.............
00000260: 47 4e 55 00 00 00 00 00 02 00 00 00 06 00 00 00  GNU.............
00000270: 20 00 00 00 04 00 00 00 14 00 00 00 03 00 00 00   ...............

Użycie np. main(int c, char**v){f();}Zamiast tego zmienia niektóre bajty, ale nie przesunięcie łańcucha /lib64/ld-linux-x86-64.so.2, którego użyjemy do wytworzenia wyniku.

Przesunięcie tego ciągu wynosi 0x238 i ma długość 27 bajtów. Chcemy wydrukować tylko 17 bajtów (a jeśli ostatni użyjemy puts, będzie to nowy wiersz ), więc dodajemy 11 do offsetu, aby otrzymać 0x243 , offset of inux-x86-64.so.2. Dodanie 0x400000 i 0x243 daje 0x400243 , lokalizację pamięci inux-x86-64.so.2.

Aby uzyskać ten adres pamięci, możemy użyć wieloznakowych stałych znakowych, które wykazują zachowanie zdefiniowane w implementacji. 0x400243 to (64) (2) (67) w podstawie 256, a wieloznakowe stałe znaków gcc używają kolejności bajtów big-endian, więc '@\2C'zwraca adres pamięci żądanego ciągu.

Na koniec putswypisuje żądło (zakończone zerem) w tym miejscu pamięci i końcowym nowym wierszu, tworząc 17 bajtów wyniku.


To jest magia ... czy to zakłada kolejność bajtów skompilowanego zestawu czy coś?
Patrick Roberts

Dane wyjściowe w moim systemie (Linux z GCC 6.3.1): Upodczas kompilacji -Df=main. Upodczas kompilacji z main(){f();}.
MD XF

@PatrickRoberts W tym momencie nie jestem do końca pewien, jakie są założenia. Ponieważ zagląda do złożonego pliku ELF, zależy to w dużej mierze od wszystkiego, co kompilator pisze przed właściwym kodem.
Dennis

@ MDXF Znaleziono krótszy sposób uzyskania odpowiedniego adresu pamięci. Działa teraz na moim Ubuntu 14.04 VPS, ale ymmv.
Dennis

@Dennis Działa dobrze teraz (do cholery). Nagroda jest twoja, jeśli do końca tygodnia nikt nie znajdzie krótszego rozwiązania.
MD XF

13

Samomodyfikujący Brainfuck , 5 bajtów

<[.<]

Wypróbuj online!

Wynik:

]<.[<

Wyjaśnienie:

Bardzo proste, drukuje źródło w odwrotnej kolejności. W SMBF zawartość programu jest przechowywana na taśmie po lewej stronie początkowej pozycji wskaźnika. Przesunięcie w lewo i wydruk spowoduje wyświetlenie kodu źródłowego wstecz.

Ponieważ w tym wyzwaniu dozwolone jest czytanie źródła, zdecydowanie powinno to być zgodne z regułami.


13

Podstawowy kalkulator arytmetyczny , 2 bajty

1=

odbitki 1.lub:

    |
    |
    |  .

na tych głupich siedmiosegmentowych wyświetlaczach.

Aby odtworzyć, wybierz dowolny losowy kalkulator; wszyscy mają jakoś zainstalowany ten język programowania.


1
Czy dotyczy to wszystkich kalkulatorów? Jestem pewien, że stale pokazują kropkę dziesiętną
rozpad bety

Czy to nie jest 1.zamiast 1x? Jest to również quine, które jest niedozwolone przez reguły.
Erik the Outgolfer

Nie, 1=pomyliłem się. Miałem na myśli 1xniż domniemane równe, ale zapomniałem, że =to jest guzik.
OldBunny2800

Wyprowadza tylko 1na moim TI-36 i TI-84 CE. Czy nie liczą się one jako „podstawowe” kalkulatory?
Benjamin Urquhart

Nie, TI 84 nie jest kalkulatorem arytmetycznym, to kalkulator graficzny. Nie wiem o 36, ale jestem prawie pewien, że to kalkulator naukowy. Ta odpowiedź dotyczy kalkulatorów czterofunkcyjnych.
OldBunny2800


12

Brachylog , 1 bajt

w

Wypróbuj online!

Wyjaśnienie

wjest wbudowanym „zapisem”. Tutaj zapisze dane wejściowe. Ponieważ Input jest zmienną wolną, wprzed wydrukowaniem oznaczy ją jako liczbę całkowitą. Pierwsza liczba całkowita, którą próbuje, to 0.


Here, it will write the Input.Czy „wejście” to sam program? Czy nie liczy się to jako czytanie źródła, które domyślnie oszukuje w quine?
MD XF

4
@MDXF „Zwykłe zasady dotyczące quine nie obowiązują”
Rob Watts

3
@MDXF Dane wejściowe to specjalna zmienna Brachylog, którą można ustawić podczas wywoływania programu Brachylog. Przechodzi do części wejściowej TryItOnline. Tutaj nie ustawiamy niczego na Input, więc jest to zmienna. To nie jest program.
Fatalize

10

Java (OpenJDK 8) , 11 bajtów

o->1e8-1+""

Wypróbuj online!

Wynik:

9.9999999E7

Tylko odrobinę bardziej skomplikowany niż oczywistej odpowiedzi ()->"".format("%23s",0).

Oszczędza

  • 18 -> 16 bajtów: Korzystniejsze połączenie zaokrąglania i mocy 10, dzięki PunPun1000
  • 16 -> 13 bajtów: lepsza formuła, dzięki JollyJoker
  • 13 -> 11 bajtów: ulepszona formuła, dzięki Kevin Cruijssen

2
()->1E10-1+"", "9.999999999E9" (13)oszczędza jeszcze trzy bajty
JollyJoker

1
Możesz zapisać 1 bajt, zmieniając 1e10na 1e9lub 2 bajty, używając pustego wejścia zamiast() tego: o->1e8-1+""(wyjścia 9.9999999E7; długość i liczba bajtów 11 ).
Kevin Cruijssen

9

05AB1E , 1 bajt

õ

Wyprowadza jedną nową linię. õwypycha pusty ciąg i jest niejawnie wyprowadzany z nową linią.

Wypróbuj online!

Niektóre inne 2-bajtowe rozwiązania, dla twojej przyjemności oglądania (dane wyjściowe są w nawiasach, a wszystkie dane wyjściowe mają końcowy znak nowej linii):

X, (1)
Y, (2)
¾, (0)
¼, (1)
¶, (newline)
ð, (space)
Î, (0)

Istnieją jednak znacznie więcej 2-bajtowych rozwiązań.


„która jest przyjętą metodą wyjściową” tylko dla rozwiązań funkcjonalnych, a nie dla pełnych programów.
Martin Ender

@MartinEnder Czy te rozwiązania byłyby zatem liczone jako funkcje? Nie jestem do końca pewien, ponieważ często nie używam tutaj funkcji.
Okx,

Nie wiem wystarczająco dużo o 05AB1E, ale są one uważane za funkcje tylko wtedy, gdy w rzeczywistości są wyrażeniami, które oceniają obiekt funkcji (co, jak sądzę, robią, ponieważ ich użycie natychmiast powoduje wykonanie polecenia).
Martin Ender

9

V / vim, 1 bajt

o

Spowoduje to wydrukowanie jednej nowej linii.

Wypróbuj online!

Istnieje wiele wariantów, które również by działały. Na przykład,

O

in vim i

Ä
ä
ï
Ï

w V.

Istnieje również wiele, wiele, trzy bajtowych rozwiązań. Na przykład:

3ii
i³i
¬ac

Wszystkie są specyficzne dla V.


3ii nie rozwija się, dopóki nie naciśniesz klawisza Escape, więc czy powinny to być trzy lub cztery bajty (a raczej naciśnięcia klawiszy)?
algmyr

@algmyr W vimie masz rację. Musiałoby to być 4ii<ESC>Jednak V domyślnie wypełnia ucieczkę na końcu programu.
DJMcMayhem

8

Partia, 12 bajtów

@echo %OS%

Liczba bajtów obejmuje końcowy znak nowej linii zarówno dla skryptu, jak i wyjścia, czyli

Windows_NT

Wygląda na to, że ma 11 bajtów, a nie 12.
Erik the Outgolfer

@EriktheOutgolfer cmd.exebędzie oczywiście wywoływał echo CRLF po Windows_NT, a więc 12 bajtach.
Neil

Więc powinieneś to wyjaśnić?
Erik the Outgolfer

8

Sześciokąt , 3 bajty

o!@

Wypróbuj online!

Wydruki 111.

Rozłożony:

 o !
@ . .
 . .

Ale kod jest tak naprawdę uruchamiany w kolejności o!@.

o   Set the memory edge to 111, the code point of 'o'.
!   Print this value as a decimal integer.
@   Terminate the program.



7

MATL , 2 bajty

H

Kończy się nowa linia.

Wypróbuj online!

Wyjaśnienie

Schowek H 2domyślnie zawiera liczbę . Hwypycha tę zawartość do stosu, który jest domyślnie wyświetlany z końcowym znakiem nowej linii.



7

Galaretka , 1 bajt

V

Całkiem kilka bajtów Jelly one - to jest jeden - ocenia lewy argument, który, gdy nic nie jest podane jako dane wejściowe, domyślnie wynosi zero, co z kolei zwraca zero i wynik jest domyślnie drukowany, a 0.

Wypróbuj online!

W rzeczywistości z 256 bajtów na stronie kodowej jest tylko 95, które obecnie nie wytwarzają innego jednobajtowego wyjścia w określonym zakresie, gdy są uruchomione jako pełny program; są to (jako znaki strony kodowej w kolejności bajtów):

¡¢£¦©½¿€ÇÑÞßçıȷñ÷þ"#&',-./0123456789:;?@IMRTVZ\`dmpstxyz{}~°³⁴⁵⁹ƓƈɠḶỌṬḊĖİĿṄȮṖṘẆẊṃọṣṭḃḟḣŀṁṗṡẋż’“

Uwagi:

  • Większość programów 1-bajtowych wypisuje a 0(brak operacji / daje listę z pojedynczym zerem, która wypisuje a 0), większość innych drukuje a 1( 0=0i tym podobne)

  • to jeden program, który daje inny bajt, ale taki, który jest poza zakresem zgodnie ze specyfikacją - produkuje bajt zerowy (rzutuje na 0znak)

  • tworzy spację (literał)

  • produkuje linię (dosłownie)

  • Niektóre bajty, które teraz działają, mogą tego nie robić w przyszłości - wydaje się, że sporo bajtów jest zarezerwowanych (sądzę) na wartości niladyczne, które, gdy zostaną przypisane, prawie na pewno nie wygenerują wyniku jednobajtowego.


1
Martwy link dobyte
Weedoze

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.