Viết chương trình hình chữ nhật cho ra số lần nó được xoay


63

Tiêu đề nói lên tất cả. Mục tiêu của bạn là viết một chương trình tạo thành hình chữ nhật aw × h của các ký tự có thể xoay và chạy lại để tạo ra số vòng quay 90 ° ngược chiều kim đồng hồ (CCW) đã được thực hiện.

Ví dụ: nếu chương trình 3 × 2

abc
def

đã giải quyết vấn đề, ban đầu nó sẽ xuất 0 và các góc quay liên tiếp 90 ° CCW

cf    fed    da
be    cba    eb
ad           fc

sẽ xuất 1, 2 và 3 tương ứng.

Sử dụng ý kiến ​​làm cho điều này một nhiệm vụ tầm thường là hầu hết các ngôn ngữ. Trong Ruby chẳng hạn, nó có thể được thực hiện trong hình chữ nhật 7 × 7:

###p###
### ###
###1###
p 0#2 p
###3###
### ###
###p###

Thách thức là làm điều này mà không có bất kỳ loại ý kiến.

Chấm điểm

Điểm của bạn là w * h, diện tích hình chữ nhật của bạn. Dòng mới được loại trừ. Nói cách khác, code-golf, dòng mới không được tính.

Điểm cho ví dụ Ruby là 49 (mặc dù tất nhiên nó không hợp lệ vì nó có ý kiến).

Ghi chú

  • Mã của bạn phải thực sự là hình chữ nhật không có ký tự bị thiếu ở cuối dòng.
  • Nếu bạn muốn bạn có thể xuất các giá trị "mod 90 °" hợp pháp khác thay vì 0 1 2 3. Vì vậy, 8 là tốt thay vì 0 và -1 là tốt thay vì 3, v.v.
  • Đầu ra có thể đi đến bàn điều khiển hoặc vào một tập tin.
  • Tiêu chuẩn áp dụng.

Tôi hy vọng điều này, câu hỏi đầu tiên của tôi, thực sự gây tò mò cho một số người. Thưởng thức!


1
Để cụ thể hơn về những gì một bình luận là, một bình luận có bất kỳ mã không đánh giá? Mã chưa được chỉnh sửa?
isaacg

Ý tôi là không có "ký tự nhận xét" truyền thống nào trong ngôn ngữ của bạn xuất hiện trong bất kỳ phiên bản nào trong 4 phiên bản xoay. Vì vậy, đối với C ++, hai dấu gạch chéo cạnh nhau sẽ không bao giờ xuất hiện, mặc dù một dấu gạch có thể được sử dụng một mình. Tương tự như vậy với / *. Tôi hy vọng điều đó làm rõ nó.
Sở thích của Calvin

Còn những ngôn ngữ không có ký tự nhận xét thì sao?
isaacg

Vì vậy, mã như echo 0;exit;etrong bash được phép?
jimmy23013

Nếu không có cách nào để bình luận thì bạn không cần phải lo lắng. @ user23013 Bash đó là tốt.
Sở thích của Calvin

Câu trả lời:


43

APL (1x3 = 3)

5!3

Giải pháp này sử dụng quy tắc bổ sung rằng bất kỳ đầu ra nào đúng mod 4 đều hoạt động.

Trong APL, x!ylà số cách để chọn xcác phần tử từ y, thường được gọi là binom(y,x)hoặc choose(y,x). Hãy kiểm tra xem mỗi vòng quay cho câu trả lời đúng.

0 vòng quay

5!3

Không có cách nào để chọn 5 yếu tố từ 3, vì vậy chúng tôi nhận được 0, được in tự động.

Xoay 1 CCW

3
!
5

APL vui vẻ đánh giá từng dòng, lấy số 3, toán tử !và sau đó là số 5, chỉ in cuối cùng trong số này ( 5), là 1 mod 4.

Xoay 2 CCW

3!5

