Masz stworzyć program, który tworzy nieskończenie dokładne klony, dopóki się nie zatrzyma. Cokolwiek jest w oryginalnym programie, musi znajdować się w klonach. Innymi słowy, klony i oryginalny program są takie same pod każdym względem, z tym wyjątkiem, że klony nie muszą znajdować się w tym samym typie pliku, co kod źródłowy (mogą to być pliki tekstowe).
Przykład:
Jeśli mój oryginalny program to:
for i in range(0, 10):
print i
klon musi być również:
for i in range(0, 10):
print i
Zasady i wyjaśnienia:
Standardowe luki są zabronione
Klony muszą być dokładną kopią oryginału
Klony muszą być czytelnymi plikami, które można uruchomić, jeśli zostaną umieszczone w poprawnym tłumaczu
Program może odczytać własny kod źródłowy
Wszystkie klony muszą być osobnymi plikami
Wydrukowanie programu jest niedozwolone
Nazwy plików liczą się do liczby bajtów
Klony nie muszą znajdować się w tym samym katalogu co plik źródłowy ani nie mogą mieć tej samej nazwy pliku
Powinno być możliwe utworzenie co najmniej 1000 klonów
Zwycięski:
Najmniej bajtów wygrywa!
źródło
yes `<$0`|split -1
znacznie lepiej, ale to podwaja liczbę bajtów ...Partia, 32 bajty
Nie używasz,
@
ponieważ nie ma ograniczeń dotyczących STDOUT.%1
domyślnie jest to pusty ciąg, więcn
staje1
się pierwszy raz i zwiększa się przy każdym przejściu. Alternatywnie może to działać dla 28 bajtów, ale nie mam pojęcia, jak losowy%random%
jest w rzeczywistości, gdy jest używany w następujący sposób:źródło
%random%
opiera się na bieżącym czasie i może wygenerować wszystko od 0 do czegoś nieco powyżej 32 000.%random%
jest zmienną, która po uzyskaniu dostępu zwraca liczbę losową, jak wspomniano w @ user2428118.Grzmotnąć,
25,16,12, 11 bajtówEDYCJE:
$!
jako nazwy pliku (będzie ponownie używany co ~ 32k plików, ale jest to teraz dozwolone), -4 bajtyGrał w golfa
Wyjaśniono
Ponownie spawnuje się jako zadanie w tle z &, przed zrobieniem kopii, więc każda iteracja będzie działać pod własnym PID.
Używa PID ostatniego zadania jako nazwy pliku.
Może to działać nieskończenie (lub aż do zatrzymania), ale będzie ponownie wykorzystywać nazwy plików klon ok. co ~ 32k iteracji.
Zabijanie może być trochę nieprzyjemne, ale AFAIK nie jest niezgodny z zasadami.
Wypróbuj online!
źródło
&
. tio.run/nexus/bash#VY5BS8NAEIXP7q943W5tq6QpelMRRCIIGg/…Rubinowy,
78 bajtów,7743 + 4 (nazwa pliku: a.rb) = 47 bajtów43 bajty + nazwa / Dzięki @Alexis O wiele krócej !!!
to jest tak golfa, jak myślę, że będzie
73 bajty + nazwa / Podziękowania dla @Alexis Anderson
74 bajty + nazwa
To moja pierwsza odpowiedź w języku Ruby, więc wszelkie poprawki są mile widziane.
źródło
sh, 24 bajty
źródło
C #,
104102 bajtów-2 bajty dzięki berkeleybross
Nie, to nie jest najkrótsze. Ale to C #. Czego oczekiwałeś?
źródło
File.Copy
. Zmiana na pętlę for, aby można było wstawić deklarację int i usunąć1>0
część. I pre zwiększamyi
wFile.Copy
oświadczeniu, że daje 86 bajtów wierzę:class P{static void Main(){for(int i=0;;)System.IO.File.Copy("c.cs","c"+ ++i+".cs");}}
c.cs
nie będzie w katalogu wyjściowym i trzeba go tam skopiować ręcznie. Jak to działa?$"c{++i}.cs"
2 bajty krótszej niż"c"+ ++i+".cs"
Przetwarzanie, 55 + 5 (nazwa pliku) = 60 bajtów
Nie wiem, czy nazwa pliku liczy się jako dodatkowe bajty
Prawie seria wbudowanych elementów połączonych razem
Wyjaśnienie
źródło
ForceLang + moduł ForceLang-JS , 162 bajty
źródło
Python 2, 54 bajty
źródło
import sys
?Mathematica, 41 bajtów
Pełny program Kopiuje swój własny do pliku źródłowego
0
,1
,2
, itd. W bieżącym katalogu.źródło
PHP,
9160 bajtówZaoszczędzono 31 bajtów dzięki manatwork
Zastosowanie:
$ php f.php
klonyf.php
i odtwarzając jego kod nieskończenie sama w nazwach takich jak1
,2
,3
... aż do czasu zakończenia.Poprzednia wersja:
Zastosowanie:
$ php f.php
klonyf.php
i jego kod odtwarzający nieskończenie sama lubięf1.php
,f2.php
,f3.php
...f(n).php
, aż timeout.źródło
<?for(;;)file_put_contents(++$i,file_get_contents("f.php"));
awk, 29 (21) bajtów,
awk nie jest tak naprawdę narzędziem do tego, ponieważ wymaga ono
close()
działania w nieskończoność. W przeciwnym razie wszystko, co tworzy, to puste pliki.Jeśli liczba klonów miała limit, na przykład 5:
program miałby 21 bajtów.
Wklej program do pliku
a
i uruchom:źródło
Python, 69 bajtów
Próbowałem użyć
a
nazwy pliku, ale (co nie jest zaskoczeniem) system Windows nie lubi plików o nazwiea=open(__file__).read()\ni=0\nwhile 1:i+=1;open(
i+'.py','w').write(a)
. Próbowałem także:Daje mi to jednak błąd:
Tworzy 83 pliki, ale to nie jest nawet blisko potrzebnego 1000.
Jeśli chcesz usunąć te pliki, możesz użyć tego:
źródło
RBX.Lua, 14 bajtów
CZY TO JEST NAWET SYSTEMU PLIKÓW, NIE WIEM
Klony same. Gdy się pojawi, uruchamia się ponownie, zapewniając automatyczną rekurencję.
źródło
JavaScript ES6 34 bajty
Nie jestem pewien, czy to się liczy, ale tutaj:
źródło
Python 2, 61 bajtów (unix) 65 (wieloplatformowy)
Unix - 61 bajtów
Na unixie cp jest to systemowa kopia pliku - polecenie. Używanie konsoli przez popen pozwala mi skopiować plik przez cp. nowe pliki pojawią się w katalogu starych plików.
CrossPlatform - 65 bajtów
Działa, ponieważ domyślnie otwarty umożliwia czytanie.
Funfact: wymienić
1:i+=1
zi:i-=1
i zatrzyma przy I kopii.Poza tym nie widzę sposobu, aby był krótszy niż @muddyfish.
źródło
C, 80 bajtów
Drukuje się, dopóki go nie zabijesz. Po prostu standardowa Quine C z nieskończoną pętlą.
źródło