Chuỗi thời gian 2016: Ngôn ngữ của bạn linh hoạt như thế nào?


71

Khoảng một năm trước vào ngày 31 tháng 12 năm 2015, tôi có ý tưởng rằng:

Chúng ta nên tạo một chuỗi viên nang thời gian. Mọi người đều được thêm một nhân vật và những năm mới tiếp theo chúng ta sẽ thấy ai có thể tạo ra chương trình tốt nhất trong số tất cả các nhân vật có esolang tồn tại sau đó.

Doorknob đã thu thập các nhân vật từ cộng đồng PPCG và giữ chúng an toàn trong một năm.

Một số lượng lớn 74 người đã tham gia để chúng tôi có 74 nhân vật ASCII có thể in được để chơi!

Dưới đây là 74 ký tự của chuỗi thời gian năm 2016 theo thứ tự chúng đã được gửi:

H@~*^)$.`~+1A|Q)p~`\Z!IQ~e:O.~@``#|9@)Tf\eT`=(!``|`~!y!`) Q~$x.4|m4~~&!L{%

Dưới đây là 74 ký tự của chuỗi viên nang thời gian 2016 theo thứ tự ASCII (lưu ý không gian hàng đầu):

 !!!!!#$$%&())))*+...1449:=@@@AHILOQQQTTZ\\^`````````eefmpxy{||||~~~~~~~~~

Nó không phải là rất nhiều để làm việc với, nhưng quanh đây chúng tôi thích một thử thách.

Các thách thức

Để xác định ngôn ngữ nào là "tốt nhất" với chuỗi thời gian, chúng ta sẽ có 6 thử thách (cho năm 201 6 ) làm tăng độ khó trong đó mỗi ngôn ngữ bạn phải sử dụng một tập hợp con gồm 74 ký tự viên nang thời gian.

Có 6 thử thách riêng biệt giúp đảm bảo nhiều ngôn ngữ có thể cạnh tranh, nhưng chỉ những ngôn ngữ tốt nhất mới có thể trả lời tất cả chúng và đạt điểm cao.

Ghi điểm:

  • Mỗi thử thách sẽ được tính điểm từ 0 đến 74 tùy thuộc vào số lượng nhân vật được sử dụng.
  • Điểm cao hơn là tốt hơn.
  • Nếu ngôn ngữ của bạn không thể hoàn thành một thử thách, điểm của bạn cho thử thách đó là 0.
  • Bất kỳ tập hợp con không trống của các thách thức có thể được hoàn thành.
  • Điểm cuối cùng của bạn là tổng điểm của cả 6 thử thách.
  • Điểm cuối cùng tốt nhất có thể là 6 × 74 hoặc 444 .

Những thách thức

1. Chạy

Nếu mã của một ngôn ngữ không thể chạy ở nơi đầu tiên, nó sẽ không thể làm bất cứ điều gì cả.

Viết chương trình đầy đủ dài nhất có thể (chỉ sử dụng 74 ký tự viên nang thời gian, nhớ) chạy / thực thi mà không có lỗi thời gian biên dịch hoặc thời gian chạy.

Nó không quan trọng chương trình làm gì, nó không quan trọng nếu nó có đầu vào / đầu ra hoặc đi vào một vòng lặp vô hạn, nó chỉ quan trọng là nó chạy không có lỗi. (Cảnh báo là ok, cũng như các lỗi gây ra bởi đầu vào của người dùng xấu.)

Nhận xét được cho phép, vì vậy điều này có thể đơn giản như

#H@~*^)$.`~+1A|Q)p~`\Z!IQ~e:O.~@``|9@)Tf\eT`=(!``|`~!y!`) Q~$x.4|m4~~&!L{%

trong Python cho số điểm 74.

(Đừng ngại trả lời nếu đây là thử thách duy nhất mà ngôn ngữ của bạn có thể hoàn thành, nhưng cũng không mong đợi nhiều phiếu bầu.)

Điểm = thời lượng chương trình (chương trình dài hơn là tốt hơn)

2. Tôi / O

Một ngôn ngữ không có hình thức đầu vào hoặc đầu ra gần như vô dụng như ngôn ngữ không thể chạy.

Đưa ra một ký tự ASCII có thể in từ !(0x33) đến }(0x7D), bao gồm xuất ký tự ASCII có thể in trước và sau nó.

Đầu ra có thể là một chuỗi dài hai danh sách hoặc danh sách hoặc các ký tự được phân tách bằng dấu cách hoặc dòng mới.

Ví dụ, nếu đầu vào là }đầu ra có thể là |~hay ["|", "~"]hay | ~hay |\n~.

Tương tự như vậy, "là đầu ra cho !AClà đầu ra cho B.

Điểm = 74 - thời lượng chương trình (chương trình ngắn hơn là tốt hơn)

3. Khả năng phân nhánh

Các điều kiện thường là một yêu cầu cho tính đầy đủ của Turing , thường là một yêu cầu cho một ngôn ngữ có ích.

Cho một số nguyên dương, nếu nó kết thúc bằng các chữ số thập phân 16thì thay đổi 6thành a 7và xuất kết quả; mặt khác, đầu ra không đổi. Bạn có thể sử dụng chuỗi cho đầu vào / đầu ra nếu muốn.

Ví dụ:

2016 -> 2017
16 -> 17
116 -> 117
1616 -> 1617
6 -> 6
15 -> 15
17 -> 17
106 -> 106
2106 -> 2106

Điểm = 74 - thời lượng chương trình (chương trình ngắn hơn là tốt hơn)

4. Vòng lặp

Một ngôn ngữ không thể thực hiện các vòng lặp sẽ sinh ra mã lặp đi lặp lại rất tẻ nhạt, bạn sẽ cần phải nghỉ lập trình một lúc.

Cho một số nguyên dương, xuất ra một hình vuông nghệ thuật ASCII có chiều dài cạnh đó chứa đầy một mẫu hình vuông nhỏ hơn đồng tâm xen kẽ giữa bất kỳ hai ký tự ASCII có thể in riêng biệt nào . Chúng không phải là hai ký tự giống nhau cho các đầu vào khác nhau.

Ví dụ:

1    <- input
X    <- output

2
XX
XX

3
XXX
X-X
XXX

4
XXXX
X--X
X--X
XXXX

5
YYYYY
Y...Y
Y.Y.Y
Y...Y
YYYYY

