Bir Program Daha ve Ben Çıktım!


21

Olumlu bir tamsayı iç içe geçme düzeyi nve syazdırılabilir ascii karakterleri dizisi verilirse ( için ~, aynı dilde çalıştırıldığında, dizeyi çıkaran bir program çıktısı veren bir program çıktısı veren bir program çıkar.) s.

Her biri ncevabınız ile aynı dilde yürütülecek toplam program üretilmelidir.

Not: programları veya işlevleri çıkarabilirsiniz - varsayılan olarak gönderim olarak izin verilen bir şey.

Sen girdi may skaçan karakterlerle nasıl dilinize olur genelde girdi bir dize bir program veya fonksiyon.


Örnek

Örneğin, verilen n=1ve s="recursion"bir Python 2 programı çıktı verebilir:

print "recursion"

Bunu çalıştırmak çıktı verir:

recursion

Verilen n=2ve s = "PPCG", bir Python 2 programı çıktı verebilir:

print "print \"PPCG\" "

Bu çıktıların çalıştırılması:

print "PPCG"

Bu çıktıların çalıştırılması:

PPCG

İlgili (+ başlık ilham): Bir tane daha LUL ve ben yokum

: - (şimdi silinmiş ama hala yeterli bir üne sahip izlenebilir sanal alanında) Ayrıca İlgili Kaynak Kodu Özyineleme

Test Kılıfları

Kodunuzun aşağıdaki test durumları için çalıştığından emin olun (her satıra bir tane):

n s
2 PPCG
4 Robert'); DROP TABLE Students;--
17 Deep
2 Spaces In Here
3 "Don't forget quotes!"
5 'Backt`cks might be a h`tch'
6 5%s
8 [Brackets]<Are>(Great){Usually}
3 !"#$%&'()*+,-./ 0123456789:;<=>?@ABCDEFGHIJKLMN
6 OPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
7 THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG
3 the quick brown fox jumps over the lazy dog
code-golf  recursion  code-golf  kolmogorov-complexity  board-game  code-golf  number-theory  polynomials  code-golf  code-golf  array-manipulation  polyglot  alphabet  answer-chaining  code-golf  sequence  math  atomic-code-golf  abstract-algebra  proof-golf  code-golf  internet  code-golf  internet  code-golf  ascii-art  kolmogorov-complexity  code-golf  math  ascii-art  number  integer  code-golf  decision-problem  binary-matrix  code-golf  number  sequence  number-theory  code-golf  math  decision-problem  matrix  abstract-algebra  code-golf  string  keyboard  code-golf  fractal  code-golf  math  sequence  combinatorics  hello-world  vim  code-golf  sequence  code-golf  graphical-output  image-processing  code-golf  decision-problem  matrix  linear-algebra  code-golf  ascii-art  code-golf  math  code-golf  ascii-art  graphical-output  code-golf  string  code-golf  string  substitution  code-golf  string  ascii-art  code-golf  arithmetic  code-golf  number  array-manipulation  decision-problem  code-golf  kolmogorov-complexity  code-generation  fractal  code-golf  ascii-art  kolmogorov-complexity  code-golf  ascii-art  code-golf  string  array-manipulation  code-golf  music  code-golf  array-manipulation  code-golf  internet  stack-exchange-api  math  fastest-algorithm  code-golf  binary  bitwise  code-golf  date  code-golf  string  code-golf  sequence  integer  code-golf  arithmetic  number-theory  code-golf  string  random 

1
Mücadeleyi okuyordum ve "hey, bu çok tanıdık geliyor ..." gibiydi ve ardından " Ayrıca İlgili (sandbox'ta): Kaynak Kod İlhamı " nı da Sandbox soruma fark ettim . :) Sorumu şimdilik orada bırakacağım, ancak birkaç hafta sonra sileceğim. Sizinki temelde bir tamsayı parametresi eklenmesi dışında aynıdır.
Kevin Cruijssen

1
Burada önerildiği gibi , programlar yerine adsız işlevler döndürme izni var mı?
Arnauld,

1
"Pozitif tamsayı" içerir 0mi?
Felix Palmen

1
Bir sebep için program seçtiniz mi? Varsayılan fonksiyon veya program? İşlev yazdırma işlevine sahip olma izni var mı?
Kevin Cruijssen

