21, 21, 23, 20, 5, 25, 31, 24,?
Terinspirasi oleh Puzzle ini , diberi bilangan bulat , cetak urutan berikut sampai Anda mencapai non-Integer (rusak, jika Anda ingin menyelesaikan sendiri teka-teki itu)
atau lebih intuitif: * 1, +2, -3, / 4, * 5, +6, -7, / 8, ...
TestCases:
1: 1, 1, 3, 0, 0, 0, 6, -1
2: 2, 2, 4, 1
3: 3, 3, 5, 2
4: 4, 4, 6, 3
5: 5, 5 , 7, 4, 1, 5, 11, 4
6: 6, 6, 8, 5
9: 9, 9, 11, 8, 2, 10, 16, 9
21: 21, 21, 23, 20, 5, 25, 31, 24, 3, 27, 37, 26
Input dan Output dapat diambil dalam format yang masuk akal, celah standar sama terlarang seperti biasanya.
Dalam semangat kode-golf , jawaban terpendek dalam byte menang!
Sandbox: https://codegolf.meta.stackexchange.com/a/18142/59642
Jawaban:
05AB1E (warisan) ,
1817 byteCobalah secara online atau verifikasi semua kasus uji .
Penjelasan:
Saya menggunakan versi lawas 05AB1E di sini, dan juga pertama menghitung angka berikutnya sebelum mencetaknya, karena loop berbasis 0 dan akan dilakukan
/0
dalam iterasi pertama. Ini menyimpan byte dibandingkan dengan sebelumnyaN>
dan"*+-/"
. Ini hanya berfungsi, karena dalam versi lawas angka yang dibagi 0 tetap sama; sedangkan dalam versi baru itu akan menjadi 0; dan dalam matematika aktual itu akan memberikan pembagian dengan kesalahan nol.sumber
Gores 3.0 39 blok / 323 byte
Cobalah
garisawal!Atau, seperti sintaks SB:
Lihatlah kalian, bersenang-senang dengan
eval
pernyataan mewah Anda ! Yah, bukan aku! Tidak ... Scratch tidak memiliki evals, jadi saya harus melakukan hal-hal dengan cara yang sulit ... jika pernyataan.Setidaknya itu bukan
goto
...sumber
goto
dan perulangan pengurangan untuk memverifikasi apakah kita dapat membagi, dalam bahasa berbasis stack . ; p (Dalam semua keseriusan, jawaban yang bagus, +1 dari saya! Saya tidak bisa menahan diri mengutip Anda dalam jawaban yang baru saja saya selesaikan .)Ruang putih ,
251227202 byteHuruf
S
(spasi),T
(tab), danN
(baris baru) ditambahkan hanya sebagai penyorotan.[..._some_action]
ditambahkan sebagai penjelasan saja.Cobalah online (dengan spasi, tab, dan hanya baris baru).
-24 byte setelah komentar dari @JoKing menyarankan
n%i > 0
. Meskipun hanyaif(x < 0)
danif(x == 0)
tersedia di Whitespace, hanya memeriksaif(x*-1 < 0)
pada dasarnya sama denganif(x > 0)
.Tambahan -25 byte berkat @ JoKing .
Penjelasan:
Kutipan dari jawaban Scratch :
Apa ada yang bilang
goto
? Spasi tidak memiliki apa-apa selaingoto
membuat loop dan pernyataan-if. xD Selain itu bahasa berbasis stack, jadi saya harus sering bertukar / membuang / menyalin. Dan yang terpenting: Whitespace bahkan tidak memiliki floating point dan hanya integer-division, jadi saya telah menggunakann % i * -1 < 0
untuk keluar dari program jika integer tidak dapat membagi angka saat ini.Kode semu:
sumber
if(n == 0)
atauif(n < 0)
tersedia. Sayangnya tidakif(n > 0)
atauif(n != 0)
. Tapi saya yakin beberapa aspek bisa disederhanakan. Solusi saat ini adalah trial-and-error dari debugging, tapi mungkin saya harus mengambil langkah mundur dan memikirkan kembali pendekatan yang lebih pendek. Ketika saya punya waktu lagi. Dan memperbaiki pseudo-code, Anda memang benar saya beralihi
/n
di sebagian besar tempat ..m = n%i; n = n/i; if (m == 0) jump to LOOP; exit program
?swap top two, copy second item
ke loop keseluruhan daripada menyalinnya ke setiap bagian?Haskell ,
75 7473 byteTerima kasih -1 byte ke Will Ness -1 byte terima kasih kepada nimi
Cobalah online!
Menghindari penggunaan int fraksional untuk menghemat byte
sumber
JavaScript (V8) , 52 byte
Mencetak grup dengan 4 istilah. Terinspirasi oleh jawaban Ruby di GB .
Cobalah online!
JavaScript (V8) , 54 byte
Mencetak ketentuan urutannya.
Cobalah online!
JavaScript (ES6),
5958 byteMengembalikan array.
Cobalah online!
sumber
Perl 6 , 44 byte
Cobalah online!
Blok kode anonim yang mengambil nomor dan mengembalikan urutan. Jika kita bisa melewatkan elemen pertama (yang selalu sama dengan elemen kedua), kita bisa menyimpan 3 byte dengan menghapus
$_,
sumber
Python 3 , 60 byte
Cobalah online!
sumber
Piet ,
297190144 codels (432 bytes)Mencoba pendekatan baru menggunakan
pointer
perintah sebagai saklar (k mod 4) untuk menyatukan kode output, menghasilkan gambar kode 10x19 yang lebih padat. Lalu saya pindahkan ke bawah sebanyak 1 baris dan 2 kolom ke 8x18.Berikut ini adalah jejaknya, untuk melihat cara kerjanya:
Baris pertama mendorong 0 pada stack sebagai indeks awal (karena kita hanya bisa
push
bilangan asli, kita dorong 2 dan kemudian kurangi), kemudian membaca input sebagai angka.Kolom paling kiri memiliki kode bersama untuk menduplikasi nomor dan memasukkannya ke dalam output, kemudian memindahkan indeks di atas tumpukan, menambahnya dan kemudian menduplikasinya tiga kali. Kita kemudian memasuki blok berbentuk r merah pastel melalui cyan codel gelap untuk
pointer
perintah yang memberi kita jalan yang berbeda untuk sisa mod indeks 4 kita.Mod 1, kita keluar melalui atas untuk berkembang biak. Kami pertama-tama mengacak salinan indeks kami untuk nanti, kemudian melakukan perkalian. Setelah melewati putih untuk noop, kita masukkan kolom di atas untuk memperbaiki paritas cc (perlu dibalik beberapa kali agar loop tetap stabil), diikuti oleh
pointer (1)
memasuki bar magenta: Bertindak sebagai tangkap empat jalur kita dan kirim kita kembali ke loop.Mod 2, kita keluar mundur untuk menjumlahkan. Bentuk blok kode pastel berarti kita keluar dari baris di atas dari tempat kita masuk, dan kita menggunakan 3 yang kita dorong ke tumpukan dengan keluar melalui kode merah untuk
pointer (3)
diri kita sendiri ke atas. Kolom ini memiliki ruang putih sebelum aritmatika dan urutan yang sedikit berbeda untuk mendorong dan mengganti cc, karena jika tidak kita akan memiliki tumpang tindih warna dengan codel bernilai integer di kolom tetangga.Mod 3 mengirim kami ke bawah untuk pengurangan. Kesepakatan yang sama dengan perkalian, kecuali kita melewati jalur pembagian saat naik (Karena cc memiliki paritas yang berbeda ketika memasuki bilah warna hijau pastel, dua eksekusi keluar dari bilah itu pada ujung yang berbeda). Saat melakukannya, kita mengambil
duplicate
perintah yang tidak diinginkan , jadi kitapop
mundur dengan codel hijau gelap sebelum memasuki bilah koreksi dan pengumpulan cc.Mod 4, kita langsung ke depan untuk membagi. Di sini, pertama-tama kita harus mengocok-ulang tumpukan dengan lebih parah untuk mendapatkan dua pasang n dan a untuk melakukan operasi, karena kita perlu menguji apakah itu bilangan bulat. Kami melakukan itu
mod
pada pasangan pertama, kemudiannot
pada hasilnya, lalu menggunakannya untuk apointer
- jika tidak dapat dibagi, kami terus berjalan lurus, yang mengirimkan kami dengan duapointer
perintah ke sudut yang berlawanan ke blok yang tidak terhindarkan dan dengan demikian mengakhiri program. Kalau tidak, kita belok kanan dan dapatkandivide
perintah dari memasuki bilah magenta.Versi lama
Kode yang sangat mudah: Menekan 1 dan input pada tumpukan, kemudian mengulangi empat operasi dengan: Mengocok indeks di atas tumpukan, menambahnya dengan 1, menggandakannya, mengocok satu salinan kembali ke bawah, melakukan operasi aritmatika, menduplikasi nomor dan memasukkan satu ke dalam output.
Untuk pembagian, yang merupakan satu-satunya di mana urutan dapat berakhir, ia menciptakan tumpukan yang lebih rumit untuk memeriksa terlebih dahulu apakah n mod index == 0, jika tidak maka ia akan memasuki kodel yang tidak terhindarkan dan berakhir. Kalau tidak, ia menggunakan salinan kedua dari i dan n untuk melakukan pembagian.
sumber
push (1) pointer
atau untuk sel hitam di atas yang berwarna.C # (Visual C # Interactive Compiler) ,
72,70, 69 byteCobalah online!
sumber
Ruby ,
56 5452 byteCobalah online!
Setelah beberapa upaya (gagal) dengan
eval
, saya menemukan bahwa solusi paling bahagia adalah membangun array dengan 4 elemen sekaligus, setidaknya di ruby.Terima kasih kepada Arnauld untuk -2 byte.
sumber
R ,
90 byte ,73 byte87 byte85 byte,80 byte,74,Implementasi aturan yang sederhana:
Cobalah online!
dengan
T<13
berikut dari analisis teka-teki yang lebih dalam. Memang hanya ada tiga macam urutan: yang panjang 4, ketika a⁰ tidak sama dengan 1 modulo 8; mereka yang panjangnya 12 ketika a⁰ kongruen dengan 21 modulo 32; dan yang panjangnya 8 untuk kasus yang tersisa.Kode alternatif yang menghindari pengulangan menjadi lebih lama dengan 87 byte:
Cobalah online!
sumber
{}
untuk -2 byte.length
.Haskell ,
1048685 byteCobalah online!
The
h=
dapat dihilangkan karena itu hanya digunakan untuk pengujian.Ah, golf kode, di mana peningkatan kuadrat dalam kompleksitas waktu sepadan untuk pengurangan satu karakter.
104 byte
Cobalah online!
Saya suka jawaban ini lebih baik, tetapi sayangnya lebih lama.
sumber
Japt ,
2524 byteAdaptasi lain dari solusi Ruby GB .
Cobalah
Trik utama di sini adalah kelebihan
c
metode untuk array. Berikan array lain sebagai argumen dan menggabungkannya ke array asli. Berikan nomor sebagai argumen, seperti yang terjadi pada panggilan rekursif terakhir, dan meratakan array asli dengan banyak tingkatan -1
dalam hal ini, setelah pembulatan. Tetapi, karena array hanya sedalam satu level, perataannya tidak berpengaruh.sumber
Java 8, 84 byte
Cobalah online.
Membuat array dengan keempat nilai diinspirasikan oleh @GB 's Ruby answer , walaupun sekarang saya perhatikan bahwa menggunakan pernyataan terary if adalah jumlah byte yang sama:
Cobalah online.
sumber
Perl 5 , 53 byte
Cobalah online!
sumber
Merah , 102 byte
Cobalah online!
sumber
AWK , 57 byte
Cobalah online!
sumber
Rutger , 310 byte
Cobalah online!
Sudah saatnya saya menggunakan Rutger lagi. Sayangnya, ini mungkin bukan bahasa terbaik untuk tugas tersebut, karena tidak memiliki bentuk
eval
, memaksa saya untuk menggunakan empat pernyataan ifBagaimana itu bekerja
Bagaimana Rutger bekerja
Kata pengantar singkat tentang cara kerja bahasa: Semuanya bisa berupa tugas atau fungsi, dan setiap fungsi hanya membutuhkan satu argumen. Untuk operasi yang memerlukan lebih dari satu argumen (mis. Multiplikasi), panggilan pertama mengembalikan fungsi parsial , yang, ketika dipanggil lagi dengan argumen kedua, mengembalikan hasil yang diharapkan. Sebagai contoh:
akan mencetak 30: Cobalah online!. Meskipun biasanya ini lebih panjang dari alternatif yang biasa, kadang-kadang dapat menyimpan byte, jika suatu fungsi dipanggil berulang kali dengan satu argumen konstan, dan satu argumen berubah, misalnya saat mencetak tabel waktu.
Aturan satu argumen ini berlaku untuk semua yang bukan konstanta atau variabel, termasuk loop dan kondisional. Namun, loop dan conditional (
For
,Each
,While
,DoWhile
,If
danIfElse
) yang bisa dilakukan , yang berarti bahwa untuk benar-benar menjalankan mereka,Do
fungsi harus dipanggil (lihat baris terakhir dalam jawaban). Sekali lagi, ini dapat menyimpan byte ketika berulang kali menjalankan loop yang sama, atau memungkinkan Anda untuk menjalankan kode arbitrer antara definisi dan menjalankan loop.Akhirnya, ada tiga cara merujuk ke variabel, yang semuanya digunakan dalam program ini. Yang pertama adalah referensi langsung , di mana nama variabel diawali dengan
$
simbol. Ini mengakses nilai variabel secara langsung dan mengembalikannya. Yang kedua adalah referensi fungsional , yang tidak memiliki karakter awalan. Ini memungkinkan kode untuk membedakan antara fungsi (berpotensi parsial) yang ditugaskan untuk variabel, dan variabel aktual yang mengandung nilai tertentu. Akhirnya, referensi tidak langsung , diawali dengan@
simbol, membuat variabel (jika belum ada) dan mengembalikan objek variabel dalam ruang lingkup yang diberikan. Ini memungkinkan Anda untuk membuat variabel loop (misalnyai
dalamfor i in range(...)
).Cara kerja solusi yang sebenarnya
Berikut adalah kode yang tidak dipisahkan:
Cobalah online!
Seperti yang Anda lihat, itu dimulai dengan menetapkan tiga variabel
n
,e
dana
, yang mewakili input, elemen perubahan dalam urutan, dan nomor modifikasi untuk masing-masing elemen baru. Kami kemudian membuat loop sementara:{
}
m
e % m
Selanjutnya kita sampai pada monstrositas absolut yang terdiri dari tubuh while loop:
x
Pernyataan pertama mencetak setiap iterasi dari urutan sebelum mengubahnya. Kami kemudian membuat fungsi parsial untuk memeriksa kesetaraan dengan variabel loop
x
, dan menemukan empat pernyataan if. Setiap cek pernyataan jikax
sama dengan 1, 2, 3 atau 4 masing-masing, dan kemudian ditunjukk
untuk setiap fungsi dalam*
,+
,-
dan/
, kemudian membuatnya menjadi fungsi parsial dengane
sebagai argumen. Akhirnya, kami menetapkane
untukk
menjalankan dengana
argumen kedua, dan kenaikana
.sumber
Ruby , 52 byte
Cobalah online!
sumber
i=0
dan gunakan float sebagai argumen ke fungsi.C (dentang) , 80 byte
Cobalah online!
Berkat banyak perbaikan @ceilingcat.
sumber
dzaima / APL,
3433 byteCobalah online!
-1 terima kasih kepada ngn
sumber
TI83 / 84 BASIC, 69 Bytes
Kami menyiapkan penghitung di A dan menghapus L1 sehingga kami dapat menggunakannya untuk melacak urutan. Kami kemudian ulangi sampai langkah pembagian menyebabkan sebagian kecil. Di dalam loop kita pertama kali menyimpan N ke daftar. Menyimpan ke satu elemen melewati akhir daftar atau daftar kosong membuat elemen itu, jadi yang satu ini menyimpan hasil pembagian ketika itu tidak menyebabkan pecahan, dan menginisialisasi daftar selama lintasan pertama. Kami kemudian menggunakan augment untuk menambahkan 3 syarat urutan berikutnya. Matematika bekerja beberapa byte lebih kecil dengan menghitung istilah A4k + 3 dalam variabel O dan kemudian mendasarkan A4k + 2 dan A4k + 4 dari O. Kemudian kita melakukan pembagian secara terpisah untuk mengatur ulang N untuk pemeriksaan ulang dan menambahkan 4 ke A.
Saya meletakkan Disp L1 di akhir tetapi saya tidak yakin seberapa ideal itu karena tidak ada cara yang baik untuk memenuhi semua persyaratan di layar. Secara realistis pengguna akan menjalankan L1 setelah program berjalan secara manual untuk menggulir hasil.
sumber
Arang , 29 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
Masukkan nilai awal.
Ulangi sampai nilainya tidak lagi bilangan bulat.
Cetak nilai pada barisnya sendiri.
Hitung empat operasi aritmatika yang tersedia dan pilih yang benar tergantung pada nomor jalur keluaran saat ini.
sumber
Python 3 ,
7876 byteCobalah online!
Mengambil input sebagai daftar 1 item dan secara berulang menambahkan item berikutnya dari urutan hingga non-integer.
Dalam hal tidak diperbolehkan memasukkan input sebagai daftar, berikut adalah versi yang sangat cepat ditambal yang mengambil input sebagai int.
Input sebagai integer, 102 byte
Cobalah online!
+2 byte terima kasih karena saya lupa menyebutkan nama fungsi rekursif ...
-4 byte terima kasih kepada Jitse
sumber
f=
dalam kode utama Anda. Namun, Anda juga dapat menyimpan 4 byte karenan[-1]
danlen(n)
tidak perlu di kawat gigi. Cobalah online!n[:-(n[-1]%1>0)]or f...
akan menghemat byteRanting , 164 byte
Oke, ini benar-benar mengerikan untuk ditulis.
Keterbatasan:
returns
! Anda baik output atau tidak outputwhile
loop. Kamu harus menggunakan rekursi atau tidak sama sekaliset
tagbreak
,continue
,goto
atau serupa. Ini membuat loop tidak mungkin digunakan.for ... in ....
dan loop atas semua elemen dalam array, tanpa ada cara untuk berhenti.Semua itu membuat kodenya luar biasa!
Hei, aku bahkan membuatnya lebih lama dari jawaban Java!
Ini sepanjang jawaban JavaScript dari Arnauld ! ... Dengan ketiga alternatif tersebut digabungkan.
Ini kodenya:
Anda dapat mencobanya di https://twigfiddle.com/zw5zls
Bagaimana cara menggunakan:
Cukup impor file dan panggil makro pertama.
Untuk memiliki array yang dapat digunakan, Anda bisa melakukannya
a.a(21)|split(',')
.Tidak Disatukan:
Seharusnya mudah dibaca.
Jawaban yang tidak diklik ini TIDAK akan memberikan hasil yang benar, karena akan membuang spasi putih acak.
Itu ada hanya agar bisa dibaca secara manusiawi.
sumber