Приєднання програм


26

Виклик

У цьому виклику ви будете писати першу програму, p 1 , нескінченної послідовності програм, в якій запуск p n виходів / генерує програму p n + 1 . При об'єднанні перших n> = 2 програм послідовність повинна виводитися n.

Приклад

Скажімо, перші 4 програми:

p1 p2 p3 p4

Якби я бігав p1, він повинен вивести:

p2

Якби я бігав p1p2, він повинен вивести:

2

Якби я запустив, p1p2p3p4він повинен вивести:

4

Якщо я запускався p4, він повинен генерувати наступну програму в послідовності:

p5

Оцінка балів

Ваш бал - це кількість байтів перших 10програм.


Чи p1p2p3...завжди послідовності будуть від p1 до pn ?
Лось

@Moose Так, це завжди буде від p1 до pn.
Пуховик

5
Це цікава проблема. Послідовність програм досить проста; ланцюжок складніше.
Conor O'Brien

Чи дозволений доступ до файлів?
Лінн

@Mauris Так, але кількість байтів вмісту файлу та ім'я файлу необхідно зараховувати до загального підрахунку байтів для кожної програми, в якій він використовується.
Downgoat

Відповіді:


49

Піта, 12

p1:

l"1

p2: 1

p3: 1

тощо.

p1p2p3:

l"111 

Вихід: 3

Пояснення:

l        length
 "1      string "1"

При першому запуску, це виводить довжину одного рядка символів, 1. Це також є дійсною програмою Pyth, яка виводить 1знову. Тому pn + 1 є завжди 1. Коли програми є ланцюговими, p1виводить довжину ланцюгових програм, яка буде n.


9

Луа, 950 900 байт

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

Безголівки:

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

Пояснення:

Перший рядок захоплює все джерело програми. Потім ми порівнюємо довжину всієї програми до 1 + довжину однієї єдиної програми. Якщо розмір поточної програми менший за це значення, тоді друкується джерело, яке є наступною програмою, p2, і ми виходимо. Кожна ітерація - це лише квітка. Коли декілька з них складені разом, умовне виходить з ладу, і ми роздруковуємо довжину об'єднаної програми, поділену на довжину однієї програми, яка становить кількість об'єднаних програм, n.


+1 за використання іншого методу (ніж мій). Це тип творчої відповіді, на яку я сподівався.
Лось

+1 для Lua і вибираючи кулер, якщо більш тривалий метод, ніж інші відповіді: P
кішка

Ха-ха, дякую, я був дуже гордий, що мені вдалося це зробити з негромадянською та досить багатослівною мовою :)
Nikolai97

4

Віци , 19 байт

Тут не маємо справу з рядками, а використовуємо прийоми методів.

р1

1ml1-\+N
1

р2

1

p3

1

Так далі, так далі.

Пояснення нижче:

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.

Спробуйте в Інтернеті!


4

Віци , 14 байт

Подібно до відповідей Піта та Джольфа, я картографую рядки. Єдина відмінність полягає в тому, що я використовую функції обгортання ліній, щоб переконатися, що я завжди отримую потрібну довжину.

р1

'l3-N

р2

1

Замініть 1 будь-яким єдиним номером.

p3 і так далі відповідають цій схемі, і ви можете робити це до Integer.MAX_VALUEцілочисленного обмеження мови.

Пояснення:

'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.

Спробуйте в Інтернеті!


4

Серйозно, 15 байт

Перша програма, 6 байт (містить недрукований):

5Ql-.

Шестнадцятковий дамп:

35516c2d2e7f

Ця програма друкує 1: спробуйте в Інтернеті

Решта програм - 1це дійсна програма, яка друкує себе так само, як відповідь Pyth. Оригінальна програма друкує довжину її вихідного коду мінус 5 і негайно припиняється. 1s додані до кінця збільшують довжину вихідного коду на 1 байт кожен раз, але ніколи не виконуються.


2

Джольф , 14 байт

Спробуйте тут!

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

При виконанні це друкує 1. Таким чином, p2 = 1. Виконання p2врожайності 1. Таким чином, для всіх N > 1, pN = 1.

Зауважимо p1p2: a-1q41. Це перекладається на:

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

Оскільки неявна друк відключена після першого друку, вона друкується 2, оскільки довжина вихідного коду мінус 4 становить 2. І вмикається, і вмикається.


2

Ruby, 318 байт

p 1 :

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

Кожна окрема програма р я виводить цю одну рядок Quine: _="_=%p;puts _%%_";puts _%_.

Коли ви додаєте ці лайки в кінці p 1 , вони закінчуються як рядки в DATAоб'єкті, оскільки вони нижче магії __END__.

Ось тест:

$ 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

Десять об'єднаних перших програм виглядають приблизно так (318 байт):

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 байт

Перша програма (використовує прапор компілятора /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);}}

Друга програма:

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("\"","\"\""));}}

Третя програма:

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("\"","\"\""));}}

Ви отримуєте ідею.


0

Javascript ES6, оцінка 483 455

Програма 1, 77 байт:

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

Програма 2 і далі, 42 байти кожен:

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

0

PHP, 1470 байт

Програма 1: 219 байт:

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 і більше 139 байт:

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

використовувати як:

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();"

Використовує трохи гольф-версію технікою php quine, детально описаною тут: http://10types.co.uk/the-lab/a-minimal-php-quine/

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.