Instruksi "untuk" Anda sendiri
Asumsikan Anda memiliki input berikut: a, b, c, d
Input bisa dalam satu baris menggunakan format apa saja "a / b / c / d" atau "a, b, c, d" dll.
Anda juga dapat memiliki 4 input.
Anda harus memberi kode perilaku berikut (pseudo-code di sini):
var i = <a>
while (i <b> <c>)
print i
i = i + <d>
print "\n"
Berikut ini beberapa kasus tes:
input : 1,<,10,1
output :
1
2
3
4
5
6
7
8
9
Satu lagi :
input : 20,>,10,1
output :
20
21
22
23
24
25
26
27
...
infinite loop / program crashes
a
adalah bilangan bulat , nilai awal darii
.b
adalah string atau char , itu tidak bisa menjadi sesuatu yang lain, pembanding yang digunakan dalam kondisi akhir darifor
loop.b
dapat dan harus menjadi salah satu dari string berikut:- ">" - "<"
c
adalah bilangan bulat , angka yang digunakan dalam kondisi akhirfor
loop.d
adalah bilangan bulat yang ditambahkan ke i di setiap loop.
Ini adalah kode-golf, jawaban terpendek menang!
print "\n"
, tapi saya menggunakan peringatan javascript untuk setiap baris. Apakah itu dapat diterima, atau apakah saya harus menggunakan console.log alih-alih membuat jawaban saya lebih lama?alert("23\n24\n25");
akan bekerja padahalalert("23"); alert("24"); alert(25);
tidakJawaban:
JavaScript (ES6),
444356 byteDisimpan 1 byte berkat Edit Produk ETH
: diperbaiki untuk memenuhi persyaratan output
Uji
Tampilkan cuplikan kode
sumber
eval
untuk menyimpan byte:(a,b,c,d)=>{for(;eval(a+b+c);a+=d)alert(a)}
Javascript (ES6),
474248 BytesIngin membuat versi untuk tetapi seseorang lebih cepat, jadi inilah versi rekursif.
Anda perlu menambahkan
f=
sebelumnya dan menyebutnya sepertif(b,c,d)(a)
.Banyak terima kasih kepada Arnauld untuk golf yang luar biasa ini.
alert
diubah menjadiconsole.log
karena spesifikasi keluaransumber
Bash murni, 35
Saya berasumsi OK untuk menyambungkan parameter ke dalam standar untuk loop:
Cobalah online .
sumber
Jelly , 12 byte
Cobalah online!
Jelly memiliki banyak cara untuk melakukan iterasi, membuat rentang, dan lain-lain. Namun, perilaku mirroring C ++ sebenarnya cukup sulit, karena kasus-kasus khusus seperti kenaikan menjadi 0, loop berakhir sebelum mulai (karena ketidaksetaraan menjadi mundur ), dan kenaikan terjadi ke arah yang salah (dengan demikian berarti kondisi keluar dari loop tidak dapat dipenuhi secara alami). Dengan demikian, solusi ini pada dasarnya adalah terjemahan langsung dari C ++, meskipun itu membuatnya lebih rendah daripada program Jelly biasanya. Untungnya, C ++ memiliki perilaku yang tidak jelas pada ditandatangani integer overflow (pertanyaan menggunakan
int
), yang berarti bahwa suatu program dapat melakukan apa saja dalam kasus itu, dan dengan demikian tidak perlu mencoba untuk meniru perilaku overflow.Penjelasan
Menghancurkan program adalah cara tersest untuk mematikan output implisit Jelly (jika tidak, itu akan menampilkan nilai akhir dari penghitung); itu menghasilkan banyak galat kesalahan pada stderr, tetapi kami biasanya menganggap itu diizinkan.
Secara kebetulan, penghitung loop diinisialisasi dengan nilai saat ini sebelum loop dimulai. Ketika loop muncul di awal program, itu akan menjadi input pertama.
sumber
t
agarḊ
tidak ada kerusakan. Dequeue menghasilkan daftar kosong di mana hasil cetak Jelly tidak menghasilkan apa-apa.Python 2 , 50 byte
Cobalah online!
sumber
R, 63 byte
sumber
Java, 58 byte
sumber
i
? Bisakah Anda melewati bagian inisialisasi dan hanya menggunakana
? Juga, menggunakan nilai ASCII dari '>' (62) menyimpan satu byte.b>61
05AB1E ,
2220 byteCobalah online!
Penjelasan
sumber
SmileBASIC, 53 byte
Penjelasan:
Ini menggunakan fakta yang
X<Y
sama dengan-X>-Y
sumber
READ
pernyataan, menghemat 1 byte.Ditumpuk , 34 byte
Cobalah online! (Termasuk pengujian.) Ini adalah fungsi yang mengharapkan tumpukan terlihat seperti:
Sebagai contoh:
Penjelasan
sumber
C ++, 80
Aduh, ini
C++
bukanC
. Agak bingung dengan pertanyaan itu.sumber
using namespace std
gratis).i
harus mulaia
, bukan0
? Anda bisa menggunakana
dan melewatii
semuanya dan menggunakan nilai ASCII dari '>'.for(;b==62?a>c:a<c;a+=d)
f(1,'<'3,1);
for(b-=61;b*a>b*c;a+=d)
bekerja untuk satu byte; tapi begitu jugafor(;b-62?a<c:a>c;a+=d)
.C,
5251 byte-1 byte terima kasih kepada H Walters
Cobalah online!
sumber
b&2
alih-alihb^60
untuk byte lain.Python 3, 52 byte
repl.it
sumber
Pip , 14 byte
Membawa empat argumen baris perintah. Mendukung angka negatif & floating point dan operator pembanding
< > = <= >= !=
. Cobalah online!sumber
Jelly , 8 byte
Ini adalah tautan diadik yang menggunakan a, b, c sebagai argumen kirinya dan d sebagai yang kanan. Output mungkin tidak terbatas dan menuju ke STDOUT.
Cobalah online!
Bagaimana itu bekerja
sumber
F
untuk meratakan array.Python 2 , 45 byte
Cobalah online!
Implementasi spec yang sangat literal. Mengambil templat kode, menggantikan input melalui pemformatan string, dan menjalankannya.
sumber
Plain TeX, 88 byte
Perintah
\for
menyediakan fungsi yang diminta. Simpan ini sebagaifor.tex
dan kemudian jalankan dan masukkan nilai variabel di baris perintah:pdftex '\input for \for 1 < 5 1 \bye'
Nilai variabel harus dipisahkan oleh spasi.sumber
Python 3, 61 byte
Satu liner:
sumber
\t
spasi.Haskell ,
6664 byteCobalah online! Pemakaian:
sumber
Bash (+ Unix Tools), 29 byte
Golf
Uji
sumber
Ruby,
4341 byteJika
b
dapat diambil sebagai simbol Ruby alih-alih string, Anda mendapatkan 38 byte :Coba salah satu solusi online!
sumber
Gangguan umum,
8280797364 byteUji
-9 byte terima kasih kepada PrzemysławP.
sumber
(defmacro f(a b c d)<insert backqoute here>(do((i,a(+ i,d)))((not(,b i,c)))(print i)))
Penggunaan:(f 1 < 10 1)
PHP,
6965 byteJalankan dengan '-r'; memberikan argumen baris perintah sebagai input.
Untuk
satu byte lagi4 byte lebih, saya dapat mengambil setiap operator:Ya, eval jahat. Tahukah Anda bahwa itu dapat mengembalikan sesuatu?
Destrukturisasi singkatan
[,$i,$b,$c,$d]=$argv;
akan menghemat 4 byte lebih;tetapi PHP 7.1 memposting tantangannya.
sumber
list
save 4 Bytes plus 4 Bytes dengan sintaks pendeklist()
.Perl 6 , 44 byte
Bagaimana itu bekerja
Jika boleh mengembalikan urutan angka (yang berpotensi tak terbatas) sebagai nilai tipe
Seq
, alih-alih mencetak angka ke stdout,.say for
bagian tersebut dapat dihapus, sehingga menjadi 35 byte.sumber
Clojure,
6663 byte-3 byte dengan memfaktorkan keluar
loop
. Saya "menyalahgunakan" parameter init untuk bertindak sebagai akumulator yang berjalan.Solusi rekursif (dengan TCO). Lihat komentar dalam kode pregolfed. Saya mencoba solusi rekursif non-TCO, dan akhirnya menjadi 67 byte.
Saya ingin melihat beat ini di Clojure! Saya pikir ini adalah yang terkecil yang bisa saya dapatkan.
sumber
#(when(({">">"<"<}%2)% %3)(println %)(recur(+ % %4)%2 %3 %4))
akan menjadi 61 byte, menggabungkan Andawhen
dengan({">">"<"<}%2)
.Groovy, 51 byte
Ini adalah penutupan tanpa nama. Cobalah secara Online!
Perhatian - Jika Anda ingin menguji ini dengan
groovy console
, pastikan Anda membunuh seluruh proses ketika input menyebabkan loop tak terbatas. Saya perhatikan ini setelah mengkonsumsi ~ 5 gigs RAM.sumber
QBIC ,
5140 byteDan tiga menit setelah posting saya menyadari saya bisa menyederhanakan logika terminator ...
sumber
Batch, 94 byte
Jika bukan karena perilaku parameter kedua, itu bisa dilakukan dalam 53 byte:
Ini tidak melakukan apa-apa jika langkah memiliki tanda yang salah. Tes tambahan adalah karena Batch's
for
loop memungkinkan variabel loop sama dengan nilai akhir.sumber
Clojure, 66 byte
Ini bisa jadi 55 byte
<
dan>
berfungsi di Clojure:sumber
<
alih-alih"<"
, kecuali Clojure.TI-Basic,
4134 bytesumber
Prompt
,Str2
,Str3
,While
,expr(
,Disp
,->
, DanEnd
semua simbol tunggal-byte. Saya menghitung 29 byte.Str2
,Str3
, danexpr(
semua token dua-byte. Untuk melihat daftar token satu-byte, periksa tibasicdev.wikidot.com/one-byte-tokens