BASIC (ZX Spectrum), skor 244 (skor baru 247) [apakah ini curang?]
Cuplikan 1:
2356 PRINT PEEK (PEEK 23635+256*PEEK 23636+2)+256*PEEK (PEEK 23635+256*PEEK 23636+3)-56-66
Cuplikan 2: :
Cuplikan 3: REM
Cuplikan 4-244: Cuplikan karakter tunggal, menggunakan semua karakter yang tidak ada dalam cuplikan 1, 2 dan 3.
Penjelasan
Karakter
Pada Spectrum, PRINT
adalah karakter tunggal (kode 245). The snippet 1 kegunaan 11 karakter yang berbeda: 2
, 3
, 5
, 6
, +
, -
, *
, (
, )
, PRINT
dan PEEK
Apa yang Anda lihat sebagai ruang adalah bagian dari karakter PRINT
dan PEEK
, sehingga ruang itu sendiri belum digunakan. Saya memutuskan untuk memberikan nomor baris 2356 karena ini adalah satu-satunya digit yang ada dalam kode.
Karakter 13 dan 14 tidak diperbolehkan. Itu berarti ada 243 karakter tersisa untuk cuplikan 2-244, dimulai dengan :
dan REM
untuk menghindari kode yang akan menghasilkan kesalahan atau melakukan hal lain.
Bagaimana itu bekerja
Inilah sebabnya saya tidak yakin apakah jawaban ini sesuai dengan buku.
23635 adalah lokasi memori untuk PROG variabel sistem 16-bit, disimpan sebagai LH. (Nilainya biasanya 23755. Tetapi terlepas dari hasil yang salah jika kebetulan tidak terjadi, menggunakan nomor ini secara langsung, meskipun akan mempersingkat kode, akan dikenakan biaya karakter digit tambahan.) Nilai PROG adalah lokasi memori di mana program itu sendiri disimpan. Dua byte pertama adalah nomor baris yang disimpan sebagai HL, dua byte berikut adalah panjang baris yang disimpan sebagai LH. Begitulah cara program melihat panjang garisnya sendiri, jadi sesuatu yang sesuai perlu dikurangi
Menyimpan karakter
Mempertimbangkan bagaimana angka disimpan, garis bisa diakhiri dengan -114 sehingga snippet 1 akan menghasilkan 1. Tapi saya tidak ingin menggunakan angka tambahan, jadi saya malah mengambil dua angka 2 digit, yang kemudian harus ditambah ke 122; 56 dan 66 melakukannya dengan baik.
Kode ini sedikit jelek dengan semua nilai penghitungan dan penghitungan PROG ( PEEK 23635+256*PEEK 23636
) dua kali. Tetapi jika saya menyimpannya dan kemudian menggunakan nilai yang disimpan, itu akan memerlukan karakter / potongan tambahan - garisnya bisa mulai seperti
2356 LET p=PEEK 23635+256*PEEK 23636: PRINT PEEK (s+2)...
yang akan menggunakan 4 karakter tambahan: LET
, p
, =
dan :
.
Mungkin saya akan merekayasa ini sehingga semua angka dihitung dari angka yang hanya menggunakan 1 digit dan mendapatkan 3 snippet.
EDIT:
Berikut ini cuplikan baru 1 (itulah bagaimana satu baris panjang terbungkus-ditampilkan pada Spectrum, jadi jika Anda ingin menguji kode, itu akan membantu Anda melihat bahwa Anda mengetiknya dengan benar):
1111 PRINT +PEEK (PEEK (11111+11
111+1111+(1+1+1)*(111-11)+1+1)+(
111+111+11+11+11+1)*PEEK (11111+
11111+1111+(1+1+1)*(111+1-11))+1
+1)+(111+111+11+11+11+1)*PEEK (P
EEK (11111+11111+1111+(1+1+1)*(1
11-11)+1+1)+(111+111+11+11+11+1)
*PEEK (11111+11111+1111+(1+1+1)*
(111+1-11))+1+1+1)-111-111-111-1
11-111-111
Saya bisa mendapatkan potongan lain dengan menghindari +
dan hanya puas dengan -
. Saya tidak akan mencobanya, ini sudah cukup cobaan.