Đảo ngược một Quine!


11

Chúng ta đều biết một quine là gì. Một quine đảo ngược là một chương trình không trống, in ngược lại mã nguồn của nó mà không đọc mã nguồn của nó và chỉ bao gồm các ký tự ASCII có thể in được (khoảng trắng thông qua ~).

Ở đây, nghịch đảo của mã nguồn, có nghĩa như sau: đầu ra của chương trình của bạn phải chứa mỗi ký tự ASCII (m - c) có thể in được , trong đó c là số lần ký tự xảy ra trong mã của bạn và m là tối đa số lần bất kỳ ký tự nào được lặp lại trong mã của bạn.

(Nói cách khác: mã của bạn + đầu ra của bạn = hoán vị của m lần tất cả các bản in-ASCII.)

Ví dụ: nếu chương trình của bạn là 12345, thì m = 1 và bạn nên xuất bất kỳ hoán vị nào của chuỗi này:

 !"#$%&'()*+,-./06789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~

Nếu chương trình của bạn là AAB, thì m = 2 và bạn nên xuất bất kỳ hoán vị nào của:

  !!""##$$%%&&''(())**++,,--..//00112233445566778899::;;<<==>>??@@BCCDDEEFFGHHIIJJKKLLMMNNOOPPQQRRSSTTUUVVWWXXYYZZ[[\\]]^^__``aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~

Lưu ý làm thế nào có hai As bị thiếu và một mất tích B.

Mặc dù một chương trình chứa tất cả các ký tự ASCII có thể in và đầu ra không có gì là một câu hỏi nghịch đảo hợp lệ (thỏa mãn m = 1 ), một câu trả lời như vậy sẽ không cạnh tranh lắm, với độ dài của nó.

Bạn phải viết một chương trình là một câu hỏi ngược, như được mô tả trong đoạn văn trên. Vì đây là , chương trình ngắn nhất tính bằng byte sẽ giành chiến thắng. Chúc may mắn!


1
Không gian, tab và dòng mới?
Stewie Griffin

11
Bạn nên làm nổi bật duplicated for every repeated character in the source codenó làm cho tất cả sự khác biệt trong thử thách
Rod

6
Bạn có thể đưa ra một ví dụ về nghịch đảo trong đó nhiều ký tự được lặp lại (và nhiều lần) không? Nói , 11234512345?
Giuseppe

4
Làm thế nào đây là một bản sao? Liên quan, vâng. Nhân đôi, không! Đó là cách khó khăn hơn trong ngôn ngữ mà bạn phải có nhân vật trùng lặp. Lưu ý rằng bạn không thể sao chép một chuỗi, vì số lượng ký tự bạn phải xóa khỏi mỗi chuỗi là khác nhau.
Stewie Griffin

1
@StewieGriffin Tôi sẽ VTC điều này là "không rõ ràng" chứ không phải là "lừa bịp" bởi vì (gần như) mọi câu trả lời đều có ý kiến ​​cố gắng tìm ra ý duplicated for every repeated character in the source codenghĩa của nó hoặc nếu bài nộp có giá trị cho tiêu chí đó, bởi vì OP đã không giải quyết khá một vài câu hỏi ở đây
Giuseppe

Câu trả lời:


7

Brain-Flak , 221 207 byte

Bao gồm +1 cho -A

(((((((()()()()){}){}()){}){})()){}{}){({}[()]<((((((()()()()){}){}){})<>[()()()])[()])((((()()()){})){}{})<>((()()()()){}){({}[()]<(({})())>)}{}({}()())<>{{({}<>[()]<(({})())><>)}{}<>(({}())()())<>}<>>)}{}

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

# Push 206 (the number of times to duplicate the output)
(((((((()()()()){}){}()){}){})()){}{})

# For 0 to 206
{({}[()]<

    # Push 32 on this stack and 18, 28 and 29 to the other
    # 18, 28 and 29 are the distances between the sets of braces 
    ((((((()()()()){}){}){})<>[()()()])[()])((((()()()){})){}{})<>

    # For 0 to 8
    ((()()()()){}){({}[()]<

        # Push TOS, TOS + 1
        (({})())

    # end For 0 to 8
    >)}{}

    # Push TOS + 2 
    # skips '(' and ')'
    ({}()())

    # For each value on the off stack (18, 28, 28)
    <>{

        # For 0 to that number
        {({}<>[()]<

            # Push TOS, TOS + 1
            (({})())

        # End for 0 to that number
        ><>)}{}

        # Push TOS + 1, TOS + 3 (skips this set of braces)
        <>(({}())()())<>

    # End for each value on the off stack (18, 28, 28)
    }<>

 # End for 0 to 206
 >)}{}

Tôi nghĩ bạn chỉ nên loại bỏ [năm lần, không phải tất cả các lần. Lưu ý rằng 2chỉ được loại bỏ một lần trong ví dụ. Thách thức là một chút bối rối mặc dù.
Stewie Griffin

Điều thú vị là làm thế nào điều này là ngắn hơn đáng kể so với tiêu chuẩn. +1:)
James

2
Điều này thực sự khập khiễng và ít thú vị hơn câu trả lời của bạn, nhưng về mặt kỹ thuật, !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_abcdefghijklmnopqrstuvwxyz {|} ~ ` sẽ đạt điểm cao hơn: /
James

6

CJam , 17 byte

{s95c+'|,32>\-}_~

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

Bản in

 !"#$%&()*./014678:;<=?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^`abdefghijklmnopqrtuvwxyz

Giải trình

Mục đích là để sửa đổi tiêu chuẩn

{"_~"}_~

