Gib deine Punktzahl aus!


54

Herausforderung:

Das Konzept ist einfach genug: Schreiben Sie ein vollständiges Programm, um Ihren eigenen Code Golf Score auszugeben!

Die Ausgabe sollte nur die Byteanzahl Ihres Programms und ein Trailing sein bytes.

ABER WARTEN ... es gibt eine Einschränkung:

  • Ihr Quellcode darf keine der Ziffern aus Ihrer Byteanzahl enthalten
  • Also , wenn Sie Ihre Gäste ist 186 bytes, können Sie Ihr Programm nicht die Zeichen 1, 6oder8

Beispielausgabe:

315 bytes
27 Bytes
49 BYTES

Zusätzliche Regeln:

  • Unnötige Zeichen, Leerzeichen und Zeilenumbrüche sind im Quellcode nicht zulässig, abschließende Leerzeichen und Zeilenumbrüche sind jedoch in der Ausgabe völlig akzeptabel
  • Zwischen der Zahl und bytesder Ausgabe sollte ein einzelnes Leerzeichen stehen
  • Bei Buchstaben wird die Groß- / Kleinschreibung nicht berücksichtigt
  • Keine Selbstinspektion oder Lesen des Quellcodes
  • Standardlücken sind nicht zulässig

  • Das ist , also

Kürzester Code in Bytes gewinnt!


6
Benötigt dies das Quine- Tag oder kann sich der Code selbst überprüfen?
Adám

3
@Dat, angesichts der Formatierung des Wortes, von dem bytesich vermute, dass es beabsichtigt ist, dass die Zählung die Bytes enthält, die zum Drucken des Textes benötigt werden:bytes
Jeff Schaller

2
Sind führende Leerzeichen in der Ausgabe akzeptabel?
Rafa11111

3
Wenn mein Code 1 Byte lang ist, soll ich ausgeben 1 bytesoder 1 byte? (Denken Sie daran, es gibt bereits 41 Antworten, obwohl ich glaube, dass keine davon betroffen sind)
Erik the Outgolfer

1
@JoKing gut, ich habe die Schreibweise in den Regeln nicht angesprochen, aber wenn die Verwendung von Großbuchstaben Ihre Punktzahl irgendwie senkt, würde ich auf jeden Fall gerne sehen, was Sie sich einfallen lassen. Ich sage, mach schon!
X1M4L

Antworten:


41

JavaScript, 19 Bytes

Octal wurde erfunden, um zwei Zwecken zu dienen:

  • Festlegen von Dateiberechtigungen unter Linux
  • Antworten auf diese Herausforderung

alert(023+' bytes')

Probieren Sie es online!


Zählt das als volles Programm?
ericw31415

1
@ ericw31415 Dies ist ein Browserprogramm , wie in dieser Meta-Antwort definiert .
Arnauld

5
+1 weil mir endlich klar wird warum oktal nicht ganz unbrauchbar ist!
Sergiol

34

Perl 5 , 16 Bytes

Es gibt viele andere Wege, 16aber dieser gehört mir

say afpbytes^PPP

Probieren Sie es online!


1
Wie funktioniert das?
Caird Coinheringaahing

9
@cairdcoinheringaahing In Perl können Sie die Anführungszeichen für Zeichenfolgen weglassen, wenn sie wie ein Literal aussehen und nicht mit einem Schlüsselwort in Konflikt stehen (und sehr veraltet sind, aber wir kümmern uns nicht um Golf). Binäroperatoren & | ^und ~können auch angewendet werden Zeichenfolgen und bearbeiten Sie sie wie eine Liste von ASCII-Werten (genau dann, wenn beide Seiten Zeichenfolgen sind). Für |und ^es funktioniert so, als ob die Shorte-Zeichenfolge mit erweitert wird \0. Danach ist eine einfache Übung, um Buchstabenkombinationen zu finden, die zur gewünschten Ausgabe
passen.

25

7 , 23 Zeichen, 9 Bytes

54340045141332401057403

Probieren Sie es online!

Dies ist eine ziemlich schwierige Herausforderung in einer Sprache, die nur aus Ziffern besteht, aber ich habe es geschafft ...

Dies sind nur 9 Bytes in der 7er-Kodierung. (Genau genommen sind es 8⅜ Bytes (23 × ⅜ - ¼, da die letzten beiden nachgestellten 1-Bits weggelassen werden können), aber zum ersten Mal ist es ein Vorteil, wenn PPCG auf eine ganze Anzahl von Bytes aufrundet die zusätzlichen nachgestellten 1 Bits sind notwendig und werden daher von der Frage nicht gebannt.) Ein umkehrbarer Hex-Dump:

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

Die Hauptherausforderung beim Schreiben dieses Programms in 7 bestand darin, es auf unter 10 Byte zu beschränken (wie beim Schreiben von 7, ohne 0oder 1ziemlich schwer zu verwenden). Dies verwendet dieselbe Struktur wie das Standardprogramm "Hallo Welt":