6
XXXXXX
X----X
X-XX-X
X-XX-X
X----X
XXXXXX

7
ZZZZZZZ
Z-----Z
Z-ZZZ-Z
Z-Z-Z-Z
Z-ZZZ-Z
Z-----Z
ZZZZZZZ

Điểm = 74 - thời lượng chương trình (chương trình ngắn hơn là tốt hơn)

5. Toán

Một ngôn ngữ không tốt với các con số và toán học cũng có thể dành cho các chuyên ngành nhân văn.

Không có đầu vào nhưng đầu ra 72 ước số nguyên của năm 2016 , dương và âm, theo bất kỳ thứ tự nào. Đầu ra có thể được định dạng dưới dạng chuỗi hoặc danh sách một cách hợp lý.

Thí dụ:

-1, -2, -3, -4, -6, -7, -8, -9, -12, -14, -16, -18, -21, -24, -28, -32, -36, -42, -48, -56, -63, -72, -84, -96, -112, -126, -144, -168, -224, -252, -288, -336, -504, -672, -1008, -2016, 1, 2, 3, 4, 6, 7, 8, 9, 12, 14, 16, 18, 21, 24, 28, 32, 36, 42, 48, 56, 63, 72, 84, 96, 112, 126, 144, 168, 224, 252, 288, 336, 504, 672, 1008, 2016

Điểm = 74 - thời lượng chương trình (chương trình ngắn hơn là tốt hơn)

6. Bí truyền

(Không, không phải .) Chúng tôi ở PPCG như chúng tôi những thứ bí truyền , và quines là một ví dụ tốt về điều đó.

Viết quine dài nhất bạn có thể, theo quy tắc quine thông thường . Một quine là một chương trình không có đầu vào và đầu ra chính nó.

Điểm = thời lượng chương trình (chương trình dài hơn là tốt hơn)

Quy tắc cụ thể

  • Trong mỗi 6 thử thách, chương trình của bạn phải là tập hợp con của 74 ký tự viên nang thời gian được sắp xếp lại theo bất kỳ cách nào bạn muốn. Nó có thể là một tập hợp con trống hoặc một tập hợp con không phù hợp , vì vậy mỗi chương trình của bạn có thể có ít nhất là 0 và có đến 74 ký tự.
  • Một dòng mới duy nhất ở cuối đầu vào / đầu ra / mã là ổn ở bất cứ đâu vì một số ngôn ngữ yêu cầu điều này hoặc nó không thể dễ dàng tránh được.
  • Trừ khi có quy định khác, mỗi thử thách có thể được hoàn thành dưới dạng chức năng hoặc chương trình đầy đủ theo mặc định của chúng tôi .
  • Tất cả các thử thách phải được hoàn thành trong cùng một ngôn ngữ.
  • Bạn phải sử dụng một ngôn ngữ (hoặc phiên bản của một ngôn ngữ) được tạo trước năm 2017 ở bất cứ đâu trên Trái đất .
  • Bất cứ ai cũng được chào đón để trả lời, cho dù bạn đã thêm một ký tự vào viên nang thời gian hay không.

Hãy sử dụng các nhân vật viên nang thời gian 2016 trong các thử thách của riêng bạn.


4
Yay: D một thách thức trong đó JavaScript có khả năng vượt trội!
Hạ cấp

1
Phòng thảo luận để hợp tác về một số giải pháp.
dùng48538

6
khá chắc chắn rằng điều đó 6×74 or 444là không thể, vì điều đó có nghĩa là các chương trình trống, bằng cách nào đó hành xử khác đi. do đó, 438 là mức tối thiểu thực tế, vì điều đó có nghĩa là hai trong số 3 chương trình tham gia đầu vào có một char trong đó
Lemon phá hủy

7
Ngôn ngữ của tôi là Java. Tôi thua theo mặc định: P
Weckar E.

2
Hãy làm điều này một lần nữa!
ev3commander

Câu trả lời:


37

Glypho , 74 + (74 - 36) = 112

1. Chạy (74 byte)

!!#%QTQT@=A@$!!$)()*!&))+...1449:@HILOQZ\\^`````````eefmpx|||{~~~~~~y~|~ ~

2. IO (36 byte)

!!!#!$!$4419TAHT\ee\OQQQ))*+)..)|~~~

Giải trình

Glypho có vẻ như là một lựa chọn khá tốt cho thử thách này, vì nó không quan tâm đến các nhân vật thực tế đang được sử dụng. Thay vào đó, nó xem xét các nhóm gồm bốn ký tự và chọn lệnh dựa trên mô hình lặp lại trong bốn ký tự đó. Vì có rất nhiều bản sao trong chuỗi thời gian, chúng tôi khá linh hoạt trong các chương trình chúng tôi có thể viết, ngoại trừ việc chúng tôi giới hạn ở các chương trình gồm 18 lệnh (không có nhiều trong Glypho). Mặc dù điều này cho phép tôi giải quyết hai vấn đề đầu tiên khá dễ dàng, tôi nghi ngờ rằng Glypho có thể điều hành những vấn đề khác với rất ít nhân vật.

Tôi đã kiểm tra những điều này bằng cách sử dụng trình thông dịch Java được lấy từ 2006-06-23 trên máy quay ngược lại , sử dụng ánh xạ các lệnh khác nhau một chút:

0000 n
0001 i
0010 >
0011 \
0012 1
0100 <
0101 d
0102 [
0110 +
0111 o
0112 *
0120 -
0121 ]
0122 !
0123 e

Các Run chương trình dịch để:

1d-+[...]

Đâu ...là thứ linh tinh mà tôi không thèm dịch.

1      Push 1.
d      Duplicate.
-      Turn into -1.
+      Add. Gives 0.
[...]  Skip the rest because the top of the stack is zero.

Các IO chương trình dịch để:

id1-+o1+o

Đây là những gì nó làm:

i   Read a character.
d   Duplicate.
1   Push 1.
-   Turn into -1.
+   Add to character, i.e. decrement it.
o   Output it.
1   Push another 1.
+   Add to character, i.e. increment it.
o   Output it.

24

CJam, 74 + (74 - 14) + (74 - 26) = 182 điểm

1. Chạy (74 byte)

e# !!!!!$$%&())))*+...1449:=@@@AHILOQQQTTZ\\^`````````efmpxy{||||~~~~~~~~~

