Keluarkan Skor Anda!

54

Tantangan:

Konsepnya cukup sederhana: tulis program lengkap untuk menampilkan skor golf code-nya sendiri!

Output seharusnya hanya hitungan byte dari program Anda dan sebuah trailing bytes.

TAPI TUNGGU ..... ada satu batasan:

  • Kode sumber Anda tidak dapat menyertakan digit dari jumlah byte Anda
  • Jadi jika skor Anda 186 bytes, program anda tidak dapat berisi karakter 1, 6atau8

Contoh Output:

315 bytes
27 Bytes
49 BYTES

Aturan tambahan:

  • Karakter, spasi, dan baris baru yang tidak perlu dilarang dalam kode sumber, namun spasi tambahan dan baris baru dapat diterima dengan baik dalam output
  • Harus ada ruang tunggal antara angka dan bytesoutput
  • Huruf tidak peka huruf besar-kecil
  • Tidak melakukan inspeksi sendiri atau membaca kode sumber
  • celah standar tidak diizinkan

  • ini , jadi

Kode terpendek dalam byte menang!

X1M4L
sumber
6
Apakah ini memerlukan tag quine , atau dapatkah kode memeriksa sendiri?
Adam
3
@Dat, mengingat pemformatan kata bytessaya menduga maksudnya adalah bahwa hitungan harus mencakup byte yang diperlukan untuk mencetak teks:bytes
Jeff Schaller
2
Apakah ruang terdepan dalam output dapat diterima?
rafa11111
3
Jika kode saya panjang 1 byte, haruskah saya output 1 bytesatau 1 byte? (perlu diingat sudah ada 41 jawaban, meskipun saya tidak berpikir ada yang terpengaruh)
Erik the Outgolfer
1
@JoKing dengan baik saya tidak membahas casing dalam aturan, tetapi jika entah bagaimana menggunakan huruf kapital membuat skor Anda lebih rendah, maka tentu saja saya ingin melihat apa yang Anda buat. Saya katakan pergi untuk itu!
X1M4L

Jawaban:

41

JavaScript, 19 byte

Oktal diciptakan untuk melayani dua tujuan:

  • mengatur izin file di Linux
  • menjawab tantangan ini

alert(023+' bytes')

Cobalah online!

Arnauld
sumber
Apakah ini dianggap sebagai program lengkap?
ericw31415
1
@ ericw31415 Ini adalah program peramban , sebagaimana didefinisikan dalam jawaban meta ini .
Arnauld
5
1 karena akhirnya menjelaskan mengapa oktal tidak sepenuhnya tidak berguna!
sergiol
34

Perl 5 , 16 byte

Ada banyak cara lain untuk mendapatkan 16tetapi yang ini milik saya

say afpbytes^PPP

Cobalah online!

Ton Hospel
sumber
1
Bagaimana cara kerjanya?
caird coinheringaahing
9
@cairdcoinheringaahing Dalam perl Anda dapat meninggalkan tanda kutip pada string jika mereka terlihat seperti literal dan tidak bertentangan dengan kata kunci (dan sangat usang tetapi kami tidak peduli dalam golf), operator biner & | ^dan ~juga dapat diterapkan untuk string dan bekerja padanya seperti pada daftar nilai ASCII (jika dan hanya jika kedua belah pihak adalah string). Untuk |dan ^berfungsi seolah-olah string short diperpanjang dengan \0. Setelah itu adalah latihan sederhana untuk menemukan kombinasi huruf yang sesuai dengan hasil yang diinginkan,
Ton Hospel
26

7 , 23 karakter, 9 byte

54340045141332401057403

Cobalah online!

Ini adalah tantangan yang cukup sulit dalam bahasa yang seluruhnya terdiri dari angka, tetapi saya berhasil…

Ini hanya 9 byte dalam encoding 7's. (Sebenarnya, ini 8⅜ byte (23 × ⅜ - ¼ karena dua bit terakhir yang tertinggal 1 bit dapat dihilangkan), tetapi untuk pertama kalinya, persyaratan PPCG untuk mengumpulkan hingga seluruh jumlah byte sebenarnya merupakan keuntungan karena itu berarti bahwa 1 bit tambahan tambahan diperlukan dan karenanya tidak dilarang oleh pertanyaan.) Sebuah dump hex reversibel:

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

