Transpoze


10

Bu quine varyantında, programınızın kaynak kodunu sol üst köşeden sağ alt köşeye çapraz olarak aktarılmış olarak vermesi gerekir. Örneğin:

senin programın
üzerinde
dört satır

çıktılar

 yof
 ono
 u u
 r r
    
 p l
 r i
 o n
 g e
 r s
 a
 m

Çıktıdaki boşluk boşluk değildir. Boşluklar iki durumda görünür: orijinalde boşluk (ör . Dördüncü sütun arasında rve larasında) ve karakterleri doldurmanın gerekli olduğu yerlerde (örneğin ilk sütundaki tüm boşluklar) Her ikisi de gereklidir ve boşluklar hiçbir yerde görünemez çıktıda başka.

Çıktıdaki tek bir satırsonu isteğe bağlı olarak yok sayılabilir. Kaynak koddaki son satırların çıktı üzerinde hiçbir etkisi yoktur ve kaynak koddaki baştaki satırsonlarının yukarıdaki örnekte olduğu gibi ele alınması gerekir. Yeni satır olmayan her karakterin bir sütun genişliğinde ve bir satır yüksekliğinde olduğunu varsayın, sekme gibi karakterler için bu çirkin bir çıktıya yol açabilir.

Çözümünüzün her birinde en az iki satırsonu olmayan karaktere sahip en az iki satır olmalı ve kendi geçişi olmamalıdır (çıktı kaynakla aynı olamaz).

Kaynak kodlarını içeren dosyadan okunan hile sorgularına , bir URL'den veri çekmeye, sorgulama yerleşiklerini kullanmanıza vb. İzin verilmez.

Bu kod golf: bayt en kısa kod kazanır.


Bunun gerçek bir soru mu olması gerekiyor?
lirtosiast

2
@ThomasKwa Buna karşılık?
Martin Ender

@ MartinBüttner Belki değişmezlerin aktarıldığı bir dil vardır. Her ihtimale karşı.
lirtosiast

@ThomasKwa Belirtilen tüm kurallara uyduğu sürece sorun yok.
Luke

Harici kütüphanelerin (Javascript'te Lodash gibi) kullanımı yasaklanmış mı?
Mama Fun Roll

Yanıtlar:


5

CJam, 14 bayt

{`"_~".+N*}
_~

Burada test edin.

Daha kısa olsa da, muhtemelen Fisyon çözümünden biraz daha az ilginç.

açıklama

{       e# Quine framework. Runs the block while another copy of it is on the stack.
  `     e# Stringify the block.
  "_~"  e# Push the remaining code as a string.
  .+    e# Element-wise append... essentially puts the two strings in a grid and 
        e# transposes it.
  N*    e# Join with linefeeds.
}_~

10

Bölünme , 17 bayt

Yine de quines için en sevdiğim dil ...

'"
!0
0+
;!
DN
"!

Çevrimiçi deneyin!

açıklama

Bu temel Fisyon kine ile oldukça benzer . O olmasaydı Aslında, kural "en az iki sigara satır karakterleri her biri en az iki satır olmalı", ben sadece ve değiştirmenizi aktarılmış olabilir Rile D. Bu kural, işleri biraz daha ilginç hale getirir, çünkü başka bir satır yazdırmamız gerekir.

Kontrol akışı, Dgüneye giden tek bir atomla başlar . Vurduğu beri "etrafında ve baskı kaydırılır

'!0;D

STDOUT'a, normal quine'deki gibi. '!sonra atomun kütlesini karakter koduna ayarlar !. 0Hala güneyinde hareket ediyor ikinci sütun için atomu taşıyan bir teletaşıyıcı olup.

İle +biz değerine atom kütlesini artırmak ". !N!baskı alıntı, linefeed, alıntı. STDOUT şimdi şöyle görünüyor:

'!0;D"
"

Etrafına dolandıktan sonra, atom bir başkasını vurur "ve şimdi ikinci satırı aynen yazdırır:

'!0;D"
"0+!N!

Şimdi bitti. Atom, ışınlayıcıyı bir kez daha kullanır ve ;onu yok eden yere iner ve böylece programı sonlandırır.

Ben burada en güzel bit "alt ve diğeri üst koyarak bir !kez daha değerini ayarlamak zorunda kalmadan tek seferde yazdırabilirsiniz (dize moduna tekrar girerek üzerine yazılır çünkü) varsayalım .


3

Javascript ES6, 90 bayt

$=_=>[...(_=`$=${$};$()`.split`
`)[0]].map((x,y)=>_.map(v=>[...
v][y]).join``).join`
`;$()

Kötü kötü değil.

açıklama

İşte standart quine çerçevesi:

$=_=>`$=${$};$()`;$()

Değiştirmek için, sadece bir harita matrisi oluşturmak için satır satırını yeni satırlar ve karakterlere bölerim, 2 harita işlevi kullanılarak aktarılır ve çıktı oluşturmak için birleşirim.



2

Befunge-93 , 57 bayt

^
_^
,@
+,
5*
52
,+
*9
28
+|
9
8#
|!
 ,
##
!:
,^
#
:
^
""

Bu, her karakteri yığındaki ilk sütuna (tırnak işareti hariç) yerleştirip her öğeyi yığının dışına yazdırarak çalışır. Bundan sonra, teklifi yazdırır, yeni bir satır yazdırır ve ardından ikinci sütuna geçer. Aynı şey yeni bir satır yazdırır.

Bunu başlıktaki bağlantıda test edebilirsiniz, ancak kodu kopyalayıp pencereye kendiniz yapıştırmanız gerekir. 'Yavaş' düğmesine basarsanız, imlecin izlediği yolu ve o sırada yığını gösterir.


İkinci sütundaki alıntıyı Fisyon yanıtımda yaptığım gibi yukarı taşımak daha kısa olabilir mi?
Martin Ender

Ben üstüne alıntı taşımak ve ikinci sütun yeniden düzenlemek ve hala işi yoktur, ancak ilk sütun hala aynı yükseklikte olmak zorunda çünkü hala 57 bayt olmak biter olabilir
Kevin W.

Hm tamam, "sadece bir kez oluşturmanıza izin verebileceğini düşündüm , böylece bazı kodları ilk sütundan ikinciye kaydırabilirsiniz.
Martin Ender

1

Python 2, 91 75 69 bayt

s='#%r;print"s#\\n="+"\\n".join(s%%s)';print"s#\n="+"\n".join(s%s)
##

Çevrimiçi deneyin

Açıklama:

Bu standart kinin bir modifikasyonunu kullanır:

s='s=%r;print s%%s';print s%s

Değişiklikten sonra:

s='s=%r;print"\\n".join(s%%s)';print"\n".join(s%s)

Tek bir satıra izin verilirse bu yeterli olacaktır. Sonra, bu şartı yerine getirmek için 2. satıra iki karakter ekledim. #İkinci satırda karakter sen de ilk satırda bunları değiştirmek sürece, herhangi bir şey ile değiştirilebilir ve bu programın sözdizimsel olarak geçerli kılar.

Şimdi doğru şekilde yazdırmak #için ilk iki satırın sonunda yazdırmam gerekiyor . Bu yüzden dizeden ilk iki karakteri kaldırıyorum sve yazdırmadan #önce bu karakterleri yazdırıyorum s%s. Ben birini koymak #başında sbir satır literal kaldırarak bazı bayt kaydedin.

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.