5434004514133240105 7 403
5434004514133240105 Mit den Befehlen 0-5 werden Literale an den Datenbereich angehängt
                   7      Starten Sie einen neuen Abschnitt des Datenraums
                    403 ein weiteres Literal an den Datenraum angehängt
                         {implizit: den letzten Abschnitt als Befehle auswerten}
                    4     Tausche den ersten und zweiten Abschnitt mit einem leeren Abschnitt zwischen
                      6    rekonstruiere die Befehle, die die   Ausgabe des ersten Abschnitts
                       3 erzeugen würden (+ einige andere Effekte, die uns egal sind)

Mit anderen Worten, wir beginnen damit, zwei Abschnitte des Datenraums zu erstellen. Wir haben zwei Literale, von denen jeder eine Folge von Befehlen drückt. Der zweite Abschnitt (sie sind gestapelt, also first push = last pop) ist eine ziemlich willkürliche Folge von Befehlen, wird jedoch unter Verwendung der Befehlsfolge 5434004514133240105(wodurch die Datensequenz erzeugt wird 5434664574733246765; bei der Erörterung von 7 im Text verwende ich normalerweise normale Schrift für einen Befehl, der ein Literal drückt, und fett für das entsprechende resultierende Literal). Der erste Abschnitt wird mithilfe der Befehlssequenz verschoben 403und erzeugt 463. Dann wird der erste Abschnitt zurück in das Programm kopiert (ein implizites Verhalten von 7).

Das 463setzt sich nun aus (fett gedruckten) Befehlen zusammen, die etwas sofort ausführen, anstatt aus (nicht fett gedruckten) Befehlen, die nur Literale drücken. 4ordnet die Abschnitte neu an, um unser "String-Literal" in den ersten Abschnitt zu bringen. Anschließend 0wird die Operation ausgeführt, für die 7 am bekanntesten ist: Einen Abschnitt des Datenraums nehmen und die Befehlssequenz rekonstruieren, für die die Wahrscheinlichkeit am größten ist, dass sie erstellt wurde. In dem Fall, in dem die ursprüngliche Befehlssequenz vollständig 0- war 5, ist dies 100% genau (was nicht verwunderlich ist, da diese Befehle lediglich Daten übertragen und somit offensichtliche Beweise dafür hinterlassen, was sie getan haben), und so erhalten wir unsere ursprüngliche Sequenz 5434004514133240105zurück. Zum Schluss 3druckt es aus.

Das übrige, was hier zu sehen ist, ist die Kodierung des Strings. Dies hat eine eigene domänenspezifische Sprache:

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'

(Im Zeichensatz "Ziffern und gebräuchliche Symbole" gibt es keinen "Zeichensatz auswählen: Kleinbuchstaben". Zuerst muss ein anderer Zeichensatz eingegeben werden. Ich musste also Großbuchstaben verwenden, um so kurz zu spielen, dass er unter die effektiven 10 passt -Byte-Limit.)





8

PHP älter als 7.2 , 13 Bytes

Setzt Standardeinstellungen (E_NOTICE-Warnungen deaktiviert) und eine ältere PHP-Version als 7.2 voraus.

Muss mit dekodiert werden xxd -r

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

Oder wenn Sie Base64 bevorzugen

PD89fs7M352Gi5qMOw==

Probieren Sie es online!


6

R , 16 Bytes

cat(4*4,"bytes")

Probieren Sie es online!


Ist es nicht 17 wegen Ihres fehlenden Platzes?
PmanAce

@PmanAce "Die Ausgabe sollte nur die Byteanzahl Ihres Programms und ein Trailing sein bytes". Das Programm ist 16 Bytes.
Giuseppe

catStandardmäßig wird ein Leerzeichen zwischen den Eingaben eingefügt.
Giuseppe

object.sizeAusgaben im richtigen Format ( bytesstandardmäßig enthalten). Dummerweise ist die kürzest ich finden konnte 17: object.size(0)-39. TIO
Robin Ryder

1
Offenbar in Hadley-Version, ein 1-Längen - Vektor ist mit einer Länge von 48, also muss es eine Version von R gibt , in denen dieser 16-Byte - Code funktioniert: object.size(0)/3.
Robin Ryder

5

Stax , 5 Bytes

╗↑╞ô╝

Führen Sie es aus und debuggen Sie es

Ausgepackt sieht es so aus. Packed Source-Modus macht diese Art von trivial und uninteressant.

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