1
@StewieGriffin, alt ifadelerden veya iç içe geçmiş programlardan kaçmak sorunlu olabileceğinden (ve birisi sanal alanda alıntı testi durumları istedi).
fireflame241

Yanıtlar:


19

Jöle , 2 bayt

Ṿ¡

Çevrimiçi deneyin!

Ṿ¡  Main link; left argument (text) is x, right argument (repetitions) is y
 ¡  Repeat y times:
Ṿ   Uneval x; produce code that outputs x

hehe yerleşikleri


Bu kırılmış, "merhaba" merhaba üretir, "merhaba" değil
Tahg

10
@Tahg Jelly girişi, hata atmazsa otomatik olarak Python kodu olarak değerlendirilir. Eğer öyleyse, o zaman sadece bir dize. Yapacak olurdu '"hi"'beklenen sonucunu görmek
HyperNeutrino

19

JavaScript (ES6), 47 44 bayt

@HermanLauenstein sayesinde 3 bayt kaydedildi

Körleme sözdiziminde girdi alır (n)(s).

n=>g=s=>`alert(atob("${btoa(--n?g(s):s)}"))`

Örnek

f(2)('PPCG')

Çıkacak:

'alert(atob("YWxlcnQoYXRvYigiVUZCRFJ3PT0iKSk="))'

Hangi yazdıracak:

'alert(atob("UFBDRw=="))'

Hangi yazdıracak:

'PPCG'

gösteri

alert()Ara sonuçların konsola basılması ve otomatik olarak yürütülmesi için geçersiz kılınan daha karmaşık bir örnek .


Alternatif versiyon, 40 bayt

@Shaggy tarafından önerildi

Bu, tam program yerine adsız bir işlev döndürür.

n=>g=s=>`_=>atob("${btoa(--n?g(s):s)}")`

Kullanmak yerine adsız bir işlev döndürür müsünüz alert? 41 bayt
Shaggy

@Shaggy Gerçekten bilmiyorum. OP'ye sordum.
Arnauld,

Olmazsa, belki 45 bayt yerine IIFE ile kurtulabilirsin.
Shaggy

- Currying kullanarak -3 bayt: n=>g=s=>BTalert(atob("${btoa(--n?g(s):s)}"))BT(BT ile backticks değiştirin)
Herman L

@HermanLauenstein Teşekkürler! :)
Arnauld

10

sh + coreutils, 31 bayt

yes exec sed 1d \$0|sed $1q;cat

Alır nbir komut satırı parametresi olarak ve sSTDIN.


8
Bu kod şöyle diyor: "Evet, kesinlikle beni yürütmeniz gerekiyor."
RedClover 28:17

Bir açıklama ekleyebilir misiniz?
Çalışırken

1
@JoshRagem yeskomut satırını art arda yazdırır exec sed 1d $0(ki $bu bir kabuk meta karakterdir, yani alıntı yapılması gerekir). (yani ) satırlarından sed $1qsonra yazdırmayı durdurur . daha sonra giriş dizesini kopyalar. Sonuçta ortaya çıkan dosya, kabuğa kendisini parametrelerin bir kopyasıyla ve betiğin dosya adıyla değiştirmesini söyleyen bir komut dosyasıdır. daha sonra dosyanın ilk satırını atlar ve gerisini çıkarır. Her komut dosyasının daha az bir öneki vardır, yürütmeden sonra yalnızca orijinal girdi yazdırılana kadar. $1ncatshsed1dsedexec sed 1d $0n
Neil


5

Haskell, 17 bayt

Bunu yazdığımda, golf oynamaya özgü olmayan bir dilin en kısa cevabı budur .

Bu, bu sıralamayı alan sve alan ve ndeğerlendirildiğinde bir sonraki kaynak kodunu döndüren bir ifadenin kaynak kodunu veya sonucunu döndüren bir işlevdir .

(!!).iterate show

Bunun neden önemli olduğuna dair argüman:

  1. Çözümler fonksiyonlara izin verilir.
  2. Çıkışlarının fonksiyon olmasına izin verilir.
  3. Bu fonksiyonların parametresi yoktur.
  4. Haskell'de tembel olduğu ve her şeyin kurumuş olduğu için en doğal olanı - pratik programlama amacıyla - 0 parametreli bir fonksiyonun tanımı, sonucuyla aynıdır; en yakın alternatif olan, parametreyi görmezden gelen 1 parametreli bir işlev aptaldır.

