Wynik swój wynik!

54

Wyzwanie:

Pomysł jest dość prosty: napisz pełny program, który wyświetli swój własny wynik golfowy!

Wyjście powinno być tylko liczbą bajtów twojego programu i końcową wartością bytes.

ALE CZEKAJ ..... jest jedno ograniczenie:

  • Kod źródłowy nie może zawierać żadnej cyfry z liczby bajtów
  • Więc jeśli Twój wynik jest 186 bytes, program nie może zawierać znaków 1, 6lub8

Przykładowe dane wyjściowe:

315 bytes
27 Bytes
49 BYTES

Dodatkowe zasady:

  • Niepotrzebne znaki, spacje i znaki nowej linii są zabronione w kodzie źródłowym, jednak końcowe spacje i znaki nowej linii są całkowicie dopuszczalne w danych wyjściowych
  • Powinna być pojedyncza spacja między liczbą a bytesdanymi wyjściowymi
  • Litery nie uwzględniają wielkości liter
  • Brak samokontroli lub odczytu kodu źródłowego
  • standardowe luki są niedozwolone

  • to jest , więc

Najkrótszy kod w bajtach wygrywa!

X1M4L
źródło
6
Czy to wymaga tagu quine , czy może kod sam się sprawdza?
Adám
3
@Dat, biorąc pod uwagę formatowanie słowa bytesPodejrzewam, że intencją jest, aby liczba zawierała bajty potrzebne do wydrukowania tekstu:bytes
Jeff Schaller
2
Czy dopuszczalne są wiodące spacje na wyjściu?
rafa11111
3
Jeśli mój kod ma długość 1 bajta, czy powinienem wyprowadzać dane, 1 bytesczy 1 byte? (pamiętaj, że jest już 41 odpowiedzi, choć nie sądzę, by na nich miało to wpływ)
Erik the Outgolfer
1
@JoKing dobrze, nie zajmowałem się casingiem w zasadach, ale jeśli w jakiś sposób użycie wielkich liter obniży twój wynik, to z całą pewnością chciałbym zobaczyć, co wymyśliłeś. Mówię idź po to!
X1M4L

Odpowiedzi:

41

JavaScript, 19 bajtów

Octal został wymyślony, aby służyć dwóm celom:

  • ustawianie uprawnień do plików w systemie Linux
  • odpowiadając na to wyzwanie

alert(023+' bytes')

Wypróbuj online!

Arnauld
źródło
Czy to się liczy jako pełny program?
ericw31415
1
@ ericw31415 To jest program przeglądarki , zgodnie z definicją w tej meta-odpowiedzi .
Arnauld
5
+1, ponieważ w końcu wyjaśniam, dlaczego ósemka nie jest całkowicie bezużyteczna!
sergiol
34

Perl 5 , 16 bajtów

Istnieje wiele innych sposobów, 16ale ten jest mój

say afpbytes^PPP

Wypróbuj online!

Ton Hospel
źródło
1
Jak to działa?
caird coinheringaahing
9
@cairdcoinheringaahing W Perlu możesz pominąć cytaty na ciągach znaków, jeśli wyglądają one jak literały i nie powodują konfliktu ze słowem kluczowym (i są bardzo przestarzałe, ale nie dbamy o golfa), operatorów binarnych & | ^i ~mogą być również stosowane do ciągi i pracuj nad nimi jak na liście wartości ASCII (tylko wtedy, gdy obie strony są łańcuchami). For |i ^działa tak, jakby krótki łańcuch został przedłużony o \0. Po tym jest proste ćwiczenie, aby znaleźć kombinacje liter, które xor do pożądanego wyjścia,
Ton Hospel
26

7 , 23 znaków, 9 bajtów

54340045141332401057403

Wypróbuj online!

To dość trudne wyzwanie w języku składającym się wyłącznie z cyfr, ale udało mi się…

To tylko 9 bajtów w kodowaniu 7. (Ściśle mówiąc, jest to 8⅜ bajtów (23 × ⅜ - ¼, ponieważ ostatnie dwa końcowe 1 bity można pominąć), ale po raz pierwszy wymóg PPCG dotyczący zaokrąglenia w górę do pełnej liczby bajtów jest w rzeczywistości zaletą, ponieważ oznacza, że dodatkowe końcowe 1 bity są konieczne i dlatego nie są zbanowane przez pytanie.) Odwracalny zrzut heksowy:

00000000: b1c0 2530 b6a0 22f8 1f                   ..%0.."..