Đây là binom(5,3), đó là (5*4*3*2*1)/(3*2*1)/(2*1) = 10, 2 mod 4.

3 vòng quay CCW

5
!
3

Như trước đây, chỉ có giá trị được đánh giá cuối cùng 3là máy in.

Tôi thực sự không biết APL, vì vậy xin vui lòng cho tôi biết nếu tôi có bất kỳ lời giải thích sai. Tôi đã tìm thấy nó bằng cách dùng thử và lỗi là ngôn ngữ đầu tiên trên trang web này :

  1. Tự động in kết quả của một biểu thức
  2. Cho nhiều dòng biểu thức, chỉ xuất ra dòng cuối cùng
  3. Không có vấn đề với một nhà điều hành đứng một mình trên một dòng
  4. Đưa toán tử vào
  5. Có toán tử nhị phân số học một ký tự không đối xứng (aRb! = B.a) và đủ linh hoạt để trả về nhiều loại số.

Đối với (5), tôi đã đi xuống danh sách các chức năng nhuộm APL . Hoạt động ứng cử viên đầu tiên của tôi là phép chia số nguyên /của C và Python 2, nhưng ÷phép chia APL cho số float. Lũy thừa là cám dỗ, nhưng thất bại bởi vì aa^bcó cùng tính chẵn lẻ nhưng được nhận bởi các phép quay liên tiếp (trừ khi b=0, nhưng sau đó b^a=0). Các toán tử Boolean như <cho 01cách nhau 180 độ, không hoạt động. Cuối cùng, tôi tìm thấy toán tử nhị thức !và thử số cho đến khi tôi nhận được một số hoạt động.

Cảm ơn Quincunx vì sự tự tin của mình rằng tồn tại một giải pháp nhỏ hơn 2x2.


6
Man, thật tuyệt khi thấy một câu trả lời sử dụng ngôn ngữ không bí truyền và chiến thắng .
Stuart P. Bentley

Tôi đã chấp nhận đây là câu trả lời vì nó ngắn nhất theo quy tắc của tôi, nhưng tôi muốn biến câu trả lời của Ventero ( codegolf.stackexchange.com/a/33162/26997 ) một đề cập rất đáng trân trọng. Nó tuân theo bản chất thực sự của vấn đề.
Sở thích của Calvin

Nó cũng hoạt động trong J ở dạng chính xác mà bạn đã đưa ra.
ɐɔıʇǝɥʇuʎs

Trên thực tế, APL không in cả 3 và 5 trong xoay 90 °?
FUZxxl

@FUZxxl Tôi nghĩ rằng điều này chỉ hoạt động trong ngn / apl.
Adám

40

Hồng ngọc, 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 

Lâu hơn một chút so với giải pháp khác, nhưng ít nhất giải pháp này không phụ thuộc vào bất kỳ lạm dụng in ấn hoặc quy tắc ngầm nào. Đối với tất cả bốn phép quay, mã đầy đủ được phân tích cú pháp và ngoài một số ngắn mạch, tất cả các mã được thực thi. Đáng ngạc nhiên, hoàn toàn không có sự đối xứng trong mã

Giải pháp này dựa trên thực tế là vẫn có thể gọi phàm (được sử dụng để in các số) ngay cả khi một biến có cùng tên đã được xác định. Ví dụ, một cái gì đó như p pgọi hàm pvới biến plà đối số (do đó, in giá trị của p).

Giải thích cho một số biểu thức phổ biến được sử dụng trong mã:

  • p: Như đã đề cập ở trên, đây là một hàm gọi hoặc một biến. Khi biến không được xác định, điều này gọi hàm pkhông có đối số, không có gì và trả về nil.
  • p p: In biến p.
  • p|x: Khi plà hàm, cái này giống hệt với hàm nil|xnày trả về true / false tùy thuộc vào giá trị của x. Nếu plà một số nguyên, nó là bitwise hoặc. Dù bằng cách nào, tuyên bố này không có tác dụng phụ.
  • p=p||x: Hiệu quả tương tự như p||=x(gán điều kiện) với lợi thế là có giá trị về mặt cú pháp và không có op khi đảo ngược.