Wenn Sie den gepackten Quellmodus nicht verwenden möchten, wird er 6^p`5l@für 7 Byte verwendet.


1
Ich habe diese Antwort abgelehnt, weil ich denke, dass die Verwendung des gepackten Modus, obwohl eine clevere Methode zum Speichern von Bytes, sich im schlimmsten Fall wie Betrug anfühlt (was nicht der Fall ist) und bestenfalls als unkreativ. Anstatt eine Abstimmungsrunde mit allen Antworten von Stax mit Quellenbeschränkung zu beginnen , lasse ich diese Abstimmungsrunde, um alle ähnlichen Antworten abzudecken.
Caird Coinheringaahing

1
Ich stimme mit Sicherheit zu, dass es nicht kreativ ist. Aber ich denke, der Fehler liegt im Konzept restricted-source, nicht in der Sprache. Dies ist die direkteste Art, "5 bytes"mit Stax zu produzieren.
rekursive

Ich stimme zu, dass es ein Problem mit der Herausforderung ist (daher auch der Grund weshalb ich downvoted es ), aber ich mag nicht noch diese Antwort. Bitte lösche es nicht (nur vorsichtshalber), es ist nichts falsch daran.
Caird Coinheringaahing



5

Bash, 21 Bytes

"Read your own source code" ist hier eindeutig nicht der Gewinner, aber niemand anderes hat einen eingereicht, also was zum Teufel.

echo `wc -c<$0` bytes

Probieren Sie es online!


5

Retina , 15 Bytes


 bytes
*>w`..+

Dieses Programm zählt die Anzahl der Teilzeichenfolgen mit mindestens zwei Zeichen in der Zeichenfolge "Bytes" und gibt diese Anzahl und die Zeichenfolge selbst aus.

Probieren Sie es online!


5

PHP + HTML, 16 Bytes

&#49;&#54; bytes

Ja, dies kommt dem Missbrauch von Sicherheitslücken ziemlich nahe, aber ich hatte das Gefühl, dass dies veröffentlicht werden musste. Und die Verwendung von PHP bedeutet , dass diese Antwort technisch ist in einer Turing-vollständigen Programmiersprache geschrieben. Natürlich würde jede andere ähnliche HTML-Template-Sprache genauso gut funktionieren.

Live Demo (ohne PHP):

&#49;&#54; bytes


Schlagen Sie mich dazu! Und das ; kann normalerweise weggelassen werden!
Wedstrom

Ahh aber dann wäre es 14/15 Bytes
Wedstrom




4

Oktave , 23 Bytes

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

Probieren Sie es online!

Und das:

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

Probieren Sie es online!


Die erste Antwort scheint in Ordnung zu sein, aber ... wie funktioniert die zweite? oO
rafa11111

2
@ rafa11111 Subtrahieren 4von (den ASCII-Codes von) '67$f}xiw'ergibt die ASCII-Codes von '23 bytes'. Die Verkettung mit der leeren Zeichenfolge '' konvertiert dann ASCII-Codes in Zeichen
Luis Mendo

2
@ Luis Mendo Ziemlich schlau! Danke fürs klarstellen!
Rafa11111

4

Petit Computer BASIC, 11 Bytes

?9+2,"bytes

Die Verwendung eines Kommas in einer Druckanweisung bewegt den Cursor zum nächsten Vielfachen der aktuellen Tabulatorgröße. In SmileBASIC ist dies standardmäßig 4, sodass hier 11 bytes2 Leerzeichen ausgegeben werden und PTC BASIC stattdessen 3 verwendet, sodass die Ausgabe den richtigen Abstand aufweist.


4

APL (Dyalog Unicode) , 12 Byte

Volles Programm, das implizit auf STDOUT druckt.

'bytes',⍨3×4

Probieren Sie es online!

,⍨ is hängt den String an das Ergebnis der Multiplikation an. In der Standardanzeige von APL für gemischte Datentypen wird ein Leerzeichen zwischen einer Zahl und dem nachfolgenden Text eingefügt.


Ich kann mich irren, aber haben Sie keine 2 in Ihrer Byteanzahl und Ihrem Programm? 3 * 4 sollte in Ordnung sein
fyrepenguin

@fyrepenguin Heh, richtig bist du natürlich. Wie dumm von mir.
Adám

4

Brain-Flak , 100 Bytes

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

Probieren Sie es online!

Gibt den bytesPart in Großbuchstaben aus. Jemand, der mit Brain-Flak vertraut ist, ist vielleicht ((<>))am Anfang wirklich verwirrt , aber seien Sie versichert, er ist nur da, um die Stapelhöhe nilad ( []) zu missbrauchen, und keines der von ihm produzierten 0s wird gedruckt.



4

Leerzeichen , 112 Bytes

Nur weil es noch niemand gemacht hat:

   			    
	
 	   
   	 	  		
   	   	 	
   	 	 	  
   	 		  	
   	    	 
   	     

  
	
   
 
	  

 


   




Probieren Sie es online!

