Judulnya mengatakan itu semua. Tujuan Anda adalah untuk menulis sebuah program yang membentuk persegi panjang karakter awx h yang dapat diputar dan dijalankan kembali untuk menghasilkan jumlah rotasi 90 ° Counter-Clockwise (CCW) yang telah dilakukan.
Misalnya saja program 3 × 2
abc
def
memecahkan masalah, awalnya akan menghasilkan 0, dan rotasi berturut-turut 90 ° CCW
cf fed da
be cba eb
ad fc
akan menghasilkan 1, 2, dan 3 masing-masing.
Menggunakan komentar membuat ini tugas sepele kebanyakan bahasa. Di Ruby misalnya, itu bisa dilakukan dalam kotak 7 × 7:
###p###
### ###
###1###
p 0#2 p
###3###
### ###
###p###
Tantangannya adalah melakukan ini tanpa komentar apa pun.
Mencetak gol
Skor Anda adalah w * h, area persegi panjang Anda. Baris baru dikecualikan. Dengan kata lain, kode-golf, baris baru tidak dihitung.
Nilai untuk contoh Ruby adalah 49 (meskipun tentu saja tidak valid karena memiliki komentar).
Catatan
- Kode Anda harus benar-benar persegi panjang tanpa karakter yang hilang di akhir baris.
- Jika Anda ingin, Anda dapat menampilkan nilai "mod 90 °" legal lainnya alih-alih 0 1 2 3. Jadi 8 baik-baik saja daripada 0, dan -1 baik-baik saja alih-alih 3, dll.
- Outputnya mungkin masuk ke konsol atau ke dalam file.
- Celah standar berlaku.
Saya harap ini, pertanyaan pertama saya, benar-benar membangkitkan minat beberapa orang. Nikmati!
sumber
echo 0;exit;e
di bash diperbolehkan?Jawaban:
APL (1x3 = 3)
Solusi ini menggunakan aturan tambahan bahwa setiap output yang benar mod 4 berfungsi.
Dalam APL,
x!y
adalah jumlah cara untuk memilihx
elemen dariy
, umumnya dikenal sebagaibinom(y,x)
atauchoose(y,x)
. Mari kita periksa bahwa setiap rotasi memberikan jawaban yang benar.0 rotasi
Tidak ada cara untuk memilih 5 elemen dari 3, jadi kami mendapatkan 0, yang dicetak secara otomatis.
1 rotasi CCW
APL dengan senang hati mengevaluasi setiap baris, mendapatkan nomor
3
, operator!
, dan kemudian nomor5
, hanya mencetak yang terakhir dari ini (5
), yaitu 1 mod 4.2 rotasi CCW
Ini
binom(5,3)
, yaitu(5*4*3*2*1)/(3*2*1)/(2*1) = 10
, yaitu 2 mod 4.3 rotasi CCW
Seperti sebelumnya, hanya nilai
3
printer yang terakhir dievaluasi .Saya sebenarnya tidak tahu APL, jadi tolong beri tahu saya jika ada penjelasan yang salah. Saya menemukannya dengan coba-coba sebagai bahasa pertama di situs ini yang:
Untuk (5), saya masuk daftar fungsi diad APL . Operasi kandidat pertama saya adalah divisi integer
/
C dan Python 2, tetapi divisi APL÷
memberikan float. Eksponensiasi menggoda, tetapi gagal karenaa
dana^b
memiliki paritas yang sama tetapi diperoleh rotasi berturut-turut (kecualib=0
, tetapi kemudianb^a=0
). Operator Boolean suka<
memberi0
dan1
terpisah 180 derajat, yang tidak berfungsi. Akhirnya, saya menemukan operator binomial!
dan mencoba angka sampai saya berhasil.Terima kasih kepada Quincunx untuk kepercayaannya bahwa ada solusi yang lebih kecil dari 2x2.
sumber
Ruby, 7 × 9 (63)
Sedikit lebih lama dari solusi yang lain, tetapi setidaknya solusi ini tidak bergantung pada pencetakan tersirat atau penyalahgunaan aturan. Untuk keempat rotasi, kode lengkap diuraikan dan selain dari hubungan arus pendek, semua dijalankan. Anehnya, sama sekali tidak ada simetri dalam kode
Solusi ini bergantung pada fakta bahwa masih mungkin untuk memanggil
p
fungsi (yang digunakan untuk mencetak angka) bahkan jika variabel dengan nama yang sama telah ditentukan. Misalnya, sesuatu sepertip p
memanggil fungsip
dengan variabelp
sebagai argumen (dengan demikian, mencetak nilaip
).Penjelasan untuk beberapa ekspresi umum yang digunakan dalam kode:
p
: Seperti disebutkan di atas, ini bisa berupa panggilan fungsi atau variabel. Ketika variabel tidak didefinisikan, ini memanggil fungsip
tanpa argumen, yang tidak melakukan apa-apa dan mengembalikannil
.p p
: Mencetak variabelp
.p|x
: Kapanp
fungsinya, ini identik dengannil|x
, yang mengembalikan true / false tergantung pada nilaix
. Jikap
bilangan bulat, itu bitwise atau. Either way, pernyataan ini tidak memiliki efek samping.p=p||x
: Secara efektif sama denganp||=x
(penugasan bersyarat) dengan keuntungan menjadi valid secara sintaksis dan no-op ketika dibalik.Versi simetris (9 × 10 = 90)
Ini adalah solusi simetris terpendek (C 2 ketika mengabaikan angka untuk dicetak) saya bisa datang dengan.
Skrip uji
Berikut ini skrip pengujian untuk memverifikasi kode di atas (
#
baris di akhir telah ditambahkan sehingga spasi tidak dihapus dan dihapus sebelum eksekusi):sumber
GolfScript, 4 (2x2)
Mencetak
4312
yang mana0
(mod 4). Rotasi mencetak3241
(1 mod 4),2134
(2 mod 4), dan1423
(3 mod 4).Diminta oleh:
Sebenarnya ada banyak set angka yang berfungsi. Saya menemukan ini dengan program Python ini:
Meskipun output program
0
s (yang mungkin tidak akan berhasil), solusi yang valid adalah dalam bentukDimana
a∈{4,8}
,b∈{3,7}
,c∈{1,5,9}
,d∈{2,6}
. IE(a,b,c,d)∈{4,8}×{3,7}×{1,5,9}×{2,6}
yang merupakan 24 solusi.sumber
Your score is w*h, the area of your rectangle. Newlines are excluded. In other words, code-golf, newlines not counted.
n
. Ini karena paritas bilangan bulat sama dengan paritas digit paling kanannya, tetapi rotasi 90 derajat harus menghasilkan paritas yang berbeda. Jadi,2*2
adalah minimum untuk pendekatan ini.Python - 23 x 23 = 529
Oke, pertanyaan ini sudah menjadi pemenang, tetapi belum ada solusi Python. Jadi saya memikirkannya - sangat! - dan menemukan cara untuk membuat
print
perintah besar bekerja ke segala arah tanpa menghasilkan kesalahan ketika diurai dari salah satu arah lainnya.Terobosannya adalah sebagai berikut:
Ketika
forward_code
dieksekusi, itubackward_code
adalah bagian dari string dan dengan demikian tidak dicetak. Ini persis sebaliknya ketika membaca mundur.Jadi dikombinasikan dengan dua arah lagi dan disesuaikan untuk mendapatkan semua penawaran yang cocok dengan benar saya akhirnya dengan solusi berikut:
Sunting: Saya menemukan cara untuk menangani semua spasi putih itu. ;)
sumber
p=print
file, karena Anda punya begitu banyak ruang kosong saat ini? (Python 3, tentu saja)p=print
ini juga panjang. Dan yang lebih penting: Anda tidak dapat menggunakan kembalip
setelah memutar kode!BASIC, 64
Tidak akan menang, tapi ini dia. (Diuji dalam Chipmunk Basic )
Catatan:
?
adalah singkatan untukPRINT
berbagai dialek BASIC. Meskipun ada banyak kesalahan sintaksis dalam kode,END
pernyataan di baris pertama mencegah mereka agar tidak dilihat oleh penerjemah.sumber
END
:)Pyth , 9 karakter (3x3)
Dalam pyth, semuanya dicetak secara default, kecuali didahului oleh spasi. Baris setelah baris pertama adalah untuk input pengguna, dan tidak dievaluasi dalam program ini.
Cara lain untuk mendapatkan 9 karakter:
Pyth 1.0.5 , 4 karakter
Sementara perubahan baru-baru ini ke pyth telah membuat angka 2 digit lebih sulit untuk dihasilkan (Perubahan yang saya pertimbangkan untuk kembali), versi Pyth yang lebih lama memiliki generasi angka dua digit yang mudah, yang, dikombinasikan dengan pencetakan implisit dan fakta bahwa semua baris kecuali yang pertama diabaikan, berikan solusi berikut:
Cetakan 32,21,14,43.
sumber
Befunge, 16
Penjelasan: Digit dari
0
untuk9
mendorong nomor yang sesuai ke tumpukan,.
muncul nilai dari tumpukan dan mencetaknya sebagai integer, dan@
mengakhiri program.(diuji di sini )
sumber
Piet, 49
Saya membuat titik hanya untuk menggunakan warna kuning dan merah, dan untuk mencoba dan membuatnya kira-kira simetris. Ketika diputar, ia mencetak 0, 1, 2 atau 3. Keluar dari program di Piet sulit, dan menghabiskan sekitar setengah ruang dalam gambar, sayangnya.
sumber
GNU dc , 6 (3x2)
Saya pikir ini adalah jawaban terpendek untuk tidak memerlukan "mod 90 °" relaksasi aturan:
Output
0
,1
,2
atau3
untuk setiap rotasi.Untuk
0
,2
dan3
rotasi,p
cukup muncul dan mencetak literal angka terakhir yang telah didorong ke tumpukan. Untuk1
rotasi,z
tekan kedalaman tumpukan saat ini (1) ke tumpukan, lalup
muncul dan cetak.sumber
311\n0p2
, di mana\n
karakter baris baru. Kalau tidak, akan menjadi tidak berarti dalam konteks dc.GolfScript, 9 (3x3)
Semacam menyalahgunakan aturan. The
}
terjadi untuk mengakhiri program jika tidak ada yang cocok{
, dan isi stack yang tercetak di akhir acara.sumber
Your score is w*h, the area of your rectangle. Newlines are excluded. In other words, code-golf, newlines not counted.
}
bisa tidak seimbang. Trik yang bagus.JavaScript, 4
Saat Anda menjalankan program ini (atau rotasi program ini) di konsol javaScript, hanya baris terakhir yang dievaluasi dan digaungkan di konsol.
Begitu:
Berikut ini semua program 2x2 serupa yang juga berfungsi:
Dalam istilah lain,
di mana a berada di [0,4,8], b berada di [3,7], c berada di [1,5,9], dan d berada di [2,6]
sumber
CJam / GolfScript - 3 * 3
Titik koma muncul angka sebelumnya, sehingga hanya sudut kanan bawah yang dicetak.
sumber
Aheui , 8
Karena Aheui tidak memiliki surat yang mendorong 1 ke tumpukan, saya memutuskan untuk mencetak 0, 5, 2, dan 3.
Penjelasan: 바 dan 반 tekan 0 dan 2, masing-masing, ke tumpukan dan memindahkan kursor ke kanan dengan satu karakter. 뷸 dan 뷷 tekan 5 dan 3, masing-masing, ke tumpukan dan gerakkan kursor ke bawah dengan dua karakter. 몽 muncul dan mencetak angka dalam tumpukan dan menggerakkan kursor ke atas dengan satu karakter. 희 mengakhiri program.
sumber
JavaScript
(Dimasukkan dalam konsol browser, shell atau REPL lain, sehingga hasilnya dicetak)
Harus berfungsi untuk bahasa lain dengan ekspresi, baris baru yang tidak signifikan, dan pencetakan otomatis hasilnya.
sumber
'2,3\n,0,\n1,0'
.Matlab / Oktaf -
144100Golf: 10 x 10 = 100
Solusi alternatif: 15 x 15 = 225
sumber
...d....
...i....
...s2...
disp 1..
..3 psid
...4s...
....i...
....d...
..3 psid
. Anda memerlukan setidaknya tiga titik di awal setiap baris untuk menunjukkan jeda baris dan mengabaikan karakter yang tersisa.Perl 5x7 (35)
Agak terlambat ke pesta. Soliter
-
menentukan nomor mana yang dicetak.sumber
JavaScript, 3
Ini berfungsi ... di base 7.
Versi Base 9:
Penjelasan
Ketika dijalankan secara interaktif, misalnya dari konsol debugging, nilai pernyataan / ekspresi terakhir akan menjadi output.
4 7 = 4 10 ≣ 0 (mod 4 )
412 7 = 205 10 ≣ 1 (mod 4 )
2 7 = 2 10 ≣ 2 (mod 4 )
214 7 = 109 10 ≣ 3 (mod 4 )
Solusi serupa dapat ditemukan untuk basis aneh.
sumber
Befunge, 12 (6x2)
Saya berhasil membuat sedikit perbaikan pada jawaban Befunge yang ada dengan memanfaatkan sifat dua dimensi Befunge dan membuat jalur kode berjalan secara vertikal dalam dua orientasi.
Cobalah online: Mulai 0 , Rotasi 1 , Rotasi 2 , Rotasi 3 .
sumber
Marbelous, 7 * 14 = 98
sumber
Argh! / Aargh!(4 * 4 = 16)
Apa itu tentang menggunakan alat yang tepat untuk pekerjaan itu? Tidak ada komentar (dalam bahasa pada umumnya).
Seluruh keluarga program (dihasilkan dalam J:
((|.@:|:) ^: (i. 4)) >'hpqh';'q01p';'p32q';'hqph'
atau((|.@:|:) ^: (i. 4)) 4 4 $ 'hpqhq01pp32qhqph'
)diputar sekali:
diputar dua kali:
diputar tiga kali:
Untuk menjelaskan ini, mungkin lebih baik untuk melihat versi "indentasi" (Itu juga berfungsi di semua rotasi):
Versi ini menunjukkan bahwa program terdiri dari 4 bagian yang terpisah, satu untuk setiap rotasi individu.
h
- atur aliran kontrol ke kirip
- cetak item dalam data / kode raster di bawahnyaq
- keluar dari programsumber
Floater - 9 × 5 = 45
Mencetak 4, 1, 2, atau 3 untuk menghibur.
Perhatikan bahwa 'Hitam' adalah instruksi yang valid (NOP), dan sintaksis. Tanpanya, ia tidak dapat menemukan posisi awal. Dengan demikian, semua posisi dalam persegi panjang ditempati.
sumber
Elemen, 2x3 = 6
Ini merupakan peningkatan dari solusi naif 3x3, yang memiliki
`
di tengah dengan angka di setiap sisi. Kasus 0, yang ditunjukkan di atas, adalah yang paling menarik, karena*
digunakan untuk mengalikan 3 dengan tidak sama sekali untuk mendapatkan 0. Selain itu, tidak terlalu rumit.Jika Anda merasa canggung, Anda dapat menggantinya dengan hampir semua karakter lain, kecuali
[]{}`_
.Untuk referensi, berikut adalah tiga rotasi lainnya:
sumber
Chip, (2x5) 10
*
Mengaktifkan semua elemen tetangga: utara, timur, selatan dan barat (sumber)~
jika tidak diaktifkan dari barat, mengaktifkan tetangga timur (NOT-gate) (tidak pernah diaktifkan di sini)t
mengakhiri eksekusi setelah mencetak byte saat inia
mengatur bit0x01
darib
set output bit0x02
dari outpute
menetapkan bit0x10
dari outputf
mengatur bit0x20
dari output+
jika diaktifkan oleh tetangga manapun, aktifkan semua tetangga lainnya (kawat)Chip memerlukan
-w
flag (untuk memungkinkan eksekusi tanpa input), atau beberapa input untuk dapat dijalankan.Cetakan
0
,1
,2
, atau3
dalam ASCII. Jika kode menunjuk0x00
ke0x03
yang diinginkan, hapuse
danf
, lalu pindahkan spasi untuk mengisi celah.sumber
Japt , 3 * 1 = 3 byte
Cobalah online: apa adanya , diputar sekali , dua kali , tiga kali .
Output 0, 5, 2, 11 masing-masing.
Variabel
B
memegang nilai 11, danNumber.z(other)
adalah pembagian lantai (semua orang tampaknya mencari: p). Untuk kode multi-line, baris terakhir diteruskan ke output, yang merupakan konstanta di sini.2 * 2 = 4 byte
Cobalah online: apa adanya , diputar sekali , dua kali , tiga kali .
Output 0, 21, 2, -1 masing-masing.
T
memegang 0, danJ
memegang -1.Kuncinya adalah bahwa, jika dua literal atau variabel diletakkan berdampingan, koma dimasukkan dan hasilnya hanyalah yang terakhir.
2 * 2 solusi JS bekerja di Japt juga.
sumber