Girdiyi içeren bir sorgu yazdırın


15

Görev

Yalnızca karakterlerinden oluşan girişine bir dize verilecektir aüzere z, giriş regex eşleşir yani /^[a-z]*$/.

Çıktınız, aynı dilde, kaynak kodu girdiyi içeren ve uygun bir alıntı olan eksiksiz bir program olmalıdır.

Misal

Programınız girdi abcve çıktı alır:

...abc...

Yukarıdakiler, aynı dilde hiçbir girdi ve çıktı almayan tam bir program olmalıdır:

...abc...

yani kendi kendini üretir.

puanlama

Bu . Bayt cinsinden en kısa cevap kazanır.

Referanslar


3
Hmm .. Yani 'quat' (quine + cat) gibi mi?
Matthew Roh

Yanıtlar:


7

Python 3, 57 61 bayt

lambda x:"s='s=%r;print(s%%s)';print(s%s)".replace('s',x+'x')

Buradan temel bir python 3 sorgusu alır ve değişken adını girdi ile değiştirir.

Not: Hyper Neutrino tarafından yorumlarda belirtildiği gibi for, bu if, vb. Gibi ayrılmış anahtar kelimeler için çalışmaz .

Ayrılmış anahtar kelimelerin hiçbirinin 'x'veya herhangi bir sayı ile bitmeyen bir karakter eklemek bunu düzeltir. (Ørjan Johansen).


Değişken adını kullanmak için çok yaratıcı.
Leaky Nun

3
Giriş "for"veya Python'da ayrılmış herhangi bir sözcük için çalışmaz .
HyperNeutrino

Onaylayabilir. Tüm olası girişler için çalışmaz. Çevrimiçi deneyin
mbomb007

@HyperNeutrino, Noted, ayrıca nasıl dolaşmak hakkında hiçbir fikrim yok
c ..

Gibi herhangi bir anahtar kelimenin sonunda olmayan fazladan bir karakter ekleyebilirsiniz 'x'.
Ørjan Johansen

6

Jöle , 9 bayt

Jeneratör

;“¶Øv”ṾØv

Çevrimiçi deneyin!

Nasıl çalışır

;“¶Øv”ṾØv  Main link. Argument: s (string of letters)

;“¶Øv”     Concatenate s and the string "\nØv".
      Ṿ    Uneval; get its string representation.
           (implicit) Print the previous return value since the next link is an
           otherwise unparsable nilad.
       Øv  Set the return value to "Ṙv".

Quine

Giriş ise quine, aşağıdaki program oluşturulur.

“quine
Øv”Ṙv

Çevrimiçi deneyin!

Nasıl çalışır

Bu standart Jelly quine. İlk,

“quine
Øv”

sol argümanı ve dönüş değerini dizeye ayarlar "quine\nØv".

Ardından, bir dize temsili yazdırır (önceki bloktaki kod) ve değiştirilmemiş dizeyi döndürür.

Daha sonra, vsol argümanı alır ve Jelly programına girdi olarak iletir

quine
Øv

Tüm Jelly programlarında, yalnızca ana bağlantı (son satırda tanımlanır) yürütülür, bu nedenle ilk satır tamamen yok sayılır.

Son olarak, dış program bittiğinde örtük olarak yazdırılan Øvdönüş değerini olarak ayarlar "Ṙv".



4

Haskell , 51 bayt

q bir dize alır ve bir dize döndürür.

q s|t<-"main=putStr$fst`mappend`show$"=t++show(t,s)

Çevrimiçi deneyin!

Örnek çıktı putStr$q"test":

main=putStr$fst`mappend`show$("main=putStr$fst`mappend`show$","test")

Çevrimiçi deneyin!

  • Ana tırnak metnini ve istenen dizeyi bir demet içine koyar.
  • Kullanımları fstana metin ayıklayın.
  • Kullanımları showbir dizeye bütün tuple açın.
  • Kullanımları mappendönceki iki fonksiyonları birleştirmek. Uygun mappendşekilde iki işlevde, her işlevi bağımsız değişkenine uygulayan ve sonuçları mappendsonuç türü (burada dize birleştirme) ile birleştiren bir işlev verir .

