Zincirleme Programları


26

Meydan okuma

Bu sorun, ilk olarak program, s yazılı olacak 1 p çalıştıran olan programlar sonsuz dizisinin, n çıkışları / program p oluşturur n + 1 . İlk n> = 2 programı birleştirirken, dizinin çıktısı alınmalıdır n.

Örnek

Diyelim ki ilk 4 program:

p1 p2 p3 p4

Eğer koşacak olsaydım, p1çıktısı:

p2

Eğer koşacak olsaydım, p1p2çıktısı:

2

Eğer koşacak olsaydım, p1p2p3p4çıktısı:

4

Eğer koşacak olsaydım p4, sıradaki bir sonraki programı oluşturmalı:

p5

puanlama

Puanınız ilk 10programların bayt sayısıdır .


Diziler Will p1p2p3...hep itibaren uzakta olmak p1 için pn ?
Moose

@Moose Evet, her zaman p1'den pn'ye kadar olacaktır.
Downgoat

5
Bu ilginç bir problem. Program dizisi yeterince kolaydır; zincirleme daha zordur.
Conor O'Brien,

Dosyalara erişime izin var mı?
Lynn,

@Mauris Evet, ancak dosyanın içeriğinin ve adının bayt sayısı, kullanıldığı her program için toplam bayt sayımında sayılmalıdır.
Downgoat

Yanıtlar:


49

Pyth, 12

p1:

l"1

p2: 1

p3: 1

vb..

p1p2p3:

l"111 

Çıktı: 3

Açıklama:

l        length
 "1      string "1"

İlk çalıştırmada, bu tek karakterli bir dizgenin uzunluğunu verir 1,. Bu aynı zamanda, 1tekrar çıktısını alan geçerli bir Pyth programıdır . Bu nedenle, pn + 1 her zaman 1. Programlar zincirlendiğinde, p1zincirleme programların uzunluğunu gösterir n.


9

Lua, 950 900 bayt

s=io.open(arg[0]):read()if#s<95 then print(s)do return end end print(#s/90) do return end;

Ungolfed:

s=io.open(arg[0]):read'*a'
if #s < 96 then 
    print(s)
    do return end 
end 
print(#s/90) 
do return end;

Açıklama:

İlk satır programın bütün kaynağını kapar. Sonra tüm programın uzunluğunu tek bir programın uzunluğunun 1 + ile karşılaştırıyoruz. Eğer mevcut programın boyutu bu değerden daha küçükse, kaynak basılır, ki bundan sonraki program olan p2, biz çıktık. Her yineleme sadece bir yüzdür. Bunlardan birkaçı bir araya getirildiğinde, koşullu başarısız olur ve birleştirilmiş programın uzunluğunu, birleştirilmiş programların sayısı olan bir programın uzunluğuna bölerek yazdırırız, n.


Farklı bir yöntem kullanmak için +1 (benimkinden). Bu umduğum yaratıcı cevap türü.
Moose

Lua için +1 ve daha soğuksa, diğer cevaplardan daha uzun bir yöntem seçerse: P
cat

Haha, bunu golf oynamayan ve oldukça ayrıntılı bir dille yapmayı başardığım için çok gurur duydum :)
Nikolai97

4

Vitsy , 19 bayt

Burada iplerle uğraşmak değil, metod püf noktaları kullanmak

p1

1ml1-\+N
1

p2

1

p3

1

Öyle, böyle.

Aşağıdaki açıklama:

1ml1-\+N
1m       Execute the first index of lines (the bit with the ones)
  l1-    Get the length minus 1.
     \+  Add them all up.
       N Output as number.

1        Push one to the stack.

Çevrimiçi deneyin!


4

Vitsy , 14 bayt

Pyth ve Jolf cevaplarına benzer şekilde dizeleri eşliyorum. Tek fark, her zaman doğru uzunluğu aldığımdan emin olmak için çizgi sarma özelliklerini kullanmamdır.

p1

'l3-N

p2

1

1'i herhangi bir sayı ile değiştirin .

p3 vb. ile bu kalıbı eşleştirin ve bunu Integer.MAX_VALUEdilin tamsayı kısıtlaması kadar yapabilirsiniz .

Açıklama:

'l3-N
'     Wrap around the line until finding another '. Since no ' is found before the
      End of the line, it wraps around.
 l    Get the length of the stack.
  3-  Subtract three.
    N Output as number.

Çevrimiçi deneyin!


4

Cidden, 15 bayt

İlk program, 6 bayt (yazdırılamaz içerir):

5Ql-.

Hex Dump:

35516c2d2e7f

Bu program yazdırıyor 1: Çevrimiçi deneyin

Programların tümü 1, Pyth cevapları gibi kendini basan geçerli bir program. Orijinal program, kaynak kodunun eksi 5 uzunluğunu yazdırır ve hemen sonlandırılır. 1sonuna eklenen s, kaynak kodun uzunluğunu her defasında 1 bayt artırır, ancak asla çalıştırılmaz.


2

Jolf , 14 bayt

Burada dene!