Phiên bản đối xứng (9 × 10 = 90)

    p    

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

    p    

Đây là giải pháp đối xứng ngắn nhất (C 2 khi bỏ qua các số để in) tôi có thể đưa ra.

Kịch bản kiểm tra

Đây là tập lệnh kiểm tra để xác minh mã ở trên ( #ở đầu dòng đã được thêm vào để khoảng trắng không bị tước và bị xóa trước khi thực hiện):

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
Nó có thể không phải là ngắn nhất nhưng đây chính xác là loại sáng chói khó hiểu mà tôi đang tìm kiếm:
Sở thích của

1
@ Calvin'sHob sở thích Điều này có đáp ứng hạn chế "Mã của bạn phải thực sự là hình chữ nhật không có ký tự bị thiếu ở cuối dòng" không?
Joshua Taylor

@JoshuaTaylor Đó là hình chữ nhật, một số dòng chỉ được đệm bằng khoảng trắng (mà theo như tôi nghĩ, là một ký tự). Nếu điều đó không đáp ứng được sự hạn chế vì bất kỳ lý do gì, tôi cũng có thể thay thế các dòng bằng dấu chấm phẩy thay vào đó ...
Ventero

@Ventero Tôi chắc chắn hy vọng điều này hợp pháp; Tôi chỉ đang cố gắng hiểu ý nghĩa của câu hỏi.
Joshua Taylor

1
@Ventero Đệm với khoảng trắng (hoặc thực sự là bất cứ điều gì ngoài bình luận và dòng mới) là tốt.
Sở thích của Calvin

33

GolfScript, 4 (2x2)

43
12

In 4312đó là 0(mod 4). Các phép quay in 3241(1 mod 4), 2134(2 mod 4) và 1423(3 mod 4).

Nhắc bởi:

Nếu bạn muốn bạn có thể xuất các giá trị "mod 90 °" hợp pháp khác thay vì 0 1 2 3. Vì vậy, 8 là tốt thay vì 0 và -1 là tốt thay vì 3, v.v.

Thực tế có rất nhiều bộ số mà điều này hoạt động. Tôi đã tìm thấy những thứ này với chương trình Python này:

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

Mặc dù chương trình xuất ra 0s (có thể sẽ không hoạt động), các giải pháp hợp lệ có dạng

ab
cd

Trong trường hợp 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}là 24 giải pháp.


7
Rất thông minh. Tôi thành thật nghĩ rằng quy tắc thêm là vô hại.
Sở thích của Calvin

4
@Everybody Lưu ý rằng đây không phải là chương trình nhỏ nhất có thể. 2x1 là có thể, và nó là nhỏ nhất có thể. Vì vậy, đi làm!
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 Vậy thì đăng nó!
tomsmeding

1
Giả sử ngôn ngữ ở đây chỉ đơn giản là in số cuối cùng mà nó đánh giá, tôi không tin rằng giải pháp 1 * n (một số) tồn tại cho bất kỳ n. Điều này là do tính chẵn lẻ của toàn bộ số bằng với số chẵn của chữ số ngoài cùng bên phải của nó, nhưng các phép quay cách nhau 90 độ phải mang lại các mức tương đương khác nhau. Vì vậy, 2*2là tối thiểu cho phương pháp này.
xnor

30

Con trăn - 23 x 23 = 529

Ok, câu hỏi này đã là người chiến thắng, nhưng chưa có giải pháp Python nào. Vì vậy, tôi nghĩ về nó - rất nhiều! - và tìm thấy một cách để làm cho printlệnh cồng kềnh hoạt động theo bất kỳ hướng nào mà không tạo ra lỗi khi được phân tích cú pháp từ một trong các hướng khác.

Bước đột phá là dòng sau:

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

