Anagram Polyglot Benang Perampok


22

Inilah benang perampok dari tantangan ini

Polisi akan memilih urutan OEIS dan menulis dua program lengkap dalam dua bahasa berbeda yang menghasilkan item ke-n dalam urutan ketika diberi dan melalui STDIN. Kedua program harus merupakan anagram satu sama lain, artinya masing-masing dapat disusun ulang dari surat yang lain.

Mereka akan menampilkan nomor OEIS, kode sumber untuk dan nama satu bahasa yang digunakan.

Anda harus menemukan anagram pengajuan polisi asli yang berjalan dalam bahasa selain yang digunakan oleh polisi. Untuk memecahkan jawaban, Anda hanya perlu menemukan bahasa dan program apa pun yang menghasilkan urutan dan merupakan anagram dari aslinya, belum tentu jawaban yang dipikirkan polisi.

Anda dapat menampilkan oleh kode karakter atau memasukkan STDERR dalam solusi Anda, tetapi hanya jika polisi telah menunjukkan solusi tersembunyi mereka melakukannya. Output desimal ke STDOUT selalu merupakan celah yang valid.

Dengan demikian, polisi diberi insentif untuk membuatnya sesulit mungkin untuk menemukan bahasa apa pun yang melakukan tugas menggunakan daftar simbol mereka.

Mencetak gol

Orang dengan retakan terbanyak akan menjadi pemenang bagian ini. Hanya celah pertama untuk setiap solusi yang akan dihitung untuk skor seseorang.

Dewan Pimpinan

Terima kasih banyak untuk semua yang terlibat dalam tantangan ini.

Ini adalah papan pemimpin seperti apa adanya

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

Tidak yakin saya mengerti bagian "anagram", bisakah Anda sedikit menjelaskan?
Buffer Over Read

@TheBitByte Solusi lain harus menggunakan semua karakter yang sama seperti aslinya tetapi disusun ulang dalam urutan yang berbeda.
Wheat Wizard

Tanpa karakter tambahan?
Buffer Over Read

@TheBitByte ya dan tanpa menghapus karakter apa pun
Wheat Wizard

Jawaban:


9

05AB1E , 38 byte, Loovjo , A000290

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

Cobalah online!

Sangat mungkin bukan solusi yang dimaksudkan, tetapi berhasil.

Penjelasan

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? Bisakah Anda jelaskan?
ETHproduk

1
@ ETHproductions: fungsi is_numbermemeriksa apakah nomornya hanya terdiri dari 0-9. Karena .bukan angka, itu menjadi salah. Fungsinya bisa menggunakan nama yang lebih deskriptif :)
Emigna

8

Jolf, 15 byte, Adnan , A000290

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

Coba di sini! Jelas bukan solusi yang dimaksudkan, tapi hei, itu berhasil.

Penjelasan

*&"?!#$|<=@\^{}
*                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.


7

05AB1E , 35 byte, Oliver , A000290

Polisi harus berhenti memposting n^2tantangan dengan python ...

n0iprt(input()**(1+1))
"'1°3¢','m'"

Cobalah online!

Penjelasan

n    # square input
 0i  # if 0 == 1 do the rest of the code

6

2sable , 7 byte, Kritixi Lithos , A005843

Kode:

r^#ei2*

Penjelasan:

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.

Cobalah online!


Luar biasa bagaimana kode sebenarnya hanya 2 byte!
Kritixi Lithos

6

Hexagony , 13 byte, Adnan , A002378

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

Cobalah online!

Dibuka:

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

Tidak 100% apakah ini asli, karena kiri atas \tidak digunakan.

Itu <\>hanya mirror, jadi program ini sebenarnya seluruhnya linier:

?"&)}=*!@

?          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 byte, DJMcMayhem , A002275

v!:x]''"
@ai1

Cobalah online!

Ini mungkin solusi pertama dalam bahasa yang dimaksudkan penulis.


Penjelasan

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

Mungkin Anda harus memberi tahu DJMcMayhem bahwa Anda telah memecahkannya? ;)
ETHproduk

@ ETHproductions Saya katakan padanya dalam obrolan saya mungkin akan mengatakan padanya lagi dalam komentar.
Wheat Wizard

1
This might be the first solution in the language the author intended.Spot on. :)
DJMcMayhem

5

2sable, Conor O'Brien , A000290

~*

Cobalah online!

Saya tidak tahu cara kerjanya, benar-benar hanya ada satu program yang memenuhi persyaratan dan saya hanya dengan kasar menemukan bahasa yang digunakan.

Setelah melihat-lihat dokumen, saya dapat memberikan penjelasan:

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

5

Pyth , 26 byte, Steven H. , A023443

Kode:

tQ.qly 7:esau0euii s uxC !

Coba online .

Cukup sederhana:

 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
Solusi yang dimaksudkan! (minus berebut, tentu saja.)
Steven H.

1
Itu luar biasa! Ide bagus. Maaf karena tidak memberi tahu Anda secara langsung ... Terlalu sedikit perwakilan.
alleks

Tidak masalah! Selamat.
Steven H.

5

Python 3, 118 byte, ETHproduksi, 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|

Uji di Ideone .

Pengiriman polisi

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|

Apa yang berbeda?

Pengajuan polisi tidak berfungsi dalam Python 3 karena dua alasan.

  • Fungsi input Python 2 secara otomatis mengevaluasi satu baris input, sedangkan mitra Python 3 hanya mengembalikan baris sebagai string. Kita cukup memanggil int untuk memperbaikinya.

  • print adalah pernyataan dalam Python 2, tetapi itu adalah fungsi dalam Python 3. Secara khusus, itu berarti bahwa kita harus mengelilingi argumennya dengan tanda kurung.