sao cho không có nhân vật nào được lặp lại trong chương trình. Lý do cho điều này là vì CJam có một toán tử khác được thiết lập mà chúng ta có thể sử dụng để xóa các ký tự khỏi phạm vi ASCII có thể in được, nhưng nó không tính đến số lần xuất hiện. Việc thực hiện điều đó bằng tay có thể sẽ lâu hơn, vì vậy tôi cần đảm bảo rằng mỗi nhân vật chỉ xuất hiện một lần và chúng tôi không phải lo lắng về việc xảy ra.

{      e# Quine framework. Executes the block while leaving another copy of the
       e# block on the stack.
  s    e#   Stringify the block, giving us "{s95c+'|,32>\-}".
  95c  e#   Convert 95 to a character, which gives us '_' without repeating
       e#   it in the source code.
  +    e#   Append it to the string. We don't need to worry about '~', we'll just
       e#   leave it out of the printable ASCII range to begin with.
  '|,  e#   Get a character range from the null byte up to '{'. This omits "|}~",
       e#   but those are in the program anyway, it doesn't matter.
  32>  e#   Discard the unprintable characters.
  \-   e#   Subtract the source string from the printable ASCII range.
}_~


2

05AB1E , 95 61 60 byte (không phải 58 b / c Tôi không thích cái đó)

A?9L<J, !"'#$%&()*+-./:;=>@BCDEFGHIKMNOPQRSTUVWXYZ[\]^_`{|}~

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

Câu trả lời cũ bị vô hiệu bởi "các ký tự ASCII", rất nhiều lệnh không hợp lệ ở đây.

Nó in abcdefghijklmnopqrstuvwxyz012345678một lần vì không có ký tự trùng lặp.


Phiên bản BCDEFGHIKMNOPQRSTUVWXYZđã bị xóa:

Công việc đang diễn ra ... Tôi nghĩ ~ 60 byte là thấp như bạn nhận được mà không có các ký tự không phải ASCII trong 05AB1E ..

05AB1E , 58 byte

T5+FA'uK?Au"ADLJFKST"SK?9L<5KJ?} !#$%&()*>-./:;=@[]^_`{|~\

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

In đầu ra x12 do các ký tự lặp lại:

['""', '55', '???', 'AAA', 'FF', 'JJ', 'KKKK', 'LL', 'SS', 'TT', 'uu']

Nó cũng không chấm dứt khá chính xác, làm việc trên đó bây giờ ...


Các câu trả lời cũ không hợp lệ (do các ký tự không phải ASCII) đã bị xóa, xem lịch sử chỉnh sửa.


"Một quine đảo ngược là một chương trình không trống, in ngược lại mã nguồn của nó mà không đọc mã nguồn của nó và chỉ bao gồm các ký tự có thể in được ." Tôi cũng đang làm việc với câu trả lời 05AB1E, cho đến khi tôi nhận thấy điều này.
KSmarts

1
@KSmarts cố định với chi phí 76 byte.
Bạch tuộc ma thuật Urn

2
Thông thường, trong một thử thách chơi gôn mã, người ta sẽ mong đợi 05AB1E sẽ làm tốt hơn một chút so với "nhịp đập Java".
KSmarts

@KSmarts nhún vai nếu bạn không để esolang dễ dàng cạnh tranh theo định nghĩa, bạn xứng đáng nhận được câu trả lời esolang mỉa mai: P.
Bạch tuộc ma thuật Urn

0

Java 8, 106 99 190 byte

class i {/*{}!"#$%&'()+,-.0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`bdefghjkmnopqrtuvwxyz|~!"#$%&'()+,-.0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`claibdefghjkmnopqrtuvwxyz|~*/}

Bạn có thể chơi gôn bằng cách xóa chỗ trống i {vì bạn đã có chỗ trống
Okx

1
Tôi tin rằng mọi nhân vật phải xảy ra cùng một số lần để điều này có hiệu lực
Roberto Graham

Tôi không chắc mình có hiểu được thử thách hoàn toàn không, nhưng không class i{/*!"#$%&'()+,-.0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`bdefghjkmnopqrtuvwxyz|~*/}đủ? Nó chứa tất cả ASCII có thể in được trong mã nguồn của nó và không cho ra kết quả gì. Phần " nhân đôi cho mỗi nhân vật lặp đi lặp lại trong mã nguồn " áp dụng cho đầu ra, vì vậy mặc dù sđược nhân đôi trong class*/được nhân đôi do /* */, xuất ra gấp bốn lần vẫn không có gì là không có gì.
Kevin Cruijssen

Ngoài ra, nếu tôi thực sự đúng, bạn cũng có thể đánh gôn thành: interface Z{}//!"#$%&'()*+,-.0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXY[\]^_`bdghjklmopqsuvwxyz|~( 97 byte )
Kevin Cruijssen

0

Javascript (ES6), 103 101 byte

_=>` !"#$%&'()*+,-.0123456789:;<?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^abcdefghijklmnopqrstuvwxyz{|}~`//_=>\\

Giải pháp cũ (sử dụng 103 byte alert)

alert;;alert`\ \!"#$%&'()*+,-./0123456789:<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_bcdfghijkmnopqsuvwxyz{|}~`

Giải pháp cũ (không hợp lệ) (96 byte)

alert()// !"#$%&'*+,-.0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`bcdfghijkmnopqsuvwxyz{|}~

Bạn có hai //, có nghĩa là bạn phải xuất các ký tự có thể in được, với một ký tự /bị xóa. (Tôi nghĩ)
Stewie Griffin

@StewieGriffin Đã sửa
Herman L
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.