Tantangan utama penulisan program ini dalam 7 adalah bermain golf di bawah 10 byte (seperti menulis 7 tanpa menggunakan 0atau 1cukup sulit.) Ini menggunakan struktur yang sama dengan program "Hello world" standar:

5434004514133240105 7 403
5434004514133240105 memerintahkan 0-5 menambahkan literal ke ruang data
                   7      mulai bagian baru dari ruang data
                    403 literal lain ditambahkan ke ruang data
                         {implisit: eval bagian terakhir sebagai perintah}
                    4     swap bagian 1 dan 2 dengan bagian kosong antara
                      6    merekonstruksi perintah yang akan membuat   output bagian 1
                       3 (+ beberapa efek lain yang tidak kita pedulikan)

Dengan kata lain, kita mulai dengan membuat dua bagian ruang data; kami memiliki dua literal, yang masing-masing mendorong urutan perintah di sana. Bagian kedua (mereka mendorong stack-style jadi push pertama = pop terakhir) adalah urutan perintah yang cukup arbitrer tetapi didorong menggunakan urutan perintah 5434004514133240105(sehingga menghasilkan urutan data 5434664574733246765; ketika membahas 7 dalam teks, saya biasanya menggunakan font normal untuk perintah yang mendorong literal, dan berani untuk literal yang dihasilkan yang sesuai). Bagian pertama didorong menggunakan urutan perintah 403, menghasilkan 463. Kemudian bagian pertama disalin kembali ke program (perilaku implisit dari 7).

Perintah 463ini sekarang terdiri dari perintah (tebal) yang melakukan sesuatu dengan segera, bukan perintah (tidak tebal) yang hanya mendorong literal. 4mengatur ulang bagian untuk mendapatkan "string literal" kami ke bagian pertama. Kemudian 0lakukan operasi yang paling dikenal untuk 7: mengambil bagian dari ruang data, dan merekonstruksi urutan perintah yang paling mungkin membuatnya. Dalam kasus di mana urutan perintah asli adalah semua 0- 5, ini adalah 100% akurat (tidak mengherankan, karena perintah-perintah itu murni mendorong data dan dengan demikian meninggalkan bukti yang jelas tentang apa yang mereka lakukan), sehingga kami mendapatkan urutan asli kami 5434004514133240105kembali. Akhirnya, 3cetaklah.

Jadi hal yang tersisa untuk dilihat di sini adalah pengkodean string. Ini memiliki bahasa khusus domain sendiri:

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'

(Tidak ada "set karakter pilih: huruf kecil" di set karakter "digit dan simbol umum" - Anda harus menggunakan set karakter yang berbeda terlebih dahulu - jadi saya harus menggunakan huruf besar untuk bermain golf ini cukup pendek agar muat di bawah yang efektif 10) batas -byte.)

ais523
sumber
15

Kanvas , 8 byte

8 bytes+

Coba di sini!

Solusi 20 byte yang lebih menarik:

bytecount.innerText#

Coba di sini!

dzaima
sumber
3
OK, itu adalah cukup pintar.
Adám
Perhatikan bahwa salah satu batasannya adalah "Kode sumber Anda tidak dapat menyertakan digit dari jumlah byte Anda" sehingga solusi pertama tidak valid dalam kasus ini =)
Cyclonecode
1
@Cyclonecode Bahwa "8" tidak ada ASCII 8 reguler - itu adalah karakter 8-lebar penuh dalam versi kode unicode ini, meskipun benar-benar byte 0xD5, yang sama sekali tidak terkait dengan 8s
dzaima
11

PHP, 14 byte

<?=7*2?> bytes
Cyclonecode
sumber
8
Bagaimana dengan menempatkan bytesbagian di luar ?>? Cobalah online!
Jo King
@ JoKing hebat 3 byte kurang :)
Cyclonecode
1
Hanya fyi, mungkin yang terbaik adalah Anda membagi jawaban Anda menjadi beberapa jawaban jika Anda membahas lebih dari satu bahasa.
Conor O'Brien
@ ConorO'Brien - Oki akan melakukannya
Cyclonecode
8

