Saya memiliki seratus kubah, masing-masing di dalam yang lain. Setiap lemari besi memiliki kata sandi, yang terdiri dari satu nomor.
95 43 81 89 56 89 57 67 7 45 34 34 78 88 14 40 81 23 26 78 46 8 96 11 28 3 74 6 23 89 54 37 6 99 45 1 45 87 80 12 92 20 49 72 9 92 15 76 13 3 5 32 96 87 38 87 31 10 34 8 57 73 59 33 72 95 80 84 11 4 11 11 37 71 77 91 49 21 52 48 43 11 77 52 64 3 9 21 38 65 69 84 96 78 7 71 80 78 3 97
Terlalu sulit untuk mengingat semua kata sandi ini, dan tidak aman untuk menyimpan kata sandi di selembar kertas. Satu-satunya solusi yang dapat saya pikirkan adalah menggunakan program dengan tepat seratus karakter. Kata sandi ke n
brankas akan ditemukan dengan memperlakukan n
karakter pertama dari kode sebagai program.
Dengan demikian, karakter pertama dari program, jika dijalankan sebagai program dengan sendirinya, harus keluar 95
. Dua karakter pertama sendiri harus menampilkan 43
. Seluruh program harus menampilkan 97
.
Saya akui ini sangat sulit. Jadi lakukan yang terbaik. Usahakan program Anda berfungsi sebanyak mungkin , dan saya akan menghafal kata sandinya.
Aturan
- Jika ada dasi, pemenangnya adalah pengajuan paling awal.
- Celah standar dilarang. Itu termasuk membaca dari file lain atau dari Internet.
- Anda memiliki beberapa opsi untuk kode:
- Program lengkap yang mencetak nomor yang benar
- Fungsi yang mengembalikan atau mencetaknya
- Ekspresi yang mengevaluasi itu (misalnya dalam C,
4+3
mengevaluasi ke7
)
- Anda dapat mengasumsikan lingkungan REPL
- Anda dapat menggunakan teknik berbeda untuk setiap nilai
n
. Misalnya, Anda dapat menggunakan bahasa yang berbeda untuk masing-masing bahasan
, atau terkadang menggunakan program lengkap dan terkadang fungsi.
Catatan: Skenario ini sepenuhnya fiksi. Jika Anda memiliki masalah serupa, jangan memposting kata sandi Anda secara online.
The only solution I can think of is to use a program with exactly one hundred characters.
Apakah ini berarti setiap program harus tepat 100 karakter?Jawaban:
> <> (Ikan), 95
Mulai setelah
'
menempatkan semua karakter ke tumpukan dan pada akhir baris itu membungkus; menutup string dengan hal yang sama'
; menampilkan bagian atas tumpukan sebagai angka (n
) dan menyelesaikan eksekusi (;
).Karakter untuk 13 dan 10 diubah menjadi ruang untuk tidak merusak tata letak kode (karena ikan adalah bahasa 2D.)
Beberapa ASCII yang tidak dapat dicetak menghilang dalam jawabannya. Program yang benar di sini.
Terima kasih untuk Martin Büttner dan Sp3000 untuk peningkatan 2 dan 5 byte.
Hex dump:
sumber
'
string parsing, hanya"
, dan ada beberapa"
s dalam program yang perlu diganti./fish.py <(head -c 99 raw.php)
manaraw.php
adalah nama yang entah bagaimana berakhir di file sumber saya download. Rapi! Saya tidak bisa mengatakan saya memahaminya ...CJam, 40
Saya hanya menggunakan pendekatan serakah (sebagian besar waktu) untuk mencetak angka berikutnya yang mungkin (tanda caret berakhir dengan benar):
Nomor-nomor berikut dicetak dengan benar:
Uji di sini.
sumber
CJam, 56
Berikut ini adalah pendekatan yang agak lebih rumit. Mencetak 56 angka terakhir dengan benar:
Kemungkinannya, SE telah menelan beberapa karakter, jadi ini adalah pastebin . Anda dapat mencoba kode di sini .
Itu memanfaatkan fakta, bahwa tantangan meminta program dalam karakter, jadi saya menggunakan karakter Unicode untuk menyandikan 56 karakter terakhir dalam suatu fungsi, yang kemudian meninggalkan elemen yang benar pada stack dengan menambah variabel pada setiap permintaan dan memilih elemen yang sesuai. Sisa kode hanya memanggil fungsi berulang kali.
Program yang benar pertama adalah yang berakhir pada yang kedua
F
dalam kode. Saya telah mengutak-atik panjang karakter yang akan dikodekan untuk sementara waktu sampai saya mencapai keseimbangan yang tepat untuk memanfaatkan sebanyak mungkin. Satu atau dua lebih mungkin dilakukan dengan pendekatan ini.sumber
Pyth,
9293Kode di atas jelas akan kacau karena SE menghapus karakter kontrol, jadi temukan kode yang sebenarnya di sini
Logikanya sederhana, string adalah representasi karakter dari setiap angka, kecuali untuk 3 pertama yang digunakan oleh logika konversi dan beberapa kutipan dan baris baru yang saya ganti dengan karakter dummy.
Saya akan mencoba meningkatkan skor di sini.
Cobalah online di sini
sumber
(antik) C - 88
Tidak perlu untuk semua bahasa golf berdedikasi konyol ini. Lebih baik kembali ke masa lalu yang indah, sebelum pemakan quiche dan omong kosong "program = algoritma + data" mereka menghancurkan semua kesenangan.
Kode adalah fungsi C, disimpan sebagai string.
Ini mengembalikan nilai biner sebagai integer.
Jalankan di DosBox dengan Borland Turbo C 2.0.
Tidak ada karakter kontrol dalam string, jadi salin-tempel harus berfungsi.
Kompilasi dengan
tiny
model memori atau yang lain ...Jika Anda membongkar awal string, Anda akan melihat sesuatu seperti:
karena
si
digunakan sebagai alamat fungsi, itu menunjuk langsung ke kode, diikuti oleh kata sandi.Semua nilai digeser 35 untuk menghindari keluarnya karakter kontrol dan tanda kutip ganda.
Panjang kode 11 byte, sehingga akan bekerja hingga 12 karakter.
Sayangnya, nilai ke-11 (34) terlalu rendah untuk menghasilkan kata sandi yang valid dengan nilai shift yang meningkat (
ret
opcode adalah 195, jadi Anda akan memerlukan shift 161, dan shift maksimal untuk menghindari rollover adalah 255-99 = 156) .11 karakter akan menghasilkan nilai yang salah, dan PC virtual Anda akan mengalami perilaku tidak terdefinisi parah (dan biasanya mematikan) dengan 10 karakter atau kurang.
sumber
Matlab
3739Anda dapat menggunakan bagian (tanpa titik koma) dari ide ini dengan bahasa pemrograman apa pun yang Anda suka, yang mencetak hasilnya langsung ke konsol. Ini akan menghasilkan setidaknya 39 kali jawaban yang benar. (Saya tidak memeriksa yang hanya memiliki setengah angka yang dapat memberikan jawaban yang benar, tetapi sejauh ini saya telah menemukan dua.)
sumber
code="43+13+11-33+54;81;78;8+20;74+15-83;01+79-59-12+6-2;;87+0-53+39;72;;11+00+66-56+22;52;3*7+48;78-7+7+0"; key="95 43 81 89 56 89 57 67 7 45 34 34 78 88 14 40 81 23 26 78 46 8 96 11 28 3 74 6 23 89 54 37 6 99 45 1 45 87 80 12 92 20 49 72 9 92 15 76 13 3 5 32 96 87 38 87 31 10 34 8 57 73 59 33 72 95 80 84 11 4 11 11 37 71 77 91 49 21 52 48 43 11 77 52 64 3 9 21 38 65 69 84 96 78 7 71 80 78 3 97".split(" "); res=0; for(q=0; q<100; ++q) try{ if(eval(code.substr(0,q+1))==key[q]) console.log(++res,q+1,key[q]) } catch(e) {}
- ini hanya menunjukkan 28 pertandingan‌​
setelah00+
012345679+-*;
Di luar kompetisi: Javascript, 173
Berikut ini adalah "solusi", yang tidak mengikuti aturan dalam arti mengandung program jauh lebih lama dari yang dibutuhkan, tetapi pada panjang dasar 152 karakter akan dihasilkan
95
, dan untuk setiap karakter numerik berikutnya ditambahkan ke dalamnya, hingga 22 , itu akan menampilkan kata sandi tambahan:Sayangnya, itu hanya berfungsi hingga 22 karakter (setidaknya dalam simpul REPL apa pun di atas yang tampaknya diabaikan), yang saya percaya merupakan batasan dari representasi angka dalam bahasa. Jika bukan karena batasan ini, gunakan string kata sandi penuh
(membawa total panjang ke 329 karakter) akan memungkinkan logika ini untuk mengeluarkan setiap kata sandi.
Kode ini tidak terlalu pintar, hanya memangkas beberapa karakter dibandingkan dengan solusi yang paling sepele, menggunakan:
Sebagian besar saya hanya tertarik untuk menulis program Javascript yang valid dengan panjang bervariasi, karena bahasanya tidak terlalu cocok untuk bermain golf pada umumnya.
Saya baru mengenal codegolf, saya minta maaf jika memposting solusi yang jelas tidak valid disukai.
sumber
Python 2, 39
Saya menulis sebuah skrip yang mencoba banyak kombinasi ekspresi, dan mengujinya terhadap kombinasi aman. Yang terbaik yang bisa saya kelola adalah 39 pertandingan. Saya terkejut berapa banyak kombinasi yang menghasilkan skor 39. Saya telah memasukkan sampel dalam jawaban saya.
Saya mencoba memasukkan
^&|
operator logis tetapi aturan diutamakan menjadi rumit.sumber
DEBUG.COM, 93
Pemakaian:
dan hasilnya muncul di
AL
sumber