Eğer fverilir PPCGve 2parametreleri olarak, sonuç metindir "\"PPCG\""(ilk oluşturulan fonksiyonu), burada değerlendirildiği döner metin "PPCG"(ikinci oluşturulan işlev) ve değerlendirilmektedir zaman döner PPCG.

Kısalmayı önerdiğiniz için teşekkürler .


Haskell'de tartışmasız fonksiyonlar konusunda ilgili bir Meta sorusu var, ancak henüz çok fazla dikkat çekmedi ve hala açık sorular var: codegolf.meta.stackexchange.com/q/12924/56433
Laikoni

3

APL (Dyalog) , 24 23 bayt

-1 sayesinde ngn.

Bu STDOUT siçin ister ve daha sonra ister nve yazdırır tam bir programdır .

''''{⍺,⍨⍺,⍵/⍨1+⍵=⍺}⍣⎕⊢⍞

Çevrimiçi deneyin! (TIO'nun çıkış sınırını aştığı için 17 Deep case atlandı - çevrimdışı çalışıyor)

istemi s

 verim (ayırmak ve )

''''{… Bu lambda'yı }⍣⎕ sorar nve tek bir alıntı ile uygular ve bu argümanı sol argüman olarak yapar. sol argümanı (alıntı) ve sağ argümanı (giriş metni) belirtir.

⍵=⍺ Metnin bir alıntıya eşit olduğu Boolean

1+ bir tane ekle

⍵/⍨ argümanın her bir karakterini karşılık gelen sayıda tekrarlayın

⍺, teklif vermek

⍺,⍨ teklif eklemek

Bu, APL'deki dizelerin 'sınırlandırılması ve dizelerde tek tırnakların iki katına çıkarılması nedeniyle başka karakterlerin kaçmasına gerek olmadığı için çalışır.


Dyalog APL ayrıca ⎕SE.Dyalog.Utils.repObj, argümanına göre değerlendiren bir APL ifadesi üreten bir yardımcı program ( ) ile birlikte gelir ( Jelly'in ortalamasına benzer ). Bu nedenle, aşağıdaki program yukarıdakilere eşdeğerdir, ancak tüm diziler için çalışır :

SE.Dyalog.Utils.repObj⍣⎕⊢⎕

Çevrimiçi deneyin!


APLX'in "çift alıntı" ve "tek başına alıntı" dizgilerine izin verdiğini düşünüyorum. Gerisi orada çalışırsa, bir bayt kaydedebilirsiniz :) ngn / apl alıştığım halde son zamanlarda "" kaldırdım
ngn

Teklifi .- olarak kabul edin (en azından) bir bayt kazandırır.
ngn

@ngn Teşekkürler, fakat APLX'in dfns'i yok. NARS2000'de hem çift tırnak hem de dfns bulunur, ancak karakterlerin her biri iki bayta mal olur.
Adám

2

Firefox JavaScript, 41 35 bayt

f=(s,n)=>"_=>"+uneval(--n?f(s,n):s)

Firefox'un unevalneye benzediği gibi hoş bir özelliği var - verilen bir nesneyi eşitlemiyor - bu durumda - string.


2

Java 8, 95 93 bayt

String c(String s,int n){return"v->\""+(n-->1?c(s,n).replaceAll("[\\\\\"]","\\\\$0"):s)+'"';}

@Lynn sayesinde -2 bayt .

Özel karakterlerden kaçmak Java'da çok can sıkıcıdır ..

Burada deneyin ve burada çıkan yöntemi deneyin .

Açıklama:

String c(String s,int n){  // Method with String and int parameters and String return-type
  return"v->\""+           //  Return literal "v->" + a leading double-quote +
   (n-->1?                 //   If `n` is larger than 1:
     c(s,n)                //    Recursive-call,
      .replaceAll("[\\\\\"]","\\\\$0")
                           //    with all double-quotes ('"') and slashes ('\') escaped
    :                      //   Else:
     s)                    //    The input String
   +'"';                   //   + a trailing double quote
}                          // End of method 

Regex değişimi için ek açıklama:

.replaceAll("[\\\\\"]","\\\\$0")
.replaceAll("        ","      ")  // Replace the match of the 1st String, with the 2nd
             [      ]             //  One of these inner characters:
              \\\\                //   Escaped slash ('\')
                  \"              //   Escaped double-quote ('"')
                                  //  And replace them with:
                        \\\\      //   Escaped slash ('\'),
                            $0    //   plus found match

Neden tüm bu eğik çizgiler?

\   →  \\       // Escapes a single slash for the regex
\\  →  \\\\     // Escapes both regex-escaped slashes for the String
"   →  \"       // Escapes a double-quote for the String

1
"Bir regex karakter sınıfından kaçman gerektiğini düşünmüyorum , bu yüzden \\\\\"(beş ters eğik çizgi) iyi olmalı.
Lynn

2

Düşük yük , 11 bayt

(a(S)*)~^^S

Çevrimiçi deneyin!

Girdi, yığında başlamalı, sayıları üstündeki kilise rakamı ile başlamalı . Bunun geçerli bir giriş yöntemi olup olmadığını bilmiyorum, ancak belirtimin girişi yok ve girişi yığının en üstüne yerleştirmek, bu tür dillerde kullanılan çok telli bir yöntem gibi görünüyor.



1

QuadR , 8 bayt

Ngn'nin cevabının basit çevirisi .

Alır nargüman olarak ve sInput olarak.

^|'|$
'&

Çevrimiçi deneyin!

PCRE R, tüm örneklerini yerleştirir

^|'|$ Satırın başlangıcı VEYA Alıntı VEYA Satırın sonu

'& Alıntı ve tüm maç ile

Argüman, dönüşümü kaç kez tekrarlayacağını belirtir.


ah, şimdi o dilin ne için olduğunu biliyorum :)
ngn