PHP lebih lama dari 7.2 , 13 byte

Diasumsikan pengaturan default (peringatan E_NOTICE dinonaktifkan) dan versi PHP lebih tua dari 7.2.

Perlu diterjemahkan dengan xxd -r

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

Atau jika Anda lebih suka Base64

PD89fs7M352Gi5qMOw==

Cobalah online!

Konrad Borowski
sumber
6

Stax , 5 byte

╗↑╞ô╝

Jalankan dan debug itu

Dibongkar, sepertinya ini. Mode sumber yang dikemas membuat hal ini sepele dan tidak menarik.

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

Jika Anda tidak ingin menggunakan mode sumber dikemas, 6^p`5l@berfungsi selama 7 byte.

rekursif
sumber
1
Saya telah menurunkan jawaban ini, karena saya pikir menggunakan mode yang dikemas, sementara cara yang cerdas untuk menghemat byte, terasa seperti curang (yang tidak) paling buruk, dan tidak kreatif di terbaik. Daripada melakukan downvote untuk semua jawaban sumber terbatas Stax , saya akan membiarkan downvote ini untuk mencakup semua jawaban yang serupa.
caird coinheringaahing
1
Saya tentu setuju bahwa itu tidak kreatif. Tapi saya pikir kesalahannya terletak pada konsep restricted-source, bukan bahasa. Ini sebenarnya adalah cara paling langsung menghasilkan "5 bytes"menggunakan Stax.
rekursif
Saya setuju bahwa ada masalah dengan tantangan (maka mengapa saya sudah downvoted itu ), tapi aku masih tidak suka jawaban ini. Tolong jangan hapus itu (hanya peringatan awal), tidak ada yang salah dengan itu.
caird coinheringaahing
6

R , 16 byte

cat(4*4,"bytes")

Cobalah online!

Giuseppe
sumber
Bukankah 17 karena ruang Anda hilang?
PmanAce
@PmanAce "Output seharusnya hanya hitungan byte dari program Anda dan sebuah trailing bytes". Program ini 16 byte.
Giuseppe
catsecara default menambahkan spasi di antara inputnya.
Giuseppe
object.sizeoutput dalam format yang benar (dengan bytesdisertakan secara default). Mengganggu, terpendek aku bisa menemukan adalah 17: object.size(0)-39. TIO
Robin Ryder
1
Ternyata, dalam versi Hadley, vektor 1-panjang adalah panjang 48, jadi harus ada versi R di mana kode 16-byte ini bekerja: object.size(0)/3.
Robin Ryder
5

Python 3 , 25 24 18 byte

print(6*3,'bytes')

Cobalah online!

NieDzejkob
sumber
1
Tapi "4" ada di "24". Mungkin "33-9"?
rekursif
@recursive 3*8seharusnya baik-baik saja,
Kevin Cruijssen
@ whoops rekursif, perbaiki: P
NieDzejkob
5

05AB1E , 6 byte

₂¤“ÿ¡Ï

Cobalah online!


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

Alternatif untuk ₂¤meliputi: 5>, ₁¤,

Guci Gurita Ajaib
sumber
5
Sayang sekali ini tidak berhasil.
Magic Octopus Urn
5

Bash, 21 byte

"Baca kode sumber Anda sendiri" jelas bukan pemenangnya di sini, tetapi tidak ada orang lain yang mengirimkannya, jadi apa-apaan ini.

echo `wc -c<$0` bytes

Cobalah online!

thegreatemu
sumber
5

Retina , 15 byte


 bytes
*>w`..+

Program ini menghitung jumlah substring dengan setidaknya dua karakter dalam string "byte", dan kemudian mencetak jumlah ini dan string itu sendiri.

Cobalah online!

Leo
sumber
5

PHP + HTML, 16 byte

&#49;&#54; bytes

Ya, ini semakin dekat dengan penyalahgunaan celah, tapi saya merasa ini perlu diposting. Dan penggunaan PHP berarti bahwa jawaban ini secara teknis adalah ditulis dalam bahasa pemrograman Turing-lengkap. Tentu saja, bahasa templating HTML serupa lainnya akan bekerja dengan baik.

