Tulis Program Rectangular yang Menghasilkan Jumlah Kali Diputar


63

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!


1
Untuk lebih spesifik tentang apa komentar itu, apakah komentar itu kode yang tidak dievaluasi? Kode yang belum diuraikan?
isaacg

Maksud saya, tidak ada "karakter komentar" tradisional bahasa Anda yang akan muncul di salah satu dari 4 versi yang diputar. Jadi untuk C ++, dua garis miring di samping satu sama lain seharusnya tidak pernah muncul, meskipun satu dapat digunakan sendiri. Begitu juga dengan / *. Saya harap itu memperjelasnya.
Hobi Calvin

Bagaimana dengan bahasa yang tidak memiliki karakter komentar?
isaacg

Jadi kode seperti echo 0;exit;edi bash diperbolehkan?
jimmy23013

Jika tidak ada cara untuk berkomentar maka Anda tidak perlu khawatir. @ user23013 Pesta itu baik-baik saja.
Hobi Calvin

Jawaban:


43

APL (1x3 = 3)

5!3

Solusi ini menggunakan aturan tambahan bahwa setiap output yang benar mod 4 berfungsi.

Dalam APL, x!yadalah jumlah cara untuk memilih xelemen dari y, umumnya dikenal sebagai binom(y,x)atau choose(y,x). Mari kita periksa bahwa setiap rotasi memberikan jawaban yang benar.

0 rotasi

5!3

Tidak ada cara untuk memilih 5 elemen dari 3, jadi kami mendapatkan 0, yang dicetak secara otomatis.

1 rotasi CCW

3
!
5

APL dengan senang hati mengevaluasi setiap baris, mendapatkan nomor 3, operator !, dan kemudian nomor 5, hanya mencetak yang terakhir dari ini ( 5), yaitu 1 mod 4.

2 rotasi CCW

3!5

Ini binom(5,3), yaitu (5*4*3*2*1)/(3*2*1)/(2*1) = 10, yaitu 2 mod 4.

3 rotasi CCW

5
!
3

Seperti sebelumnya, hanya nilai 3printer 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:

  1. Secara otomatis mencetak hasil ekspresi
  2. Diberikan beberapa baris ekspresi, hanya menampilkan yang terakhir
  3. Tidak memiliki masalah dengan operator yang berdiri sendiri di saluran
  4. Membawa operator infiks
  5. Memiliki operator biner aritmatika karakter tunggal yang asimetris (aRb! = BRa), dan cukup fleksibel untuk mengembalikan berbagai angka.

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 karena adan a^bmemiliki paritas yang sama tetapi diperoleh rotasi berturut-turut (kecuali b=0, tetapi kemudian b^a=0). Operator Boolean suka <memberi 0dan 1terpisah 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.


6
Sobat, senang melihat jawaban yang menggunakan bahasa non-esoterik dan menang .
Stuart P. Bentley

Saya telah menerima ini sebagai jawaban karena ini adalah yang terpendek menurut aturan saya, tetapi saya ingin membuat jawaban Ventero ( codegolf.stackexchange.com/a/33162/26997 ) sangat terhormat. Ini mengikuti esensi sebenarnya dari masalah.
Calvin Hobbies

Ini juga bekerja di J dalam bentuk yang Anda berikan.
ɐɔıʇǝɥʇuʎ

Sebenarnya, bukankah APL mencetak 3 dan 5 di rotasi 90 °?
FUZxxl

@ FuZxxl Saya pikir ini hanya berfungsi di ngn / apl.
Adám

40

Ruby, 7 × 9 (63)

 30;p  
0||p=p 
0|0;p;p
;p;p|p;
p=p ||0
;p   p;
2||p =p
 00;1  
     p 

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 pfungsi (yang digunakan untuk mencetak angka) bahkan jika variabel dengan nama yang sama telah ditentukan. Misalnya, sesuatu seperti p pmemanggil fungsi pdengan variabel psebagai argumen (dengan demikian, mencetak nilai p).

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 fungsi ptanpa argumen, yang tidak melakukan apa-apa dan mengembalikan nil.
  • p p: Mencetak variabel p.
  • p|x: Kapan pfungsinya, ini identik dengan nil|x, yang mengembalikan true / false tergantung pada nilai x. Jika pbilangan bulat, itu bitwise atau. Either way, pernyataan ini tidak memiliki efek samping.
  • p=p||x: Secara efektif sama dengan p||=x(penugasan bersyarat) dengan keuntungan menjadi valid secara sintaksis dan no-op ketika dibalik.

