using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Program
{
    class Sorozat
    {
        static Dictionary<long, int> memo = new Dictionary<long, int>();

        static int CollatzLength(long n) {

            long original = n;
            int count = 0;

            while (n != 1 && !memo.ContainsKey(n))
            {
                if (n % 2 == 0)
                {
                    n /= 2;
                } else
                {
                    n = n * 3 + 1;
                }
                count++;
            }

            if (memo.ContainsKey(n))
            {
                count += memo[n];
            }

            memo[original] = count;
            return count; 
        }

        public static void CollatzLengthWithPrint(long n)
        {

            long original = n;
            int count = 0;

            while (n != 1)
            {
                if (n % 2 == 0)
                {
                    n /= 2;
                }
                else
                {
                    n = n * 3 + 1;
                }
                count++;
                Console.WriteLine(n);
            }
        }

        public static void ComputeCollatz(int limit)
        {
            int maxLenght = 0;
            int maxNumber = 0;

            for (int i = 1; i < limit; i++)
            {
                int length = Sorozat.CollatzLength(i);
                if (length > maxLenght)
                {
                    maxLenght = length;
                    maxNumber = i;
                }
            }

            Console.WriteLine($"2. feladat megoldás: {maxNumber}|{maxLenght}");
        }
    }
}