Trong khi forward_codethực thi, phần backward_codenày là một phần của chuỗi và do đó không được in. Đây chính xác là cách khác khi đọc ngược.

Vì vậy, kết hợp với hai hướng nữa và tinh chỉnh để có được tất cả các trích dẫn khớp chính xác, tôi kết thúc với giải pháp sau:

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

Chỉnh sửa: Tôi tìm thấy một cách để đối phó với tất cả khoảng trắng đó. ;)


Có cách nào để đặt p=printtệp vào không, vì hiện tại bạn có quá nhiều khoảng trắng? (Python 3, tất nhiên)
isaacg

@isaacg: Tôi không nghĩ vậy. Định nghĩa p=printcũng dài. Và quan trọng hơn: Bạn không thể sử dụng lại psau khi xoay mã!
Falko

Tôi đoan la bạn đung. Đó là hai xấu, mặc dù.
isaacg

12
Đề cử: Giải thưởng sử dụng tốt nhất của khoảng trắng.
primo

24

CƠ BẢN, 64

Sẽ không chiến thắng, nhưng đây là dù sao đi nữa. (Đã thử nghiệm trong Chipmunk Basic )

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

Lưu ý: ?là viết tắt cho PRINTcác phương ngữ khác nhau của BASIC. Mặc dù có rất nhiều lỗi cú pháp trong mã, nhưng ENDcâu lệnh trong dòng đầu tiên ngăn không cho chúng bị trình thông dịch nhìn thấy.


1
Trên thực tế, điểm số của bạn lần lượt là 64 và 16. Dòng mới không được tính. Ngoài ra, tại sao không chia câu trả lời?
Justin

Ồ, đã bỏ lỡ chút đó. Tôi sẽ chia câu trả lời nếu họ không chiếm vị trí cuối cùng. Dường như không có nhiều điểm khác :-)
ossifrage squeamish

Bạn không còn tồn tại nữa :-)
Justin

Tôi sẽ cho bạn điểm thưởng để có được số lượng nhân vật tròn. +1 thực tế là để sử dụng sáng tạo ENDmặc dù :)
CompuChip

21

Bình thường , 9 ký tự (3x3)

0 1

3 2

Trong pyth, mọi thứ được in theo mặc định, trừ khi nó được đặt trước một khoảng trắng. Các dòng sau dòng đầu tiên dành cho đầu vào của người dùng và không được đánh giá trong chương trình này.

Một cách khác để có 9 ký tự:

"0"
3 1
"2"

Pyth 1.0.5 , 4 ký tự

Mặc dù các thay đổi gần đây về pyth đã khiến cho số 2 chữ số khó tạo hơn (Một thay đổi mà tôi đang xem xét hoàn nguyên), các phiên bản cũ hơn của Pyth có thể tạo số hai chữ số dễ dàng, kết hợp với in ngầm và thực tế là tất cả các dòng trừ đầu tiên được bỏ qua, đưa ra giải pháp sau:

32
41

In 32,21,14,43.


Chà, thật là vui. +1
xem

Shucks, tôi đã hy vọng nó không dễ dàng. Bạn đang thiếu 3 ký tự trên đường giữa của bạn nhưng tôi đoán đó là do định dạng tự động ở đây.
Sở thích của Calvin

@ Calvin'sHobbies Xin lỗi, tôi hiểu. Nó nhai không gian của tôi.
isaacg

@Quincunx Ồ, tôi đã bỏ lỡ phần ghi bàn đó. Cảm ơn các bản sửa lỗi.
isaacg

18

Befunge, 16

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

Giải thích: Các chữ số từ 0để 9đẩy số tương ứng lên ngăn xếp, .bật một giá trị từ ngăn xếp và in nó dưới dạng số nguyên và @kết thúc chương trình.

(đã thử nghiệm ở đây )


Đây không phải là đầu ra số lần nó được quay ngược chiều kim đồng hồ sao?
xem