Di chuyển e#đến các bình luận phía trước ra toàn bộ dòng.

2. I / O (14 byte)

9`)ZH*+~):Q(Q)

Dennis đã lưu 8 byte.

Giải trình:

9`                   Push "9".
  )                  Extract character '9'.
   ZH*               Push 3 * 17 = 51.
      +              Add to get character 'l'.
       ~             Eval as CJam code. Command l reads a line.
        )            Extract the only character from the input line
         :Q(         Assign to Q and decrement
            Q)       Push Q and increment

3. Khả năng phân nhánh (26 byte)

4`)4Z|`I!`|~^~~T$AT$*%H(=+

Giải trình:

4`)                            Push character '4'
   4Z|`                        Push 4 | 3 = 7, stringify
       I!`                     Push !18 = 0, stringify
          |~                   Setwise or and eval to get 70
            ^                  XOR to get 'r'
             ~                 Eval to read input
              ~                Eval the input as CJam code to turn
                               it into an integer
               T$              Duplicate it
                 A             Push 10
                  T$*          Duplicate that and multiply → 100
                     %         Mod the copy by 100
                      H(=      Compare to 17 - 1 = 16
                         +     Add the result (1 or 0) to the original

Tôi sẽ xem xét những người khác sau. ( EDIT : Tôi nghi ngờ chúng có thể, không có khối hoặc chuỗi ký tự có thể là toán học?)


Đối với # 2, bạn có thể sử dụng 9`)ZH*+~):Q(Q).
Dennis

11

J, điểm 71 + (74 - 19) = 126

Nhiệm vụ 1, dài 71

AHILO=:( |T`T`Z`e`e`f`m`p`x`y|.~~%~@{|~^|Q@Q@Q+.*.449!~!~!~!!#$$&1\\~~)

Điều này định nghĩa một động từ AHILOlà bên trong. Không sử dụng:

)))

Tôi không nghĩ có cách nào dài hơn thế này.

Nhiệm vụ 3, dài 19

+($#~$~4)=1e4|&%:*~

Cách để thực hiện nhiệm vụ này không có giới hạn là +16=100|], cách đọc như sau:

        ]  Input
    100|   mod 100
 16=       equals 16? (Evaluates to 1 or 0)
+          Add to input.

Chúng tôi có +, =và một vài bản sao hoặc |theo ý của chúng tôi, và thật dễ dàng để đi lại ], nhưng các con số có nhiều vấn đề hơn. Đây là phần đầu tiên tính toán modulo đầu vào 100:

1e4|&%:*~
       *~  Input squared (multiplied with itself).
1e4        The number 10000.
   |       Perform modulo
    &      on
     %:    their square roots.

Sau khi hoàn thành việc đó, hãy tạo số 16. Cách dễ dàng là *~4(4 nhân với chính nó), nhưng chúng tôi đã sử dụng *nên điều đó bị cấm. Thay vào đó, chúng tôi sẽ thực hiện một số thao tác mảng.

($#~$~4)
    $~4   Reshape 4 to shape 4, resulting in the array 4 4 4 4.
  #~      Replicate wrt itself: replace each 4 by four 4s.
 $        Take length.

Công việc

2

Điều này chắc chắn là không thể. Các cách duy nhất để thao tác các giá trị ký tự là a.u:, và chúng ta có quyền truy cập vào cả.

Bây giờ, nếu chúng ta có thể sử dụng athay vì, giả sử A, thì đây sẽ là một giải pháp:

Q{~(*^.4%9 1)+I.~&Q=:a.

Phần khó nhất để làm việc này là tạo ra số -1.

Q{~(*^.4%9 1)+I.~&Q=:a.
                     a.  The array of all bytes.
                  Q=:    Bind it to Q
              I.~&       and find the input's index in it.
   (        )+           Add the following array:
    *                    Signum of
     ^.                  logarithm of
       4%                4 divided by
         9 1             the array 9 1.
                         This evaluates to -1 1.
Q{~                      Index back into Q.

4

(*.1:"|~@+.)

Điều này tạo ra hình dạng của vỏ trấu, nhưng tôi dường như không thể tìm ra cách tạo ra các nhân vật. Than ôi.

5

Phải thừa nhận rằng, đây có vẻ như là nhiệm vụ dễ thực hiện nhất trong J. Tuy nhiên, nếu không i., điều này sẽ khá khó khăn.

6

Điều này có khả năng là không thể nếu không có một câu hỏi giả như thế 449hoặc đại loại như thế, bởi vì chuỗi viên nang không chứa dấu ngoặc kép hoặc bất kỳ cách nào khác để tạo ra chuỗi J.


Đối với tác vụ 2, Q{~1+I.~&Q=:a.đưa ra ký tự tiếp theo: liên kết bảng chữ cái a.với Q, tìm chỉ mục của đầu vào trong đó I., thêm một và chỉ mục vào Q. Thử nó. Vấn đề duy nhất còn lại là sản xuất -1...
Zgarb

Ngoài ra, nhiệm vụ 3 có thể được thực hiện mà không có chức năng chuỗi : +16=100&|. Bạn chỉ cần sản xuất 16 và 100 bằng cách nào đó.
Zgarb

@Zgarb (1) Vâng ... (2) Ồ! Thật tuyệt! Hmmm không nên quá khó khăn
Conor O'Brien

Ha, tôi nghĩ rằng tôi đã nhận được 3: +($@#~@$~4)=1e4|&%:*~Điều đó cực kỳ khó chịu vì chúng tôi chỉ có một (&=:+*và hai 4s.
Zgarb

Aaand đây 2: Q{~(*^.4%9 1)+I.~&Q=:a.Tôi nhận ra rằng logarit ^.cho các số âm cho các đầu vào nghiêm ngặt từ 0 đến 1, và chúng tôi đã %tạo ra các phân số và *đưa kết quả lên -1 và 1.
Zgarb

8

PowerShell - Tổng số điểm: 74

1. Chạy - Điểm: 74

#~= `TeQ.)`~H|$QL4yA)\*`!^O$1)!Z`!`~|\`&T@!x+e(f|Q`.|!4%.{~`:~~)m@~`@p~I9~

Vì điều này rất khó trong PowerShell (mọi phương pháp có thể nhận được đầu vào là không thể đối với các ký tự được cung cấp, theo như tôi có thể nói), ít nhất tôi đã quyết định chọn ngẫu nhiên thử thách đầu tiên để chúng tôi không sao chép trực tiếp ví dụ từ bài viết.

Vì vậy, đây là một trình tạo câu trả lời 1 thử thách ngẫu nhiên (đối với các ngôn ngữ có #nhận xét):

'#'+$(-join([char[]]' !!!!!$$%&())))*+...1449:=@@@AHILOQQQTTZ\\^`````````eefmpxy{||||~~~~~~~~~'|Get-Random -Count 73))

Hãy thử trực tuyến!


Tôi nghĩ bạn đã đúng. Điểm gần nhất mà chúng ta có thể nhận được $^là "mã thông báo đầu tiên của dòng trước đó trong phiên", sẽ cực kỳ hạn chế và rất có thể bị bẻ cong nghiêm trọng các quy tắc I / O tiêu chuẩn.
admBorkBork

@TimmyD yeah, $^dù sao cũng trống trong một phiên mới.
chiến binh

8

memes , điểm của ( 62 65 + 70) 135

1: Chạy

Tôi đã loại bỏ tất cả các backticks ( `) và toán tử toán học. Họ xung đột vì không có đủ số lượng để đáp ứng mọi toán tử đơn nguyên và nhị phân. Tôi để lại một số trong, kết quả là +3 byte . Chương trình kết quả:

 !!!!!#$$%&())))...+1^4*49:=@@@AHILOQQQTTZ\\eefmpxy{||||~~~~~~~~~

Tôi không biết tại sao và làm thế nào điều này làm việc. Ít nhất nó không ném bất kỳ ngoại lệ thời gian chạy C # nào và do đó không gặp sự cố.

6:

Bạn biết đấy, nếu đã có một -chữ thường hoặc chữ thường qở đâu đó trong 74 ký tự đó, thì điều này sẽ quá dễ dàng. Tôi mừng cho Inhà điều hành, ít nhất.

1/4I

Mã này không chính xác rõ ràng. Đây là một lời giải thích:

1    Set object to 1 (1)
/4   Divide by 4     (0.25)
I    Set object to a fraction string. (1/4)

Chuỗi phân số (ví dụ 1/4) được hiển thị với chữ I ở cuối, để chỉ ra chính xác điều đó. Các Inhà điều hành thường là vô dụng, tôi đã thêm nó cho các phương tiện khác, nhưng hey, nó hoạt động như thế này!

Mã trên không hợp lệ. Thật ngu ngốc khi tôi không thấy rằng 74 ký tự không chứa toán tử chia đơn, forwardslash ( /). Tôi đã nghĩ ra một cái gì đó khác:

True

Giải trình:

T    Set object to "true" (bool value)
rue  None of these are valid tokens, so they don't get interpreted.

Đầu ra True(vì cách C # xử lý Boolean.ToString()chữ hoa và không viết thường). Không chắc đây có phải là một câu hỏi hay không, trong khi đó tôi vẫn đang cố gắng tìm kiếm một thứ hợp lệ, thực sự đúng đắn và trực quan.

Cũng có thể giải quyết thử thách I / O và Math, nhưng tôi thiếu mã thông báo cụ thể (ký tự) không có trong 74 ký tự.


8

Brainfuck, 74 byte

H@~*^)$.`~+1A|Q)p~`\Z!IQ~e:O.~@``#|9@)Tf\eT`=(!``|`~!y!`) Q~$x.4|m4~~&!L{%

Tôi chỉ phải

Giải trình:

Bất kỳ nhân vật nào không phải là nhân vật Brainfuck hợp lệ đều được coi là một nhận xét. Mã duy nhất thực sự được chạy là:

.+..

Điều này không tạo ra đầu ra có thể in được, vì cả 0 và 1 đều không thể in các ký tự trong ASCII. Tuy nhiên, nó không gây ra lỗi, vì vậy chúng tôi hoàn thành thành công thử thách đầu tiên.


3
Nó thực sự sản xuất đầu ra. Nó tạo ra những nhân vật. Chúng có thể không "có thể in" (đọc: hiển thị), nhưng dù sao chúng vẫn được gửi đến thiết bị xuất chuẩn.
mbomb007

7

Toán học, điểm 62

Tôi sẽ ngạc nhiên nếu bất cứ ai cũng có thể thực hiện thử thách 2-6 trong Mathicala. Đây là điều tốt nhất tôi đã làm với thử thách 1:

A:=1.`!#&@(4`+4.`*9.`^$$H~I~L~O~Q~Q~Q~T~T||Z||e@@efmpxy%)!!!!

Xác định một hàm khá ngu ngốc Avới giá trị không đổi. 12 nhân vật không được sử dụng là:

)))\\`````{~

6

Octave, điểm 74

1. Chạy

x =@(AHILOQQQTTZeefmpy)+.1||!!!!!~~~~~~~~~4.^.4||9%#$$)))*@@\`````````{\&:

50 trong số các ký tự này là một phần của chức năng, trong khi 24 ký tự còn lại thì không.

Những gì nó làm:

x =@(AHILOQQQTTZeefmpy)tạo ra một hàm xcó thể lấy một biến AHILOQQQTTZeefmpylàm đầu vào.

Để hiểu phần còn lại:

a||bgọi hàm all()trên cả hai ab. Nếu một hoặc cả hai trả về true, ||toán tử sẽ trả về true.

!a~acó nghĩa là điều tương tự ở đây, cả hai đều not(a).

a.^b là một sức mạnh khôn ngoan (a(1)^b(1), a(2)^b(2) ...)

Tiếp tục giải thích

Tôi sẽ rút ngắn từng bước khi tôi thực hiện:

4.^.4||9  % This is 4 raised to the power of .4||9
          % .4||9 is true, since both .4 and 9 are true
          % true is evaluated to 1 when used in an expression
...       % 4 raised to the power of 1 is simply 4.
4         % The above expression simplified

Và:

!!!!!~~~~~~~~~4  % ! and ~ are the not() operator, so this is equivalent to:
not(not(not(not(not(not(not(not(not(not(not(not(not(not(4))))))))))))))

Có một số chẵn các not, vì vậy đây là tương đương với not(not(4))đó là truehay 1.

+.1||1      % This is equivalent to all(+.1) | all(1), which returns true

Phần còn lại được bình luận.


6

*> <> , tổng số điểm = 74

1. Chạy, điểm 74

f:4%*e+e14=p!Q H@~^)$.`~A|Q)~`\ZI~O.~@``#|9@)T\T`(!``|`~!y!`)Q~$x.|m~~&!L{

Hãy thử nó ở đây!

Điều này là cực kỳ khó để làm mà không có ;nhân vật. Tôi thực sự nghĩ rằng nó sẽ là không thể trong một vài khoảnh khắc, cho đến khi tôi nhìn thấy %, về cơ bản tôi đã từ bỏ.

Đây cũng là một chương trình hợp lệ> <>.

Giải thích (phần không liên quan được bỏ qua)

f:4%*e+e14=p!Q 

f:               copy 15
  4%             pop 15, push 15%4 (3)
    *            pop 15 and 3, push 15*3 (45)
     e+          pop 45, push 45+14 (59, ascii ";")
       e         push 14
        14=      push 0
           p     replace coord (14, 0) with ";"
            !Q   skip Q (this is just filler)
              ;  end execution

Đối mặt những thách thức

Tôi có thể thử các thử thách khác ... chúng cực kỳ khó khăn và có thể liên quan đến việc bẻ cong các quy tắc theo những cách kỳ lạ nhưng việc sử dụng |gương và !trampolines sẽ khiến ít nhất một thử thách trở nên khả thi hơn.

Những thách thức này đặc biệt khó khăn vì chúng tôi không cho phép bất kỳ kết quả đầu ra nào với *> <> ( on) hoặc thậm chí các lệnh gọi hàm ( C), trả về hàm ( R) hoặc kết thúc chương trình ( ;). Mặc dù chúng tôi cũng thiếu iđầu vào, chúng tôi vẫn có thể đặt đầu vào trên ngăn xếp là một điểm cộng. Một điểm cộng nữa là chúng tôi nhận được một phướng dẫn duy nhất , cho phép chúng tôi thay thế một hướng dẫn trong codebox. Điều này có thể có thể được sử dụng nhiều lần (chưa tìm ra cách thực tế nào), điều này sẽ bắt đầu làm cho các chương trình khác dường như khả thi hơn (vì chúng tôi có thể tạo ra hai hoặc nhiều hướng dẫn).


5

Haskell, điểm 63

1. Chạy:

(!!!!!#$$%&*+...:@@@\\^||||~~~~~~~~~)fmpxyAHILOQQQTTZ e=14`e`49

Không được sử dụng )))```````{. Nhận xét trong Haskell là --hoặc {- ... -}, vì vậy không có phiên bản bình luận dễ dàng.

Mã này xác định một toán tử infix !!!!!#$$%&*+...:@@@\^||||~~~~~~~~~có hai đối số:

  1. fmpxyAHILOQQQTTZ được bỏ qua và do đó có thể là một loại tùy ý
  2. e, phải là một hàm lấy hai số

Trong cơ thể chức năng esau đó được áp dụng cho 14 và 49, sử dụng `ký hiệu -infix.

