Bir Quine'ı tersine çevir!


11

Bir kinin ne olduğunu hepimiz biliyoruz . Bir ters quine baskılar kaynak kodunu okumadan kaynak kodunun ters ve sadece yazdırılabilir ASCII karakterden oluşur (boşluk yoluyla bu boş olmayan bir programdır ~).

Burada, “kaynak kodun tersi” şu anlama gelir: programınızın çıktısı, yazdırılabilir her ASCII karakterini (m - c) kez içermelidir ; burada c , söz konusu karakterin kodunuzda gerçekleşme sayısıdır ve m , maksimum sayıdır. herhangi bir karakterin kodunuzda tekrarlanma sayısı.

(Başka bir deyişle: kodunuz + çıktınız = yazdırılabilir ASCII'nin m katının permütasyonu .)

Programınız ise Örneğin, 12345ardından m = 1 ve çıkış bu dize herhangi permütasyon yapmalıdır:

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

Programınız ise AAB, o zaman m = 2 ve çıkış herhangi permütasyon yapmalıdır:

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

İki eksik Ave bir eksik olduğunu not edin B.

Yazdırılabilir tüm ASCII karakterlerini içeren ve hiçbir şey çıktılamayan bir program geçerli bir ters tırnak ( m = 1'i tatmin edici ) olsa da, uzunluğu dikkate alındığında böyle bir cevap çok rekabetçi olmaz.

Yukarıdaki paragrafta açıklandığı gibi, tersine çevrilmiş bir quine olan bir program yazmalısınız. Bu , baytlardaki en kısa program kazanacaktır. İyi şanslar!


1
Boşluk, sekme ve yeni satır?
Stewie Griffin

11
duplicated for every repeated character in the source codeZorluktaki tüm farkı
Rod

6
Birden çok karakterin (ve birden çok kez) tekrarlandığı tersin bir örneğini verebilir misiniz? Söyle 11234512345?
Giuseppe

4
Bu nasıl bir kopya? İlgili, evet. Kopya, hayır! Bu var yolu yinelenen karakterler olması dilde daha zor. Her dizeden kaldırmanız gereken karakter sayısı değiştiği için, bir dizeyi de çoğaltamayacağınızı unutmayın.
Stewie Griffin

1
@StewieGriffin VTC'yi "dupe" yerine "belirsiz" olarak kabul ediyorum çünkü (neredeyse) her cevabın ne duplicated for every repeated character in the source codeanlama geldiğini veya gönderimin bu kriter için geçerli olup olmadığını anlamaya çalışan bir yorumu var , çünkü OP tam olarak bir burada birkaç soru var.
Giuseppe

Yanıtlar:


7

Beyin Flak , 221 207 bayt

İçin +1 içerir -A

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

Çevrimiçi deneyin!

# 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
 >)}{}

Bence [her zaman değil, beş kez çıkarmalısın . Bunun 2örnekte yalnızca bir kez kaldırıldığını unutmayın . Zor olsa da biraz kafa karıştırıcı.
Stewie Griffin

Bunun standart kuinden çok daha kısa olması ilginç. +1:)
James

2
Bu gerçekten topal ve cevabınızdan önemli ölçüde daha az ilginç, ancak teknik olarak, !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_abcdefghijklmnopqrstuvwxyz {|} ~ ` daha iyi bir puan alacaktı: /
James

6

CJam , 17 bayt

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

Çevrimiçi deneyin!

Baskılar

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

açıklama

Amaç, standart kini değiştirmekti

{"_~"}_~

böylece hiçbir karakter programda tekrarlanmaz. Bunun nedeni, CJam'in karakterleri yazdırılabilir ASCII aralığından kaldırmak için kullanabileceğimiz farklı bir operatöre sahip olmasıdır, ancak sayıları dikkate almaz. El ile uygulamak muhtemelen daha uzun olurdu, bu yüzden her karakterin sadece bir kez göründüğünden emin olmalıydım ve olaylar hakkında endişelenmemize gerek kalmadı.

{      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 bayt (58 b / c değil, bundan hoşlanmıyorum)

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

Çevrimiçi deneyin!

Eski yanıt "sadece ASCII karakterleri" tarafından geçersiz kılınmıştır, burada birçok komut geçerli değildir.

abcdefghijklmnopqrstuvwxyz012345678Yinelenen karakter olmadığından bir kez yazdırılır .


BCDEFGHIKMNOPQRSTUVWXYZKaldırılan sürüm :

Devam eden çalışmalar ... Sanırım ~ 60 bayt, 05AB1E'de ASCII olmayan karakterler olmadan elde ettiğiniz kadar düşük.

05AB1E , 58 bayt

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

Çevrimiçi deneyin!

Tekrarlanan karakterler nedeniyle x12 çıktısını yazdırır:

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

Ayrıca, şu anda üzerinde çalışarak oldukça doğru bir şekilde sonlandırılmıyor ...


Geçersiz eski yanıtlar (ASCII olmayan karakterler nedeniyle) kaldırıldı, bkz. Düzenleme geçmişi.


"Tersine çevrilmiş bir alıntı, kaynak kodunu okumadan kaynak kodunun tersini yazdıran ve yalnızca yazdırılabilir ascii karakterlerden oluşan boş olmayan bir programdır ." Bunu fark edene kadar 05AB1E yanıtı üzerinde çalışıyordum.
KSmarts

1
@KSmarts 76 bayt maliyetle sabitlendi.
Sihirli Ahtapot Urn

2
Tipik olarak, bir kod-golf meydan okuma, 05AB1E "Java yener" biraz daha iyi yapmasını beklenir .
KSmarts

@KSmarts omuz silkme Eğer esolangs kolayca tanımı gereği rekabet izin vermezsen, bir alaycı esolang cevabı hak: P.
Sihirli Ahtapot Urn

0

Java 8, 106 99 190 bayt

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

Muhtemelen i {bir alanı olduğu için alanı kaldırarak golf yapabilirsiniz
Okx

1
Bunun geçerli olması için her karakterin aynı sayıda olması gerektiğine inanıyorum
Roberto Graham

Zorluğu tamamen anladığımdan emin değilim, ama class i{/*!"#$%&'()+,-.0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`bdefghjkmnopqrtuvwxyz|~*/}yeterli değil mi? Kaynak kodundaki tüm yazdırılabilir ASCII'leri içerir ve hiçbir şey çıktılamaz. "Kısmı kaynak kodunda her tekrarlanan karakter için yinelenmiş ", yani rağmen çıkış için geçerlidir syineleniyor classve *ve /bağlı çoğaltıldığı /* */şey hala bir şey değildir dört kez çıktısı.
Kevin Cruijssen

Ayrıca, gerçekten interface Z{}//!"#$%&'()*+,-.0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXY[\]^_`bdghjklmopqsuvwxyz|~
haklıysam

0

JavaScript (ES6), 103 101 bayt

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

Eski çözüm (103 bayt kullanarak alert)

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

Eski (geçersiz) çözüm (96 bayt)

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

İki tane var //, yani yazdırılabilir karakterleri çıktı, biri /çıkarılmış olarak çıktı gerekir . (Sanırım)
Stewie Griffin

@StewieGriffin Sabit
Herman L
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.