# 4"16" 3//v\(@#/;\D"14"<;n4
#/*`3 afaaZ">;[77*,68*,@;'1,'1,q)(22)S# ␉␉␉␉ (
#yy␉;36!@
#`<` ␉
#=␉x
#<]+<[.>-]>[
#␉<
###xR+++++[D>+++++++L+++<-][<<<]>+.---.>][
#px%>~~~+␉+~*ttt*.x
#D>xU/-<+++L)
#R+.----.R␉>]|
#[#yy#yy0l0mx01k1k0l0ix0jx0h0h1d111P0eU0bx0b0o1d0b0e0e00x1d0i0fx0g0n0n11x0o0n0cx0c0o0f0c0gx0g0f0h0j0j0i0001k10mx0m0l11111100(^_)
#|␉
print((eval("1\x2f2")and(9)or(13 ) )-(0and 4)^1<<(65)>>(62))or'(\{(\{})(\{}[()])}\{}\{}\{})'#46(8+9+9+9+9+=!)#1111|=/=1/24=x=9[<$+@+-@@@@=>+<@@@=>+<?#>+.--.]/
__DATA__=1#//
#.\."12"␉*
###; console.log 39
""""#//
=begin␉//
#*/
#define␉z sizeof 'c'-1?"38":"37"
#include<stdio.h>
int main() /*/
#()`#`\'*/{puts(z);}/*'``
$'main'␉//
#-3o4o#$$$
<>"3"O.<␉>//
#
=end #//
"""#"#//
#0]#echo 21#/(\[FAC,1<-#2FAC,1SUB#1<-#52FAC,1SUB#2<-#32FACLEGEREEX,1PLEASEGIVEUPPLEASE) a>>>
#>27.say# /7Jn~15o|
#8␛dggi2␛`␉|1|6$//''25 =#print(17) ###^_^_LEintnd"3"z!]/}23!@/*///Z222999"26
␉
là một tab theo nghĩa đen, ␛
một ký tự ESC theo nghĩa đen; Stack Exchange sẽ quản lý chương trình khác. Tôi khuyên bạn nên sao chép chương trình từ hộp "đầu vào" của liên kết TIO bên dưới, nếu bạn muốn làm việc với nó.
Hãy thử trực tuyến!
Điểm VIP (Máy in số nguyên đa năng): 0,01329
Chạy xuống
Chương trình này in 41 in brainf ***, 40 in Minimal-2D, 39 in CoffeeScript, 38 in C, 37 in C ++, 36 in Labyrinth, 35 in INTERCAL, 34 in Rail, 33 in Incident, 32 in Whirl, 31 in Mô-đun SNUSP, 30 ở khoảng trắng, 29 ở Kích hoạt, 28 ở Brain-Flak, 27 ở Perl 6, 26 ở 05AB1E, 25 ở Pip, 24 ở Thutu, 23 ở Hexagony, 22 ở Underload,21 ở Nim, 20 ở Prelude, 19 ở Reng, 18 ở Hồng y, 17 ở Julia, 16 ở Pyth, 15 ở Haystack, 14 ở Turtlèd, 13 ở Ruby, 12 ở Fudge, 11 ở Befunge-98, 10 ở Befunge- 93, 9 trong Perl 5, 8 ở Retina, 7 ở Japt, 6 ở SMBF, 5 ở Python 2, 4 ở> <>, 3 ở Minkolang, 2 ở V / Vim và 1 ở Python 3.
xác minh
Hầu hết các ngôn ngữ được kiểm tra bởi trình điều khiển thử nghiệm được hiển thị ở trên. Bạn có thể kiểm tra Reng tại đây và Modular SNUSP tại đây ; họ xuất 19 và 31 tương ứng, theo yêu cầu.
Trình điều khiển thử nghiệm đã được cập nhật để bao gồm Tokenizer, cuối cùng. Tất cả các mã C được lưu trữ dưới dạng đối số theo quan điểm của Bash Script. Tôi cũng đã thay đổi đầu ra để bọc theo chiều ngang với một khoảng trắng ở sau mỗi mã thông báo thay vì xuất ra theo chiều dọc. Đây chỉ là sở thích của tôi, để làm cho nó phù hợp với đầu ra Whitespace. Nhưng bất cứ ai khác có thể thay đổi nó nếu họ cảm thấy nó quá khó hiểu.
Tôi cũng đã thực hiện điều chỉnh Trình điều khiển thử nghiệm để xử lý khoảng cách cột cho char UFT8 của Turtlèd trong danh sách. Sự sai lệch đó đã khiến tôi phát điên! Bản sửa lỗi của Wap là khá hack-ish vì nó chỉ tìm kiếm một è và thay đổi độ rộng cột cho trường hợp đó, nhưng nó đã hoàn thành công việc.
Giải trình
Trước hết, tôi muốn nói rằng đoạn mã số máy in đa năng linh hoạt của @ SnoringFrog tuyệt vời như thế nào từ bài đăng cuối cùng. Tôi đã tính toán câu trả lời trước khi đăng một thời gian và điều này đã truyền cảm hứng cho tôi giữ cho nó nhỏ. Tôi nghĩ rằng cuối cùng chúng ta có thể đánh bại câu trả lời của @ sp3000.
Vì vậy, tôi bắt đầu thực hiện câu trả lời này bằng cách cố gắng đánh bại những gì tôi có thể và tôi đã khá thành công. Tôi thậm chí đã có một câu trả lời bằng một ngôn ngữ khác với tổng số byte nhỏ hơn # 40. Nhưng khi tôi cố gắng chơi gôn Minimal-2D, tôi đã phải học BF để tôi có thể làm việc tốt hơn với các dẫn xuất của nó và trong quá trình tôi đã tìm thấy kỷ lục @ Primo phá vỡ Hello, World! . Tôi đã yêu sự thanh lịch.
Tối thiểu 2D, hóa ra, không đủ hiệu quả để sử dụng kỹ thuật khởi tạo băng được sử dụng bởi @Primo, nhưng tôi cho rằng bây giờ có lẽ nó sẽ quá nặng byte. Chúng tôi chỉ cố gắng in một số nguyên sau khi tất cả. Nhưng @Primo đã gửi cho tôi con đường học cách nhân lên trong BF, thứ mà tôi đã mang đến mã tối thiểu 2D.
Sau tất cả những điều này, tôi đã đọc lại nhận xét của @ SnoringFrog về cách bao gồm BF và nhận ra rằng tôi không chỉ có thể làm điều đó mà còn có thể sử dụng nhiều mã Minimal-2D mà tôi đã đánh vào câu trả lời BF. Vì vậy, tôi đã đào sâu để trả lời với BF, và chúng ta ở đây.
Một điều nữa trước khi tôi đi vào chi tiết. Có một vài thay đổi tôi đã thực hiện vì lý do không chơi gôn. Đầu tiên, tôi đã chuyển phần lớn mã @SnoringFrog được thêm vào ngay bên dưới các ngôn ngữ 2D ở một số hàng trên cùng. Đối với tôi, đây là một động thái chiến lược dài hạn để ngăn chặn các lang 2D đi qua trung tâm của polyglot để ngăn chặn các lỗi trong tương lai nếu có thể. Lượt truy cập byte thấp cho di chuyển này, vì vậy tôi đã thực hiện nó.
Thứ hai, trong các yếu tố lại khác nhau, tôi đã biết rằng Begunges và Minkolang tạo ra một khoảng trống sau các đầu ra số và đây là nguyên nhân của các byte rỗng mà chúng ta đã thấy trong Trình điều khiển thử nghiệm cho các ngôn ngữ này. Tôi đã sửa những lỗi này bằng cách xuất giá trị của ngăn xếp dưới dạng mã ascii (không bao gồm tính năng dấu cách), thay vì trực tiếp giá trị. Cũng có một byte nhỏ cho thay đổi này, nhưng bây giờ đầu ra của Trình điều khiển thử nghiệm rất đồng đều. Làm sao tôi có thể không?
SM / BF
Hãy nhanh chóng đi qua những điều cơ bản. Đây là các lệnh hợp lệ duy nhất cho SMBF và BF:
> Move the pointer to the right
< Move the pointer to the left
+ Increment the memory cell under the pointer
- Decrement the memory cell under the pointer
. Output the character signified by the cell at the pointer
, Input a character and store it in the cell at the pointer
[ Jump past the matching ] if the cell under the pointer is 0
] Jump back to the matching [ if the cell under the pointer is nonzero
Cả hai ngôn ngữ đều có một băng nhớ nơi các giá trị được lưu trữ và thay đổi. Sự khác biệt duy nhất của SMBF là bất kỳ mã nào đang được thực thi cũng được lưu trữ trên băng nhớ ở bên trái của điểm bắt đầu. Như @SnoringFrog đã chỉ ra, việc đưa SMBF và BF tạo ra các kết quả khác nhau để di chuyển con trỏ bộ nhớ sang bên trái của điểm gốc. Trong trình thông dịch BF của Tio, con trỏ bộ nhớ có khả năng di chuyển sang trái của nguồn gốc và sẽ tìm thấy 0 thay vì mã ascii của Polyglot mà SMBF nhìn thấy. Dưới đây là một ví dụ có thể chạy trong cả SMBF và BF để minh họa cho sự khác biệt.
Khi bắt đầu polyglot, Befunges yêu cầu >
hàng thứ hai chạy đến khi hoàn thành và Perl6 yêu cầu mọi thứ >
phải đi trước a <
. Vì vậy, SM / BF bắt đầu bằng <>
cách để con trỏ bộ nhớ ở gốc, sau đó nhấn một [
ký tự nhảy một số ký tự gây khó chịu cho cả hai ngôn ngữ sang ]
hàng thứ 6.
Tiếp theo, chúng tôi tăng ô nhớ gốc cho cả hai ngôn ngữ và di chuyển con trỏ bộ nhớ sang trái bằng +<
. (Đối với quy ước hội thoại, chúng ta sẽ gọi ô nhớ gốc là ô 0, các ô ở bên phải của gốc 1, 2, ... Và các ô ở bên trái -1, -2, Khắc). Ô -1 chứa mã asci của ký tự cuối cùng trong polyglot trong SMBF và 0 trong BF, vì vậy khi [
gặp tiếp theo , chỉ BF nhảy sang tiếp theo ]
trong khi SMBF chuyển vào mã.
Khi SMBF di chuyển ngang, [.>-]
nó in 6 được tìm thấy ở cuối polyglot và sau đó di chuyển con trỏ bộ nhớ trở về ô 0, đặt giá trị của nó trở về 0 để thoát khỏi ]
. Để xem xét, các băng ở pint này là: các tế bào âm của SMBF giữ đa âm và 0 và các ô dương giữ 0. Các tế bào âm tính và dương tính của BF giữ bằng 0 trong khi tế bào gốc của nó giữ 1.
Tiếp theo, >
di chuyển SMBF sang ô 1 và BF trở lại ô 0 cho phép BF nhập khối mã riêng: [<+++++[>++++++++++<-][<<<]>+.---.>]
(Tôi đã xóa các ký tự không phải BF từ đây). Ở đây, chúng tôi quay trở lại ô -1 và khởi tạo biến điều khiển vòng lặp của chúng tôi (ô -1) thành giá trị 5. Sau đó, chúng tôi nhập vào vòng lặp nơi chúng tôi thêm 10 vào ô 0 và giảm ô -1 năm lần trước khi thoát khỏi vòng lặp chúng ta sẽ chỉ vào ô -1 với giá trị 0.
Tiếp theo chúng ta bắt gặp [<<<]
trong khi chỉ vào số 0, vì vậy BF không vượt qua điều này. Mục đích ở đây là để cân bằng một số lượng >
với trước đó <
để Perl6 không bị lỗi.
Tại thời điểm này, ô 0 có giá trị 51. Giá trị ascii của 4 là 52, vì vậy chúng tôi di chuyển con trỏ đến ô 0 thêm 1, sau đó in giá trị. Và cuối cùng, chúng ta giảm ô 0 trở lại ký tự ascii 1 và in lại trước khi đặt con trỏ bộ nhớ thành ô 1 (giá trị 0) để thoát qua ]
.
Cả SMBF và BF đều đạt điểm cuối cùng [
trên dòng 8 tiếp theo trong khi cả hai đều nằm trên giá trị 0. Vì vậy, cả hai đều nhảy qua mã Minimal-2D còn lại cho đến khi ]
gặp phải trên dòng 11. Nhưng điều này chỉ tồn tại trong thời gian ngắn bởi vì dòng 12 bắt đầu bằng một [
ngôn ngữ khác đưa cả hai ngôn ngữ đến gần hết phần đa âm mà không gặp phải hướng dẫn nào nữa.
Máy tái cấu trúc
Tối thiểu 2D
Viết lại của Minimal-2D chủ yếu là để lưu một số byte theo cách tương tự như thủ thuật nhân của BF. Tuy nhiên, Minimal-2D không có các ký tự [
và ]
điều khiển vòng lặp. Thay vào đó, nó có các lệnh sau:
/ Skips next instruction if the data pointer is set to 0.
U Tells the program to switch to the up direction of processing instructions.
D Tells the program to switch to the down direction of processing instructions.
L Tells the program to switch to the left direction of processing instructions.
R Tells the program to switch to the right direction of processing instructions.
Chúng có thể được sử dụng để tạo ra cấu trúc logic tương tự, mặc dù trong trang viên 2D, giống như của BF. Ví dụ, BF ++++++[>++++++<-]>.
tương đương với điều này trong Minimal-2D.
Đây là một phiên bản đơn giản của mã Minimal-2D trong polyglot, với tất cả các mã ngoại lai được loại bỏ và tất cả các ký tự giữ chỗ được thay thế bằng #
.
###################D
###R+++++[D>+++++++L
###>
D>#U/-<+++L)
R+.----.R
Các D
phù hợp 1 gửi con trỏ chỉ dẫn xuống L
ở dòng 8 của nhiều thứ tiếng mà gửi con trỏ sang trái. Ở đây chúng ta đặt biến điều khiển vòng lặp (ô 0) thành 7, di chuyển con trỏ bộ nhớ đến ô 1 và nhập một vòng lặp. Trong vòng lặp, chúng ta thêm 3 vào ô 1, giảm ô 0 rồi kiểm tra xem giá trị của ô 0 có bằng không chưa. Nếu không, chúng ta thêm 8 vào ô 1 sau đó giảm dần và kiểm tra lại. Kết quả của vòng lặp này là giá trị của ô 1 được đặt thành 51 ở cuối vòng lặp (6 * 8 + 3).
Chúng ta thoát khỏi vòng lặp bằng cách nhảy U
, di chuyển con trỏ bộ nhớ đến ô 1 và đi xuống bên phải trên dòng 11 của polyglot. Và cuối cùng, chúng tôi tăng đến giá trị ascii cho 4 rồi giảm xuống giá trị ascii cho 0 trước khi chạy sang bên phải để kết thúc chương trình.
Võng mạc
Retina có rất nhiều yêu cầu khó thực hiện đối với tất cả các dẫn xuất BF. Nó không giống như liên tiếp +
hoặc không khớp ()
hoặc []
. Nhưng đây thực sự chỉ là những yêu cầu cho mọi dòng khác, vì vậy rất nhiều công việc cho BF, SMBF và Minimal-2D xoay quanh việc đưa phần lớn mã vào các dòng được đánh số chẵn.
Một byte được cam kết duy nhất cho Retina mặc dù là |
ở cuối dòng 11. Để trích dẫn @ ais523, hầu hết các biểu thức kết thúc bằng | sẽ phù hợp với bất cứ điều gì. Không có cái này, Retina trả về 0. Tại sao cái này sửa nó, tôi không biết. Tôi đã không phải đào sâu vào Retina quá nhiều, có lẽ vì tôi đã tránh được hàng dài. Nhưng giống như Prelude, tôi thấy tôi không cần phải hiểu nó nhiều như tôi cần hiểu cách gỡ lỗi, trong trường hợp này chủ yếu bao gồm xóa các dòng (trong bội số 2) cho đến khi tôi tìm thấy dòng Điều đó khiến nó bị phá vỡ. Tôi đoán cách khắc phục này dựa trên nhận xét của @ ais523 và đã được khen thưởng. Tôi đoán là tôi quá tuyệt vời cho trường học.
Đức hồng y
Tôi tình cờ thích vị trí Tối thiểu 2D của @ SnoringFrog so với mã của Hồng y. Đây là một vị trí tốt khi xem xét Cardinal không làm phiền Retina và dường như cho phép một số đan xen với Minimal-2D. Vì vậy, khi tôi bắt đầu ghép Minimal-2D lên đất 2D, tôi đã mang theo Hồng y đi cùng. Có một vài thay đổi mỹ phẩm cho Hồng y mặc dù. Đầu tiên, tôi đã ném >
gần đầu câu lệnh #p x%>~~~+ +~*ttt*.x
cho Minimal-2D để thay đổi các con trỏ bộ nhớ trong vòng lặp của nó / Thứ hai, tôi chuyển mọi thứ một ký tự sang bên phải để tạo cho phòng Minimal-2D để thoát khỏi vòng lặp một cách duyên dáng. Các p
sting này là cho đệm nhân vật này.
Befunge / 98
Các Befunges thực sự là nơi tôi bắt đầu cố gắng chơi golf xuống polyglot, vì bộ tái cấu trúc C ++ đã thay đổi tất cả các mã lang 2D khác, ngoại trừ mã này. Khi cố gắng học WTF đã diễn ra trong mã này, tôi đã tìm thấy điều này trong tài liệu Begunge:
Các .
lệnh sẽ bật một giá trị ra khỏi ngăn xếp và đầu ra nó như là một số nguyên thập phân, theo sau là một không gian , một chút như Forth. ,
sẽ bật một giá trị, diễn giải nó thành giá trị ASCII của một ký tự và xuất ra ký tự đó ( không được theo sau bởi khoảng trắng. )
Không hiểu! Chúng ta có thể dọn sạch các byte rỗng trên đầu ra. Sau này, tất cả chỉ là vấn đề tìm ra cách nhập các giá trị asci lớn hơn và tách biệt mã. Befunge-98 có một mã nhảy ;
bảo nó bỏ qua phần [77*,68*,@
trong ;[77*,68*,@;'1,'1,q
, điều này cho chúng ta sự phân biệt.
Befunge-98 cũng có lệnh ( '
) để lấy mã ascii của ký tự tiếp theo. Vì vậy, '1,
lấy mã asci mã cho ký tự 1
, đặt nó vào ngăn xếp và sau đó in ký tự ascii cho giá trị hàng đầu trên ngăn xếp với ,
. Chỉ cần làm điều này hai lần để in 11 và thả một q
để thoát ra một cách duyên dáng.
Befunge thích hợp là một chút ít thuận tiện, nhưng chỉ. Ở đây chúng ta phải thực hiện một phép tính để đặt mã mong muốn vào ngăn xếp. May mắn thay, mã của chúng tôi đã dễ dàng được nhân với 7 * 7 và 6 * 8 trước cùng một lệnh đầu ra ,
. Sau đó, chúng tôi rời khỏi Befunge @
trước khi mã của anh trai nó làm ô nhiễm đầu ra.
Chồn
Sau khi tìm ra cách khắc phục cho các khoảng trống ở Befunge, tôi đã nảy ra ý tưởng tìm kiếm một bản sửa lỗi của Minkolang và tài liệu của Minkolang nói rằng lệnh đầu ra đã được sử dụng cho đến khi điểm này hoạt động giống như Trình thông dịch Befunge. O
tình cờ được ghi nhận là một lệnh đầu ra khác, không được mô tả là chia sẻ tính năng Bắt đầu này, vì vậy tôi chỉ chụp trong bóng tối và thử xuất chuỗi "3"
. Chiến thắng hoàn mỹ.
> <>
Một trong những điều đầu tiên tôi nhìn vào khi di chuyển mã Minimal-2D là xác minh rằng tôi có thể di chuyển> <> cùng với nó. Nếu tôi định đối phó với sự chuyển đổi đa hình 2D, tôi sẽ đối phó với mọi sự vi phạm. Về cơ bản, tôi đã may mắn tìm được giải pháp đặt ;n4
ở cuối dòng 1 và di chuyển \D
xa hơn về dòng 1. BTW, tôi không biết rằng> <> có thể được chuyển xuống trước câu trả lời 40 vì nó được chứa rất tốt . Tôi muốn nghĩ rằng điều này có thể được sử dụng sau này để phân kỳ> <> từ một ngôn ngữ tương tự khác.
Perl6
Tôi đã nói về một số <>
vấn đề cân bằng của Perl6 ở nơi khác trong câu trả lời này, vì vậy tôi sẽ không đề cập đến nó nữa. Nhưng tôi muốn chỉ ra rằng tôi đã chuyển #>27.say#
sang dòng thứ hai đến dòng cuối cùng. Điều này không có một mục đích chức năng trong câu trả lời này. Tôi thực sự đã thực hiện động thái này để đáp ứng một câu trả lời khác mà cuối cùng tôi không sử dụng vòng này. Tôi quyết định bỏ nó đi vì tôi dự định đăng câu trả lời đó vào cơ hội tiếp theo của mình và tôi không muốn làm phiền và làm lại nó.
Sửa lỗi
05as1e
05as1e chắc chắn không thích mã Begunge mới nhiều như phiên bản cũ. Tôi cho rằng đó ,
là vì đó là nhân vật cách mạng duy nhất. Trong mọi trường hợp, tôi phải di chuyển "
trở lại dòng hai để ẩn các lệnh tấn công và tôi biết rằng "
phải đi trước đường dẫn mã Befunge vì "
cả hai ngôn ngữ đều có. (Tôi chỉ có thể tạo ra các thuật ngữ như yes-op phải không?) Tính 2 chiều của Dòng 2 khá cứng nhắc, nhưng tôi đã có thể thay thế <
đường dẫn mã trước của Begunge bằng "
. Các <
tuy nhiên là một yêu cầu của Perl6. (Nó phải có <
trước tất cả >
.) Tôi đã có thể thả <
dòng thứ nhất tại một địa điểm được phân chia theo bản năng và biết trước giải quyết bất đồng của 05ab1e và Perl6.
Vòng xoáy
Các thay đổi Befunge trên dòng 2 đã thêm một phần bổ sung 1
cho polyglot trước dòng Incident / Whirl. Điều này thêm 1
khiến Whirl bắt đầu chỉ vào các hướng dẫn sai trên bánh xe. Lần đầu tiên 1
trong chỉ thị tiền xử lý của C / C ++ chỉ là một tham chiếu số dòng trong mã và điều này có thể dễ dàng giống như bất kỳ số dòng nào khác, vì vậy tôi tùy ý thay đổi điều này 4
để đáp ứng Whirl.
Biến cố
Chuỗi phát âm ở cuối polyglot được biết đến nhiều vào thời điểm này, vì vậy tôi sẽ không đi sâu vào nó. Tôi đã xóa khỏi chuỗi những gì tôi có thể và thêm các mã thông báo mới được yêu cầu. Có 2 nhân vật không nói trong chuỗi này mặc dù tôi nên chỉ ra. Đầu tiên, thứ hai R
trong #R+.----.R >]|
là cần thiết ở đây vì đó là một điểm khởi đầu Fusion, và nó đã được an toàn hơn trên dòng này vì đã có được một điểm heading Fusion bắt đầu theo cùng một hướng. Thứ hai, x
trong #= x
là để loại bỏ một mã thông báo liên quan đến một ␉␊#
mẫu, đã trở nên phổ biến hơn.
Khác
Hexagony, Whitespace và Prelude đều có những điều chỉnh nhỏ thông thường, nhưng không có gì đặc biệt đáng nói.
Suy nghĩ cuối cùng
Đó là tất cả những gì tôi có cho câu trả lời này. Đối với những người tìm kiếm một điểm khởi đầu cho câu trả lời tiếp theo, tôi đề nghị điều ác. Có vẻ như có thể thực hiện được, mặc dù tôi đã không xem xét nó quá kỹ, nhưng tôi nghi ngờ rằng nó sẽ không quá khó để tích hợp. Tôi biết nó có một lệnh nhảy sẽ giúp bỏ qua phần lớn polyglot. Chúc may mắn.