Program Penilaian Diri

15

Kami memiliki tantangan untuk menampilkan skor Anda sendiri , tetapi sepertinya semua jawaban di sana hanya berupa hardcode keluaran dan itu membosankan 1 . Jadi mari kita memiliki tantangan baru. Program keharusan output panjang sendiri dalam byte diikuti oleh string " bytes", tetapi untuk mencegah solusi hardcoded jika kita mengurangi ukurannya dengan menghapus salah satu byte, program baru juga harus keluaran itu count byte baru, masih diikuti oleh " bytes". Output tidak perlu peka huruf besar-kecil. Anda juga dapat memilih untuk mengeluarkan baris tambahan.

Jawaban Anda akan dinilai dalam byte dengan lebih sedikit byte menjadi lebih baik.


1: Saya sebenarnya suka beberapa jawaban di sana.

Posting Rock Garf Hunter
sumber
Mungkin Anda bisa mengubah nama tantangan menjadi "program yang dapat dimodifikasi sendiri" atau sesuatu yang serupa.
dylnan
Bisakah Anda menggunakan bahasa yang dipatuhi atau hanya ditafsirkan?
Logern
@Logern Anda bisa menggunakan salah satunya.
Post Rock Garf Hunter
2
Argh. Saya menghabiskan setengah jam membuat solusi Hexagony , tetapi ketika saya pergi untuk mengujinya, menghapus byte membuat hexagon menyusut ! :(
Jo King
1
@WW Apa yang saya maksudkan adalah " 1 bytessecara teknis tata bahasa yang salah, tetapi dengan asumsi bahasa tidak memiliki built-in untuk menampilkan string" byte "dalam <= 2 byte, program akan lebih panjang dari 3 byte, jadi tidak masalah "- toh itu tidak masalah.
user202729

Jawaban:

16

Backhand , 40 36 29 byte

vv""sseettyybb  ""jjHHOO]

Cobalah online! Verifikasi!

Jika ragu, gandakan semuanya. Ini menggunakan kemampuan Backhand untuk memindahkan lebih dari satu langkah sekaligus untuk menerapkan redundansi. Semua unsintables memiliki nilai byte 28.

Penjelasan:

Program non-iradiasi:

v       Reduce step count to 2
  "    Start string literal
    s e t y b        Push the " bytes" part of the output
                  " Push 28 twice and end the string literal
                       j    Jump to the 28th position (0 indexed) 
                             ]   Increment the 28 to 29
                           O     Print the 29
                         H       Halt and output the entire stack

Program iradiasi:

Jika ada karakter yang dihapus, setiap karakter setelah itu digeser ke bawah.

vv"sseettyybb
v " s e t y b     The same instructions are still executed

Namun, alih-alih melompat ke ], itu malah mencerminkan akhir program dan mendarat di Osebaliknya.

                             v  28th character (0 indexed)
vv""sseettyybb       ""jjHHOO]
v""sseettyybb       ""jjHHOO]OOHHjj"".....
                             ^ 28th character, reflecting off the end of the code
Jo King
sumber
3

Pesona Rise , 47 byte

>>yyLL     @"setyb 64"/
"47 bytes"@"setyb 64"L\

Cobalah online!

Yang kurang lebih merupakan port dari jawaban Geiger Counter saya , tetapi dengan output yang berbeda (yang merupakan port dari jawaban Klein).

>>yyLLdiperlukan untuk Runic untuk menghasilkan (setidaknya) satu IP, menggabungkan dua IPS, dan merefleksikan kembali ke kiri, sehingga semua variasi menghasilkan satu IP bergerak kiri. Bisa diganti dengan yy<<tetapi tidak menyimpan byte.

Reflektor di sebelah kanan memaksa IP ke string kiri bawah, sehingga penghapusan salah satu dari kanan atas memungkinkan IP ke string kanan atas. Menghapus byte di tempat lain di sepanjang baris atas menyesuaikan reflektor atas untuk duduk di atas L (memungkinkan program ke kanan bawah). Penghapusan byte di sepanjang bagian bawah menyesuaikan reflektor itu (atau menghilangkannya) sehingga karakter terakhir secara implisit diisi dengan spasi, yang memungkinkan IP terpental kedua sisi reflektor kanan atas dan ke string kanan atas.