Gibt "BYTES" in Großbuchstaben aus, da Großbuchstaben kürzere binäre ASCII-Codes haben. Die Befehle im Programm sind in meiner eigenen sichtbaren Notation:

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

Ah, ich habe nicht bemerkt, dass es bereits eine Whitespace-Antwort gibt. Hier ist eine kürzere ( 104 Bytes ). . Werde meins wieder löschen. Hier ist das gleiche mit zusätzlichen Hervorhebungen und Erklärungen.
Kevin Cruijssen

Oh, hmm. Ich denke, der Text ist kurz genug, so dass das Implementieren der Schleife mehr schmerzt als nur das Wiederholen von PrintChar. (Und ich weiß, ich kann immer die endgültige NNN fallen lassen, aber ich mag es wirklich, keine Fehler zu haben.)
Aschepler

4

Java 5 oder 6, 44 Bytes (volles Programm)

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

Keine TIO-Verknüpfung, da Java 5/6 alt ist. In Java 5/6 war es möglich, eine Enumeration mit Code anstelle der obligatorischen mainMethode zu haben, wodurch sie für vollständige Programmherausforderungen kürzer wurde.

Es können auch Fehler mit java.lang.NoSuchMethodError: main\nException in thread "main"in STDERR nach dem Drucken in STDOUT hinzugefügt werden (und die Oktalzahlen müssen aktualisiert werden), um den Fehler zu vermeiden. Dies ist laut Meta in Ordnung (wenn die Abfrage zusätzliche Fehler in STDERR nicht zugelassen hätte System.exit(0);).

Vorgeschlagen von @ OlivierGrégoire (und seinem relevanten Java-Tipp ).

Java 8+, 74 Bytes (volles Programm)

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

Probieren Sie es online aus.

Java 8+, 16 15 Bytes (Lambda-Funktion)

v->0xF+" bytes"

-1 Byte danke an @ OliverGégoire .

Probieren Sie es online aus.


2
Technisch kein vollständiges Programm :)
OOBalance

@OOBalance Ups .. irgendwie hinterher gelesen, danke für die Korrektur. Da geht meine Punktzahl .. XD
Kevin Cruijssen

1
37*2enthält ein 7, ist also nicht gültig. Ihre alternative Lösung ist jedoch in Ordnung.
Bilanz

1
v->0xE+"bytes"oder v->0xF+" bytes". Kann nicht testen, sollte aber trotzdem funktionieren. Nichts sagt, dass die Kerbe und die "Bytes" getrennt werden müssen.
Olivier Grégoire

1
@ OlivierGrégoire Ich weiß, ich weiß. ;) Als ich das vollständige Programm gepostet habe, hatte ich Zweifel, es als enum zu beantworten, wenn ich über deine Tippantwort nachdenke . Kennen Sie einen Online-Compiler, der dies noch unterstützt? Ich bevorzuge einen Link mit
Testcode


4

Applescript, 15 Bytes

Ja, ich gehe dorthin.

9+6&”bytes”

1
Aber ...Your source code can not include any of the digits from your byte count
Nicoleel

@nicael Dang, du hast recht. Eine Sekunde dann ...
DonielF

Korrigieren Sie mich, wenn ich falsch liege , aber kein Multibyte-Zeichen (3 Bytes in Unicode, wenn ich mich richtig erinnere), also mehr als 11 Bytes?
Caird Coinheringaahing

@cairdcoinheringaahing ... Schießen. Du hast recht - “ist 2 Bytes und erhöht dies auf 15.
DonielF

druckt das nicht noch 11?
Destructible Lemon


3

Batch, 32 Bytes

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

COMSPECDas ist normalerweise %WINDIR%\system32\cmd.exeso, dass ich die Teilzeichenfolge von 10 bis 8 Zeichen am Ende extrahiere. Alte selbstreferenzierende 16-Byte-Version:

@echo %~z0 bytes

Glücklicherweise war die Byteanzahl kein Vielfaches von 10.


@manatwork OK, das hatte ich nicht gesehen, hier ist eine neue Version.
Neil

3

JavaScript, 16-15 Bytes

x=>0xf+' bytes'

_=>5*3+' bytes'
Neil

@Neil Sowohl der Code als auch die Byteanzahl enthalten 5in diesem Fall eine ..
Kevin Cruijssen

@ KevinCruijssen Bah, ich kann nicht glauben, dass ich das übersehen habe.
Neil

Einsendungen müssen vollständige Programme sein. " Schreiben Sie ein vollständiges Programm, um seinen eigenen Code Golf Score auszugeben!"
Kritixi Lithos

3

7Zip - 90 14 Bytes

Hex-Dump:

00 75 0d 08 c0 00 0d 08 03 00 00 03 04 1d  

Benutzen:

in eine Quelldatei mit dem Namen "any" speichern.

Führen Sie den Compiler über die Befehlszeile aus: 7z e [source name]

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.