Głównym wyzwaniem pisania tego programu w 7 była gra w golfa poniżej 10 bajtów (jako pisanie 7 bez użycia 0lub 1jest dość trudne.) Używa tej samej struktury co standardowy program „Hello world”:

5434004514133240105 7 403
5434004514133240105 polecenia 0-5 dołączają literały do ​​przestrzeni danych
                   7      uruchom nową sekcję przestrzeni danych
                    403 kolejny literał dołączony do przestrzeni danych
                         {niejawnie: ewaluuj ostatnią sekcję jako polecenia}
                    4     zamień pierwszą i drugą sekcję z pustą sekcją między
                      6    zrekonstruuj polecenia, które utworzyłyby wynik pierwszej sekcji
                       3   (+ kilka innych efektów, na których nam nie zależy)

Innymi słowy, zaczynamy od utworzenia dwóch sekcji przestrzeni danych; mamy dwa literały, z których każdy wypycha sekwencję poleceń. Druga sekcja (są one wypychane w stylu stosu, więc pierwsze naciśnięcie = ostatni pop) jest dość dowolną sekwencją poleceń, ale jest wypychana za pomocą sekwencji poleceń 5434004514133240105(tworząc w ten sposób sekwencję danych 5434664574733246765; podczas omawiania 7 w tekście zwykle używam normalnej czcionki dla polecenia wypychającego literał i pogrubionego dla odpowiadającego mu wynikowego literału). Pierwsza sekcja jest wypychana za pomocą sekwencji poleceń 403, tworząc 463. Następnie pierwsza sekcja jest kopiowana z powrotem do programu (niejawne zachowanie 7).

463Jest teraz w składzie (pogrubione) poleceń, które robią coś natychmiast, zamiast (non-bold) nakazuje, że wystarczy nacisnąć literałów. 4przestawia sekcje, aby uzyskać nasz „dosłowny ciąg znaków” w pierwszej sekcji. Następnie 0wykonuje się operację, z której 7 jest najbardziej znana: pobranie części przestrzeni danych i odtworzenie sekwencji poleceń, która najprawdopodobniej ją utworzyła. W przypadku, gdy oryginalna sekwencja poleceń była wszystkim 0- 5jest to w 100% dokładne (co nie jest zaskakujące, ponieważ polecenia te jedynie przekazują dane, a tym samym pozostawiają oczywiste dowody na to, co zrobili), więc odzyskujemy naszą oryginalną sekwencję 5434004514133240105. Wreszcie 3drukuje.

Pozostaje więc do obejrzenia tutaj kodowanie łańcucha. Ma on swój własny język specyficzny dla domeny:

5434004514133240105
5                    change encoding: 6 bits per character
 43                  select character set: digits and common symbols
   40                '9'
     04              space
       51            select character set: uppercase letters
         4133240105  'B' 'Y' 'T' 'E' 'S'

(W zestawie znaków „cyfry i wspólne symbole” nie ma „wybierz zestaw znaków: małe litery” - najpierw musisz przejść przez inny zestaw znaków - więc musiałem użyć wielkich liter, aby zagrać w golfa na tyle krótko, aby zmieścił się pod skutecznym 10 Limit bajtów.)

ais523
źródło
15

Płótno , 8 bajtów

8 bytes+

Wypróbuj tutaj!

Bardziej interesujące rozwiązanie 20-bajtowe:

bytecount.innerText#

Wypróbuj tutaj!

dzaima
źródło
3
OK, to całkiem sprytne.
Adám
Zauważ, że jednym z ograniczeń jest „Twój kod źródłowy nie może zawierać żadnej cyfry z twojej liczby bajtów”, więc pierwsze rozwiązanie nie jest poprawne w tym przypadku =)
Kod cyklonowy
1
@Cyclonecode To, że „8” nie ma zwykłego ASCII 8 - jest to znak o pełnej szerokości 8 w tej wersji kodu Unicode, chociaż tak naprawdę to bajt 0xD5, który jest całkowicie niezwiązany z żadnym 8s
dzaima
11

PHP, 14 bajtów

<?=7*2?> bytes
Kod cyklonowy
źródło
8
Co powiesz na umieszczenie bytesczęści poza ?>? Wypróbuj online!
Jo King
@JoKing świetne 3 mniej bajtów :)
Kod cyklonowy
1
Po prostu, prawdopodobnie najlepiej jest podzielić odpowiedź na wiele odpowiedzi, jeśli obejmuje więcej niż jeden język.
Conor O'Brien
@ ConorO'Brien - Oki zrobi
kod cyklonowy
8