1

R , 62 bayt

f=function(n,s){"if"(n,{formals(f)$n=n-1;formals(f)$s=s;f},s)}

Çevrimiçi deneyin!

Öyle f(n,s)diyoruz: bir nkopyasını takip ediyor()

Bir adlandırılmış işlev; isimsiz bir işlev döndürür. Öyle şey varsayılan değerlerini değiştirmek olduğunu formalsve fçıkan fonksiyonu (denen, ve sonra sonucu çağrılacak izin nsüreleri). ne zaman nulaşır 0, döndürür s.

R aslında kaçarken çok da kötü değil! Bu sadece, giriş almak değiştirmek zorunda böylece, kaçan C-stili "ile \"ve \ile \\ve daha sonra içinde her şeyi sarın " ".


0

Pyth, 21 bayt

L++NsXbJ,N\\+L\\JNyFz

Burada dene.

Ne yazık ki özyinelemeli işlev (yukarıdaki gibi tam program değil) daha uzun (24 bayt):

M?GgtG++NsXHJ,N\\+L\\JNH



0

Excel VBA (32 Bit), 67 Bayt

Sürüm 32-Bit Excel VBA ile Sınırlıdır, çünkü 2^i32-Bit VBA'da hatasız olarak değerlendirilmektedir, ancak 64-Bit VBA'da değildir

Girdileri aralıklardan alan ve aralarından alan nve anonim VBE acil durum pencere işlevi, yalnızca bir terminale göre değerlendirildiğinde ( yinelemelerden sonra ) yalnızca bu uçbirim olarak çıkan bir anonim işlev çıkarırs[A1][B1]ns

For i=0To[A1-1]:q=q+"?"+String(2^i,34):Next:?q[B1]Replace(q,"?","")

Örnek Giriş / Çıkış

[A1:B1]=Array(7, "PPCG")
For i=0To[A1-1]:q=q+"?"+String(2^i,34):Next:?q[B1]Replace(q,"?","")
?"?""?""""?""""""""?""""""""""""""""?""""""""""""""""""""""""""""""""?""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""PPCG"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
?"?""?""""?""""""""?""""""""""""""""?""""""""""""""""""""""""""""""""PPCG"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
?"?""?""""?""""""""?""""""""""""""""PPCG"""""""""""""""""""""""""""""""
?"?""?""""?""""""""PPCG"""""""""""""""
?"?""?""""PPCG"""""""
?"?""PPCG"""
?"PPCG"
PPCG
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.