Polyglot Anagram Robbers 'Konu


22

Bu, soyguncuların bu zorluğun konusu

Polisler bir OEIS dizisi seçecek ve STDIN aracılığıyla bir n verildiğinde dizide o nci maddeyi üreten iki farklı dilde iki tam program yazacaktır . İki program birbirlerinin anagramları olmalıdır, yani her biri diğerinin harflerinden yeniden düzenlenebilir.

OEIS numarasını, kaynak kodunu ve içinde bulunduğu bir dilin adını sunacaklar .

Özgün polisin, polis tarafından kullanılandan başka bir dilde yayınlanmış olan bir anagramını bulmalısınız. Bir cevabı kırmak için sadece sekansı oluşturan ve orijinalin bir anagramı olan herhangi bir dil ve programı bulmanız gerekir , mutlaka polisin düşündüğü cevabı değil.

Karakter koduyla çıktı yazabilir veya çözümünüze STDERR ekleyebilirsiniz, ancak yalnızca polis gizli çözümlerinin yaptığını belirtirse. STDOUT'a ondalık çıktı her zaman geçerli bir çatlaktır.

Böylece polisler, sembol listelerini kullanarak görevi yapan herhangi bir dili bulmayı olabildiğince zorlaştırmaya teşvik edilir.

puanlama

En çok çatlak olan kişi bu bölümün galibi olacak. Her çözüm için sadece ilk çatlak, kişinin puanına sayılacaktır.

Liderler Sıralaması

Bu mücadelede yer alan herkese çok teşekkürler.

İşte olduğu gibi lider kurulu

Place  User             Score
-----------------------------
1      Adnan            3
1      Kritixi Lithos   3
1      Emigna           3
1      milk             3
5      Steven H.        2
5      Wheat Wizard     2
5      jimmy23013       2
8      ETH Productions  1
8      Dennis           1
8      alleks           1
8      Martin Ender     1
8      Oliver           1
8      Conor O'Brien    1

"Anagram" bölümünü anladığımdan emin değilim, biraz daha ayrıntılı olabilir misiniz?
Buffer Over Read

@ TheBitByte Diğer çözüm, orijinal karakterle aynı karakterlerin hepsini kullanmalı, ancak farklı bir düzende düzenlemelidir.
Buğday Sihirbazı,

Ek karakter yok mu?
Tampon Aşırı Okuma

@TheBitByte evet ve herhangi bir karakter kaldırmadan
Wheat Wizard

Yanıtlar:


9

05AB1E , 38 bayt, Loovjo , A000290

nXtdief e():return X*X
pr e(input())##

Çevrimiçi deneyin!

Çok büyük olasılıkla amaçlanan çözüm değil, işe yarıyor.

açıklama

n      # square input
 X     # push 1
  t    # push sqrt(1)
   d   # push is_number(1.0)
    i  # if true do the rest of the code (1.0 is not a number so it will never execute)

1
1.0 is not a number? Lütfen detaylandırır mısın?
ETHProductions

1
@ETHproductions: işlev is_number, sayının yalnızca içerdiğini denetler 0-9. Gibi .bir sayı değil, yanlış olur. Bu fonksiyon daha açıklayıcı bir isim kullanabilir :)
Emigna

8

Jolf, 15 bayt, Adnan , A000290

*&"?!#$|<=@\^{}

Burada dene! Kesinlikle amaçlanan çözüm değil ama hey, işe yarıyor.

açıklama

*&"?!#$|<=@\^{}
*                multiply
 &               the two inputs to this func, x, y: x && y
                 returns y if x and y, or the falsey argument.
  "?!#$|<=@\^{}  this string is always truthy, so the second arg is used.
                 two implicit inputs are taken, both equal to the first arg
                 so, this corresponds to *xx, which is x^2.



6

2sable , 7 bayt, Kritixi Lithos , A005843

Kod:

r^#ei2*

Açıklama:

r         # Reverse the stack, which is a no-op
 ^        # XOR the input with itself, always leading to 0
  #       # If 1, break (which stops the program)
   e      # Compute input nPr input, which always leads to 1
    i     # If equal to one, do the following..
     2*   #   Multiply the input by 2.

Çevrimiçi deneyin!


Gerçek kodun sadece 2 bayt olması harika!
Kritixi Lithos

6

Altıgen , 13 bayt, Adnan , A002378

?"&\>=})\*!@<

Çevrimiçi deneyin!

Kırımsız:

  ? " &
 \ > = }
) \ * ! @
 < . . .
  . . .

Bunun orijinal olup olmadığı% 100 değil, çünkü sol üst \kullanılmamış.

<\>Program aslında tamamen lineer yani, sadece aynalar gibidir:

?"&)}=*!@

?          Read input.
 "         Move back and left.
  &        Copy input.
   )       Increment copy.
    }=     Move forward and right and turn around (to face the n and n+1 edges).
      *    Multiply.
       !   Print.
        @  Terminate.

5

V , 13 bayt, DJMcMayhem , A002275

v!:x]''"
@ai1

Çevrimiçi deneyin!

Bu yazarın istediği dilde ilk çözüm olabilir.