PHP starszy niż 7.2 , 13 bajtów

Zakłada domyślne ustawienia (wyłączone ostrzeżenia E_NOTICE) i wersję PHP starszą niż 7.2.

Wymaga dekodowania xxd -r

00000000: 3c3f 3d7e cecc df9d 868b 9a8c 3b         <?=~........;

Lub jeśli wolisz Base64

PD89fs7M352Gi5qMOw==

Wypróbuj online!

Konrad Borowski
źródło
6

Stax , 5 bajtów

╗↑╞ô╝

Uruchom i debuguj

Po rozpakowaniu wygląda to tak. Tryb spakowanego źródła sprawia, że ​​ten rodzaj jest trywialny i nieciekawy.

5p     print 5 with no line break
`5l@   print the compressed string " bytes"

Jeśli nie chcesz używać trybu spakowanego źródła, 6^p`5l@działa na 7 bajtów.

rekurencyjny
źródło
1
Głosowałem za tą odpowiedzią, ponieważ uważam, że używanie trybu spakowanego, podczas gdy sprytny sposób oszczędzania bajtów, w najgorszym przypadku wydaje się oszustwem (co nie jest), aw najlepszym razie jest mało kreatywne. Zamiast przechodzić do szaleństwa wszystkich odpowiedzi Stax o ograniczonym źródle , zostawię głosowanie, aby objąć wszystkie podobne odpowiedzi.
caird coinheringaahing
1
Z pewnością zgadzam się, że jest to mało kreatywne. Ale myślę, że wina leży w pojęciu restricted-source, a nie w języku. Jest to w rzeczywistości najbardziej bezpośredni sposób produkcji "5 bytes"przy użyciu Stax.
rekurencyjny
Zgadzam się, że istnieje problem z tym wyzwaniem (dlatego go przegłosowałem ), ale nadal nie podoba mi się ta odpowiedź. Nie usuwaj go jednak (tylko ostrożność), nie ma w tym nic złego .
caird coinheringaahing
6

R , 16 bajtów

cat(4*4,"bytes")

Wypróbuj online!

Giuseppe
źródło
Czy to nie 17 z powodu brakującej przestrzeni?
PmanAce
@PmanAce „Wyjście powinno być tylko liczbą bajtów twojego programu i końcowym bytes”. Program ma 16 bajtów.
Giuseppe
catdomyślnie dodaje spację między wejściami.
Giuseppe
object.sizewyjścia w poprawnym formacie (z bytesdomyślnie dołączonym). Irytująco, najkrótszy udało mi się znaleźć to 17: object.size(0)-39. TIO
Robin Ryder
1
Najwyraźniej w wersji Hadley, 1-długość wektor ma długość 48, więc musi istnieć wersję R, w którym ten kod 16-bajtowy działa: object.size(0)/3.
Robin Ryder
5

Python 3 , 25 24 18 bajtów

print(6*3,'bytes')

Wypróbuj online!

NieDzejkob
źródło
1
Ale „4” to „24”. Może „33-9”?
rekurencyjny
@recursive 3*8powinno być w porządku
Kevin Cruijssen
@recursive whoops, naprawiono: P
NieDzejkob
5

05AB1E , 6 bajtów

₂¤“ÿ¡Ï

Wypróbuj online!


₂      # [26]        | Pushes 26 (many other alternatives).
 ¤     # [2, 6]      | Split out tail.
  “ÿ¡Ï # ['6 bytes'] | ÿ = "Interpolate top of stack.", ¡Ï = "bytes" (compressed)

Alternatywy ₂¤są: 5>, ₁¤,

Urna Magicznej Ośmiornicy
źródło
5
Szkoda, że to nie działa.
Magic Octopus Urn
5

Bash, 21 bajtów

„Przeczytaj swój kod źródłowy” najwyraźniej nie jest tutaj zwycięzcą, ale nikt inny go nie przesłał, więc do cholery.

echo `wc -c<$0` bytes

Wypróbuj online!

thegreatemu
źródło
5

Siatkówka , 15 bajtów


 bytes
