Kodunuzun Sembolik Negatifini Yazdırın


18

(Bu çok hoşuma gitti Kodunuzun Negatifini Yazdırın bir varyasyonu ! Martin Büttner sayesinde - bu metnin neredeyse tamamı onun.)

Sembolleri aşağıdaki yazdırılabilir ASCII karakterleri olarak düşünelim (boşluk olduğunu unutmayın):

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

Ve alfanümerikler bunlar:

0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

Kenar uzunluğu N için aşağıdakiler gibi yazdırılabilir ASCII karakterlerden oluşan bir kare düşünün:

ONE, 
{two}
&3,+=
!four
f|ve.

Ayrıca her satırın ve her sütunun en az bir sembol ve bir alfasayısal içermesi gerekir. (Yukarıdaki örnek bunu karşılar.)

Böyle bir karenin sembolik negatifini , her sembolün bir alfasayısal ile değiştirildiği veya tam tersi olduğu aynı boyutta bir kare olarak tanımlarız . Örneğin, aşağıdaki örnek için geçerli bir sembolik negatif olacaktır:

[&]OK
a...b
1/100
i@#$%
(R) z

Belirli karakterlerin seçimi, yukarıdaki kategorilerde oldukları sürece önemsizdir.

Meydan okuma

Göreviniz, kaynak kodunun sembolik bir negatifini STDOUT'a yazdıran, kenar uzunluğu N> 1 olan kare kaynak kodlu bir program yazmaktır. Sondaki boşluklar yazdırılmalıdır. Sondaki tek bir satır yazdırabilir veya yazamayabilirsiniz.

Her zamanki quine kuralları da geçerlidir, bu nedenle doğrudan veya dolaylı olarak kendi kaynak kodunuzu okumamalısınız. Benzer şekilde, girilen her ifadenin değerini otomatik olarak yazdıran bir REPL ortamını varsaymamalısınız.

Kazanan, en düşük kenar uzunluğuna (N) sahip programdır. Beraberlik durumunda , kaynak kodunda en az sayıda simgeye sahip olan başvuru kazanır. Hala bir kravat varsa, en erken cevap kazanır.


Çıktının herhangi bir tür kaynak kodu olması gerekmediği için bu gerçekten bir "quine" tipi zorluk mu?
Liam

İyi bir nokta, aslında öyle olduğunu sanmıyorum.
Luke

@LiamNoronha Çıktının kaynak kodunun bir işlevi olması ve standart quine kurallarının geçerli olması nedeniyle genelleştirilmiş bir quine olduğunu düşünürdüm.
Martin Ender

1
"Kendi kaynak kodunuzu okuma" tanımlayın; mesela karakterleri çıktıya kopyalayan bir komut varsa, bu "okuma" nın bir örneği olabilir mi?
Conor O'Brien

Yanıtlar:


11

GolfScript, 3 × 3 (4 sembol)

4,m
`3/
n*o

Çevrimiçi olarak deneyin Web GolfScript'te .

Çıktı

[0 
1 2
 3]

Nasıl çalışır

4,  # Push the array [0 1 2 3].
  m # Undefined token. Does nothing.
`   # Push the string representation of the array. Pushes "[0 1 2 3]".
 3/ # Split into chunks of length 3. Pushes ["[0 " " 1 " "2 3]"].
n*  # Join the chunks, separated by linefeeds. Pushes the output.
  o # Undefined token. Does nothing.

11

CJam, 3 × 3 (5 sembol)

[5,
S*3
/N*

CJam yorumlayıcısında çevrimiçi deneyin .

Nasıl çalışır

[   e# Unmatched [. Does nothing.
 5, e# Push [0 1 2 3 4].
S*  e# Join the integers, separating by spaces. Pushes "0 1 2 3 4".
  3 e#
/   e# Split into chunks of length 3. Pushes ["0 1" " 2 " "3 4"].
 N* e# Join the chunks, separated by linefeeds. Pushes the output.

Çıktı

0 1
 2 
3 4

10

Pyth, 3x3, 4 Sembol

S]1
.5;
S]1

Çıktı:

[1]
0.5
[1]

Açıklama:

  • S bir eleman listesini sıralar ]1
  • Sayısal hazır .5olarak basılmış olur 0.5, ;deyimi sonlandırır (Bu durumda gelir hiçbir şey)

Ben <alphanum><symbol><alphanum>Pyth veya CJam nasıl alabilirim hakkında uzun ve zor olsa . Şamandıra kullanmak hiç aklıma gelmedi ... İyi iş çıkardın!
Dennis

5

C ++, 18 x 18

"Her zaman iş için en kötü aracı seçin."

#include<cstdio>  
int main(){ for  (
int line =  0lu;  
1lu*line <  18l;  
1lu*line++){pri\  
ntf(line == 0lu * 
123*line? "\x41.\\
x2e\x02e...\x2e\\ 
x42\x02e...\x2e.\ 
CDE\x00a":  14l!= 
1lu*line?".\x2e.\\
x46\x02e...\x47""\
HIJ\x02e..""KLM"  
 /*O*/"\n":  /*The
bad code:*/"NOP.\ 
QRS\x054." "UVW\  
XYZ\x02e" "\x2e\\ 
x2e\x00a"); 0lu;}}

Çıktı:

A.......B......CDE
...F....GHIJ...KLM
...F....GHIJ...KLM
...F....GHIJ...KLM
...F....GHIJ...KLM
...F....GHIJ...KLM
...F....GHIJ...KLM
...F....GHIJ...KLM
...F....GHIJ...KLM
...F....GHIJ...KLM
...F....GHIJ...KLM
...F....GHIJ...KLM
...F....GHIJ...KLM
...F....GHIJ...KLM
NOP.QRST.UVWXYZ...
...F....GHIJ...KLM
...F....GHIJ...KLM
...F....GHIJ...KLM
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.