4

Düşük yük , 14 bayt

(~aSaS(:^)S):^

Çevrimiçi deneyin!

(test)(~aSaS(:^)S):^Kendisi bir quine olan - olarak kullanın .

Nasıl çalışır

  • Düşük yük, birleştirici (yığın tabanlı) ezoterik bir dildir. Okuma girişini desteklemediğinden, başlangıçta yığına herhangi bir argüman konur.
  • (test)ve (~aSaS(:^)S)dizgi değişmezleridir, bu yüzden kendilerini üst üste gelecek şekilde yığına yerleştirin.
  • :(~aSaS(:^)S)dizeyi yığının en üstüne kopyalar , ardından ^içeriğini bir alt program olarak çalıştırır.
  • ~üstteki iki öğeyi yığının içinde değiştirir, bu yüzden şimdi (test)en üstte.
  • asarar (test)ekstra parantez içinde.
  • Sdizeyi ((test))yığının üstüne alır ve dış parantezler olmadan yazdırır (bunlar sadece gerçek sözdizimidir).
  • Şimdi aSyığınta kalanları (~aSaS(:^)S)benzer şekilde yazdırır (parantez ile).
  • Sonunda (:^)Sfinali yazdırır :^.

)(Bence bu girdi olarak işe yaramıyor .
Rɪᴋᴇʀ

@Riker True, Underload maalesef uyumsuz parantezleri desteklemiyor. Ama soru a- z.
Ørjan Johansen

Ah tamam. Fark etmedim.
Rɪᴋᴇʀ

4

Düşük yük , 14 bayt

a(aS(:^)S)~*:^

Çevrimiçi deneyin!

Diğer Underload cevabından farklı bir yaklaşım; kendisi bir kınn olmaktan ziyade, bir kınk inşa eder. İlginçtir, aynı sayıda bayt ortaya çıkıyor. Bu, argümanını yığından alan ve çıktıları standart çıktıya alan bir işlevdir.

açıklama

a(aS(:^)S)~*:^
a               Generate a string literal containing the input
 (aS(:^)S)~*    Prepend "aS(:^)S"
            :^  Mockingbird: run the resulting function with itself as argument

Ortaya çıkan işlev şöyle görünür:

aS(:^)S(input)
aS              Print a string literal containing the argument
  (:^)S         Print ":^"
       (input)  Push "input" onto the stack

Başka bir deyişle, kendisini içeren bir dize hazır bilgisi yazdırır ve bunu izler :^. Bu açıkça bir kınamaktır (çünkü sadece yazdırılan şey, ilk etapta çalıştırmak için yürüttüğümüz kodla aynıdır).


aTIO'da olduğu gibi, giriş içerdiğinde stderr'e yazdırılan segmentasyon hatası hatasının sakıncası yoksa, ilkini bırakabilirsiniz a.
Ørjan Johansen

Sadece kullanıcının verdiği dize hazır bilgisini yürütmeyi bile düşünmedim, programın çalışması o noktada zaten bitmişti (ve girişte görünen bir karakter olmadan , tüm programlar mutlaka hiçbir şey yapmayacak veya çökmeyecek. Bunun TIO'ya özgü olduğunu bile düşünmüyorum; program geçersiz, ancak çöktüğü anda istenen çıktı zaten üretildi.

2

V , 9 bayt

ñ"qPxÉÑ~j

Çevrimiçi deneyin!

Bu standart V kininin bir modifikasyonudur ve bunun sadece bir bayt daha uzun olmasıyla gurur duyuyorum.

HexDump:

00000000: f122 7150 78c9 d17e 6a                   ."qPx..~j

Açıklama:

ñ           " Record the following commands into register 'q'
 "qP        " Paste register 'q' before all input
    x       " Delete the last character of what we just pasted (this will be a 'ÿ')
     ÉÑ     " Insert 'Ñ' at the beginning of this line
       ~    " Toggle the case of this character
        j   " Move down a line. During playback, this will cancel playback of the current macro,
            " So everything after here is a NOOP

Ardından, kayıt dolaylı olarak durur ve oynatılır. Bu, aşağıdaki çıktıyı üretecektir:

ñ"qPxÉÑ~jHello

Yana jmakro oynatma kıracak, hiçbir şey Helloşimdiye kadar çalışacak alacak.


2

Python 2, 38 bayt

Giriş yalnızca desteklemek için gerekli olsa da a-z, bu NUL bayt içermeyen tek satırlı girişlerle çalışmalıdır.

s='s=%r;print s%%s#'+input();print s%s

Çevrimiçi deneyin

Giriş abciçin elde edilen quine:

s='s=%r;print s%%s#abc';print s%s#abc

Çevrimiçi deneyin


1

RProgN 2 , 15 bayt

"{']C'.%q[}]C"F

Açıklaması

Biçimi kullanma

{']C'.%q[}]C}

%qQouted girdi nerede , lezzetin bir quine oluşturur

{']C'."Some Text"[}]C

Bu standart bir RProgN2 quine, Bitirmeden {']C'.}]Cönce girilen dizeyi ekler ve yok eder.