Versi simetris (9 × 10 = 90)

    p    

  0 * 0  
  00100  
  0||2* p
p *0||0  
  00300  
  0 * 0  

    p    

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):

rotate=->s{s.split($/).map{|i|i.chars.reverse}.transpose.map(&:join).join($/)}

s=<<EOD.gsub(?#,"")
 30;p  #
0||p=p #
0|0;p;p#
;p;p|p;#
p=p ||0#
;p   p;#
2||p =p#
 00;1  #
     p #
EOD


puts ">>> 0°"
eval s
puts ">>> 90°"
eval rotate[s]
puts ">>> 180°"
eval rotate[rotate[s]]
puts ">>> 270°"
eval rotate[rotate[rotate[s]]]

10
Ini mungkin bukan yang terpendek tapi ini adalah jenis kecemerlangan yang saya cari: D
Calvin Hobbies

1
@ Calvin'sHobbies Apakah ini memenuhi batasan "Kode Anda harus benar-benar persegi panjang tanpa karakter yang hilang di akhir baris"?
Joshua Taylor

@ JoshuaTaylor Bentuknya persegi panjang, beberapa garis hanya diisi spasi (yang menurut saya adalah karakter). Jika itu tidak memenuhi batasan untuk alasan apa pun, saya juga bisa mengisi garis dengan titik koma sebagai gantinya ...
Ventero

@Ventero Saya tentu berharap ini legal; Saya hanya mencoba memahami apa yang dimaksud dalam pertanyaan itu.
Joshua Taylor

1
@Ventero Padding dengan spasi (atau benar-benar apa pun selain komentar dan baris baru) tidak apa-apa.
Hobi Calvin

33

GolfScript, 4 (2x2)

43
12

Mencetak 4312yang mana 0(mod 4). Rotasi mencetak 3241(1 mod 4), 2134(2 mod 4), dan 1423(3 mod 4).

Diminta oleh:

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.

Sebenarnya ada banyak set angka yang berfungsi. Saya menemukan ini dengan program Python ini:

def f(a,b,c,d):
    return int("%i%i%i%i"%(a,b,c,d))
for a in range(10):
    for b in range(10):
        for c in range(10):
            for d in range(10):
                candidate = f(a,b,c,d) % 4 == 0
                candidate &= f(b,d,a,c) % 4 == 1
                candidate &= f(d,c,b,a) % 4 == 2
                candidate &= f(c,a,d,b) % 4 == 3
                if candidate:
                    print("%i, %i, %i, %i"%(a,b,c,d))

Meskipun output program 0s (yang mungkin tidak akan berhasil), solusi yang valid adalah dalam bentuk

ab
cd

Dimana 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.


7
Sangat pintar. Sejujurnya saya berpikir bahwa aturan tambahan itu tidak berbahaya.
Hobi Calvin

4
@Setiap orang Perhatikan bahwa ini bukan program sekecil mungkin. 2x1 adalah mungkin, dan itu adalah yang sekecil mungkin. Jadi mulai bekerja!
Justin

1
@isaacgYour score is w*h, the area of your rectangle. Newlines are excluded. In other words, code-golf, newlines not counted.
undergroundmonorail

2
@ Quincunx Baiklah, lalu kirim!
tommeding

1
Dengan asumsi bahasa di sini hanya mencetak angka terakhir yang dievaluasi, saya tidak percaya ada solusi 1 * n (satu angka) untuk semua n. Ini karena paritas bilangan bulat sama dengan paritas digit paling kanannya, tetapi rotasi 90 derajat harus menghasilkan paritas yang berbeda. Jadi, 2*2adalah minimum untuk pendekatan ini.
xnor

30

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 printperintah besar bekerja ke segala arah tanpa menghasilkan kesalahan ketika diurai dari salah satu arah lainnya.

Terobosannya adalah sebagai berikut:

'"\'';forward_code;"';backward_code;""\'"''

Ketika forward_codedieksekusi, itu backward_codeadalah 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:

''"''""''"''"''"'"''""'
"  ""                 "
"  \\                 "
'"\'';print 1;"'""\'"''
'"\''"';3 tnirp;""\'"''
"  ;""                "
"  p'                 "
'  r;                 '
'  i2                 '
"  n                  "
"  tt                 "
'   n                 '
'  4i                 '
"  ;r     .-=<>=-.    "
' \"p    /__----__\   '
"  ';'  |/ (')(') \|  "
"  ""    \   __   /   "
'  ""    .`--__--`.   '
"  \\   /    :|    \  "
'  ''  (_)   :|   (_) '
'  ""    |___:|____|  '
"  ''    |_________|  "
''"''""''"''"''"'"''""'

Sunting: Saya menemukan cara untuk menangani semua spasi putih itu. ;)


