Program perbaikan-pendeteksian kesalahan

14

Tugas Anda adalah membuat program di mana jika ada satu karakter yang dihapus, ia akan mendeteksi karakter mana yang dihapus dan kemudian memasukkan kembali karakter yang dihapus ke dalam file sumbernya sendiri.

Misalnya, jika program Anda RadiationHardeneddiubah dan diubah RadiaionHardened, maka program Anda harus menampilkan bahwa byte ke-5 (0-diindeks) telah dimodifikasi dan kemudian sumber program harus RadiationHardenedsegera setelah eksekusi.

Catatan dan aturan

  • Anda dapat berasumsi bahwa tepat satu karakter telah dihapus dalam kode sumber sebelum eksekusi. Perilaku untuk program yang tidak dimodifikasi tidak ditentukan.
  • Anda dapat mengasumsikan byte yang diubah akan dihapus, tidak ditransposisi, dimasukkan, atau diganti.
  • Jika menjalankan beberapa karakter yang sama, Anda dapat melaporkan indeks pertama atau terakhir dari jalankan, tetapi konsisten tentang yang Anda gunakan. Misalnya baaaddihapus untuk baaddapat melaporkan 1 atau 3 (nol diindeks), tetapi harus sama di seluruh program.
  • Anda tidak perlu menuliskan seluruh sumber ke file sendiri. Anda hanya perlu memasukkan kembali byte yang dihapus.
  • Tidak seperti aturan umum untuk quines yang dikeraskan dengan radiasi, mendeteksi byte yang diubah dari membaca kode sumber program sendiri adalah permainan yang adil.
  • Anda dapat menampilkan indeks byte yang diubah melalui format apa pun yang masuk akal. Konsisten tentang apakah itu 0-diindeks atau 1-diindeks atau notasi lainnya. Anda bahkan dapat menampilkan nomor dalam string template.

Ini adalah sehingga program terpendek menang.

Semoga berhasil!

EDIT1: perubahan persyaratan dari penggantian menjadi penghapusan

EDIT2: aturan tambahan untuk menjalankan duplikat

Beefster
sumber
4
Ini jauh lebih sulit daripada menangani penghapusan sewenang-wenang . Kebanyakan non-esolangs jelas keluar (itu biasanya tidak mungkin untuk menulis setiap program yang sisa-sisa syntactially berlaku di bawah setiap modifikasi satu-byte). Bahkan Fungeoids sebagian besar digagalkan (mereka tidak dapat melakukan apa-apa jika byte ke-0 diubah menjadi perintah program berhenti ). Saya pikir mungkin satu dari dua IP bisa bertahan dalam sesuatu seperti Fission tetapi *perintahnya membunuh semua IP. Kardinal juga tidak bisa melakukannya, karena @.
Lynn
Ini dapat diubah menjadi tempat di code-challengemana setiap program diizinkan untuk mendeklarasikan daftar byte yang dilindungi terhadap radiasi (tetapi tidak lebih dari - katakanlah - 50% dari ukuran total). Sistem penilaian sederhana dapat menghitung setiap byte yang dilindungi radiasi sebagai 10 byte, atau sesuatu seperti itu.
Arnauld
(Tapi itu mungkin mengarah pada beberapa jawaban yang sepele dan tidak terlalu menarik.)
Arnauld
1
@JoKing, melaporkan apakah hilang tidak ada masalah, asalkan konsisten.
Beefster
2
"Anda mungkin memerlukan file untuk dinamai nama tertentu dan dijalankan dari direktori tertentu" - hati-hati, seseorang hanya dapat meminta nama file menjadi program yang benar ...
ASCII-satunya

Jawaban:

9

Befunge-98 (FBBI) , 344 296 248 byte

20020xxnngg33%%!!2200gg''00--3300gg33%%!!4400gg55%%!!22kk++55##rr55kk::00gg\\11pp00gg\\11++11pp22++00::pp00gg\\11++00gg--!!zz!!22**++00::gg00gg8844**--!!55++jj..''gg::00rr00::gg\\--..''220011''0011::''002211''223311''00441144kkppgg11001100::99oo@@

Cobalah online!

Verifikasi!

Befunge-98 adalah bahasa esoterik pertama yang bisa saya temukan yang merupakan 2D dan memiliki keluaran file. Ini adalah solusi lengkap (dengan trailing newline) yang disimpan dalam file bernama karakter tab. Ini menghasilkan sebagai 0-diindeks, dan menampilkan indeks pertama dalam serangkaian karakter (meskipun hanya ada pasangan).

Ada beberapa golf yang harus dibuat, terutama karena ada 15 no-op dalam kode , sekarang hanya satu no-op! Saya akan berusaha membuat ini lebih pendek, dengan tujuan mencapai atau di bawah 200 byte.

Jo King
sumber
Oh wow! Saya tidak berpikir ini mungkin
MilkyWay90
3

Unefunge-98 (PyFunge) , 118 byte

22xx00##rr33kk::gg\\11--pp22++00ppgg\\11++gg--!!zz!!22**--00gg::gg8844**--!!22++jj##''rr++..gg''2200pp0011--00::99oo@@

Cobalah online!

Verifikasi!

Saat bermain golf jawaban Befunge-98 saya, saya menyadari saya bisa menyimpan beberapa byte dengan memindahkannya ke Unefunge, karena saya hanya perlu khawatir tentang satu dimensi daripada dua. Ini juga membuka banyak kemungkinan pintasan dan golf, yang membuat solusi baru jauh lebih kecil.

Penjelasan (tidak terduplikasi):

2x        Set the delta of the movement to 2
          This means the pointer moves 2 cells every step
          This will also initialise a counter as 2 (unless a 2 has been removed)
  0       Create the cell counter  (This will be stored at cell 0)
   #r     Enter the loop
     3k:                 Create 3 more copies of the counter
        g                Get the cell at the counter's position
         \1-p            Put it in the cell before that position
             2+0p        Add 2 to the counter and put it in cell 0
                 g       Get the cell at the counter's position
                  \1+g   Get the next cell
                      -!z!2*      If they are identical, push two, else 0
                            --    Subtract it from the total counter
                              0g:g84*-!   If the next character is a space
                                       2+j  r   Exit loop
                                         j#'    Else jump back to the start

Once the loop is over
+      Add the negative counter to the total counter
 .     And print
   '20p          Replace the 2 in cell 0 that was overwritten
             o   Write to a file named
            9    Tab
       01-       The cells from -1 to
  g              The total number of cells
              @  And exit the program
Jo King
sumber