açıklama

v!:x]''"   Does nothing
@ai1       inserts 1 a times

Belki de DJMcMayhem'e, onu kırdığınızı bilmesini sağlamalısınız? ;)
ETHproductions

@ETHproductions Ona sohbette söyledim muhtemelen yorumlarda tekrar söyleyeceğim.
Buğday Sihirbazı

1
This might be the first solution in the language the author intended.Noktaya bak. :)
DJMcMayhem

5

2sable, Conor O'Brien , A000290

~*

Çevrimiçi deneyin!

Nasıl çalıştığını bilmiyorum, gerçekten gereksinimleri karşılayan tek bir program var ve çalıştığı dili bulmak için zorla zorladım.

Dokümanları inceledikten sonra bir açıklama bulabilirim:

~         Push Input OR Input (always pushes the input)
 *        Multiply that by Input 

5

Pyth , 26 bayt, Steven H. , A023443

Kod:

tQ.qly 7:esau0euii s uxC !

Çevrimiçi deneyin .

Oldukça basit:

 Q                            Reads input
t                             Substracts 1 from it
  .q                          Quits program (implicit print)
    ly 7:esau0euii s uxC !    None of this ever plays a part...
                                I just thought it'd be fun to scramble it.

2
Amaçlanan çözüm! (tabii ki karıştırıcı eksi.)
Steven H.

1
Bu harika! İyi fikir. Doğrudan bilmene izin vermediğim için üzgünüm ... Çok az rep.
alleks

Sorun değil! Tebrikler.
Steven H.

5

Python 3, 118 bayt, ETHProductions, A042545

s,a=801**.5-28,[0,0==0]
for i in range(int(input())):a+=[a[i]+a[-1]*int(1/s)];s=1/s-1//s
(print(a[-2]),) #.0fhlmop|

İdeone üzerinde test et .

Polis teslimi

i=input();s=1/(801**.5-28);a=[0,1]
for p in range(i):a+=[a[-2]+a[-1]*int(s)];s=1/(s-int(s))
print a[i]#,,,.//000fhlmo|

Farklı olan ne

Polis gönderimi Python 3'te iki nedenden dolayı çalışmıyor.

  • Python 2'nin giriş işlevi otomatik olarak bir giriş satırı geliştirir, Python 3'ün karşılığı ise satırı bir dizge olarak döndürür. Biz sadece çağırabilir int Bunu düzeltmek için.

  • print Python 2'de bir ifade idi, ancak Python 3'te bir fonksiyondu. Özellikle argümanını parantezle çevrelemek zorunda olduğumuz anlamına geliyor.

Bu, ihtiyacımız olan anlamına gelir int()ve ()bu karakterlerin hepsi yorumun bir parçası değildir. Bu, bazı değişiklikler yapmamız gerektiği anlamına gelir.

Yerine fraksiyon ler , biz takip 1 / s .

S - s=1/(801**.5-28)- ' nin başlatılması s=801**.5-28karakterleri kaydederek olur 1/().

A - - güncellemesinde bir [-1] faktörü karaktere mal oluyor .int(s)int(1/s)1/

S - s=1/(s-int(s))- güncellemesi s=1/s-1//skaraktere mal olur 1//, ancak karakterleri kaydeder (int()).

Kaydedilen karakterler ()(int()), kodu Python 3'e taşımak için gereken karakterleri kapsar, ancak bunları elde etmek bize mal oldu 1//. Yorumdan alabiliriz //, ancak 1başka bir yere kaydetmemiz gerekecek .

Tek yönlü (tek?) Gerekli tasarrufu ait 1değiştirmektir 1başlatılması halinde bir ile 0==0. Bu dört karaktere mal olur, ancak 00yorumdan alabiliriz .

Şimdiye kadar aşağıdaki koda sahibiz.

i=int(input());s=801**.5-28;a=[0,0==0]
for p in range(i):a+=[a[-2]+a[-1]*int(1/s)];s=1/s-1//s
print(a[i]) #,,,.()0fhlmo|

Birini kurtarmak için ="borçlu" Şimdi biz, biz başlatma yazabiliriz s ve bir tek bir atama ile: s,a=801**.5-28,[0,0==0]Ayrıca, bu bir kazandırır ;ve maliyeti ,eklendi ve yorum çıkarılabilir edilebilecek.

İkincisi =, girdiyi bir değişkende saklamamak suretiyle, yani range(int(input()))karakterleri kaydederek yazarak kaydedilebilir i=. Biz kullanmak i de döngü sonra ama ben inci unsuru bir biz yerine, böylece sağ taraftan sadece ikinci biridir iile -2. Aynı nedenden ötürü, a[-2]döngü gövdesi ile değiştirilebilir i.

Artık Python 3 kodunu çalıştırma iznimiz var:

s,a=801**.5-28,[0,0==0]
for i in range(int(input())):a+=[a[i]+a[-1]*int(1/s)];s=1/s-1//s
print(a[-2]) #,.()0fhlmop|