@TheRare Có. Nó làm. Đó là những gì nó nên làm.
Justin

1
Tôi dường như bị mù hoàn toàn. Có +1 vì điều đó.
xem

Befunge !!! Vẫn là ngôn ngữ yêu thích của tôi mọi thời đại mãi mãi như vậy!
steffen

16

Piet, 49

Một chương trình

Tôi đã chỉ đưa ra một điểm để sử dụng màu vàng và màu đỏ, và để thử và làm cho nó gần như đối xứng. Khi xoay, nó in 0, 1, 2 hoặc 3. Thoát khỏi chương trình trong Piet rất khó và chiếm khoảng một nửa không gian trong ảnh, thật không may.


1
Có vẻ như công cụ phù hợp cho công việc.
Robert Fraser

O_o, tôi đã khóc khi tìm hiểu về ngôn ngữ lập trình này! Ngay bây giờ. Đẹp. Trong nhiều cách! Cảm ơn bạn!
steffen

15

GNU dc , 6 (3x2)

Tôi nghĩ rằng đây là câu trả lời ngắn nhất không yêu cầu thư giãn quy tắc "mod 90 °":

3z1
0p2

Kết quả đầu ra 0, 1,2 hoặc 3cho mỗi vòng quay.

Đối với 0, 2và các 3phép quay, pđơn giản là bật và in số cuối cùng theo nghĩa đen đã được đẩy lên ngăn xếp. Đối với 1phép quay, zđẩy độ sâu ngăn xếp hiện tại (1) đến ngăn xếp, sau đó pbật và in nó.


1
Vì vậy, 311 / 0p2 cũng sẽ làm việc?
Neil

@Neil Vâng, một trong những tốt. Không ảnh hưởng đến điểm golf mặc dù :)
Chấn thương kỹ thuật số

Nó không ảnh hưởng đến điểm số golf, nhưng tiêu cực, vì các dòng mới không được tính, nhưng dấu gạch chéo là.
M.Herzkamp

@ M.Herzkamp giả định của tôi là Neil nghĩa 311\n0p2, nơi \nlà một ký tự xuống dòng. Nếu không nó sẽ là vô nghĩa trong bối cảnh của dc.
Chấn thương kỹ thuật số

10

GolfScript, 9 (3x3)

0}1
} }
3}2

Sắp xếp lạm dụng các quy tắc. Việc }xảy ra để kết thúc chương trình nếu không có kết quả khớp {và nội dung của ngăn xếp được in ở cuối chương trình.


Đừng quên tính dòng mới là một nhân vật.
isaacg

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

Tôi không biết rằng }có thể mất cân bằng. Bí quyết đẹp.
Peter Taylor

9

JavaScript, 4

03
12

Khi bạn thực hiện chương trình này (hoặc xoay vòng chương trình này) trong bảng điều khiển javaScript, chỉ dòng cuối cùng được ước tính và lặp lại trong bảng điều khiển.

Vì thế:

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

Dưới đây là tất cả các chương trình 2x2 tương tự cũng hoạt động:

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

Nói cách khác,

ab
cd

trong đó a ở [0,4,8], b ở [3,7], c ở [1,5,9] và d ở [2,6]


8

CJam / GolfScript - 3 * 3

2;3
;7;
1;0

Dấu chấm phẩy bật số trước đó, do đó chỉ có góc dưới bên phải được in.


6

Aheui , 8

바몽희뷸
뷷희몽반

Vì Aheui không có chữ cái đẩy 1 lên ngăn xếp, tôi quyết định in 0, 5, 2 và 3.

Giải thích: lần lượt 반 và 0 đẩy 0 và 2 lên ngăn xếp và di chuyển con trỏ sang phải theo một ký tự. Và lần lượt đẩy 5 và 3 lên ngăn xếp và di chuyển con trỏ xuống hai ký tự. Bật và in số trong ngăn xếp và di chuyển con trỏ lên theo một ký tự. Chấm dứt chương trình.