Apakah ada cara untuk juga memasukkan p=printfile, karena Anda punya begitu banyak ruang kosong saat ini? (Python 3, tentu saja)
isaacg

@isaacg: Saya kira tidak. Definisi p=printini juga panjang. Dan yang lebih penting: Anda tidak dapat menggunakan kembali psetelah memutar kode!
Falko

Saya kira Anda benar. Tapi dua yang buruk.
isaacg

12
Dinominasikan: Penghargaan Penggunaan Whitespace Terbaik.
Primo

24

BASIC, 64

Tidak akan menang, tapi ini dia. (Diuji dalam Chipmunk Basic )

?0:END:?
:::::::1
D:::::::
N::::::E
E::::::N
:::::::D
3:::::::
?:DNE:2?

Catatan: ?adalah singkatan untuk PRINTberbagai dialek BASIC. Meskipun ada banyak kesalahan sintaksis dalam kode, ENDpernyataan di baris pertama mencegah mereka agar tidak dilihat oleh penerjemah.


1
Sebenarnya, skor Anda masing-masing adalah 64 dan 16. Baris baru tidak masuk hitungan. Juga, mengapa tidak membagi jawabannya?
Justin

Oh, ketinggalan sedikit. Saya akan membagi jawaban jika mereka tidak menempati tempat terakhir bersama. Sepertinya tidak ada banyak gunanya sebaliknya :-)
ossifrage mual

Anda tidak bertahan lagi :-)
Justin

Saya akan memberi Anda poin bonus untuk mendapatkan sejumlah karakter yang bagus. +1 sebenarnya untuk penggunaan kreatif END:)
CompuChip

21

Pyth , 9 karakter (3x3)

0 1

3 2

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:

"0"
3 1
"2"

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:

32
41

Cetakan 32,21,14,43.


Yah, itu menyenangkan. +1
seequ

Sialan, aku berharap itu tidak mudah. Anda kehilangan 3 karakter di garis tengah Anda, tetapi saya rasa itu karena pemformatan otomatis di sini.
Hobi Calvin

@CobbinsHobbies Maaf, saya mengerti. Itu mengompol ruang trailing saya.
isaacg

@ Quincunx Oh, aku merindukan bagian dari penilaian. Terima kasih atas perbaikannya.
isaacg

18

Befunge, 16

0.@1
@@@.
.@@@
3@.2

Penjelasan: Digit dari 0untuk 9mendorong nomor yang sesuai ke tumpukan, .muncul nilai dari tumpukan dan mencetaknya sebagai integer, dan @mengakhiri program.

(diuji di sini )


Bukankah ini menghasilkan berapa kali ia diputar berlawanan arah jarum jam?
seequ

@TheRare Ya. Itu benar. Itu yang harus dilakukan.
Justin

1
Sepertinya saya benar-benar buta. Punya +1 karena itu.
seequ

Keluar !!! Masih bahasa favorit saya sepanjang masa selamanya selamanya!
steffen

16

Piet, 49

Program Piet

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.


1
Sepertinya alat yang tepat untuk pekerjaan itu.
Robert Fraser

O_o, saya menangis mencari tahu tentang bahasa pemrograman ini! Baru saja. Cantik. Dalam banyak hal! Terima kasih!
steffen

15

GNU dc , 6 (3x2)