Ví dụ sử dụng:

Prelude> () !!!!!#$$%&*+...:@@@\\^||||~~~~~~~~~ (*)
686

Toán tử được áp dụng cho (), bộ dữ liệu trống và (*)toán tử nhân, do đó, 14*49 = 686được tính toán.

Hãy thử trực tuyến!

Những thách thức khác

Tôi nghi ngờ rằng bất kỳ thử thách nào khác đều có thể xảy ra, đáng chú ý nhất là do thiếu tên biến có thể xuất hiện hai lần, chỉ có e(hoặc một cái gì đó giống như eQT), vì tên biến không thể bắt đầu bằng chữ in hoa. Tất nhiên, chỉ có một =không giúp được gì.


5

Pyth, 131 bây giờ (hoàn thành 2 thử thách)

1. Chạy, 74

# `````````!!!)!)!)*$AOeIefLmpxQ|Q|y|Q|~~~~~~~~~()${+%&\=@@@^\:.1.4.49TTZH

Chương trình này không có đầu vào và không tạo ra đầu ra.

Chương trình này sử dụng $$, cho phép thực thi mã tùy ý và do đó bị cấm trực tuyến, vì vậy chương trình này trực tuyến chạy ngoại tuyến. Đây là đầu ra biên dịch của nó, vì vậy bạn có thể thấy những gì thực sự được chạy:

while True:
 try:
  (repr(repr(repr(repr(repr(repr(repr(repr(repr(Pnot(Pnot(Pnot()))))))))))))
  imp_print(Pnot())
  imp_print(Pnot())
  imp_print(times(AOeIefLmpxQ|Q|y|Q|~~~~~~~~~(),uniquify(plus(mod(("=" and lookup(lookup(lookup(Ppow(":",.1),.4),.49),T)),T),Z))))
  imp_print(H)
 except Exception:
  break

Thật khó để viết một chương trình với các ký tự tùy ý không có lỗi trong Pyth. Tôi đặt ra cho mình thách thức bổ sung là yêu cầu chương trình chạy mà không yêu cầu đầu vào của người dùng.

Bước đầu tiên là sử dụng #để ăn tất cả các lỗi. Tiếp theo, chúng ta cần phải tránh các lỗi gây ra bởi ~, IL, trong đó mỗi người đều có thông tin chi tiết của riêng mình. Điều này đạt được bằng cách đặt chúng vào bên trong $$, phần này nhúng chúng vào phần biên dịch đầu ra và do đó tuân theo các quy tắc biên dịch của Python, chứ không phải của Pyth. Cuối cùng, để tránh lấy đầu vào của người dùng, các mã thông báo 0 khác nhau (Biến và tương tự) được đặt ở cuối và Qs được di chuyển bên trong $$khối.

2. IO

Điều này sẽ vô cùng khó khăn, nếu nó thậm chí có thể. Không có chức năng Pyth nào tạo ra các chuỗi hoặc ký tự tùy ý ngoại trừ .f, và đó thực sự là một công việc thực sự kém trong việc tạo các ký tự tùy ý.

3. Khả năng phân nhánh: 74 - 17 = 57

|&x%Q*TTye|LZ9Q+1

Dùng thử trực tuyến

Một chương trình Pyth tương đương sẽ là:

?n%Q100 16Q+1