a-lq4
a      print
  lq   the length of the source code
 -  4  minus 4

Yürütüldüğünde, bu yazdırır 1. Böylece p2 = 1,. Kazançların p2idamesi 1. Herkes için, So N > 1, pN = 1.

Gözlemleyin p1p2: a-1q41. Bu, şunları aktarır:

alert(sub(length("a-lq41"),4));
1;

İlk yazdırmadan sonra örtülü yazdırma devre dışı bırakıldığından 2, kaynak kodun uzunluğu eksi 2 olduğu için bu yazdırılır .


2

Ruby, 318 bayt

p 1 :

x=DATA.readlines.size
_="_=%p;puts _%%_"
puts x>0?x+1:_%_
__END__

Her biri ayrı bir program s i verir , bu tek hat Quine: _="_=%p;puts _%%_";puts _%_.

Bu sorguları p 1'in sonuna eklediğinizde , DATAnesnede çizgiler olarak bitirler çünkü büyünün altındadırlar __END__.

İşte bir test:

$ ruby chain.rb                                    # running p1
_="_=%p;puts _%%_";puts _%_

$ ruby -e '_="_=%p;puts _%%_";puts _%_'            # running p2
_="_=%p;puts _%%_";puts _%_

$ ruby -e '_="_=%p;puts _%%_";puts _%_'            # running p3
_="_=%p;puts _%%_";puts _%_

$ # Concatenating p2 and p3 to p1:
$ ruby -e '_="_=%p;puts _%%_";puts _%_' >> chain.rb
$ ruby -e '_="_=%p;puts _%%_";puts _%_' >> chain.rb

$ ruby chain.rb                                    # running p1p2p3
3

Birleştirilen ilk on program şöyle görünür (318 bayt):

x=DATA.readlines.size
_="_=%p;puts _%%_"
puts x>0?x+1:_%_
__END__
_="_=%p;puts _%%_";puts _%_
_="_=%p;puts _%%_";puts _%_
_="_=%p;puts _%%_";puts _%_
_="_=%p;puts _%%_";puts _%_
_="_=%p;puts _%%_";puts _%_
_="_=%p;puts _%%_";puts _%_
_="_=%p;puts _%%_";puts _%_
_="_=%p;puts _%%_";puts _%_
_="_=%p;puts _%%_";puts _%_

1

C #, 2099 + 7 = 2106 bayt

İlk program (derleyici bayrağını kullanır /main:A):

class A{static void Main(){int a=System.Reflection.Assembly.GetEntryAssembly().GetTypes().Length;var b=@"class A{0}{{static void Main(){{var a=@""{1}"";System.Console.Write(a,{0}+1,a.Replace(""\"""",""\""\""""));}}}}";System.Console.Write(a>1?"{2}":b,0,b.Replace("\"","\"\""),a);}}

İkinci program:

class A0{static void Main(){var a=@"class A{0}{{static void Main(){{var a=@""{1}"";System.Console.Write(a,{0}+1,a.Replace(""\"""",""\""\""""));}}}}";System.Console.Write(a,0+1,a.Replace("\"","\"\""));}}

Üçüncü program:

class A1{static void Main(){var a=@"class A{0}{{static void Main(){{var a=@""{1}"";System.Console.Write(a,{0}+1,a.Replace(""\"""",""\""\""""));}}}}";System.Console.Write(a,1+1,a.Replace("\"","\"\""));}}

Kaptın bu işi.


0

Javascript ES6, puan 483 455

Program 1, 77 bayt:

v=1;setTimeout(_=>alert(v>1?v:'a=_=>this.v?v++:alert("a="+a+";a();");a();'));

Program 2 ve daha üstü, her biri 42 bayt:

a=_=>this.v?v++:alert("a="+a+";a();");a();

0

PHP, 1470 bayt

Program 1: 219 bayt:

class O{public$n=1;function __destruct(){echo($n=$this->n)>1?$n:'if(!$o->n++)echo str_replace(chr(9),$a=aWYoISRvLT5uKyspZWNobyBzdHJfcmVwbGFjZShjaHIoOSksJGE9CSxiYXNlNjRfZGVjb2RlKCRhKSk7,base64_decode($a));';}}$o=new O();

progam 2 ve daha fazlası 139 bayt:

if(!$o->n++)echo str_replace(chr(9),$a=aWYoISRvLT5uKyspZWNobyBzdHJfcmVwbGFjZShjaHIoOSksJGE9CSxiYXNlNjRfZGVjb2RlKCRhKSk7,base64_decode($a));

gibi kullanın:

php -r "class O{public$n=1;function __destruct(){echo($n=$this->n)>1?$n:'if(!$o->n++)echo str_replace(chr(9),$a=aWYoISRvLT5uKyspZWNobyBzdHJfcmVwbGFjZShjaHIoOSksJGE9CSxiYXNlNjRfZGVjb2RlKCRhKSk7,base64_decode($a));';}}$o=new O();"

Burada ayrıntılı php quine tekniği biraz golf sürümü kullanır: http://10types.co.uk/the-lab/a-minimal-php-quine/

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.