Latar Belakang
Ketika saya masih di sekolah dasar, kami biasa bermain game di kelas matematika yang berlangsung sebagai berikut.
Semua anak duduk dalam lingkaran besar dan bergiliran menghitung, mulai dari 1 .
Namun, angka-angka berikut harus dilewati saat menghitung:
- Angka yang merupakan kelipatan dari 3 .
- Angka yang memiliki angka 3 dalam representasi desimalnya.
15 angka pertama yang harus dikatakan anak-anak adalah
1 2 4 5 7 8 10 11 14 16 17 19 20 22 25
Setiap kali seseorang mendapatkan nomor yang salah - mengatakan angka yang tidak ada dalam urutan atau melompati angka yang ada - dia dikeluarkan dari lingkaran. Ini berlangsung sampai hanya ada satu anak yang tersisa.
Tugas
Anda buruk dalam permainan ini, jadi Anda memutuskan untuk curang. Tulis sebuah program atau fungsi yang, mengingat sejumlah urutan, menghitung jumlah urutan berikutnya.
Anda tidak harus menangani angka yang tidak dapat direpresentasikan menggunakan tipe numerik asli bahasa Anda, asalkan program Anda berfungsi dengan benar hingga input 251 dan algoritma Anda bekerja untuk input besar yang sewenang-wenang.
Input dan output dapat menggunakan basis yang nyaman.
Karena Anda harus menyembunyikan kode Anda, itu harus sesingkat mungkin. Sebenarnya, ini adalah kode-golf , jadi kode terpendek dalam byte menang.
Uji kasus
1 -> 2
2 -> 4
11 -> 14
22 -> 25
29 -> 40
251 -> 254
sumber
7
yang dilewati ketika saya memainkannya, tetapi Anda akan mengatakan hal lain, alih-alih pergi ke nomor berikutnya dalam barisan.Jawaban:
Brachylog , 10 byte
Cobalah online!
Penjelasan
sumber
JavaScript (ES6), 30 byte
sumber
J, 24 byte
Pendekatan straight-forward yang hanya beralih dari input n hingga menemukan nomor berikutnya yang valid oleh aturan.
Bentuk lima smiley,
$:
,:)
,0=
,=|
, dan>:
.Pemakaian
Penjelasan
sumber
Python 2,
73 6643 byteTerima kasih kepada xnor karena memberi tahu saya bahwa saya bodoh dengan menggunakan 2 variabel, dan terima kasih kepada Mitch Schwartz juga.
sumber
x=input()+1
while'3'[:x%3]in`x`:x+=1
print x
.x=~input()
, mengurangi bukannya menambah, dan mencetak-x
.05AB1E , 11 byte
Cobalah online!
Penjelasan
sumber
Perl, 19 byte
Kode 18 byte +1 untuk
-p
.Pemakaian
sumber
Java 8,
57565550 byteTerima kasih kepada @Numberknot untuk 1 byte Terima kasih kepada @Kevin Cruijssen selama 5 byte
Ini adalah sebuah
Function<Integer, Integer>
Penjelasan
Implementasi naif yang hanya menambah sampai mencapai angka yang dapat diterima.
Kelas Tes
Output dari Kelas Tes:
sumber
|
sebagai gantinya||
do-while
? Hanya for-loop biasa yang lebih pendek:i->{for(;++i%3<1|(i+"").contains("3"););return i;}
( 50 byte )while
dando-while
, dan mereka berdua memberi saya skor yang sama, tapi saya suka cara itudo-while
terlihat ... Saya tidak berpikir untuk menggunakanfor
loop ... Terima kasih!Japt, 18 byte
Uji secara online
Saya akhirnya memiliki kesempatan untuk menggunakan
ß
:-)Bagaimana itu bekerja
sumber
PowerShell v2 +, 46 byte
Mengambil input
$args[0]
, menambah1
, menyimpan$a
, memulai satufor
putaran. Kondisional membuat loop tetap berjalan sementara$a-match3
(regex match)-or
$a%3
bernilai nol (yang!
mana1
). Loopnya hanya menambah$a++
. Pada akhir loop, kita cukup menempatkan$a
pada pipeline, dan output melalui implisitWrite-Output
terjadi pada penyelesaian program.Contohnya
sumber
R, 46 byte
sumber
n
alih-alihcat(n)
.Python 2,
494442 byteEntri Python lain mengalahkan ini (edit: tidak ada lagi :-D), tapi saya mempostingnya karena saya lebih suka pendekatan rekursifnya. Terima kasih kepada Mitch Schwarz dan Erik the Pegolf karena membantu saya membuat ini lebih pendek.
sumber
f=lambda x:f(x+1)if x%3>1or'3'in`x+1`else-~x
. Jika Anda ingin menyimpan Python 3, Anda dapat golf yang terakhirx+1
untuk-~x
dan menghapus ruang.f=lambda x:'3'[:~x%3]in`~x`and f(x+1)or-~x
danf=lambda x:f(x+1)if'3'[:~x%3]in`~x`else-~x
Lua, 58 Bytes
sumber
Pyke, 13 byte
Coba di sini!
sumber
while
di awal.C #,
56, 51 byte.Ini mengejutkan pendek untuk jawaban C #!
sumber
t=x=>(++x)%3<1|(x+"").Contains("3")?t(x):x;
Dalam Visual Studio, Anda hanya perlu mendefinisikan variabel dan mengaturnya ke nolFunc<int, int> t = null;
dan kemudian mendefinisikan fungsi rekursif pada baris berikut.Haskell,
5048 byteCobalah di Ideone. Disimpan 2 byte berkat @Charlie Harding .
Alternatif: (50 byte)
sumber
until(\x->mod x 3>0&¬Elem '3'(show x))succ.succ
.Pyth, 11 byte
Cobalah online: Demonstrasi atau Test Suite
Penjelasan:
sumber
GolfSharp , 43 byte
sumber
Ruby, 47 byte
Saya benar-benar merasa seperti ini bisa bermain golf lebih jauh.
sumber
i
bukannya"#{i}"
MATL , 14 byte
Cobalah online!
Penjelasan
sumber
Labyrinth ,
117102 byteCobalah online!
Labyrinth adalah bahasa pemrograman dua dimensi berbasis stack dan di persimpangan, arah ditentukan oleh bagian atas stack (positif ke kanan, negatif ke kiri, nol ke kanan). Ada dua loop utama dalam program ini. Mod pertama memasukkan bilangan bulat dengan 3 dan menambah jika 0. Yang kedua berulang kali memeriksa apakah digit terakhir adalah 3 (dengan mengurangi 3 dan modding dengan 10) dan kemudian membaginya dengan 10 untuk mendapatkan digit terakhir yang baru.
sumber
PHP,
60555446 byteTerima kasih kepada @ user59178 untuk mencukur beberapa byte, @AlexHowansky untuk byte, @Titus untuk beberapa byte lainnya
Dipanggil dari baris perintah dengan
-r
. Metode naif yang loop sementara angka adalah kelipatan 3, atau memiliki 3 digit.sumber
for($i=$argv[1];!(++$i%3)|strpos(" $i",'3'););echo$i;
dimungkinkan untuk melakukan yang lebih baik dengan menetapkan$i
saat menggunakannya juga.strpos(_.$i,'3')
%3<1
, satu dengan51
alih - alih'3'
, dua lagi denganstrstr($i)
alih - alihstrpos(_.$i)
dan dua lagi dengan menukar|
operan di versi kedua:<?for(;strstr($i=++$argv[1],51)|$i%3<1;);echo$i;
-> 48 bytePHP,
4741 byteterinspirasi oleh Xanderhall , tetapi ide terbaru akhirnya membenarkan jawaban sendiri.
atau
Ini mengambil keuntungan dari fakta bahwa input juga dari urutan: Untuk
$n%3==1
, modulo baru2
. Sebab$n%3==2
, modulo baru adalah4-3=1
.$n%3==0
tidak pernah terjadi.Jalankan sebagai pipa dengan
-R
atau coba online .sumber
APL (Dyalog Unicode) ,
33282719 byte SBCSCobalah online!
-6 terima kasih kepada Adám. -8 Terima kasih kepada ngn.
Penjelasan Lama:
APL (Dyalog Extended) ,
2317 byte SBCSCobalah online!
Terima kasih untuk Adám. -6 terima kasih kepada ngn.
Penjelasan Lama:
sumber
Perl 6 ,
27 2524 byteCobalah online!
Menemukan angka pertama lebih besar dari input yang tidak memiliki tiga dan sisanya ketika dimodulasi oleh 3. Saya berharap untuk melakukan sesuatu yang mewah dengan kondisinya, seperti
!/3/&*%3
tetapi tidak bekerja dengan!
.:(
Penjelasan:
sumber
C, 81 byte
sumber
reticular, 30 byte
Cobalah online!
Penjelasan
1: inisialisasi
Ini mengubah
i
nput menjadi banyakn
, kemudian turun (v
)2: lingkaran
3: final
sumber
Batch, 93 byte
Mengambil input pada STDIN.
sumber
CJam, 19 byte
ON LINE
Penjelasan:
Jika penjelasan yang kurang jelas ditanyakan, saya akan melakukan ini:
sumber
Pyth, 19 byte
Suite uji
Saya yakin saya bisa bermain golf ini ... sama dengan jawaban CJam saya.
Penjelasan:
sumber
J
. Anda bisa bertambahQ
. Dan jika Anda melakukannya dengan pintar, Anda dapat mengarahkan operasi ke kondisi sementara:W|!%=hQ3/
Q \ 3; Q`.W|!%=hQ3/`Q\3;Q
Clojure, 73 byte
Loop rekursif sementara
n
dapat dibagi 3, atau berisi 3 dalam representasi string-nya. Meskipun saya menggunakan rekursi yang tidak dioptimalkan, ia mampu menangani 2999999 sebagai input, jadi itu harus ok.Tidak disatukan
sumber