Mã này lấy mod đầu vào 100, so sánh nó với 16, và sau đó sử dụng một ternary để chọn giữa đầu vào và đầu vào cộng với một. Do hạn chế về nhân vật, tôi đã thực hiện một số thay thế:

  • Thay vì ?, các ternary, tôi đã sử dụng |&, orsau đó and, trong đó có các chức năng tương tự, ngoại trừ việc nó phá vỡ nếu đầu vào là không, nhưng vì chúng ta sẽ được bảo đảm nguyên dương đầu vào, không sao đâu. (Điều này có thể đã được sửa cho không có ký tự bổ sung, nhưng cách này đơn giản hơn.)

  • Thay vì so sánh trực tiếp hai số, tôi lấy XOR của chúng với xsố 0 nếu và chỉ khi chúng bằng nhau, như mong muốn.

  • Thay vì viết 100trực tiếp, tôi tạo nó với *TT, vì Tđược khởi tạo thành 10.

  • Thay vì viết 16trực tiếp, tôi tạo ra nó với ye|LZ9. |LZvề cơ bản là chức năng của phạm vi, do đó |LZ9cung cấp [0, 1, 2, 3, 4, 5, 6, 7, 8]. elấy yếu tố cuối cùng của một danh sách, đưa ra 8. ynhân đôi nó, cho đi 16như mong muốn. Có thêm +hoặc thêm *tôi có thể cứu một nhân vật, nhưng cả hai đều hữu dụng hơn ở nơi khác.

Nhiều hơn nữa


3

Ruby - Điểm: 74

1. Chạy

#H@~*^)$.`~+1A|Q)p~`\Z!IQ~e:O.~@``|9@)Tf\eT`=(!``|`~!y!`) Q~$x.4|m4~~&!L{%

Lấy từ thử thách.


1
Tương tự cho Python
Daniel

3

JavaScript (ES6), điểm = 74

1. Chạy, 74 byte

Z=` !!!!!#$$%())))...1449:@@@\AHILOQQQTT^\`eefmpxy{||||~~~~~~~~~`*``+``&``

6. Bí truyền (không hợp lệ)

Đối với hồ sơ, đề nghị của tôi là:

1.4e+49

Hóa ra là không hợp lệ, như được thảo luận trong các ý kiến ​​dưới đây.


Quine đó là hợp lệ.
wizzwizz4

3
Các quine không hợp lệ. Các quy tắc có liên quan được liên kết trong các thách thức. Cụ thể, bất kỳ quine nào dựa trên một nghĩa đen đều không thể mã hóa một phần nguồn trong một phần khác của nguồn. cc @ wizzwizz4
Martin Ender

@MartinEnder Trong trình duyệt của tôi, chương trình đó xuất mã nguồn theo nghĩa đen. Đó là một tuyên bố đánh giá chính nó. Tôi không chắc bạn đang nói gì; không có phần khác nhau của nguồn.
wizzwizz4

1
@ wizzwizz4 cộng đồng này có nhiều yêu cầu đối với các câu hỏi hơn là "chương trình in nguồn riêng của nó", bởi vì điều đó cho phép các loại giải pháp gian lận khác nhau không theo tinh thần của các câu hỏi. Xem liên kết.
Martin Ender

1
@ wizzwizz4 từ câu trả lời được bình chọn hàng đầu "Phải có thể xác định một phần của chương trình mã hóa một phần khác nhau của chương trình." "Khác nhau" có nghĩa là hai phần xuất hiện ở các vị trí khác nhau. " rất tốt, thử thách (và câu trả lời được liên kết) lớn hơn vài năm so với bài meta được liên kết.
Martin Ender

3

Võng mạc, điểm 74

1. Chạy, điểm 74

)))` !!!!!#$$%&()*.+..1449:=@@@AHILOQQQTTZ\\^````````eefmpxy{||||~~~~~~~~~

Tôi đã chuyển các parens phụ sang cấu hình để chúng cân bằng trong regex. Tôi cũng di chuyển `ngay sau những cái đó, và đổi +.thành .+.

Dùng thử trực tuyến

Những người khác có khả năng là không thể, vì không có dòng mới. Cũng không có -Chuyển ngữ hoặc dcho một lớp ký tự chữ số.


3

Pip, điểm 74 + (74 - 19) = 129

Vì vậy, nhiều backticks với một trích dẫn được nhìn thấy, đơn hoặc đôi!

Nhiệm vụ 1, điểm 74

`` `\``!!!!!`#$$%&())))*+...1449:=@@@ILOQQQTTZ\^efmpx{|||~~~~~~~~~`|`yeAH`

Về cơ bản chỉ là một loạt các mẫu chữ (regex) trong backticks, cuối cùng được in. Vì có một số lượng backticks lẻ, chúng tôi phải gạch chéo lại - thoát khỏi một trong số chúng (`\`` ). Hãy thử trực tuyến , với -wcờ được thêm vào để chứng minh rằng không có cảnh báo nào được tạo.

Nhiệm vụ 3, điểm 55 (dài 19)

e+!!e%(1.#x.!9)=4*4

Sử dụng một phương thức nhập liệu khá kỳ quặc - đối số dòng lệnh thứ năm - điều này là có thể. Hãy thử trực tuyến!

                     e is 5th cmdline arg; x is empty string
       1.#x.!9       Concatenate 1, 0 (length of x), and 0 (not 9)
    e%(       )      e mod 100...
               =4*4  ... equals 16?
  !!                 Logically negate twice
e+                   Add to e (+1 if number mod 100 is 16, +0 otherwise)
                     Expression is autoprinted

Các nhiệm vụ khác

Có thể nhận đầu vào cho nhiệm vụ 2 , bằng phương pháp tương tự như nhiệm vụ 3 ở trên. Vấn đề là chuyển đổi sang mã ASCII và trở lại thành một ký tự. Cái trước có thể được thực hiện với A, nhưng cái sau đòi hỏi C, hoặc có thể lập chỉ mục vàoPA biến. Xây dựng và đánh giá mã không thể được thực hiện mà không cóV . Tôi không nghĩ rằng nhiệm vụ là có thể.

Nhiệm vụ 4 là thử thách ngay cả khi không có bộ ký tự bị hạn chế. Theo phỏng đoán, nó sẽ yêu cầu các danh sách (không sử dụng các []dấu phân cách hoặc RL(danh sách lặp lại) và chỉ có một cơ hội để sử dụng AL(danh sách nối thêm) - không có khả năng) hoặc có thể là một cái gì đó với CG(lưới tọa độ) hoặcMC (coords bản đồ), cả hai đều không được phép .

Nhiệm vụ 5 là trên khả năng. Vòng lặp sẽ khó khăn, vì Fhoặc và Map không thể thực hiện được, và phạm vi không thể được xây dựng với ,. Có thể có một cái gì đó được thực hiện với Tbệnh. Phần tăng có thể là x:x+1đa dạng (rõ ràng là có một biến khácx mặc dù ). Kiểm tra chia hết có thể sử dụng %. Tuy nhiên, tôi không nghĩ có đủ các ký tự - đặc biệt là các chữ cái lặp đi lặp lại - để làm mọi thứ cần phải xảy ra.

Nhiệm vụ 6 trông hoàn toàn không thể. Tất cả các quines Pip được biết có "trong đó. Họ cũng sử dụng R(thay thế), RP(repr) hoặc V(eval), không có cái nào có sẵn.


2

Trên thực tế, điểm số (74 + 0 + 0 + 0 + 0 + 0 ) = 74

Có, chuỗi viên nang sẽ hoạt động với Thực tế vì nó là dành cho Chạy, vì Thực tế loại bỏ mọi lỗi và mọi lỗi đều trở thành NOP.

H@~*^)$.~+1A|Q)p~\Z!IQ~e:O.~@#|9@)Tf\eT`=(!|~!y!) Q~$x.4|m4~~&!L{%( Dùng thử trực tuyến! )

