Jump to content

Raul

Active Members
  • Posts

    69
  • Joined

  • Last visited

Posts posted by Raul

  1. 17 hours ago, TheOne01 said:
    
    import java.util.Scanner;
    
    public class Main {
    
        public static void main(String[] args) {
            Scanner input = new Scanner( System.in );
    
            int h = input.nextInt();
            int m = input.nextInt();
    
            whatTimeItIs(h, m);
        }
    
        public static void whatTimeItIs(int h, int m) {
    
            String[] hour = {"one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve", "thirteen", "fourteen", "quarter", "sixteen", "seventeen", "eighteen", "nineteen"};
            String result;
            boolean greater = false;
    
            if (m == 0) {
                result = hour[h-1] + " o' clock";
            } else {
                if (m > 30) {
                    m = 60 - m;
                    greater = true;
                }
    
                if(m < 20) {
                    result = hour[m - 1];
                } else if (m == 30){
                    result = "half";
                } else {
                    result = m==20?"twenty":"twenty "+hour[m%10-1];
                }
    
                if(m == 1){
                    result += " minute";
                } else if(m != 15 && m != 30){
                    result += " minutes";
                }
    
                if (!greater) {
                    result += " past " + hour[h-1];
                } else {
                    result += " to ";
                    if (h != 12) {
                        result += hour[h];
                    } else {
                        result += "one";
                    }
                }
    
            }
    
            System.out.println(result);
        }
    }

     

     

    Testat, este in regula, a trecut toate testcase-urile, kudos!

     

    5 hours ago, theandruala said:
    
    public class MuieGO3 {
    
    	private static final String[] oreJmekere = { "", " ten", " twenty", " thirty", " forty", " fifty", " sixty",
    			" seventy", " eighty", " ninety" };
    
    	static final String[] minuteJmekere = { "", " one", " two", " three", " four", " five", " six", " seven", " eight",
    			" nine", " ten", " eleven", " twelve", " thirteen", " fourteen", " fifteen", " sixteen", " seventeen",
    			" eighteen", " nineteen" };
    
    	public static void main(String[] args) {
    		System.out.println(ceasCuCuc(2,01));
    		System.out.println(ceasCuCuc(2,10));
    		System.out.println(ceasCuCuc(2,15));
    		System.out.println(ceasCuCuc(2,28));
    		System.out.println(ceasCuCuc(2,30));
    		System.out.println(ceasCuCuc(2,40));
    		System.out.println(ceasCuCuc(2,45));
    		System.out.println(ceasCuCuc(2,47));
    
    	}
    
    	static String ceasCuCuc(int ora, int minute) {
    		String oraText = "";
    		if (minute == 0) {
    			oraText = minuteJmekere[ora] + " o' clock";
    		} else if (minute == 15) {
    			oraText = " quarter past" + minuteJmekere[ora];
    		} else if (minute < 30) {
    			if (minute < 20) {
    				oraText += minuteJmekere[minute];
    			} else {
    				oraText += oreJmekere[minute / 10];
    				oraText += minuteJmekere[minute % 10];
    			}
    			oraText += " minutes past" + minuteJmekere[ora];
    
    		} else if (minute == 30) {
    			oraText += " half past" + minuteJmekere[ora];
    		} else if (minute == 45) {
    			oraText += " quarter to" + minuteJmekere[ora + 1];
    		} else if (minute > 30) {
    			if ((60 - minute) < 20) {
    				oraText += minuteJmekere[60 - minute];
    			} else {
    				oraText += oreJmekere[(60 - minute) / 10];
    				oraText += minuteJmekere[(60 - minute) % 10];
    			}
    			oraText += " minutes to " + minuteJmekere[ora + 1];
    		}
    		if(minute==1 || minute == 59){
    			oraText=oraText.replace("minutes", "minute");
    		}
    
    		return oraText.trim();
    	}
    
    }

     

     

    Testat, este in regula, a trecut toate testcase-urile, kudos!

     

     

    Solutia mea (Golang) este urmatoarea:

    var hes = map[int32]string{1: "one", 2: "two", 3: "three", 4: "four", 5: "five", 6: "six", 7: "seven", 8: "eight", 9: "nine", 10: "ten", 11: "eleven", 12: "twelve", 13: "thirteen", 14: "fourteen", 15: "quarter", 16: "sixteen", 17: "seventeen", 18: "eighteen", 19: "nineteen", 20: "twenty", 21: "twenty one", 22: "twenty two", 23: "twenty three", 24: "twenty four", 25: "twenty five", 26: "twenty six", 27: "twenty seven", 28: "twenty eight", 29: "twenty nine", 30: "half"}
    func theClock(h int32, m int32) string {
        var out string
        if m == 0 {
            out = hes[h] + " o' clock"
        } else if m == 1 {
            out = hes[m] + " minute past " + hes[h]
        } else if m == 15 || m == 30 {
            out = hes[m] + " past " + hes[h]
        } else if m < 30 {
            out = hes[m] + " minutes past " + hes[h]
        } else if m == 45 {
            out = hes[60-m] + " to " + hes[h+1]
        } else {
            out = hes[60-m] + " minutes to " + hes[h+1]
        }
        return out
    }

    * Problema este adaptata de la ceva asemanator gasit pe HackerRank

    • Upvote 1
  2. 2 hours ago, aurelL said:

    Nu ştiu ce e ăia funcţie în programare, dar am încercat să fac ceva cu if, else if, else. Ce e O(1)?

    
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        int h, m;
        cin >> h >> m;
        if ( m == 0 ) {
            cout << h << " " << "o' clock";
        } else if ( m >= 1 && m < 30 && m != 15 ) {
            cout << h << " " << "past" << " " << m;
        } else if ( m == 30 ) {
            cout << "half past" << " " << h;
        } else if ( m == 15 ) {
            cout << "quarter past" << " " << h;
        } else if ( m == 45 ) {
            cout << "quarter to" << " " << h+1;
        } else
            cout << 60-m << " " << "to" << " " << h+1;
    
    
        return 0;
    }

     

    Rezolvarea este partial corecta, deoarece trebuie tradus complet in text, la tine ramanand numerele netraduse. Pe langa asta, nu respecti, in totalitate, constrangerile.

    Ce sa-ti spun, iti recomand sa citesti si sa intelegeti tot ce zice aici (legat de prima dilema), si ce zice aici (legat de a doua dilema). Evident, astea sunt niste lucruri foarte basic, ar trebui sa le aprofundezi, daca chiar te intereseaza. Dupa aia, mai uita-te pe aici. :)

    • Thanks 1
  3. Propun o noua problema, una care poate parea putin mai ciudata, dar este destul de interesanta.

    Dat orice interval orar (ora de pe ceas, efectiv), acesta se poate converti in cuvinte din limbaj natural, sub forma urmatoare:

     

    HG40vXP.png

     

    Pentru o valoare a minutului data, asta inseamna (notat cu m)

    • cand m = 0, atunci se foloseste o' clock
    • cand 1 <= m <= 30, atunci se foloseste past
    • cand m > 30, atunci se foloseste to

    Se cere scrierea unei functii care returneaza timpul dat sub forma de text, in limbaj natural, respectand regulile de mai sus. Ca input, se dau doua valori intregi si naturale, notam h si m, unde h reprezinta ora, iar m reprezinta minutul.

     

    Constrangeri

    • 1 <= h <= 12
    • 0 <= m < 60

     

    Exemple

    • Pentru h = 5 si m = 47, rezulta "thirteen minutes to six"
    • Pentru h = 3 si m = 00, rezulta "three o' clock"
    • Pentru h = 7 si m = 15, rezulta "quarter past seven"

     

    Limbajul care va fi folosit este la alegere libera. Sunt acceptate toate solutiile, indiferent de complexitatea timp, dar trebuie incercat sa se rezolve in O(1). O solutie personala va fi pusa ulterior.

    Spor!

    • Upvote 2
  4. Testat, este in regula, a trecut toate testcase-urile, kudos!

     

    Solutia mea (Golang) este urmatoarea:

    func solve(B []int32) int {
        counter, sum, ok := 0, 0, true
        for _, v := range B {
            sum += v
            if sum % 2 == 1 {
                ok = false
                counter += 2
                continue
            }
            ok = true
        }
        if !ok {
            return -1
        }
        return counter
    }

    * Problema este adaptata de la ceva asemanator gasit pe HackerRank

  5. Propun o noua problema care necesita o logica buna.

     

    Se da un array de numere intregi si pozitive. Singura alterare permisa a elementelor din array este incrementarea acestora, strict cu valoarea 1. Toate numerele din array trebuie sa devina pare, intr-un final, cu un numar minim de incrementari, dar respectand regula urmatoare: atunci cand se face o incrementare pe pozitia i din array, in mod obligatoriu se face incrementare fie pe pozitia i-1, fie pe pozitia i+1. Se cere returnarea numarului minim de incrementari, astfel incat, in final, toate numerele din array sa fie pare. In cazul in care input-ul nu este valid, deci nu se poate ajunge la un rezultat corect, se va returna -1.

     

    Constrangeri:

    Se considera N a fi numarul de elemente din array, iar 2 <= N <= 1000
    1 <= V[i] <= 10, iar 0 <= i <= N-1

     

    Exemplu #1: Se da V = [4,5,6,7]. Se face incrementare, la primul pas, pe i = 2 si respectiv i = 3, deci va rezulta array-ul V = [4,5,7,8]. Acum, la pasul urmator, se va face incrementare pe i = 1 si respectiv i = 2, deci va rezulta array-ul V = [4,6,8,8]. In final, se intoarce numarul de incrementari facute, mai exact 4.

    Exemplu #2: Se da V = [2,3,4,5,6]. Se face incrementare, la primul pas, pe i = 1 si respectiv i = 2, deci va rezulta array-ul V = [2,4,5,5,6]. Acum, la pasul urmator, se va face incrementare pe i = 2 si respectiv i = 3, deci va rezulta array-ul V = [2,4,6,6,6]. In final, se intoarce numarul de incrementari facute, mai exact 4.

    Exemplu #3: Se da V = [1,2]. Oricum s-ar face incrementare, una dintre valori va fi mereu para, iar cealalta impara. Prin urmare, nu se poate ajunge la un rezultat corect, deci se intoarce -1.

     

    Limbajul care va fi folosit este la alegere libera. Sunt acceptate toate solutiile, indiferent de complexitatea timp, dar trebuie incercat sa se rezolve in maxim O(N). O solutie personala va fi pusa ulterior.

    Spor!

  6. 18 hours ago, TheOne01 said:

    Salut,  mi se pare mie sau algoritmul prezentat de theandruala nu merge chiar asa bine ?

    Mai sunt numere care sunt Kaprekar, dar nu sunt afisate: de exemplu 4879

     

    
    #include <iostream>
    
    using namespace std;
    
    bool isKaprekar(uint64_t k)
    {
        uint64_t q, r, n = 10, kp = k*k;
    
        if(k == 1) return true;
    
        while(kp > n)
        {
            q = kp/n;
            r = kp%n;
            if(q + r == k && q > 0 && r > 0) return true;
            n *= 10;
        }
        return false;
    }
    
    int main()
    {
        uint64_t p, q, i;
        cin>>p>>q;
    
        for(i=p; i<=q; i++)
            if(isKaprekar(i)) cout<<i<<" ";
    
        return 0;
    }

    Exemplul dat cu 4879 este gresit, nefiind un numar Kaprekar (pe baza definitiei din textul problemei), dupa cum a demonstrat si Andruk. Bazeaza-te pe definita data in textul problemei, nu pe altceva. Am modificat acum ca sa fie mai clar, acum sigur nu mai sunt dileme. Imi pare rau pentru confuzia creata!

     

    Rezolvarea ta nu este corecta, ai 3/7 testcase-uri care pica. In principal, problema e ca nu validezi corect si apar numere care nu sunt Kaprekar (evident, pe baza definitiei din textul problemei). Exemplu:

    Input: p = 1000, q = 10000
    Output asteptat: 2223 2728 4950 5050 7272 7777 9999
    Output-ul tau: 2223 2728 4879 4950 5050 5292 7272 7777 9999 

     

     

    LE: Solutia mea (Golang) este urmatoarea:

    func kaprekar(p, q int64) {
        for i := p; i <= q; i++ {
            x := i * i
            xS := len(fmt.Sprintf("%d", x))
            if xS % 2 == 1 {
                xS++
            }
            d := int64(math.Pow(10, float64(xS/2)))
            l, r := x / d, x % d
            if i == l + r {
                fmt.Printf("%d ", i)
            }
        }
    }

    * Problema este adaptata de la ceva asemanator gasit pe HackerRank

  7. 39 minutes ago, theandruala said:
    
    public class MuieGO {
    
    	public static void main(String[] args) {
    		
    		int p=1;
    		int q=10000000;
    		long startTime = System.currentTimeMillis();
    		for (int i = p; i <= q; i++) {
    			if(check(i))System.out.print(i+"  ");
    		}
    		System.out.println();
    		System.out.println(System.currentTimeMillis()-startTime + " milliseconds");
    	}
    
    	static boolean check(long nr) {
    		long numar = nr * nr;
    		int lungime = String.valueOf(numar).length();
    		long jum1 = 0, jum2 = 0;
    		if (lungime % 2 == 0) {
    			jum1 = (long) (numar / Math.pow(10, (lungime / 2)));
    			jum2 = (long) (numar % Math.pow(10, (lungime / 2)));
    		} else {
    			jum1 = (long) (numar / Math.pow(10, (lungime / 2) + 1));
    			jum2 = (long) (numar % Math.pow(10, (lungime / 2) + 1));
    		}
    
    		return (jum1 + jum2 == nr);
    	}
    }

    1  9  45  55  99  297  703  999  2223  2728  4950  5050  7272  7777  9999  17344  22222  77778  82656  95121  99999  142857  148149  181819  187110  208495  318682  329967  351352  356643  390313  461539  466830  499500  500500  533170  538461  609687  643357  648648  670033  681318  791505  812890  818181  851851  857143  961038  994708  999999  4444444  4927941  5072059  5555556  9372385  9999999  
    2319 milliseconds
     

    Am testat, solutia este valida, kudos! :)

    Sunt binevenite si alte propuneri, in continuare.

  8. De data aceasta, propun un challenge care nu necesita prea multe cunostinte in structuri de date, ci o logica buna.

     

    O definitie necesara: In matematica, un numar Kaprekar, pentru o baza data, este un numar intreg si pozitiv, al carui valoare ridicata la patrat, in aceeasi baza, poate fi impartita in doua bucati, iar suma numerelor din aceste doua bucati rezulta efectiv in numarul original. Numarul se imparte in doua parti egale (sau +1 la una dintre parti, atunci cand este un numar impar de cifre), nu se fac "variante". Exemplu: 45 este un numar care respecta regula (numar Kaprekar), deoarece 45² = 2025 si 20+25 = 45.

    Alte exemple: 9 respecta regula, deoarece 9² = 81 si 8+1 = 9; 297 respecta regula, deoarece 297² = 88209 si 88 + 209 = 297.

    ATENTIE: Aceasta nu reprezinta definitia oficiala in totalitate, este o variatie, problema trebuie rezolvata pe baza la ce se spune aici.

     

    A se observa ca in ultimul exemplu, numarul ridicat la patrat se imparte intr-o bucata de lungime doi si celalalta de lungime trei, deoarece are un numar impar de cifre, fata de cazurile in care ar fi un numar par de cifre. De asemenea, trebuie avut grija, daca una dintre cele doua bucati incepe cu un 0.

     

    Se dau doua numere intregi, p si q, si se cere sa se afiseze toate numerele Kaprekar din respectivul interval (inclusiv p si q); 0 < p < q < 100000

    Exemplu: p = 1, q = 100; se va afisa "1 9 45 55 99", acestea fiind numerele care respecta regula.

     

    Limbajul care va fi folosit este la alegere libera. Solutiile cu complexitate timp mai mare decat O(N) sunt respinse. O solutie personala va fi pusa ulterior.

    Spor!

    • Like 1
    • Upvote 1
  9. Ambele solutii sunt ok.

    Nu, nu prea ai ce sa scoti mai rapid de atat, pentru ca trebuie sa treci, totusi, prin toate nodurile arborelui, rezultand, in mod evident, intr-o complexitate timp O(N).

     

    Solutia mea (Golang) este urmatoarea (foarte asemenatoare cu ce a facut Gecko):

    func helper(root *TreeNode, L, R int, sum *int) {
    	if root == nil {
    		return
    	} else if root.Val >= L && root.Val <= R {
    		*sum += root.Val
    	}
    	helper(root.Left, L, R, sum)
    	helper(root.Right, L, R, sum)
    }
    
    func sum(root *TreeNode, L int, R int) int {
    	var sum int
    	helper(root, L, R, &sum)
    	return sum
    }

     

    * Problema este luata si tradusa de pe Leetcode

  10. Data o structura de date de tip arbore binar de cautare (BST), se cere calcularea sumei valorilor de pe toate nodurile unde valoarea este cuprinsa intre doua numere L si R (inclusiv) si returnarea acesteia.
    Se garanteaza ca toate valorile din arbore sunt unice.

    * Numarul maxim de noduri din arbore este de 10^4
    * Suma calculata si returnata se garanteaza a fi mai mica decat 2^31


    EXEMPLU
    Input: arbore = [10,5,15,3,7,null,18], L = 7, R = 15
    Output: 32 (10+15+7)

     

    Limbajul care va fi folosit este la alegere libera. Solutiile cu complexitate timp mai mare decat O(N) sunt respinse. O solutie personala va fi pusa ulterior.

    Spor!

    • Upvote 1
  11. 5 minutes ago, Nechfiro said:

    Salut !  

    Urmam sa scriu acelasi titlu dar am gasit atata informatie aici in cat o sa ma tina ocupat ceva vrem :D

    Doar o intrebare ce ma , cam baga in ceata ... Sa pun programarea pe primul plan ? Parcur cateva cursuri online pentru Python si Java momentat dar am si cumparat cateva carti(vreo 19 ) de pen testing si nu prea stiu ce sa prioritez 

    Multumesc anticipat ! 

    Viata are prioritate, spune nu alcoolului la volan!

    • Upvote 1
×
×
  • Create New...