Itu berarti kita perlu int()dan (), tetapi karakter-karakter itu tidak semuanya bagian dari komentar. Itu berarti kita harus melakukan beberapa perubahan.

Alih-alih fraksi s , kami melacak 1 / s .

Inisialisasi s - s=1/(801**.5-28)- menjadi s=801**.5-28, menyimpan karakter 1/().

Faktor [-1] dalam pembaruan a - int(s)- menjadi int(1/s), dihitung berdasarkan karakter 1/.

Pembaruan s - s=1/(s-int(s))- menjadi s=1/s-1//s, biaya karakter 1//, tetapi menyimpan karakter (int()).

Karakter yang disimpan dalam ()(int())sampul yang kami butuhkan untuk port kode ke Python 3, tetapi mendapatkannya harganya 1//. Kita dapat mengambil //dari komentar, tetapi kita harus menyimpan di 1tempat lain.

Salah satu cara (satu-satunya?) Dari tabungan yang dibutuhkan 1adalah untuk menggantikan 1di inisialisasi sebuah dengan 0==0. Ini biaya empat karakter, tetapi kita dapat mengambil 00dari komentar.

Sejauh ini, kami memiliki kode berikut.

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|

Untuk memulihkan salah satu dari yang =sekarang kita "berutang", kita dapat menulis ulang inisialisasi s dan a dengan satu tugas: s,a=801**.5-28,[0,0==0]Selain itu, ini menghemat a ;dan biaya a ,, yang dapat ditambahkan dan dihapus dari komentar.

Yang kedua =dapat disimpan dengan tidak menyimpan input dalam suatu variabel, yaitu, range(int(input()))sebagai gantinya, menyimpan karakter dalam i=. Kami menggunakan i setelah loop juga, tapi saya th unsur yang hanya yang kedua dari kanan, sehingga kita dapat mengganti idengan -2. Untuk alasan yang sama, a[-2]di badan loop dapat diganti dengan i.

Kami sekarang memiliki permutasi dalam bekerja kode Python 3:

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|

Namun, kode ini juga berfungsi di Python 2! Salah satu cara untuk memperbaikinya adalah menggantinya print(a[-2])dengan (print(a[-2]),); kami memiliki karakter yang kami butuhkan di komentar. Seperti disebutkan sebelumnya, cetak adalah fungsi dalam Python 3, jadi ini membangun tupel ( Tidak ada ,) . Namun, pernyataan cetak Python 2 adalah SyntaxError di dalam tuple literal.


Sial, bagus ... mungkin aku seharusnya menghabiskan sedikit lebih banyak waktu untuk menulis versi tanpa komentar. Saya akan memposting solusi yang saya maksud.
ETHproduksi

Saya telah membuat versi modifikasi dari program saya yang bekerja di Python 2 dan 3, tidak menggunakan komentar, dan memiliki solusi (yang dimaksudkan) yang sangat berbeda. Apakah layak memposting sebagai jawaban terpisah?
ETHproduksi

Jika itu berfungsi di kedua Python 2 dan 3, itu bukan solusi yang valid. Retakan tidak dapat berfungsi dalam bahasa asli.
Dennis

I don't understand. The intended crack isn't in Python.
ETHproductions

Oh, you mean a new cop submission. I thought we were talking about a different crack to this one... Sure, go ahead and post it.
Dennis



3

05AB1E, 12 bytes, tuskiomi, A000012

1,(FI1=1=1,)

Try it online!

Explanation

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

Funny. I didn't have a 2nd program for this, because I didn't understand what cops and robbers was (whoops). good job being inventive!
tuskiomi


3

05AB1E, 27 bytes, boboquack, A000012

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

Try it online

How it works:

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

Convex, 75 bytes, 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;

Try it online

How it works:

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;

2

Dip, 9 bytes, Kritixi Lithos

Definitely not the intended answer.

1^,-$)×1*

Explanation:

1$^,-)×   # Basically does nothing
       1* # Repeat "1" n times

Now all that's left for me is to crack your A000042 answer too!
Kritixi Lithos


1

05AB1E, 25 bytes, Mego, A000583

Code:

nnYi=put("");prit`Y**4`,X

Explanation:

n       # Square the input
 n      # Square the squared input
  Y     # Constant that pushes 2
   i    # If equal to 1, do the following:
    =put...

Try it online!


Oh come on, You beat me by 12 seconds :)
Emigna

@Emigna The time between the answers is uncanny :p.
Adnan

1
It didn't register the first time I pressed post either, so they would have been almost instantaneous :)
Emigna

1

Dip, 8 bytes, Oliver, A000042

(1J&F},1

Explanation

              #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

The funny thing is that this was the intended language! Dip is an esolang created by Oliver.

Test Cases and Running Dip from Command-Line

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

1

2sable, 14 bytes, Dopapp, A121377

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

Try it online.

How it works (more or less):

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 bytes, Oliver, A000012

`¸WW/

The sequence just prints a 1 no matter what the input is. Oliver's answer prints a 1.0. This program also prints a 1.0. This apparently is the intended solution.

Explanation

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

Alternative solution (courtesy of @milk)

Convex, 5 bytes

WW¸`/

Try it online!

Explanation

                  // 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
Alternate crack in Convex: WW¸`/
milk

@milk Thanks! I added it in my latest edit
Kritixi Lithos

Your Convex program kinda doesn't work as you think it does. As of right now, it pushes -1 twice, LCMs them (which would be 1), finds the string representation, and finally slices the string (which would be "1") by every [input] characters (since the input is a number.
GamrCorps

@GamrCorps How's it now?
Kritixi Lithos
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.