Nó sẽ tạo ra một mớ hỗn độn của mọi thứ, mặc dù (nhưng cũng là nguồn của nó một lần: 3).

Tuy nhiên, tôi sẽ làm việc với những thách thức khác.


1
Chương trình quine sẽ (hy vọng) sẽ khá đơn giản, nếu bạn có thể biến một số op thành noops.
wizzwizz4

1
Chương trình quine không đơn giản. Bạn hoàn toàn không thể sử dụng Q(vì đó là phần dựng sẵn) và không có dấu ngoặc kép, vì vậy bạn không thể thực hiện bất kỳ định dạng chuỗi nào. Tôi đã làm việc một thời gian vào ngày hôm qua và tôi khá chắc chắn rằng các chương trình khác không thể chỉ có 74 ký tự.
Mego

Và dường như không có chữ in nghiêng f ... :(
user48538

2

05AB1E - Tổng số điểm: 74

1. Chạy, 74 byte

H@~*^)$.`~+1A|Q)p~`\Z!IQ~e:O.~@``#|9@)Tf\eT`=(!``|`~!y!`) Q~$x.4|m4~~&!L{%

Mọi thứ gây ra lỗi đều bị bỏ qua bởi 05AB1E. Toàn bộ dòng mã này là một NOP.

Hãy thử trực tuyến!


2

(bị lạm dụng) PHP, 74 + 74 = 148

H@~*^)$.`~+1A|Q)p~`\Z!IQ~e:O.~@``#|9@)Tf\eT`=(!``|`~!y!`) Q~$x.4|m4~~&!L{%

Trình thông dịch PHP chỉ cần bỏ mã nguồn cho đến khi nó tìm thấy <?vì chúng ta thiếu <mọi hoán vị của các ký tự đó là một quine đang chạy. Tôi đoán điều này không tệ hơn việc sử dụng lệnh quine dựng sẵn: P


9
Điều này không đáp ứng thông số kỹ thuật của chúng tôi cho quines, xem ở đây . Nó không tự mã hóa (nghĩa là nó không thực sự tự in, nó chỉ xuất ra do trình biên dịch.
R

@Easterly phiên dịch xử lý mọi char output this charcho đến khi nó gặp một <. Tôi không nói rằng nó có khả năng tải trọng hoặc sth Tôi chỉ nói rằng không có gì khác biệt với ngôn ngữ có một câu nói char output the source. Nếu đây không phải là câu trả lời hợp lệ cho phần 1 hơn bất kỳ ngôn ngữ nào chấp nhận bất kỳ đầu vào nào mà không có lỗi cũng không phải là câu trả lời hợp lệ. Tôi không nghĩ rằng điều này là lạm dụng hơn hầu hết các câu trả lời ở đây.
Christoph

4
@Christoph nó hợp lệ cho phần một, nhưng nó không phải là một nguyên tắc hợp lệ bởi các quy tắc được liên kết trong thử thách. Cộng đồng này coi quine hợp lệ nếu bạn có thể xác định một phần của nguồn mã hóa một phần khác của mã. Trong chương trình của bạn, mỗi nhân vật chỉ mã hóa chính nó.
Martin Ender

@MartinEnder: #! / Bin / cat đã được coi là một câu hỏi trước đó.
Joshua

@Joshua thực sự, nhưng ngày nay thì không và mèo cũng không được coi là ngôn ngữ lập trình.
Martin Ender

2

Toán, điểm 68

`A: = .1% *. 44y # +. 9 ^` H @ `$ I @` L @ (`$ O ~` Q ~ `Q ~` Q ~ `T ~ T ~ Z ~ e ~ e | f | m | p | x) !!!!! & \

Lưu ý các dòng mới. Tôi không tin rằng bất kỳ thử thách nào khác có thể đạt được với Mathematica.


2

Mê cung, điểm 74

AH)
IL)
OQ:
`=!)~`{+4.@ !!!$$%&(*..149@@TTZ\\^```eefmpxy||||~~~~~~~~
`Q#
`Q)
``!

Tôi khá chắc chắn rằng bất kỳ loại nhân vật nào cũng tạo ra một chương trình Labyrinth hợp lệ, nhưng để làm cho nó ít thú vị hơn một chút, điều này sẽ in ra 2016từng chữ số. (Tóm lại: đẩy 2 2's trên stack, pop / in một, di chuyển khác để ngăn xếp aux, in 0, đẩy 2 1' s trên stack, pop / in 1, thặng dư, Bitwise không, phủ nhận (mà cuối cùng13tại thời điểm này), tổng hợp với2 từ ngăn xếp phụ, 5 * 10 + 4 = 54, in dưới dạng giá trị ascii, chấm dứt)

Hầu hết các dòng dài chỉ đơn giản là bị bỏ qua, như @ chấm dứt chương trình.

Các thử thách 2, 3 và 4 là không thể vì các lệnh đầu vào của Labyrinth đều không có sẵn ( ,hoặc ?) và tôi đã không đưa ra bất cứ điều gì cho 5 hoặc 6.


