Berpotensi sangat sulit, tetapi saya telah melihat beberapa hal luar biasa keluar dari situs ini.
Tujuannya adalah untuk menulis program, dalam bahasa apa pun, yang melakukan apa pun yang Anda inginkan. Tangkapannya adalah bahwa program tersebut harus valid setelah setiap pergantian karakter.
Pergeseran karakter melingkar sangat mirip dengan Pergeseran Sirkular . Beberapa contoh hal-hal saya jelas.
Untuk program int main() { return 0; }
bergeser ke kiri dengan 6 karakter menghasilkan: in() { return 0; }int ma
bergeser ke kiri dengan hasil 1 karakter: nt main() { return 0; }i
bergeser ke kanan dengan hasil 10 karakter: eturn 0; }int main() { r
Namun, program ini jelas tidak mematuhi aturan.
Aturan
- Bahasa apapun
- Pemenang ditentukan oleh jumlah suara
- Solusi yang melakukan hal yang sama, atau hal yang sama sekali berbeda untuk setiap rotasi, akan menerima 100 virtual up-vote untuk skor mereka.
PEMBARUAN Saya pikir ini sudah berlangsung cukup lama. Pemenang, dengan suara terbanyak (termasuk suara virtual) adalah Mark Byers. Sudah selesai dilakukan dengan baik!
sumber
Jawaban:
Gunakan bahasa yang tepat untuk tugas itu. Dalam hal ini, itu Befunge .
Bahasa ini secara alami memungkinkan rotasi karena:
Program Befunge ini mencetak output yang sama persis ("Halo") terlepas dari berapa banyak "pergeseran karakter melingkar" yang Anda gunakan:
Ini berjalan pada Befungee . Ini mengharuskan papan ditingkatkan (bukan 80 karakter default) Ini bisa dijalankan seperti ini:
Ini bekerja dengan terlebih dahulu secara dinamis menghasilkan dan menyimpan program yang mencetak "Halo" dan kemudian menimpa byte pertama untuk mengarahkan kontrol ke program yang baru ditulis. Program ini ditulis dua kali sehingga jika byte tidak ditulis dengan benar pertama kali, itu akan diperbaiki kedua kalinya.
Idenya dapat diperluas untuk menghasilkan program kompleksitas sewenang-wenang apa pun.
sumber
Brainf * ck
Pilih alat yang tepat untuk pekerjaan itu - sebuah pepatah yang tidak pernah lebih relevan daripada pekerjaan ini di sini!
Program unshifted yang Anda lihat di sini hanya mencetak
SHIFT
(plus baris baru). Pergeseran melingkar akan menghasilkan berbagai output lainnya, meskipun selalu akan menghasilkan enam karakter ASCII.sumber
Commodore 64 BASIC
?
kependekan dariPRINT
, dan:
merupakan pemisah pernyataan, jadi:Variasi yang lebih panjang tentu saja mungkin:
dll ...
sumber
Naskah Golf
Program ini mencetak beberapa angka yang selalu berjumlah 2, terlepas dari bagaimana program digeser:
Garis cetakan pertama
1010
(10 dalam biner), garis cetakan kedua02
dan semua jalur lainnya dicetak2
.Memperbarui:
Program ini dapat diuji di sini . Harap dicatat bahwa saya telah menambahkan
n
s di akhir setiap baris hanya untuk memformat output; ini dapat dihapus dan program masih berfungsi.sumber
Ruby, mungkin salah satu solusi terpendek yang mungkin:
Dan satu lagi yang sedikit lebih panjang dan lebih menarik:
sumber
biner x86 16 bit
Dibuat secara manual dengan bantuan ( 1 2 ) tabel, nasm, dan ndisasm ini. Ini akan selalu kembali tanpa crash atau infinite loop, karena tidak ada byte yang melompat atau mengubah stack dan itu diisi dengan NOP untuk mengakhiri dengan
ret
instruksi byte tunggal dalam hal apa pun.Dalam sebagian besar kasus, ini akan menghasilkan
FOO
atau menguranginya. JikaAX
rusak, ini akan memanggil int 10 acak (ini mengubah kecepatan kursor berkedip di salah satu tes saya), tetapi biasanya tidak menghasilkan crash.Untuk mencoba, letakkan hexdump di file dan gunakan
xxd -r foo.hex > foo.com
, kemudian jalankan di lingkungan dos (saya menggunakan dosbox).Berikut ini adalah hex dump dari file ini:
Dan beberapa offset menarik yang bisa dibongkar:
+0
(untuk contoh di bawah ini, sisa biner masih valid)
+1
+2
+6
+11
+12
+18
(offset lain hanyalah pengulangan di atas)
+58
sumber
Jawaban Unary:
^ 44391 Nol
Program kucing. Tidak masalah bagaimana Anda memutar, ini adalah program yang sama.
sumber
PHP
Ini dia, program PHP yang valid:
sumber
Scala
Kutipan bersarang:
C ++ / Java / C # /ScalaKomentar:
Perintah kosong:
Pesta
Kombinasi komentar, Whitespace dan Shell:
Sed
Perintah mandiri yang valid:
p
P
n
N
g
G
d
D
h
H
Kombinasi di atas:
p;P;n;N;g;G;d;D;h;H;
AWK
Untuk mencetak setiap baris file:
atau
Jangan cetak apa pun:
Perl
sumber
;P;n;N;g;G;d;D;h;H
validJ
Pertama, skrip untuk memeriksa rotasi program yang valid
s
:Misalnya, program
+/1 5
(jumlah 1 dan 5) memberi:Kemudian, program yang membosankan dan valid:
sumber
dc
program dc mudah valid dalam rotasi apa pun. Sebagai contoh:
sumber
Kode Mesin
Bagaimana dengan kode mesin Z80 / Intel 8051 untuk NOP .
Tentu itu Tidak Ada Operasi, tetapi TIDAK butuh satu atau dua siklus ... Anda dapat memiliki sebanyak atau sedikit dari yang Anda inginkan.
Dan saya tidak setuju dengan jawaban Ruby di atas - Saya pikir satu byte 00h lebih pendek dari Ruby
p
.sumber
k
Mengevaluasi string kosong
Mengembalikan karakter titik
Mengembalikan aplikasi parsial '.' (formulir sianik) ke daftar karakter kosong.
sumber
sh, bash
cc diputar adalah cc lagi, tetapi sangat tidak ramah jika disebut telanjang.
dh debhelper juga tidak terlalu kooperatif, sementara hexdump hanya menunggu input.
Ghostscript memulai mode interaktif, sementara kelompok beralih menampilkan pesan penggunaan - solusi yang valid di sini, juga.
Dan di sini adalah skrip untuk menemukan kandidat untuk program semacam itu:
Jika menemukan urutan yang lebih lama juga, seperti (arj, jar) atau (luatex, texlua) yang tidak valid setelah setiap shift, tetapi hanya setelah beberapa shift tertentu, yang saya salah baca pada awalnya, tetapi ada beberapa, jadi mudah untuk menyaringnya dengan tangan.
sumber
arj
/jar
tidak sah, karena tidak adarja
perintah (meskipun saya suka contoh ini). +1 untuk skrip - ide yang sangat bagus :)every
, atau berartia random one
. Contoh denganshift left by 6
,left by 1
danright by 10
meyakinkan saya dalam interpretasi, bahwa saya hanya perlu menemukan satu kemungkinan perubahan.... in any language ...
- solusi saya hanya bekerja di bash (dan sh, zsh, ash dan beberapa lainnya), tetapi semua solusi lain juga menggunakan nama program.Contoh Python Trivial:
Dapat digeser tiga karakter berulang-ulang untuk mengungkapkan alfabet lebih banyak.
sumber
Python
Cukup evaluasi beberapa angka
sumber
dc sudah digunakan, tetapi program berikut selalu menghasilkan output yang sama , tidak peduli rotasi: D
ouputs
sumber