*>w`..+

Ten program zlicza liczbę podciągów z co najmniej dwoma znakami w ciągu „bajtów”, a następnie drukuje tę liczbę i sam ciąg.

Wypróbuj online!

Lew
źródło
5

PHP + HTML, 16 bajtów

&#49;&#54; bytes

Tak, zbliża się to do nadużyć związanych z lukami, ale czułem, że należy to opublikować. A użycie PHP oznacza, że ​​technicznie ta odpowiedź jest napisana w języku programowania Turing-complete. Oczywiście każdy inny podobny język szablonów HTML działałby równie dobrze.

Wersja demonstracyjna na żywo (bez PHP):

&#49;&#54; bytes

Ilmari Karonen
źródło
Pokonaj mnie do tego! I; zwykle można pominąć!
wedstrom
Ach, ale wtedy byłoby 14/15 bajtów
wedstrom
4

dc , 14 11 bajtów

[ bytes]Bnn

Wypróbuj online!

-3 bajty według @Cows quack

NieDzejkob
źródło
[ bytes]Bnngoli trochę bajtów
Kritixi Lithos
@Cowsquack dzięki!
NieDzejkob
@cowsquack duckies go MOO, zakładam: P?
Magic Octopus Urn
@MagicOctopusUrn Kaczki, czym są kaczki? : P
Kritixi Lithos
4

MATL , 13 bajtów

'57$f}xiw'4-c

Wypróbuj online!

Spycha to ciąg „57 $ f} xiw” i odejmuje 4, aby uzyskać 13 bytes. To jest konwertowane na znaki za pomocą c.

Stewie Griffin
źródło
6EV' bytes'hma 12 lat (właśnie miałem to opublikować)
Giuseppe
1
choć to samo nudne podejście: P
Giuseppe
4

Oktawa , 23 bajty

printf('%i bytes',9+14)

Wypróbuj online!

I to:

disp(['','67$f}xiw'-4])

Wypróbuj online!

Stewie Griffin
źródło
Pierwsze odpowiedzi wydają się w porządku, ale ... jak działa druga? oO
rafa11111
2
@ rafa11111 Odejmowanie 4od (kody ASCII z) '67$f}xiw'daje kody ASCII z '23 bytes'. Następnie konkatenacja z pustym ciągiem '' konwertuje kody ASCII na znaki
Luis Mendo
2
@Luis Mendo Całkiem sprytne! Dzięki za wytłumaczenie!
rafa11111
4

Petit Computer BASIC, 11 bajtów

?9+2,"bytes

Użycie przecinka w instrukcji print spowoduje przesunięcie kursora do następnej wielokrotności bieżącego rozmiaru tabulatora. W SmileBASIC jest to domyślnie 4, więc wyprowadziłoby to 11 bytes(2 spacje), ale PTC BASIC użył zamiast tego 3, więc wyjście ma prawidłowe odstępy.

12Me21
źródło
4

APL (Dyalog Unicode) , 12 bajtów

Pełny program, który domyślnie drukuje do STDOUT.

'bytes',⍨3×4

Wypróbuj online!

,⍨ dodaje ciąg do wyniku mnożenia. Domyślne wyświetlanie danych mieszanych APL-a umieszcza spację między liczbą a kolejnym tekstem.

Adám
źródło
Mogę się mylić, ale czy nie masz 2 w liczbie bajtów i programie? 3 * 4 powinno być w porządku
fyrepenguin
@fyrepenguin Heh, oczywiście jesteś. Ale głuptas ze mnie.
Adám
4

Brain-Flak , 100 BYTES

((((((<>))))))(((()[[]]((((()()((((([][]){}){}())[()]))[[][]])()){})()[][]))[()()[]])[]){({}<>)<>}<>

Wypróbuj online!

Wysyła bytesczęść we wszystkich czapkach. Ktoś obeznany z Brain-Flak może być naprawdę zdezorientowany ((<>))na początku, ale zapewniamy, że są tam tylko po to, aby nadużywać wysokości stosu nilad ( []) i żadne z nich, 0które produkują, nie są drukowane.

Jo King
źródło
4

Haskell , 26 bajtów

main=putStr$"\50\54 bytes"

Wypróbuj online!


29 bajtów

main=putStr$pred<$>"3:!czuft"

Wypróbuj online!

Laikoni
źródło
Niepotrzebne białe znaki są teraz zabronione, ale możesz użyć $zamiast tego.
Ørjan Johansen
@ ØrjanJohansen Dzięki za wskazanie.
Laikoni
4

Biała spacja , 112 bajtów

Tylko dlatego, że nikt tego jeszcze nie zrobił:

   			    
	
 	   
   	 	  		
   	   	 	
   	 	 	  
   	 		  	
   	    	 
   	     

  
	
   
 
	  

 


   




Wypróbuj online!

Drukuje „BYTES” dużymi literami, ponieważ wielkie litery mają krótsze binarne kody ASCII. Polecenia w programie, w moim własnym utworzonym widocznym zapisie, to:

Push 112
PrintNum
Push 0
Push 0x53
Push 0x45
Push 0x54
Push 0x59
Push 0x42
Push 0x20
Label _
PrintChr
Dup
JumpZ S
Jump _
Label S
End
aschepler
źródło
Ach, nie zauważyłem, że była już odpowiedź na Białą Przestrzeń. Oto krótsza ( 104 bajty ). . Usunie moje ponownie. To samo z dodanym podświetleniem i objaśnieniem.
Kevin Cruijssen
Och, hmm. Wydaje mi się, że tekst jest na tyle krótki, że wdrożenie pętli w rzeczywistości boli bardziej niż tylko powtarzanie PrintChar. (I wiem, że zawsze mogę upuścić końcowy numer NNN, ale naprawdę nie lubię błędów.)
aschepler
4

Java 5 lub 6, 44 bajty (pełny program)

enum A{A;{System.out.print(0x2C+" bytes");}}

Brak linku TIO, ponieważ Java 5/6 jest stara. W Javie 5/6 można było zastosować wyliczenie z kodem zamiast metody obowiązkowej main, co skróciło go do pełnych wyzwań programowych.

Można również dodać błędy java.lang.NoSuchMethodError: main\nException in thread "main"w STDERR po wydrukowaniu do STDOUT, co jest zgodne z meta (ale jeśli wyzwanie uniemożliwiłoby dodatkowe błędy w STDERR, System.exit(0);można dodać (i liczby ósemkowe należy zaktualizować), aby zapobiec błędowi.

Sugerowane przez @ OlivierGrégoire (i jego odpowiednią wskazówkę Java ).

Java 8+, 74 bajty (pełny program)

interface M{static void main(String[]a){System.out.print(0112+" bytes");}}

Wypróbuj online.

Java 8+, 16 15 bajtów (funkcja lambda)

v->0xF+" bytes"

-1 bajt dzięki @ OliverGégoire .

Wypróbuj online.

Kevin Cruijssen
źródło
2
Technicznie nie pełny program :)
OOBalance
@OOBalance Ups .. jakoś przeczytałem to w przeszłości, dzięki za korektę. Tam idzie mój wynik .. XD
Kevin Cruijssen
1
37*2zawiera 7, więc nie jest poprawny. Twoje alternatywne rozwiązanie jest w porządku.
OOBalance
1
v->0xE+"bytes"lub v->0xF+" bytes". Nie można przetestować, ale i tak powinno działać. Nic nie mówi, że wynik i „bajty” muszą być oddzielone.
Olivier Grégoire
1
@ OlivierGrégoire Wiem, wiem. ;) Kiedy opublikowałem pełny program, zastanawiałem się nad odpowiedzią jako enum, myśląc o twojej wskazówce . Czy znasz jakiś kompilator online, który nadal go obsługuje? Wolę mieć link z kodem testowym dla moich odpowiedzi ..
Kevin Cruijssen
4

Jabłkowy, 15 bajtów

Tak, idę tam.

9+6&”bytes”
DonielF
źródło
1
Ale ...Your source code can not include any of the digits from your byte count
Nicel
@nicael Dang, masz rację.
Chwilkę
Popraw mnie, jeśli się mylę, ale nie jest to znak wielobajtowy (3 bajty w Unicode, jeśli dobrze pamiętam), więc jest to więcej niż 11 bajtów?
caird coinheringaahing
@cairdcoinheringaahing ... Strzelaj. Masz rację - „ma 2 bajty,
zwiększając
czy to nadal nie drukuje 11?
Destructible Lemon
3

Partia, 32 bajty

@@echo %COMSPEC:~-10,-010% bytes

COMSPECjest zwykle, %WINDIR%\system32\cmd.exewięc wyciągam podciąg z 10 do 8 znaków na końcu. Stara 16-bajtowa wersja z odnośnikami:

@echo %~z0 bytes

Na szczęście liczba bajtów nie była wielokrotnością 10.

Neil
źródło
@manatwork OK, nie widziałem tego, oto nowa wersja.
Neil
3

JavaScript, 16 15 bajtów

x=>0xf+' bytes'
Yair Rand
źródło
_=>5*3+' bytes'
Neil
@Neil Zarówno kod, jak i liczba bajtów zawierają 5w takim przypadku ..
Kevin Cruijssen
@KevinCruijssen Bah, nie mogę uwierzyć, że przeoczyłem to.
Neil
Zgłoszenia muszą być pełnymi programami „ napisz pełny program, aby wygenerować swój własny wynik golfowy!”
Kritixi Lithos