2

SmileBASIC, 48 điểm

thử thách 1:

@LOQQQTTZ A$=H$+@efmy+@9414*!exp(!!.||!!.#||I%):

giải trình:

@LOQQTTZ 'label
A$= 'set value of A$ (string)
H$ 'string
+@efmy 'adds label, interpreted as string literal
+@9414 'adds label, interpreted as string literal
*!exp( 'multiplies by logical not e^x (= 0)
!!. 'not not 0.0 (= 0)
||!!.# 'or not not 0.0 converted to a float (= 0)
||I% 'or I% (integer variable)
: 'equivalent to a line break, does nothing here

khác:

Không có lệnh đầu vào / đầu ra là có sẵn, vì vậy phần còn lại là không thể.

Tuy nhiên, không tệ cho một ngôn ngữ thực sự mà không sử dụng bình luận.


+1 thực sự đẹp. Tôi đã tự hỏi làm thế nào tôi sẽ làm bất kỳ trong số này và không bao giờ có thể nhận được nó. Điều này thậm chí làm gì?
ốc_

1

TOÁN , tổng số điểm 74

1. Chạy, điểm 74

`4.e4 1.$!!!!!T+Zyf9.)AH^ILx@Q@Q@Qm||||~~~~~~~~~:=Tp*O%#$&()))\\````````e{

Tất cả mọi thứ lên đến %là mã thực tế. %là một biểu tượng nhận xét, vì vậy các ký tự bên phải của nó bị bỏ qua.

Chương trình đầu ra 1không có lỗi.

Hãy thử trực tuyến!


1

bash, điểm 74

1: Chạy. Chúng tôi có thể chạy tất cả 74

#H@~*^)$.`~+1A|Q)p~`\Z!IQ~e:O.~@``|9@)Tf\eT`=(!``|`~!y!`) Q~$x.4|m4~~&!L{%

6: Bí truyền:

Chương trình trống là một quine trong bash.

Không có bất kỳ ký tự khoảng trắng nào, không có gì khác trong danh sách có thể được thực hiện. Ergo, tôi có mục bash chiến thắng.


Lưu ý về quy tắc: Nếu ai đó thách thức rằng sản phẩm nào không phải là một giá trị hợp lệ và chiến thắng, tôi vẫn có mục thắng (không có bất kỳ số tiền nào). Mặt khác, nếu tôi không đặt nó và người khác làm và họ chiến thắng thử thách họ đánh bại tôi. Vì vậy, nó ở lại.
Joshua

1

Perl 6 , tổng số điểm 74

1. Chạy, điểm 74

my @TOTAL=$!||(e*4...9^e)Z+1~4||!!Q`{fp)))\#\&`~Q!```HI````!~Q:x~~~$~@~@~%

Miễn bình luận.
(Chỉ cần đặt# ở phía trước để làm cho mọi thứ một nhận xét cũng hoạt động, nhưng điều này thú vị hơn.)

Công việc

Đây là tập hợp con của ngôn ngữ Perl 6 chỉ sử dụng các ký tự được phép:

Hằng số: e

Nhập tên: IO

Chức năng: exp

Phương pháp:
    trên loại IO: .e .f .x
    (... Có lẽ nhiều hơn.)

Toán tử: | trung tâm: | tiếp đầu ngữ:
    ----------- + ----------------------- + ---------
    số: | + * + ^ + | + &% | + + ^
    chuỗi: | ~ x ~ ^ ~ | ~ & | ~
    boolean: | | | ~ ~ | !
    nút giao: | | & ^ |  
    linh tinh: | =: = Z .. ... |  

cú pháp:
    số chữ: 1 4 9
    chuỗi ký tự: Q` `Q! ! Vân vân.
    lệnh shell: Q: x` `Q: x! ! Vân vân.
    Sao cũng được: *
    các biến: của tôi \ $ @ &
    phân nhóm: ()
    nhận xét: # # `()
    bỏ trống: \

Rào cản ngay lập tức ngăn chặn các thách thức 2-6, là dường như không có cách nào để thực hiện I / O:

  • Nếu chúng tôi giả sử có một tệp được gọi f, chúng tôi có thể sử dụng Q`f`.IO.eđể kiểm tra xem nó có tồn tại hay không Q`f`.IO.xđể kiểm tra xem nó có thực thi được không. Nhưng chúng ta không thể đọc nó hoặc viết từ nó.

  • Chúng ta có thể sử dụng Q:x` `để chạy lệnh shell (giả sử chúng ta tìm thấy các ký tự cho một). Nhưng chúng ta không thể nội suy bất cứ điều gì vào, vì vậy nó chỉ tốt cho việc đọc chứ không phải viết.

  • Vì không có dấu ngoặc nhọn, chúng ta không thể tạo khối lambda (ví dụ {1 + $_}) tự động trả về giá trị của câu lệnh cuối cùng.

  • Chúng ta có thể sử dụng dấu hoa thị để tạo biểu thức lambda (ví dụ 1+*), nhưng sau đó chúng ta chỉ có thể lấy một đối số, chỉ tham khảo đối số này một lần và thậm chí còn hạn chế hơn trong cú pháp / toán tử mà chúng ta có thể sử dụng.


Thực hiện tốt, thực sự! :)
Dada

0

Lua, điểm 31

1. Chạy (31 trên 74 điểm)

AHILOQQQTTZeefmpxy=1.%4+(4.*9.)

3
Bạn đã bỏ lỡ không gian. variable =stuffdài hơn 1 byte.
devR Rich

0

Thạch , điểm 74

1. Chạy , 74

 ||||!!!!!$$~~~~~~~~^@=@~%449:`e@`e`QAHILOQQTTZ{\\f`m`p`x`y`&`*.#1+.()))).

Không chắc chắn làm thế nào để làm bất kỳ của những người khác.


0

/// , Điểm: 146

1. Chạy, Điểm: 74

!!!!!#$$%&())))*+...1449:=@@@AHILOQQQTTZ\\^`````````eefmpxy{||||~~~~~~~~~

6. Quine, Điểm: 72

!!!!!#$$%&())))*+...1449:=@@@AHILOQQQTTZ^`````````eefmpxy{||||~~~~~~~~~

Yay, khi không có bất kỳ dấu gạch chéo tiến hoặc lùi nào trong mã, nó chỉ tự in.

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.