Saya pikir ini adalah jawaban terpendek untuk tidak memerlukan "mod 90 °" relaksasi aturan:

3z1
0p2

Output 0, 1, 2atau 3untuk setiap rotasi.

Untuk 0, 2dan 3rotasi, pcukup muncul dan mencetak literal angka terakhir yang telah didorong ke tumpukan. Untuk 1rotasi, ztekan kedalaman tumpukan saat ini (1) ke tumpukan, lalu pmuncul dan cetak.


1
Jadi 311 / 0p2 juga akan berfungsi?
Neil

@Neil Ya, bagus. Namun tidak mempengaruhi skor golf :)
Trauma Digital

Itu memang mempengaruhi skor golf, tetapi negatif, karena baris baru tidak dihitung, tetapi garis miring.
M.Herzkamp

@ M.Herzkamp Asumsi saya adalah yang dimaksud Neil 311\n0p2, di mana \nkarakter baris baru. Kalau tidak, akan menjadi tidak berarti dalam konteks dc.
Digital Trauma

10

GolfScript, 9 (3x3)

0}1
} }
3}2

Semacam menyalahgunakan aturan. The }terjadi untuk mengakhiri program jika tidak ada yang cocok {, dan isi stack yang tercetak di akhir acara.


Jangan lupa untuk menghitung baris baru sebagai karakter.
isaacg

2
@isaacgYour score is w*h, the area of your rectangle. Newlines are excluded. In other words, code-golf, newlines not counted.
undergroundmonorail

Saya tidak tahu itu }bisa tidak seimbang. Trik yang bagus.
Peter Taylor

9

JavaScript, 4

03
12

Saat Anda menjalankan program ini (atau rotasi program ini) di konsol javaScript, hanya baris terakhir yang dievaluasi dan digaungkan di konsol.

Begitu:

12 modulo 4 == 0
01 modulo 4 == 1
30 modulo 4 == 2
23 modulo 4 == 3

Berikut ini semua program 2x2 serupa yang juga berfungsi:

03
12

03
16

03
52

03
56

03
92

03
96

07
12

07
16

07
52

07
56

07
92

07
96

43
12

43
16

43
52

43
56

43
92

43
96

47
12

47
16

47
52

47
56

47
92

47
96

83
12

83
16

83
52

83
56

83
92

83
96

87
12

87
16

87
52

87
56

87
92

87
96

Dalam istilah lain,

ab
cd

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]


8

CJam / GolfScript - 3 * 3

2;3
;7;
1;0

Titik koma muncul angka sebelumnya, sehingga hanya sudut kanan bawah yang dicetak.


6

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.


5

JavaScript

(Dimasukkan dalam konsol browser, shell atau REPL lain, sehingga hasilnya dicetak)

1+2
-3-
4+5

Harus berfungsi untuk bahasa lain dengan ekspresi, baris baru yang tidak signifikan, dan pencetakan otomatis hasilnya.


2
Saya suka ide di balik ini, tetapi tidak selalu mencetak 1 (mod 4)?
zennehoy

2
Variasi yang lebih sederhana mungkin '2,3\n,0,\n1,0'.
Tertarik

Itu memang memberikan hasil yang berbeda ketika diputar. @Cory, Itu pintar! Saya terlalu terbiasa bekerja dalam bahasa tanpa operator koma.
lrn

@ lrn Ya, ini memberikan hasil yang berbeda, tapi itu bukan keharusan. Program ini harus mencetak 0 (mod 4) ketika tidak diputar, dan 1, 2 atau 3 (mod 4) ketika diputar masing-masing kali ...
zennehoy

Catatan kedua dari poster asli memungkinkan nilai apa pun untuk versi yang diputar, asalkan berbeda.
lrn

5

Matlab / Oktaf - 144 100

Golf: 10 x 10 = 100

....d.....
....i.....
....s.....
... p2 ...
disp  1...
...3  psid
... 4p ...
.....s....
.....i....
.....d....

Solusi alternatif: 15 x 15 = 225

.......d.......
.......i.......
.......s.......
...    p    ...
...         ...
...    4    ...
...    .    ...
disp 1...3 psid
...    .    ...
...    2    ...
...         ...
...    p    ...
.......s.......
.......i.......
.......d.......