Çevrimiçi deneyin!


1

Retina , 14 bayt

Bayt sayımı ISO 8859-1 kodlamasını varsayar.

\(\`^
¶\(*S1`|

Çevrimiçi deneyin!

Giriş için xbu çıktı:


\(*S1`|x
\(*S1`|x

açıklama

Çıktı, standart kinin küçük bir modifikasyonudur . Biz sadece |xboş normal ifade yerine normal ifadeyi kullanıyoruz. Yana |hala izin verir (ve öncelik olarak) ve boş maç, işlevsellik kendisi etkilenmez, ve o zamandan beri xsadece hiç harf içerecektir, geçerli regex sözdizimi kendisi olmak için garantisi yoktur.

Bunu yazdırmak aslında kinin kendisine benzer bir teknik kullanır. Ayının çoğaltılmasını önlemek ¶\(*S1`|için dizenin başına yalnızca bir kez ekleriz . Bu, kaynak kodun tam yarısı. Satır besleme olmadan iki kez yazdırmak için \(\, tüm programı bir gruba saran ve hem sahnenin kendisini hem de onu içeren grubu sonucu satır besleme olmadan bastıran yapılandırmayı kullanırız .


1

Japt , 14 bayt

"\"iQ ²ª`"+U ²

Çevrimiçi test edin! Girişi için abc, çıkışlar

"iQ ²ª`abc"iQ ²ª`abc

bu da kendi çıktısını verir. Çevrimiçi test edin!

açıklama

Bu, standart taşıma kapasitesi özellikli Japt quine'nin bir uzantısıdır:

"iQ ²"iQ ²

"iQ ²"      // Take this string.  iQ ²
      iQ    // Insert a quote.    "iQ ²
         ²  // Repeat this twice. "iQ ²"iQ ²
            // Implicit: output result of last expression

Tek fark, ª`abcsonunda JavaScript'te temelde olan eklediğimizdir ||"abc". İlk bölümün sonucu her zaman boş olmayan bir dize (doğru) olduğundan, ||asla çalıştırılmaz.

Aynı uzunlukta birkaç alternatif versiyon vardır:

"iQ ²ª`abc"iQ ²ª`abc   quine||"abc"
"iQ ²ª$abc"iQ ²ª$abc   quine||abc
"iQ ²ª{abc"iQ ²ª{abc   quine||function(){ ... }
"iQ ²ªXabc"iQ ²ªXabc   quine||X.a(...) (X could be any uppercase letter or digit)
"iQ ²//abc"iQ ²//abc   quine//abc      (// is a comment in JS/Japt)
"iQ ²;[abc"iQ ²;[abc   quine;          (unmatched [ causes a parsing error)

0

CJam , 16 14 bayt

"`_~"q`';++`_~

Çevrimiçi deneyin!

Nasıl çalışır

"`_~"           e# Push "`_~"
     q`         e# Push a string representation of the input (input wrapped in quotes)
       ';       e# Push a semicolon
         ++     e# Concatenate all this together
           `    e# Get the string representation of the resulting string
            _~  e# Duplicate it and eval it (pushing the original string on the stack again)

Hangi gibi bir şey çıktı "`_~\"test\";"`_~"test";.



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.