5

JavaScript

(Được nhập trong bảng điều khiển trình duyệt, trình bao hoặc REPL khác, do đó kết quả được in)

1+2
-3-
4+5

Nên hoạt động cho bất kỳ ngôn ngữ nào khác có biểu thức, dòng mới không quan trọng và tự động in kết quả.


2
Tôi thích ý tưởng đằng sau điều này, nhưng không phải nó luôn in 1 (mod 4) sao?
zennehoy

2
Một biến thể đơn giản hơn có thể là '2,3\n,0,\n1,0'.
Keen

Nó không cho kết quả khác nhau khi xoay. @Cory, thật thông minh! Tôi đã quá quen với việc làm việc trong một ngôn ngữ mà không có toán tử dấu phẩy.
LRN

@lrn Có, nó cho kết quả khác nhau, nhưng đó không phải là yêu cầu. Chương trình phải in 0 (mod 4) khi không được xoay và 1, 2 hoặc 3 (mod 4) khi xoay số lần tương ứng ...
zennehoy

Ghi chú thứ hai của poster gốc cho phép mọi giá trị cho các phiên bản được xoay, miễn là chúng khác biệt.
LRN

5

Matlab / Octave - 144 100

Chơi gôn: 10 x 10 = 100

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

Giải pháp thay thế: 15 x 15 = 225

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

Giải pháp đầu tiên có thể được giảm xuống kích thước 8x8 không, nếu các toán tử vrtical và ngang 'phân tán' chia sẻ 'p'? ...d.... ...i.... ...s2... disp 1.. ..3 psid ...4s... ....i... ....d...
AMK

@AMK: Thật không may, điều này tạo ra một lỗi cú pháp trong dòng ..3 psid. Bạn cần ít nhất ba dấu chấm ở đầu mỗi dòng để chỉ ra dấu ngắt dòng và bỏ qua các ký tự còn lại.
Falko

5

Perl 5x7 (35)

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

Một chút muộn để dự tiệc. Đơn độc -xác định số nào được in.


4

JavaScript, 3

2
1
4

Nó hoạt động ... trong cơ sở 7.

Phiên bản cơ sở 9:

2
7
0

Giải trình

Khi chạy tương tác, ví dụ từ bảng điều khiển gỡ lỗi, giá trị của câu lệnh / biểu thức cuối cùng sẽ là đầu ra.

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

Các giải pháp tương tự có thể được tìm thấy cho bất kỳ cơ sở kỳ lạ.


Điều này đã được gắn cờ, nhưng tôi không hiểu câu hỏi hoặc câu trả lời nên tôi phải bỏ qua nó. Sẽ là tốt đẹp nếu downvoters để lại một bình luận giải thích downvote của họ.
Rainbolt

@Rizer Tôi nghi ngờ họ không hiểu cơ sở 7 bit.
primo

3

Befunge, 12 (6x2)

Tôi đã xoay sở để đưa ra một cải tiến nhỏ cho câu trả lời Befunge hiện có bằng cách tận dụng tối đa bản chất hai chiều của Befunge và để đường dẫn mã chạy theo chiều dọc theo hai trong số các hướng.

0.@.1v
v3.@.2

Dùng thử trực tuyến: Bắt đầu 0 , Xoay 1 , Xoay 2 , Xoay 3 .


2

Tuyệt vời, 7 * 14 = 98

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

Bạn có mong đợi mỗi tế bào vẫn còn nguyên vẹn khi được quay?
Sparr

2

Argh! / Aargh! (4 * 4 = 16)

Điều đó là gì về việc sử dụng công cụ phù hợp cho công việc? Không có ý kiến ​​(trong ngôn ngữ nói chung).

Toàn bộ họ chương trình (được tạo trong J: ((|.@:|:) ^: (i. 4)) >'hpqh';'q01p';'p32q';'hqph' hoặc ((|.@:|:) ^: (i. 4)) 4 4 $ 'hpqhq01pp32qhqph')