Demo langsung (tanpa PHP):

&#49;&#54; bytes

Ilmari Karonen
sumber
Kalahkan aku! Dan; biasanya bisa dihilangkan!
wedstrom
Ahh tapi kemudian akan 14/15 byte
wedstrom
4

dc , 14 11 byte

[ bytes]Bnn

Cobalah online!

-3 bytes oleh @Cows quack

NieDzejkob
sumber
[ bytes]Bnnmencukur beberapa byte
Kritixi Lithos
@Cowsquack terima kasih!
NieDzejkob
Bebek @cowsquack pergi MOO, saya akan menganggap: P?
Magic Octopus Urn
@MagicOctopusUrn Bebek, apa itu bebek? : P
Kritixi Lithos
4

MATL , 13 byte

'57$f}xiw'4-c

Cobalah online!

Ini mendorong string '57 $ f} xiw 'dan mengurangi 4, untuk mendapatkan 13 bytes. Ini dikonversi ke karakter menggunakan c.

Stewie Griffin
sumber
6EV' bytes'hadalah 12 (saya baru saja akan mempostingnya)
Giuseppe
1
meskipun itu pendekatan membosankan yang sama: P
Giuseppe
4

Oktaf , 23 byte

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

Cobalah online!

Dan ini:

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

Cobalah online!

Stewie Griffin
sumber
Jawaban pertama tampaknya baik-baik saja, tapi ... bagaimana cara yang kedua bekerja? oO
rafa11111
2
@ rafa11111 Mengurangkan 4dari (kode ASCII) '67$f}xiw'memberikan kode ASCII '23 bytes'. Kemudian, menyatu dengan string kosong '' mengubah kode ASCII menjadi karakter
Luis Mendo
2
@Luis Mendo Cukup pintar! Terima kasih telah mengklarifikasi!
rafa11111
4

Petit Computer BASIC, 11 byte

?9+2,"bytes

Menggunakan koma dalam pernyataan cetak akan memindahkan kursor ke kelipatan berikutnya dari ukuran tab saat ini. Dalam SmileBASIC, itu adalah 4 secara default, jadi ini akan menghasilkan 11 bytes(2 spasi) tetapi PTC BASIC menggunakan 3 sebagai gantinya, sehingga output memiliki spasi yang benar.

12Me21
sumber
4

APL (Dyalog Unicode) , 12 byte

Program lengkap yang secara implisit mencetak ke STDOUT.

'bytes',⍨3×4

Cobalah online!

,⍨ ditambahkan string ke hasil perkalian. Tampilan default APL untuk data tipe campuran memberikan ruang antara angka dan teks berikutnya.

Adm
sumber
Saya mungkin salah, tetapi tidakkah Anda memiliki 2 dalam hitungan byte dan program Anda? 3 * 4 harus baik-baik saja
fyrepenguin
@fyrepenguin Heh, benar, tentu saja. Bodoh sekali saya.
Adam
4

Brain-Flak , 100 BYTES

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

Cobalah online!

Menghasilkan bytesbagian dalam semua penutup. Seseorang yang akrab dengan Brain-Flak mungkin benar-benar bingung dengan semua yang ada ((<>))di awal, tetapi yakinlah, mereka hanya ada untuk menyalahgunakan tumpukan tinggi nilad ( []) dan tidak ada satupun dari yang 0mereka hasilkan dicetak.

Jo King
sumber
4

Haskell , 26 byte

main=putStr$"\50\54 bytes"

Cobalah online!


29 byte

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

Cobalah online!

Laikoni
sumber
Spasi yang tidak perlu sekarang dilarang, tetapi Anda bisa menggunakan $.
Ørjan Johansen
@ ØrjanJohansen Terima kasih telah menunjukkan.
Laikoni
4

Spasi , 112 byte

Hanya karena belum ada yang melakukannya:

   			    
	
 	   
   	 	  		
   	   	 	
   	 	 	  
   	 		  	
   	    	 
   	     

  
	
   
 
	  

 


   




Cobalah online!