Kelebihan ruang mengecewakan, meskipun. Tetapi semua upaya untuk menguranginya telah menghasilkan program yang lebih besar, program dengan ukuran yang sama, atau program yang tidak 100% tahan radiasi. Baik jawaban Klein dan> <> di sini menggunakan fitur yang tidak tersedia di Runic.

Draco tidak lagi percaya pada SE
sumber
2

> <> , 43 39 byte

||vn-{"' bytes"-10/
 o>o<"38 bytes"[0/0

Cobalah online! Verifikasi!

Dalam program yang tidak diiradiasi, kami menambahkan 0ke '(39), dan dalam program yang diiradiasi kami melewatkan angka 0 dan menambahkannya -1. Jika ada sesuatu yang dihapus dari baris atas, kita beralih ke baris bawah dan hanya keluaran 38 bytes.

Jo King
sumber
2

Hexagony , 71 byte

//.........||.>e;s;@..\;t;y;b<>}F"+!P0;/|/F!P0$@;<...t;ye;bs/.........)

Cobalah online! Verifikasi!

Saya menghabiskan waktu terlalu lama untuk mencoba ini menjadi hexagon ukuran 5, tetapi saya harus puas dengan ukuran di bawah 6 sebagai gantinya :(.

Diperluas:

      / / . . . .
     . . . . . | |
    . > e ; s ; @ .
   . \ ; t ; y ; b <
  > } F " + ! P 0 ; /
 | / F ! P 0 $ @ ; < .
  . . t ; y e ; b s /
   . . . . . . . . .
    ) . . . . . . .
     . . . . . . .
      . . . . . .

Saya awalnya membuat ini dengan )satu baris lebih rendah, tetapi ternyata di situlah letak pembagian antara ukuran 5 dan 6 segi enam. Ini berarti ketika byte dihapus, ukuran semua bergeser ke bawah dan merusak jalur. Saya yakin bahwa ukuran 5 adalah mungkin.

Jo King
sumber
Jika saya memahami ini dengan benar, tidak bisakah Anda meletakkan )baris lebih rendah dan kemudian hanya menempatkan no-op setelah itu sehingga itu adalah segi enam ukuran 6?
EdgyNerd
@ EdgyNerd Jika Anda meletakkan no-op setelahnya daripada itu dapat dihapus tanpa mempengaruhi program
Jo King
2

Klein 000, 41 byte

<<@"setyb "$"4"+"0"/
..@"setyb 04"(....<1

Cobalah online! Verifier JoKing

Saya pikir jawaban ini mirip dengan jawaban <> JoKing , tetapi saya tidak membaca> <> jadi saya tidak yakin.

Ada 4 jenis penghapusan byte di sini

  1. Satu byte dihapus dari baris pertama sebelumnya /. Dalam kasus ini, slash secara efektif dipindahkan ke kiri satu ruang, membelokkannya ke garis bawah dan mencegah bagian kode yang dimodifikasi dari dieksekusi. Ini menyebabkan kita menjalankan kode ("40 bytes"@, yang menghasilkan 40 bytes.

  2. Yang pertama /dihapus dari baris pertama. Dalam hal ini kita menjalankan kode "0"+"4"$" bytes"@, yang merupakan cara berbelit-belit atau pencetakan 40 bytes.

  3. Baris baru dihapus. Ini membuat kita mulai dari akhir baris kedua dan kode yang dihasilkan (dengan noops dihapus) adalah 1("40 bytes"@, yang hanya dicetak 40 bytes.

  4. Satu byte dari baris terakhir dihapus. Hal ini menyebabkan 1pada akhir baris pertama dipindahkan ke kiri dan mencegahnya ditambahkan ke tumpukan ketika runcing dibelokkan oleh /. Kode "0"+untuk alasan itu mendorong 0alih-alih 1, sisa kode mengubah 0menjadi 40 bytes.

Klein 001, 41 byte

\("40 bytes"@......1
..@"setyb "$"4"+"0"/

Cobalah online! Verifier JoKing

Inilah jawaban menggunakan topologi yang berbeda. Ukurannya sama tapi saya pikir ada ruang untuk perbaikan.

Posting Rock Garf Hunter
sumber