hpqh
q01p
p32q
hqph

quay một lần:

hpqh
q12p
p03q
hqph

xoay hai lần:

hpqh
q23p
p10q
hqph

xoay ba lần:

hpqh
q30p
p21q
hqph

Để giải thích điều này, tốt nhất nên xem xét một phiên bản "thụt lề" (Điều đó cũng hoạt động trong tất cả các phép quay):

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

Phiên bản này cho thấy chương trình bao gồm 4 phần riêng biệt, một phần cho mỗi vòng quay riêng lẻ.

  • h - đặt luồng điều khiển bên trái

  • p - mục in trong dữ liệu / mã raster bên dưới nó

  • q - bỏ chương trình


2

Floater - 9 × 5 = 45

nhập mô tả hình ảnh ở đây

In 4, 1, 2 hoặc 3 lên bàn điều khiển.

Lưu ý rằng 'Đen' là một hướng dẫn hợp lệ (NOP) và là cú pháp. Không có nó, nó không thể tìm thấy vị trí bắt đầu. Do đó, tất cả các vị trí trong hình chữ nhật được chiếm.


1

Phần tử, 2x3 = 6

1*
`2
3 

Đây là một cải tiến so với giải pháp ngây thơ 3x3, có một `ở giữa với một số ở mỗi bên. Trường hợp 0, được hiển thị ở trên, là thú vị nhất, vì* được sử dụng để nhân 3 với không có gì để có 0. Ngoài ra, điều đó không phức tạp lắm.

Nếu bạn thấy không gian khó xử, bạn có thể thay thế nó bằng khá nhiều nhân vật khác, ngoại trừ []{}`_ .

Để tham khảo, đây là ba vòng quay khác:

case 1
*2 
1`3

case 2
 3
2`
*1

case 3
3`1
 2*

0

Chip, (2x5) 10

b~
+a
~t
e*
 f

*kích hoạt tất cả các yếu tố hàng xóm: phía bắc, phía đông, phía nam và phía tây (nguồn)
~nếu không được kích hoạt từ phía tây, kích hoạt hàng xóm đông (KHÔNG khẩu) (không bao giờ kích hoạt ở đây)
tchấm dứt thực hiện sau khi in byte hiện
ađặt bit 0x01của đầu ra
bbộ bit 0x02của đầu ra
eđặt bit 0x10của đầu ra
fđặt bit 0x20của đầu ra
+ nếu được kích hoạt bởi bất kỳ lân cận nào, kích hoạt tất cả các lân cận khác (dây)

Chip yêu cầu hoặc -w cờ (để cho phép thực thi mà không cần nhập) hoặc một số đầu vào để chạy.

In 0, 1, 2, hoặc 3trong ASCII. Nếu điểm mã 0x00để 0x03được mong muốn, loại bỏ các ef, sau đó di chuyển không gian lên đến lấp đầy khoảng trống.


0

Japt , 3 * 1 = 3 byte

5zB

Hãy thử trực tuyến: như hiện trạng , xoay một lần , hai lần , ba lần .

Đầu ra 0, 5, 2, 11 tương ứng.

Biến Bgiữ giá trị 11 và Number.z(other)là phân chia sàn (mọi người đều tìm kiếm rõ ràng: p). Đối với mã nhiều dòng, dòng cuối cùng được chuyển đến đầu ra, đây đơn giản là một hằng số ở đây.


2 * 2 = 4 byte

2J
1T

Hãy thử trực tuyến: như hiện trạng , xoay một lần , hai lần , ba lần .

Đầu ra 0, 21, 2, -1 tương ứng.

Tgiữ 0 và Jgiữ -1.

Bí quyết là, nếu hai chữ hoặc biến được đặt cạnh nhau, một dấu phẩy được chèn vào và đầu ra chỉ là cái cuối cùng.

Giải pháp 2 * 2 JS cũng hoạt động trong Japt.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.