Powinieneś napisać program lub funkcję, która N
jako wartość wejściową przyjmuje dodatnią liczbę całkowitą i wypisuje pierwsze N
znaki kodu. Jeśli N
jest większa niż długość kodu, powinieneś cyklicznie wypisywać kod.
Czytanie kodu źródłowego w jakikolwiek sposób i czytanie z pliku, standardu itp. Jest niedozwolone.
Przykłady
(zakładając, że masz kod yourcode
)
Dane wejściowe => Dane wyjściowe:
5
=> yourc
10
=> yourcodeyo
22
=>yourcodeyourcodeyour
Wyjaśnienie
Twój program powinien mieć co najmniej 1 bajt.
Odpowiedzi:
Python 2, 61 bajtów
Wypróbuj online!
źródło
> <> , 49 bajtów
Połowa kodu konwertuje dane wejściowe z ciągu na wartość int. Jeśli wolno nam zamiast tego użyć punktu kodowego pojedynczego znaku odczytanego ze STDIN, wówczas ten program byłby znacznie krótszy przy 21 bajtach:
Wyjaśnienie
Dla wyjaśnienia użyję drugiego programu.
'
rozpoczyna parsowanie ciągów, wypychając każdy znak, aż do znalezienia cytatu zamykającego. Ponieważ reszta linii nie ma'
cudzysłowu, każdy znak oprócz początkowej'
jest wypychany na stos.Ale> <> to toroidalny język 2D, więc po przekroczeniu linii wskaźnik instrukcji wraca do początku, uderzając
'
ponownie i przerywa parsowanie łańcucha. Rezultat jest taki, że wypchnęliśmy wszystko, co niezbędne, z wyjątkiem wstępnego cytatu, a mianowicie'
jest ASCII 39, więc popychamy początkowy cytat, popychając3d* = 3*13 = 39
. Następnie przesuwamy stos w prawo (}
) i wstecz (r
), dając:Teraz wszyscy jesteśmy przygotowani do rozpoczęcia drukowania.
i
czyta znak wejściowy, ale znaki> <> są w zasadzie liczbami całkowitymi. W pierwszym programiei
zamieniono go na pętlę, która konwertuje ciąg cyfr ze STDIN na liczbę całkowitą.Następnie wykonujemy następującą pętlę, aby wydrukować pierwsze N znaków:
źródło
CJam,
34 1716 bajtówMożna w to dużo grać w golfa ..
Rozszerzenie kodu :
Na koniec wszystko na stosie jest automatycznie drukowane do STDOUT
Wypróbuj online tutaj
źródło
Python 2, 117 bajtów
Protokół życia: nie wykonuj
list(itertools.cycle(x))
. Z jakiegoś powodu nie wyobrażam sobie, dlaczego powoduje awarię tłumacza.źródło
itertools.cycle()
jest nieskończonym generatorem, więc jeśli twój komputer nie ma nieskończonej pamięci, będziesz mieć problemy :)JavaScript (ES6),
655250474139Używa ES6
repeat()
do klonowania kodu, a następnie wycina. Używa zakodowanej długości.Stara wersja (50):
Tworzy funkcję
q
, biorąc pojedynczy parametr.Ciąg znaków tekstu funkcji i rekurencyjnie wywołuje funkcję, jeśli
n
jest większa niż długość tekstu. W przeciwnym razie zwraca podłańcuch tekstu.Wersja inna niż ES6 (65):
źródło
.repeat
, ponieważ wymagania cykliczne były po prostu genialne.repeat()
umożliwiło mi wycięcie go, więc użyłem tego zamiast tego./39+1
? dlaczego nie zostawić wystarczająco długiego sznurka?q=n=>('q='+q).repeat(n).slice(0,n)
działa dobrze na firefoxJ - 24 char
Pobiera jeden dodatni argument liczby całkowitej i wyrzuca ciąg.
J nie ma żadnych sztuczek z odniesieniami do siebie, więc robimy to po prostu jak na dłoni. Wyjaśnione przez wybuch:
Diadyk
$
Operator w J cyklicznie pobiera elementy z prawego argumentu, aby dopasować go do wymiarów określonych po lewej stronie. Gdy wymiar jest pojedynczą liczbą, jest to prosta lista znaków 1D, więc robimy dokładnie to, o co pyta pytanie.Go wypróbować na tryj.tk .
źródło
quote
czasownika?''''&,@(,&'''')@(#~ >:@(=&''''))
w języku angielskim”: „ podwoj dowolne'
znaki, a następnie dodaj jeden na początku i na końcu”. J używa literałów ciągów podobnych do Ada, więc to ucieka od łańcucha.k2 - 7 znaków
W języku angielskim jest to funkcja z argumentem,
x
którego definicja to „x
weź ciąg znaków”._f
) to najbardziej wewnętrzna funkcja obecnie wykonywana. Oto funkcja{x#$_f}
.$
) konwertuje swój argument na ciąg. W przypadku funkcji tworzy ciąg znaków z oryginalną definicją funkcji.#
) pobiera elementy lewostronne z listy w prawym argrze . W przypadku łańcucha elementy są znakami, więc robi to dokładnie to, czego chcemy.To nie będzie działać w open-source Kona, ponieważ wydaje się tworzyć czarne dziury, które jedzą wszelkie próby wykorzystania ich jako argumenty do niczego. Nie jestem pewien właściwej semantyki k3, ale prawdopodobnie nie są one o wiele milsze.
W Q jest to
{x#string .z.s}
iw k4{x#2_$.z.s}
. Musimy użyć,2_
aby upuścić dwie początkowe postacie w k4, z powodów, które tylko matka mogła pokochać.źródło
Rubin,
66 6463 bajtówTo samo przy użyciu funkcji unikania wywoływania
gets
jest nieco dłuższe (81 bajtów):Te same wersje Lambda mają 69 i 65 bajtów:
źródło
.cycle
jest fajnie, muszę to pamiętać. :) Prawdopodobnie możesz skrócić.join
do*''
.String#format
zamiast interpolacji:eval s="$><<('eval s=%p'%s).chars.cycle.take(gets.to_i)*''"
Mathematica, 65 bajtów
Wszystkie spacje są konieczne, aby uczynić z tego właściwy quine, w tym jeden tylny. Jest to czysta funkcja, której można użyć w następujący sposób:
który drukuje
Niestety, stosowanie
ToString
do funkcji nie daje dokładnie tak wprowadzoną funkcję, więc nie może to skrócić usuwając spacje, skrócenie#1
do#
lub z użyciem notacji prefiksu dla wywołań funkcji.źródło
#
do#1
”?MATLAB,
319141 znakówUdało mi się wycisnąć kilka bajtów z oryginalnego:
źródło
JavaScript, 34 bajty
Funkcja rekurencyjna, która powtarza
n
czasy kodu , a następnie wycina wynik.źródło
Japt , 2 bajty
Wypróbuj online!
Pierwszy
î
to metoda numeryczna, która przyjmuje jeden parametr i powtarza go na długośćn
. Ponieważ jest to pierwsza metoda,n
staje się wejściem. Drugiî
zostaje wrzucony do struny i powtórzony.Przenosi to na:
n.î("î")
-> Powtarzaj,"î"
aż osiągnie długośćn
8 bajtowe rozwiązanie
Wypróbuj online!
îQi"îQi"
transpiles don.î(Qi"îQi")
źródło
R 203 bajty
Gdy N = 203, kod jest w pełni drukowany.
Gdy N = 50, kod sam się przycina.
Gdy N = 300, kod częściowo się powtarza.
źródło
(f=function(N){s=paste0("(f=",paste0(capture.output(f),collapse=""),")");cat(rep(s,N%/%nchar(s)),substr(s,1,N%%nchar(s)),sep="")})(200)
Matlab (57)
Początkowy
1
indeks (zamiast0
) w ostatnim wierszu wynika z tego, że funkcja Matlabatype
wprowadza początkowe przesunięcie wiersza, które należy usunąć. Podziękowania dla Dennisa za jego korektę (ostatni indeks) i jego sugestię (nnz
krótszą niżnumel
).źródło
-1
). - Myślę, że możesz także usunąć drugą nową linię i zamienićnumel
nannz
.type f
część nie koliduje z wymaganiem Czytanie kodu źródłowego w jakikolwiek sposób i czytanie z pliku, standardu itp. Jest niedozwolone ?type
prawdopodobnie uzyskuje dostęp do dysku twardego. Czy uważasz, że powinienem usunąć odpowiedź?mod
Nawiasem mówiąc, ukradłem twój pomysł na rozpacz).Unary (wersja 1-8) , 23855 bajtów
Pobiera dane wejściowe jako jednoargumentowe z „1”, a kod to 23855 „1” (
,[.,]
)źródło
Japt ,
4028 bajtówPierwszy raz piszę quine, więc prawdopodobnie można to trochę skrócić. Z drugiej strony cieszę się, że w ogóle udało mi się to zrobić.
Prowadząc celowo nowy wiersz, drugi wiersz to dane, a reszta rozpakowuje dane, a następnie powtarza cały wynikowy ciąg, aż osiągnie długość równą wartości wejściowej.
Dzięki Oliverowi udało się ogolić aż 12 bajtów .
Wypróbuj online!
źródło
tTU
z¯U
i można go używaćî
zamiastp
przesuwając go do przodu: Spróbuj OnlineîR+Q+V+Q+R+V
powinien działać dobrze.î
tym, to bardzo przydatne. Wielkie dzięki!C ++, 305
Wyjaśnienie Oprócz znaku ucieczki wszystkie inne znaki są drukowane. Główna metoda znajduje się wewnątrz ciągu s, a wewnątrz głównego cały ciąg jest budowany i drukowany na standardowym wyjściu
źródło
Pyth,
151314 bajtówWypróbuj online!
Zmodyfikowana wersja standardowej quiny Pyth .
źródło
<jN*Q]"<jN*Q]<jN*Q]"<jN*Q]<jN
mylić?<jN*Q]"<jN*Q]"
wydaje się praca?Hoon , 185 bajtów
Ustaw
f
kod programu jako taśmę, ale dla samego siebie „k”. Podziel taśmę na znak 5, ustawiając zmienne[p=left q=right]
. Spawaj razem strunyp
, oryginalny ciągf
i wszystko po 1. znakuq
. Powtórz ten ciąg znakówn
, a następnie zwróć jego pierwszen
znaki.To trochę utrudniało to, że stdlib Hoon'a nie miał funkcji formatowania ani znajdź i zamień ... Poza tym nie jestem pewien, dlaczego potrzebujemy kolejnej obsady po
scag
, ponieważ powinna zachować informacje o typie. Tak to idzie.źródło
Jstx , 7 bajtów
Wypróbuj online!
źródło
Perl 5 z
-pa
, 48 bajtówWypróbuj online!
źródło
Gol> <> , 12 bajtów
Wypróbuj online!
Jak to działa
k
możemy zawijać dowolną liczbę razy, więc nie musimy powielać całego stosu w zależności od danych wejściowych.źródło
SmileBASIC,
10666 bajtówźródło
KSFTgolf - 4 znaki, 6 bajtów
KSFTgolf, jeśli język, który próbowałem zaprojektować dla golfa kodu. Dużo to zmieniałem, więc to chyba nie powinno się liczyć.
źródło
☃
kodzie, który całkowicie wygląda jak coś, co zostało zrobione specjalnie dla tego wyzwania (jak istnieją żadne inne bloki kodu Unicode oparty w całości pliku).Stax , 24 bajty
Uruchom i debuguj
Dostosowanie
"34bL"34bL
quine.źródło
J, 41 bajtów
To była łamigłówka!
Wyjaśnienie:
Przykłady:
źródło
Ly , 28 bajtów
Wypróbuj online!
źródło
Java 10,
193176 bajtówWyjaśnienie:
Wypróbuj online.
quine -part:
var s
Zawiera kod źródłowy niesformatowany.%s
służy do wprowadzania tego ciągu do siebie za pomocąs.format(...)
.%c
,%1$c
i34
służą do formatowania podwójnych cudzysłowów.s.format(s,34,s)
łączy to wszystko.Część wyzwania:
for(int i=n;i>n;i/=176)
ceil(n/176)
razy pętli , gdzie176
jest długość kodu źródłowego.s+=s;
wykładniczo zwiększa rozmiar kodu źródłowego String. (ab
staje sięabab
;abab
staje sięabababab
;abababab
staje sięabababababababab
; itp.)s.subtring(0,n);
pobiera pierwszen
znaki ciągu.źródło
> <> ,
2219 bajtówWypróbuj online!
Pobiera dane wejściowe przez
-v
flagę.źródło
Stax , 8 bajtów
Uruchom i debuguj
źródło