Ancak bu kod Python 2'de de çalışıyor! Bu sabitleme bir yolu değiştirmektir print(a[-2])ile (print(a[-2]),); Yorumda ihtiyaç duyduğumuz karakterlere sahibiz. Daha önce de belirtildiği gibi, baskı Python 3'te bir işlevdir, bu nedenle tuple'ı ( Yok ,) oluşturur . Bununla birlikte, Python 2'nin print ifadesi , tuple değişmezi içindeki bir SyntaxError'dur .


Dang, hoş ... belki de yorumsuz bir versiyon yazmak için biraz daha zaman harcamalıydım. Amaçlı çözümümü göndereceğim.
ETHProductions,

Python 2 ve 3'te çalışan, yorum yapmayan ve çok farklı (amaçlanan) bir çözüme sahip olan programımın değiştirilmiş bir sürümünü oluşturdum. Ayrı bir cevap olarak göndermeye değer mi?
ETHProductions,

Hem Python 2 hem de 3'te çalışıyorsa, geçerli bir çözüm değildir. Çatlak orijinal dilde çalışamaz.
Dennis

Anlamadım Amaçlanan çatlak Python'da değil.
ETHProductions,

Oh, yeni bir polis teslimi demek istiyorsun . Bundan farklı bir çatlaktan bahsettiğimizi sanıyordum ... Tabii, devam et ve gönder.
Dennis,



3

05AB1E , 12 bayt, tuskiomi , A000012

1,(FI1=1=1,)

Çevrimiçi deneyin!

açıklama

1,            # print 1
  (           # negate input
   F          # that many times do (i.e. no times)
    I1=1=1,)  # the rest of the code

Komik. Bunun için 2. bir programım yoktu, çünkü polislerin ve soyguncuların ne olduğunu anlamadım. iyi iş yaratıcı olmak!
tuskiomi


3

05AB1E, 27 bayt, boboquack , A000012

1 1pif:
    if :
        rint( '1' )

Çevrimiçi deneyin

Nasıl çalışır:

1                     # push 1
  1                   # push 1
   p                  # pop (1), push is_prime(1)
    i                 # pop (is_prime(1), false), if is false so don't execute rest


2

Dışbükey, 75 bayt, boboquack , A004526

2/Q2 2/2/2/2/2/2/2/2/2/2/2/2/2/2/2/2/2/2*2*2*; 2*;                 2; 2; 2;

Çevrimiçi deneyin

Nasıl çalışır:

2  e# push 2
 / e# pop first 2, divide, push result
   e# push a bunch of garbage but discard it all with semi-colons (;)
  Q2 2/2/2/2/2/2/2/2/2/2/2/2/2/2/2/2/2/2*2*2*; 2*;                 2; 2; 2;




1

Dip , 8 bayt, Oliver , A000042

(1J&F},1

açıklama

              #Implicit Input
(             #Start range loop
 1            #Push 1 to the stack
  J           #Join all the elements in the stack
   &          #End program
    F},1      #These are ignored

İşin garibi, bu amaçlanan dildi! Dip Oliver tarafından oluşturulan bir esolang.

Komut Satırından Test Durumları ve Akma

$python3 dip.py
Dip v1.0.0 by Oliver Ni.
>>> (1J&F},1
> 4
1111
>>> (1J&F},1
> 7
1111111

1

2sable, 14 bayt, Dopapp , A121377

Q@5 2*%6 8*+.&

Çevrimiçi deneyin.

Nasıl çalışır (az ya da çok):

Q@
  5              # Push 5
    2            # Push 2
     *           # Pop (2), pop (5), push 5*2=10
      %          # Pop (10), pop (input), push input%10
       6         # Push 6
         8       # Push 8
          *      # Pop (8), pop (6), push 8*6=48
           +     # Pop (48), pop (input), push input+48
            .&


1

Dip , 5 bayt, Oliver , A000012

`¸WW/

Dizi 1, giriş ne olursa olsun basar . Oliver'ın cevabı bir yazdırır 1.0. Bu program aynı zamanda bir yazdırır 1.0. Bu görünüşte amaçlanan çözümdür.

açıklama

`¸                  # push character `¸`
  W                 # pushes 1000000
   W                # pushes 1000000 also
    /               # divides the last two items in stack resulting in 1.0
                    # implicit output (1.0)

Alternatif çözüm (miletin izniyle)

Dışbükey , 5 bayt

WW¸`/

Çevrimiçi deneyin!

açıklama

                  // implicit input
W                 // pushes -1
 W                // pushes -1 also
  ¸               // calculates the LCM of the two numbers (which evaluates to 1)
   `              // finds its string representation
    /             // slices the string (so that it would evaluate to "1")
                  // implicit output

1
Dışbükey'de alternatif çatlak: WW¸`
süt

@milk Teşekkürler! Son düzenlememe
ekledim

Dışbükey programınız düşündüğünüz gibi çalışmıyor. Şu an itibariyle, iter -1 iki kez, LCMS onları (ki 1 olacaktır), dize temsilini bulur ve nihayet (olurdu dize dilimler "1"her tarafından) [input]girdi bir sayıdır çünkü (karakterler.
GamrCorps

@GamrCorps Şimdi nasıl?
Kritixi Lithos
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.