Dapatkah solusi pertama dikurangi menjadi ukuran 8x8, jika operator vertikal dan horisontal 'membagikan' huruf saham 'p'? ...d.... ...i.... ...s2... disp 1.. ..3 psid ...4s... ....i... ....d...
AMK

@ AMK: Sayangnya, ini menghasilkan kesalahan sintaks sejalan ..3 psid. Anda memerlukan setidaknya tiga titik di awal setiap baris untuk menunjukkan jeda baris dan mengabaikan karakter yang tersisa.
Falko

5

Perl 5x7 (35)

1+p+t+1
-print+
1+i+i+1
+tnirp+
1+t+p+1

Agak terlambat ke pesta. Soliter -menentukan nomor mana yang dicetak.


4

JavaScript, 3

2
1
4

Ini berfungsi ... di base 7.

Versi Base 9:

2
7
0

Penjelasan

Ketika dijalankan secara interaktif, misalnya dari konsol debugging, nilai pernyataan / ekspresi terakhir akan menjadi output.

4 7 = 4 100 (mod 4 )
412 7 = 205 101 (mod 4 )
2 7 = 2 102 (mod 4 )
214 7 = 109 103 (mod 4 )

Solusi serupa dapat ditemukan untuk basis aneh.


Ini ditandai, tetapi saya tidak mengerti pertanyaan atau jawabannya jadi saya harus melewatkannya. Akan lebih baik jika downvoters meninggalkan komentar yang menjelaskan downvotes mereka.
Rainbolt

@Rusher Saya kira mereka tidak mengerti dasar 7 bit.
Primo

3

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.

0.@.1v
v3.@.2

Cobalah online: Mulai 0 , Rotasi 1 , Rotasi 2 , Rotasi 3 .


2

Marbelous, 7 * 14 = 98

.. \/ \/ .. ..
.. 31 \\ 32 \/
\/ \\ \/ \\ \/
\/ 30 \\ 33 ..
.. .. \/ \/ ..

Apakah Anda mengharapkan setiap sel tetap utuh saat diputar?
Sparr

2

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')

hpqh
q01p
p32q
hqph

diputar sekali:

hpqh
q12p
p03q
hqph

diputar dua kali:

hpqh
q23p
p10q
hqph

diputar tiga kali:

hpqh
q30p
p21q
hqph

Untuk menjelaskan ini, mungkin lebih baik untuk melihat versi "indentasi" (Itu juga berfungsi di semua rotasi):

hhpq h
  0  h
q   1p
p3   q
h  2  
h qphh

Versi ini menunjukkan bahwa program terdiri dari 4 bagian yang terpisah, satu untuk setiap rotasi individu.

  • h - atur aliran kontrol ke kiri

  • p - cetak item dalam data / kode raster di bawahnya

  • q - keluar dari program


2

Floater - 9 × 5 = 45

masukkan deskripsi gambar di sini

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.


1

Elemen, 2x3 = 6

1*
`2
3 

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:

case 1
*2 
1`3

case 2
 3
2`
*1

case 3
3`1
 2*

0

Chip, (2x5) 10

b~
+a
~t
e*
 f

*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)
tmengakhiri eksekusi setelah mencetak byte saat ini
amengatur bit 0x01dari
bset output bit 0x02dari output
emenetapkan bit 0x10dari output
fmengatur bit 0x20dari output
+ jika diaktifkan oleh tetangga manapun, aktifkan semua tetangga lainnya (kawat)

Chip memerlukan -wflag (untuk memungkinkan eksekusi tanpa input), atau beberapa input untuk dapat dijalankan.

Cetakan 0, 1, 2, atau 3dalam ASCII. Jika kode menunjuk 0x00ke 0x03yang diinginkan, hapus edan f, lalu pindahkan spasi untuk mengisi celah.


0

Japt , 3 * 1 = 3 byte

5zB

Cobalah online: apa adanya , diputar sekali , dua kali , tiga kali .

Output 0, 5, 2, 11 masing-masing.

Variabel Bmemegang nilai 11, dan Number.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

2J
1T

Cobalah online: apa adanya , diputar sekali , dua kali , tiga kali .

Output 0, 21, 2, -1 masing-masing.

Tmemegang 0, dan Jmemegang -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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.