Wiele osób wie, czym jest maszyna prawdy w programowaniu. Ale nadszedł czas, abyśmy podnieśli poziom. Przedstawiamy maszynę o rozszerzonej prawdzie! Maszyna o rozszerzonej prawdzie przyjmuje dwie rzeczy jako dane wejściowe, liczbę całkowitą n
i niepusty ciąg s
. Wyprowadza s
n
czasy z opcjonalnymi końcowymi spacjami. Jeśli jednak n
jest równy 0
, musisz wyprowadzać dane wyjściowe, s
dopóki program nie zostanie ręcznie zatrzymany, tzn. Nigdy nie powinien się kończyć.
Ponadto, jeśli n
jest liczbą ujemną, ciąg musi zostać odwrócony. Na przykład za pomocą s=hello
i n=-1
, wyjście byłoby olleh
.
Standardowe metody wprowadzania, każdy rodzaj wyniku, o ile może on obsługiwać nieskończoność. Jeśli masz odpowiedź, która nie obsługuje nieskończoności, możesz ją opublikować, jeśli jest interesująca lub w języku, który nie obsługuje nieskończonych wyników.
Przypadki testowe
n, s, output
5, "hello world", "hello worldhello worldhello worldhello worldhello world"
0, "PPCG", "PPCGPPCGPPCGPPCG..."
-2, "truThY", "YhTurtYhTurt"
2000, "o", "oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo"
To jest golf golfowy , więc wygrywa najkrótszy kod!
Oto oryginalny post w piaskownicy. Wprowadzono w nim zmiany. Podziękowania dla @ComradeSparklePony za stworzenie pomysłu na to wyzwanie
źródło
-n
zamiastabs n
.PHP> = 7,1, 67 bajtów
Wersja z
list(,$x,$y)
zamiast[,$x,$y]
Wypróbuj online!źródło
MATL , 37 bajtów
Wypróbuj online!
Wyjaśnienie:
źródło
Python 3, 71 bajtów
Wypróbuj online!
Zmienna
k
gwarantuje, że pętla jest zawsze uruchamiana przynajmniej raz. Oznacza to, że jeślin=0
, ton
przy następnej iteracji pętli będzie ujemny, więc pętla będzie działać wiecznie.źródło
Matlab, 87 bajtów
Moja pierwsza próba golfa kodowego! Wszelkie sugestie dotyczące gry w golfa są mile widziane.
źródło
05AB1E ,
171614 bajtówWypróbuj online!
Wyjaśnienie:
Zaoszczędzono 2 bajty dzięki @EriktheOutgolfer
źródło
'-å
z0‹
i0Q
z_
.Cubix , 41
Czterdzieści cztery45bajtówPobiera dane wejściowe jako
<N> <String>
Wypróbuj online!
Cubified:
Zobacz, jak działa
W kodzie wciąż jest wiele braków, z których mógłbym być w stanie wydobyć jeszcze kilka bajtów, ale chciałem to zrobić, zanim go zepsuję.
Podstawowa procedura to
I
uzyskać licznik z danych wejściowychA
weź resztę danych wejściowych jako znaki;p?
usuń spację, podnieś numer i przetestuj gopsuqB$)
jeśli licznik jest ujemny, odwróć stos. Obejmuje to obsługę numeru wejściowego i znacznika EOI (-1). Zwiększ licznik.;p;ouqu
jeśli licznik jest równy zero, usuń licznik i znacznik EOI i rozpocznij ciągłą pętlę wyjściową.(
jeśli dodatnie zmniejszenie licznika<<q?/o()u
pętla wyjściowa. Spowoduje to wyświetlenie każdego znaku na stosie, aż do osiągnięcia znacznika EOI (-1).... _ ... ?wq!
na końcu znacznika EOI, obejdź sześcian i odbij z powrotem na?
, zmień pas, upuść znacznik EOI na dół i przetestuj licznik.@
jeśli zero, zatrzymaj się?u(
jeśli pozytywne zawracanie i zmniejszanie się, kończy się na początku pętli? ... <)
w przypadku wartości ujemnej przejdź dookoła sześcianu na drugą stronę, przekieruj na początek pętli, przechodząc obok przyrostu./)<
w przypadku przyrostu ujemnego i przejść do pętli wyjściowejźródło
JavaScript (ES6), 79 bajtów
Skrawek:
źródło
!n&&
zapętleniu w nieskończoność. Czy to jednak ostatecznie wpłynie na StackOverflow?it should never terminate.
JavaScript (ES6),
98949183 bajtów-4, -5 bajtów dzięki Arjunowi
-3 bajty dzięki Rickowi Hitchcockowi
Zaczynałem inaczej niż odpowiedź Java , ale szybko stał się bardzo podobny po golfie. Alert jest nieskończony, ale jeśli chcesz, aby ładnie wyglądał, przełącz się na
console.log
.l=alert;
i wypisywaniealert
ma taką samą długość, ale jeśli przełączyszconsole.log
na krótszy, możesz go przedefiniować.źródło
while(!n)l(s)
zamiastif(!n)for(;;)l(s)
.[...s].reverse()
zamiasts.split''.reverse()
l(s.repeat(Math.abs(n)))
for
w końcu zamiast pętli.QBIC , 36 bajtów
Wiele tu się dzieje, a QBIC / QBasic po prostu nie ma składni, aby elegancko radzić sobie z takimi warunkami.
Wyjaśnienie:
źródło
Java (OpenJDK 8) , 137 bajtów
Wypróbuj online!
źródło
str , 30 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
C (gcc) ,
115112109107104 bajtówWypróbuj online!
C (gcc) , 115 bajtów (134 z
#include<string.h>
przodu)Wypróbuj online!
źródło
Siatkówka , 49 bajtów
Format wejściowy: pobiera ciąg, po którym następuje nowa linia, a następnie liczba.
Wypróbuj online!
Wyjaśnienie:
/¶-/&
Uruchamia tę linię tylko jeśli liczba jest ujemna.V
jest odwrotnym etapem i odwraca^.+
, który pasuje do łańcucha (.
pasuje do każdego znaku oprócz znaków nowej linii)./¶0/&
Biegnie tej linii tylko wtedy, gdy liczba 0.//+>
rozpoczyna nieskończoną pętlę, która drukuje ciąg roboczych po każdej iteracji.G0
bierze ciąg i odrzuca liczbę; robi to nieskończenie, drukując za każdym razem.Oznacza kod, który wygeneruje ciąg; program ocenia ciąg jako kod Retina później.
(.+)¶-*(\d+)
dopasowuje cały ciąg i umieszcza ciąg w grupie przechwytywania 1, a liczbę w grupie przechwytywania 2..-$2+>K
`$1
generuje kod Retina do uruchomienia:.
wyłącza niejawne wyjście (w przeciwnym razie ciąg zostanie wydrukowany n + 1 razy),-$2+
ustawia pętlę powtarzania to się powtarza {przechwytywanie grupy 2} razy. Minus na początku zamienia liczbę na liczbę ujemną, ponieważ wyłącza to funkcję konwergencji w pętli, co zatrzymałoby ją po pierwszej iteracji.>
ustawia tę pętlę do drukowania po każdej iteracji. Reszta kodu to tylko wydrukowanie ciągu.źródło
Perl 6 , 44 bajtów
Wypróbuj online!
Anonimowy blok kodu, który pobiera liczbę i ciąg znaków i zwraca listę (być może nieskończoną)
źródło