Programátorská výzva na víkend

Sekcia: Programovanie 07.09 | 13:13
Avatar Stanislav Hoferek Greenie 18.04  Používateľ

Ahojte. Napadla mi jednoduchá programátorská výzva, alebo niečo na odreagovanie. Je tu veľa šikovných ľudí a riešení je vždy viac. Pustíte sa do toho? V koľkých programovacích jazykoch dokáže vyriešiť jednoduchý príklad komunita LinuxOS do pondelka?

Zadanie: Pizzéria predáva malé pizze. Koľko ich musí za mesiac predať, aby nebola v strate?

Cena surovín na jednu malú pizzu je 43 centov, mesačné náklady (nájom, platy, energie...) sú 2000€. Cena jednej malej pizze je 1,5€.

Nie je to žiadne školské zadanie, len som zvedavý, akými rôznymi spôsobmi sa dá niečo podobné vypočítať :)

    • RE: Programátorská výzva na víkend 07.09 | 13:34
      Avatar debian+   Návštevník
      #include <stdio.h>
      
      long int minimalne_predane_mesiac(double naklady_pizza, double najom, double cena_pizze)
      {
      	return (long int) (najom/(cena_pizze-naklady_pizza))+1;
      }
      
      int main(void)
      {
      	long int ret;
      	
      	ret=minimalne_predane_mesiac(0.43, 2000, 1.5);
      	printf("minimalne_predane_mesiac(): %ld\n", ret);
      	
      	return 0;
      }
      
    • RE: Programátorská výzva na víkend 07.09 | 14:15
      Avatar Miroslav Bendík Gentoo  Administrátor

      Jednoduché riešenie

      CENA_JEDNOTKOVA = 1.5
      NAKLADY_JEDNOTKOVE = 0.43
      NAKLADY_PAUSALNE = 2000
      
      zisk_jednotkovy = CENA_JEDNOTKOVA - NAKLADY_JEDNOTKOVE
      minimalny_predaj = (NAKLADY_PAUSALNE // zisk_jednotkovy) + 1
      
      print("Minimalny predaj mesacne %d" % minimalny_predaj)
      
    • RE: Programátorská výzva na víkend 07.09 | 14:16
      Avatar Miroslav Bendík Gentoo  Administrátor

      Hrubá sila

      CENA_JEDNOTKOVA = 1.5
      NAKLADY_JEDNOTKOVE = 0.43
      NAKLADY_PAUSALNE = 2000
      
      
      predane = 0
      while True:
          predane += 1
          print("Predal som %d pizze" % predane)
          zisk = (CENA_JEDNOTKOVA - NAKLADY_JEDNOTKOVE) * predane
          if zisk > NAKLADY_PAUSALNE:
              print("Luigi, predal si %d pizze a si v zisku, tu mas banan a sicko v poradku" % predane)
              break
          else:
              print("Luigi, ty lemra, neflakaj sa tolko a predavaj")
      
    • RE: Programátorská výzva na víkend 07.09 | 14:29
      Avatar Livan Arch LXQT, Manjaro XFCE, Linux Mint  Používateľ

      Teda nechcem rýpať ale toto nie je úloha na programovanie ale pre kalkulačku, v krajnom prípade pre excel alebo iný tabuľkový procesor. Stačí náklady podeliť rozdielom medzi predajnou cenou a cenou surovín a výsledok zaokrúhliť nahor. Teda minimálny počet predaných píc je zaokrúhliť_hore(2000/(1,5-0,43))= 1870. Programovať takéto niečo je úplne kontraproduktívne, ten libreoffice calc je úplne dostačujúci.

      • RE: Programátorská výzva na víkend 07.09 | 15:13
        Avatar Stanislav Hoferek Greenie 18.04  Používateľ

        samozrejme, že je to jednoduché a postačí kalkulačka. každopádne som zvedavý, v čom všetkom sa to dá urobiť. python, java, assembler... tých možností je veľmi veľa :)

        • RE: Programátorská výzva na víkend 07.09 | 15:40
          Avatar Livan Arch LXQT, Manjaro XFCE, Linux Mint  Používateľ

          Však ja chápem, ako to bolo myslené, ja som iba prezentoval jeden možný spôsob (ak berieme v úvahu aj programovateľnú kalkulačku, tak dva) a ten začiatok bolo iba také premostenie.

      • RE: Programátorská výzva na víkend 07.09 | 15:16
        Avatar WlaSaTy   Návštevník

        Stano navrhol na oživenie súťaž "72 spôsobov na zobrazenie Hello World". Tak naňho nebuď zlý. Na víkend predsa hlásili škaredé počasie.

        To, že by to bežný človek riešil v tabuľkovom procesore, a skúsený užívateľ zas v bc je druhá strana mince.

        • RE: Programátorská výzva na víkend 07.09 | 15:17
          Avatar Stanislav Hoferek Greenie 18.04  Používateľ

          som zvedavý, či by sa to dalo 72 spôsobmi :) ešte by to niekto urobil v minecrafte alebo cez pytagorovu vetu :D

        • RE: Programátorská výzva na víkend 08.09 | 15:09
          Avatar debian+   Návštevník

          bc zvlada aj premenne ... takze sa to da napisat aj pouzitelne do buducna :)

      • RE: Programátorská výzva na víkend 07.09 | 15:20
        Avatar Stanislav Hoferek Greenie 18.04  Používateľ

        inak, keď sa už spomína kalkulačka :D

    • RE: Programátorská výzva na víkend 07.09 | 15:29
      Avatar Stanislav Hoferek Greenie 18.04  Používateľ
      <!DOCTYPE html>
      <html>
      <body>
      <p>Javascript</p>
      <p id="pizza"></p>
      <script>
      var pausal = 2000
      var zisk = 1.5
      var naklad = 0.43
      var zisk1ks = zisk - naklad
      var x = pausal / zisk1ks + 1;
      document.getElementById("pizza").innerHTML = x;
      </script>
      </body>
      </html>
    • RE: Programátorská výzva na víkend 07.09 | 18:07
      Avatar qw11 ubuntu mate 18.04 64bit Asus X751LB  Používateľ

      Treba mat xdotool. Prve sleep nastavit podla rychlosti internetu

      firefox http://www.wolframalpha.com; sleep 3; xdotool type "round(2000/(1.5-0.45)+1)";sleep 1; xdotool key --clearmodifiers Return
      

      :D

      • RE: Programátorská výzva na víkend 07.09 | 18:25
        Avatar Laco2   Návštevník

        Pán je pekár a nevie si vypočítať zisk???

        • RE: Programátorská výzva na víkend 07.09 | 18:47
          Avatar Stanislav Hoferek Greenie 18.04  Používateľ

          nie som pekár, ide čisto o príklad :)

        • RE: Programátorská výzva na víkend 07.09 | 19:01
          Avatar qw11 ubuntu mate 18.04 64bit Asus X751LB  Používateľ

          Uctovnicka je na dovolenke. Tento mesiac to ma na starosti. :D

    • RE: Programátorská výzva na víkend 07.09 | 19:30
      Avatar debian+   Návštevník
      #!/bin/bash
      
      function minimalne_predane_mesiac {
      	if [ "$#" -ne 3 ]; then
      		echo "minimalne_predane_mesiac NAKLADY_PIZZA NAJOM CENA_PIZZE"
      		return
      	fi
      	
      	naklady_pizza=$1
      	najom=$2
      	cena_pizze=$3
      	najom=`echo "scale=0;$najom/($cena_pizze-$naklady_pizza)+1"|bc -l`
      	
      	echo "najom: $najom"
      }
      
      minimalne_predane_mesiac 0.43 2000 1.5
    • RE: Programátorská výzva na víkend 07.09 | 19:34
      Avatar debian+   Návštevník
      <?php
      
      function minimalne_predane_mesiac($naklady_pizza, $najom, $cena_pizze)
      {
      	return ceil($najom/($cena_pizze-$naklady_pizza));
      }
      
      
      $ret=minimalne_predane_mesiac(0.43, 2000, 1.5);
      echo "minimalne_predane_mesiac(): $ret\n";
      
      ?>
      
    • RE: Programátorská výzva na víkend 07.09 | 22:48
      Avatar wamba   Návštevník

      Hrubou silou (2x):

      perl6 -e 'say ^Inf .first:  * * (1.5-.43)-2000 > 0'
      perl6 -e 'say (0,1 ... * * (1.5-.43)-2000 > 0).tail'
      

      Zajímavější je hranici zisku spočítat přesně, tam se ukáže, že počítání s centy může být ošemetné:

      perl6 -e 'say 2000/(1.5-.43)'         #1869.158879
      perl  -E 'say 2000/(1.5-.43)'         #1869.15887850467
      python -c 'print(2000/(1.5-.43))'     #1869.1588785046729
      ruby -e 'puts 2000/(1.5-0.43)'        #1869.1588785046729
      elixir -e 'IO.puts(2000/(1.5-0.43))'  #1869.1588785046729
      echo '(/ 2000 (-  1.5 .43))'|racket   #1869.1588785046729
      echo '2000/(1.5-0.43)'|ghci           #1869.1588785046729
      calc '2000/(1.5-.43)'                #~1869.15887850467289719626
      echo '2000/(1.5-.43)'|bc -l           #1869.15887850467289719626
      
    • RE: Programátorská výzva na víkend 08.09 | 09:21
      Avatar Livan Arch LXQT, Manjaro XFCE, Linux Mint  Používateľ

      Ešte chýba C++

      #include <iostream>
      
      using namespace std;
      
      int main()
      {
      	float pausalneNaklady = 2000;
      	float cenaPicce = 1.5;
      	float cenaSurovin = 0.43;
              int pocetPic;
      
      	pocetPic = pausalneNaklady/(cenaPice - cenaSurovin) +1;
      
              cout << "Minimálny počet predaných píc je: " << pocetPic << endl;
      	return 0;
      }
    • RE: Programátorská výzva na víkend 08.09 | 09:23
      Avatar bedňa antiX, Devuan, LegacyIce  Administrátor

      Oneline:
      printf %.2f $(echo "2000/(1.5-0.43)" | bc) ; echo

      Táto správa neobsahuje vírus, pretože nepoužívam MS Windows. http://kernelultras.org
      • RE: Programátorská výzva na víkend 08.09 | 09:33
        Avatar bedňa antiX, Devuan, LegacyIce  Administrátor

        Máš to zle:
        echo "2000/(1.5-0.43)+1"|bc

        Táto správa neobsahuje vírus, pretože nepoužívam MS Windows. http://kernelultras.org
        • RE: Programátorská výzva na víkend 08.09 | 10:03
          Avatar debian+   Návštevník

          bedna, opravujes sam seba v 3. osobe? :D

          • RE: Programátorská výzva na víkend 08.09 | 10:35
            Avatar bedňa antiX, Devuan, LegacyIce  Administrátor

            Kto sa mi tu sere do vlákna :-)

            Jasne bolo to myslené ako sranda.

            Táto správa neobsahuje vírus, pretože nepoužívam MS Windows. http://kernelultras.org
          • RE: Programátorská výzva na víkend 08.09 | 10:45
            Avatar bedňa antiX, Devuan, LegacyIce  Administrátor

            Teda napadlo ma ešte jednochšie riešenie:
            echo "Luigi, práve sme mi oni predali +100 000 000 000" pizzas určite budem ja ty v zisku"

            Táto správa neobsahuje vírus, pretože nepoužívam MS Windows. http://kernelultras.org
    • RE: Programátorská výzva na víkend 08.09 | 12:38
      Avatar Stanislav Hoferek Greenie 18.04  Používateľ

      trúfne si niekto na turbo pascal? :)

      • RE: Programátorská výzva na víkend 08.09 | 19:13
        Avatar Livan Arch LXQT, Manjaro XFCE, Linux Mint  Používateľ

        A čo toto?

        program PICA;
        
        uses crt;
        var PICA, SUROVINY, NAKLADY: real;
        var POCET: interger;
        
        begin
        clrscr;
        
        PICA:=1.5;
        SUROVINY:=0.43;
        NAKLADY:=2000;
        
        POCET:=NAKLADY/(PICA-SUROVINY)+1;
        
        writeln(’Minimálny počet pridaných píc = ’,POCET);
        
        readln
        end.
    • RE: Programátorská výzva na víkend 13.09 | 07:26
      Avatar laco2 cinamon  Používateľ

      Mne na to stačí kalkulačka-som sellák!