Mencetak "BYTES" dalam huruf besar, karena huruf besar memiliki kode ASCII biner yang lebih pendek. Perintah dalam program ini, dalam notasi yang saya buat sendiri, adalah:

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
sumber
Ah, tidak memperhatikan sudah ada jawaban Whitespace .. Ini jawaban yang lebih pendek ( 104 bytes ). . Akan menghapus milik saya lagi. Ini sama dengan tambahan highlight dan penjelasan.
Kevin Cruijssen
Oh, hmm. Saya kira teksnya cukup pendek sehingga mengimplementasikan loop sebenarnya lebih menyakitkan daripada sekadar mengulangi PrintChar. (Dan saya tahu, saya selalu dapat membatalkan NNN terakhir, tetapi saya benar-benar suka tidak memiliki kesalahan.)
aschepler
4

Java 5 atau 6, 44 byte (program penuh)

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

Tidak ada TIO-link, karena Java 5/6 sudah tua .. Di Java 5/6 dimungkinkan untuk memiliki enum dengan kode alih-alih metode-wajib main, membuatnya lebih pendek untuk tantangan program penuh.

Juga kesalahan java.lang.NoSuchMethodError: main\nException in thread "main"dalam STDERR setelah mencetak ke STDOUT, yang baik-baik saja sesuai dengan meta (tetapi jika tantangan akan melarang kesalahan tambahan untuk STDERR, System.exit(0);dapat ditambahkan (dan angka oktal harus diperbarui) untuk mencegah kesalahan.

Disarankan oleh @ OlivierGrégoire (dan tip Java yang relevan ).

Java 8+, 74 byte (program lengkap)

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

Cobalah online.

Java 8+, 16 15 byte (fungsi lambda)

v->0xF+" bytes"

-1 byte terima kasih kepada @ OliverGégoire .

Cobalah online.

Kevin Cruijssen
sumber
2
Secara teknis bukan program lengkap :)
OOBalance
@OOBalance Ups .. entah bagaimana membacanya, terima kasih atas koreksinya.
Hilang
1
37*2berisi 7, jadi tidak valid. Solusi alternatif Anda baik-baik saja.
OOBalance
1
v->0xE+"bytes"atau v->0xF+" bytes". Tidak dapat menguji tetapi harus bekerja. Tidak ada yang mengatakan skor dan "byte" harus dipisahkan.
Olivier Grégoire
1
@ OlivierGrégoire Saya tahu, saya tahu. ;) Ketika saya memposting program lengkap saya ragu untuk menjawabnya sebagai enum memikirkan tip-jawaban Anda . Apakah Anda tahu ada kompiler online yang masih mendukungnya? Saya lebih suka memiliki tautan dengan kode tes untuk jawaban saya ..
Kevin Cruijssen
4

Applescript, 15 byte

Ya, saya pergi ke sana.

9+6&”bytes”
DonielF
sumber
1
Tapi ...Your source code can not include any of the digits from your byte count
nicael
@nicael Dang, kau benar.
Sebentar
Koreksi saya jika saya salah, tetapi bukankah karakter multibyte (3 byte di Unicode jika saya ingat dengan benar), jadi ini lebih dari 11 byte?
caird coinheringaahing
@cairdcoinheringaahing ... Tembak. Anda benar - “adalah 2 byte, menaikkan ini menjadi 15.
DonielF
apakah ini masih belum mencetak 11?
Lemon Destructible
3

Batch, 32 byte

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

COMSPECbiasanya %WINDIR%\system32\cmd.exejadi saya mengekstrak substring dari 10 hingga 8 karakter dari akhir. Versi referensi diri 16 byte lama:

@echo %~z0 bytes

Untungnya jumlah byte bukan kelipatan 10.

Neil
sumber
@Manatwork OK, saya belum melihat itu, ini versi baru.
Neil
3

JavaScript, 16 15 byte

x=>0xf+' bytes'
Yair Rand
sumber
_=>5*3+' bytes'
Neil
@Neil Baik kode dan byte-count berisi 5dalam kasus itu ..
Kevin Cruijssen
@KevinCruijssen Bah, saya tidak percaya saya mengabaikannya.
Neil
Pengajuan diharuskan menjadi program penuh " tulis program lengkap untuk menampilkan skor golf code-nya sendiri!"
Kritixi Lithos