Twoja własna instrukcja „za”
Zakładając, że masz następujące dane wejściowe: a, b, c, d
Dane wejściowe mogą być w jednym wierszu przy użyciu dowolnego formatu „a / b / c / d” lub „a, b, c, d” itp.
Możesz także mieć 4 wejścia.
Musisz zakodować następujące zachowanie (tutaj pseudo-kod):
var i = <a>
while (i <b> <c>)
print i
i = i + <d>
print "\n"
Oto kilka przypadków testowych:
input : 1,<,10,1
output :
1
2
3
4
5
6
7
8
9
Jeszcze jeden :
input : 20,>,10,1
output :
20
21
22
23
24
25
26
27
...
infinite loop / program crashes
a
jest liczbą całkowitą , początkową wartością jesti
.b
Jest to ciąg znaków lub char , to nie może być coś innego, komparator stosowany w kończącym warunkufor
pętli.b
może i musi być jednym z następujących ciągów:- ">" - "<"
c
jest liczbą całkowitą , liczbą używaną w warunku końcowymfor
pętli.d
jest liczbą całkowitą dodawaną do i w każdej pętli.
To jest golf golfowy, wygrywa najkrótsza odpowiedź!
print "\n"
, ale używam alertu javascript dla każdej linii. Czy byłoby to do zaakceptowania, czy też musiałbym użyć konsoli.log zamiast przedłużać moją odpowiedź?alert("23\n24\n25");
działałoby, aalert("23"); alert("24"); alert(25);
nieOdpowiedzi:
JavaScript (ES6),
444356 bajtówZaoszczędzono 1 bajt dzięki ETHproductions
Edycja: naprawiono, aby spełnić wymagania wyjściowe
Test
Pokaż fragment kodu
źródło
eval
aby zapisać bajt:(a,b,c,d)=>{for(;eval(a+b+c);a+=d)alert(a)}
JavaScript (ES6),
474248 bajtówChciałem zrobić wersję dla, ale ktoś był szybszy, więc oto wersja rekurencyjna.
Musisz dodać
f=
wcześniej i nazwać takf(b,c,d)(a)
.Ogromne podziękowania dla Arnaulda za wspaniały golf.
alert
zmieniono na zconsole.log
powodu specyfikacji wyjściowejźródło
Pure Bash, 35
Zakładam, że OK jest po prostu podłączyć parametry do standardowej pętli for:
Wypróbuj online .
źródło
Galaretka , 12 bajtów
Wypróbuj online!
Galaretka ma wiele sposobów na zwięzłe wykonywanie iteracji, tworzenie zakresów itp. Jednak dokładnie odwzorowanie zachowania C ++ jest dość trudne, ze względu na specjalne przypadki, takie jak przyrost równy 0, pętla kończy się przed rozpoczęciem (z powodu nierówności wstecznej ), a przyrost zmierza w złym kierunku (co oznacza, że warunek wyjścia z pętli nie może być spełniony w sposób naturalny). Jako takie, to rozwiązanie jest w zasadzie bezpośrednim tłumaczeniem C ++, mimo że sprawia, że jest to raczej poziom niższy niż zwykle program Jelly. Na szczęście C ++ zachowuje się niezdefiniowane w przypadku przepełnienia liczb całkowitych ze znakiem (używa pytania
int
), co oznacza, że program może w tym przypadku zrobić wszystko, a zatem nie trzeba próbować naśladować tego zachowania.Wyjaśnienie
Awaria programu to najkrótszy sposób na wyłączenie niejawnego wyjścia Jelly (w przeciwnym razie wyświetliłaby się końcowa wartość licznika); generuje kilka komunikatów o błędach na stderr, ale zwykle uważamy, że jest to dozwolone.
Nawiasem mówiąc, licznik pętli jest inicjowany bieżącą wartością przed rozpoczęciem pętli. Gdy pętla pojawi się na początku programu, będzie to pierwsze wejście.
źródło
t
abyḊ
nie mieć awarii. Dequeue skutkuje pustą listą, dla której ukryty wydruk Jelly nic nie daje.Python 2 , 50 bajtów
Wypróbuj online!
źródło
R, 63 bajty
źródło
Java, 58 bajtów
źródło
i
? Czy możesz pominąć część inicjalizacji i po prostu użyća
? Ponadto użycie wartości ASCII „>” (62) powoduje zapisanie bajtu.b>61
05AB1E ,
2220 bajtówWypróbuj online!
Wyjaśnienie
źródło
SmileBASIC, 53 bajty
Wyjaśnienie:
Wykorzystuje to fakt, który
X<Y
jest taki sam jak-X>-Y
źródło
READ
instrukcji, oszczędzając 1 bajt.Skumulowane , 34 bajty
Wypróbuj online! (Testy włączone.) Jest to funkcja, która oczekuje, że stos będzie wyglądał następująco:
Na przykład:
Wyjaśnienie
źródło
C ++, 80
Ups, to
C++
nie jestC
. Pytanie było nieco zdezorientowane.źródło
using namespace std
za darmo).i
musisz zaczynać oda
, prawda0
? Możesz po prostu całkowicie użyća
i pominąć,i
a także użyć wartości ASCII „>”.for(;b==62?a>c:a<c;a+=d)
f(1,'<'3,1);
for(b-=61;b*a>b*c;a+=d)
działa na pojedynczy bajt; ale tak też jestfor(;b-62?a<c:a>c;a+=d)
.C,
5251 bajtów-1 bajt dzięki H Walters
Wypróbuj online!
źródło
b&2
zamiastb^60
innego bajtu.Python 3, 52 bajty
repl.it
źródło
Pip , 14 bajtów
Bierze cztery argumenty wiersza poleceń. Obsługuje liczby ujemne i zmiennoprzecinkowe oraz operatory porównania
< > = <= >= !=
. Wypróbuj online!źródło
Galaretka , 8 bajtów
Jest to ogniwo diademowe, które przyjmuje lewy argument , b, c, a prawy jako argument d . Wyjście może być nieskończone i przechodzi do STDOUT.
Wypróbuj online!
Jak to działa
źródło
F
aby spłaszczyć tablicę.Python 2 , 45 bajtów
Wypróbuj online!
Bardzo dosłowne wdrożenie specyfikacji. Pobiera szablon kodu, zastępuje dane wejściowe poprzez formatowanie łańcucha i wykonuje go.
źródło
Zwykły TeX, 88 bajtów
Polecenie
\for
zapewnia żądaną funkcję. Zapisz to jako,for.tex
a następnie uruchom i wprowadź wartości zmiennych w wierszu poleceń:pdftex '\input for \for 1 < 5 1 \bye'
Wartości zmiennych muszą być oddzielone spacjami.źródło
Python 3, 61 bajtów
Jedna wkładka:
źródło
\t
go spacją.Haskell ,
6664 bajtówWypróbuj online! Stosowanie:
źródło
Bash (+ narzędzia Unix), 29 bajtów
Grał w golfa
Test
źródło
Rubin,
4341 bajtówJeśli
b
można traktować jako symbol Ruby zamiast ciągu, otrzymujesz 38 bajtów :Wypróbuj jedno z rozwiązań online!
źródło
Common Lisp,
8280797364 bajtyTest
-9 bajtów dzięki PrzemysławP.
źródło
(defmacro f(a b c d)<insert backqoute here>(do((i,a(+ i,d)))((not(,b i,c)))(print i)))
Zastosowanie:(f 1 < 10 1)
PHP,
6965 bajtówUruchom z „-r”; podaj argumenty wiersza poleceń jako dane wejściowe.
Dla
jednego bajta więcej4 kolejne bajty, mogę wziąć każdy operator:Tak, zło ewaluacji. Czy wiesz, że może coś zwrócić?
Krótkotrwała restrukturyzacja
[,$i,$b,$c,$d]=$argv;
pozwoliłaby zaoszczędzić 4 bajty;ale PHP 7.1 dodaje wyzwanie.
źródło
list
zapisuje 4 bajty plus 4 bajty z krótką składniąlist()
.Perl 6 , 44 bajtów
Jak to działa
Jeśli w porządku jest zwrócenie (potencjalnie nieskończonej) sekwencji liczb jako wartości typu
Seq
, zamiast drukowania liczb na standardowe wyjście,.say for
część można usunąć, zmniejszając ją do 35 bajtów.źródło
Clojure,
6663 bajtów-3 bajty przez wyodrębnienie
loop
. „Nadużywam” parametr init, aby działał jako działający akumulator.Rozwiązanie rekurencyjne (z TCO). Zobacz komentarze w kodzie wstępnie golfowym. Wypróbowałem rozwiązanie rekurencyjne inne niż TCO i ostatecznie skończyło się na 67 bajtach.
Bardzo chciałbym zobaczyć ten rytm w Clojure! Myślę, że to najmniejsze, jakie mogę dostać.
źródło
#(when(({">">"<"<}%2)% %3)(println %)(recur(+ % %4)%2 %3 %4))
byłoby 61 bajtów, łącząc twojewhen
z moim({">">"<"<}%2)
.Groovy, 51 bajtów
To jest nienazwane zamknięcie. Wypróbuj online!
Uwaga - jeśli chcesz to przetestować
groovy console
, upewnij się, że zabiłeś cały proces, gdy dane wejściowe powodują nieskończoną pętlę. Zauważyłem to po zużyciu ~ 5 koncertów pamięci RAM.źródło
QBIC ,
5140 bajtówTrzy minuty po opublikowaniu zdałem sobie sprawę, że mogę uprościć logikę terminatora ...
źródło
Partia, 94 bajty
Gdyby nie zachowanie drugiego parametru, można by to zrobić w 53 bajtach:
To po prostu nic nie robi, jeśli krok ma zły znak. Dodatkowy test polega na tym, że
for
pętla Batcha pozwala, aby zmienna pętli była równa wartości końcowej.źródło
Clojure, 66 bajtów
Może to być 55 bajtów jako
<
i>
są funkcjami w Clojure:źródło
<
zamiast"<"
, z wyjątkiem Clojure.TI-Basic,
4134 bajtówźródło
Prompt
,Str2
,Str3
,While
,expr(
,Disp
,->
, IEnd
są wszystkie symbole jednobitowych. Liczę 29 bajtów.Str2
,Str3
iexpr(
to wszystkie żetony dwóch bajtów. Aby wyświetlić listę jednobajtowych tokenów, sprawdź tibasicdev.wikidot.com/one-byte-tokens