Тест за програмисти фрийлансъри

ThinkFast

New Member
Рейтинг - 100%
10   0   0
По повод веселбата в тази тема - http://www.predpriemach.com/showthread.php?t=20370&p=187014#post187014
Се сетих за една задача подходяща за тестване на програмистката логика. Освен решението трябва да кажете как точно сте я решили.
Този който отговори правилно, с правилно формулирано решение като от програмист печели приза ThinkFast Certified

Та задачата е:
Имаме числата: 2,4,6,8
Имаме операциите: +, -, *, /
Чрез комбинация на всичките числа точно по един път и подходящи операции между тях трябва на получим числото 25

Трябва да покажете решението и как сте стигнали до него.

Скобите са разрешени където и както сметнете за добре че трябва да ги има! То си е ясно че между 4 числа ще стоят само 3 операции, т.е. едната операция е излишна.
Засега няма да слагам срок. Ако толкоз никой не прояви интерес и не може да реши загадката ще публикувам идеята.

По принцип задачата се решава за два часа, но...
 
От: Тест за програмисти фрийлансъри

(6+2 / 8 )*4 = 25

:)

делих и умножавах докато не зацепих, че с цели числа няма да стане :) Другото е елементарна математика
Мерси за задачата, хубаво е да си размърдаме мозъците от време на време
 
От: Тест за програмисти фрийлансъри

А операциите само по веднъж ли могат да се ползват?

ПС: аа решиха я вече :)
 
От: Тест за програмисти фрийлансъри

А операциите само по веднъж ли могат да се ползват?

ПС: аа решиха я вече :)
Горе е отговора. Задачата има само едно решение. Щом не съм писал изрично, може и два пъти да ги ползваш, но се вижда че в този случай са само по веднъж.

Сега очаквам програмистко решение достигащо отговора на Caprice.
 
От: Тест за програмисти фрийлансъри

Що не казахте, че е само за програмисти :)
И наградката моля препоръчано по пощата да ми я пратите, ще си я закича на стената
 
От: Тест за програмисти фрийлансъри

Що не казахте, че е само за програмисти :)
И наградката моля препоръчано по пощата да ми я пратите, ще си я закича на стената
Ми то си пише в заглавието на темата :)
Дай си адреса, ще дойда лично да ти връча наградата :lol: Получаваш ThinkFast Certified Lite Edition
 
От: Тест за програмисти фрийлансъри

(6+2 / 8 )*4 = 25


За тези,които не са зацепили:)-2 делено на 8=0.25+6=6.25х4=25:)
 
От: Тест за програмисти фрийлансъри

test.gif
Така трябва да изглежда по принцип. :)
 
От: Тест за програмисти фрийлансъри

:lol:
Нямах в предвид да рисуваме отговора. Щом е за програмисти задачата очаквам аналитична мисъл описана в код който да намира отговора по зададените критерии. Задачата няма смисъл ако не се реши с код. Аз така я реших навремето. Няма смисъл да си блъскаме главите в проби след като може да се направи едно просто приложение което да го прави вместо нас. Все пак е тест за програмисти.
 
От: Тест за програмисти фрийлансъри

А може ли да стане без brute force или цаката е да се тестват всички комбинации?
 
От: Тест за програмисти фрийлансъри

А може ли да стане без brute force или цаката е да се тестват всички комбинации?
Не виждам как ще стане без brute-force. Точно сега не ми се и мисли вече :) Ако имаш идея давай. Ще ми е интересно да видя друга логика освен моята.

Между другото задачата има и друг отговор ако се включат и други операции с числата: 4! + (2+6)/8
 
От: Тест за програмисти фрийлансъри

Аз съм писал решението на Delphi, на PHP е в пъти по лесно заради функцията eval(). На мен ми се наложи да симулирам калкулатор.

Между другото ако има интерес, мога да разработя няколко примерни задания с определен level - 1,2,3,4 със които фрийлансърите могат да докажат доколко са запознати с материята в зависимост от решенията им.
 
От: Re: Тест за програмисти фрийлансъри

Не е съвсем завършено и не слага скоби но идеята е ясна а и трябва да отивам на работа.

Код:
<?php
$num = array(2,4,6,8);

$op = array( 
  '+' => function($x,$y){return $x+$y;},
  '-' => function($x,$y){return $x-$y;},
  '*' => function($x,$y){return $x*$y;},
  '/' => function($x,$y){return $x/$y;},
);

function calc($x, $y, $op){
  return $op($x,$y);
}

function recurse($level, $sum, $exp){
  global $num;
  global $op;
  if ($level == 4){
    //echo $exp.' '.$sum."\n";
    if ($sum == 25){
      echo $exp."\n";
      die();
    }
    return;
  }
  $level++;
  foreach($num as $n){
    foreach($op as $s => $o){
      if (!($sum == 0 && $s == '/')){
        recurse ($level, calc($n, $sum, $o), $exp.$s.$n);
      }
    }
  }
}

recurse(0,0,'');

?>
 
От: Тест за програмисти фрийлансъри

Ето и пач за генериране на математически коректен израз със скоби:

Код:
30c30
<         recurse ($level, calc($n, $sum, $o), $exp.$s.$n);
---
>         recurse ($level, calc($n, $sum, $o), '('.$n.$s.$exp.')');
 
От: Тест за програмисти фрийлансъри

Ми то си пише в заглавието на темата :)
Дай си адреса, ще дойда лично да ти връча наградата :lol: Получаваш ThinkFast Certified Lite Edition

Извинете, не(до)прочетох, късно беше :)
И бонус предлагаш - лична доставка. Поласкана съм. Да не те затруднявам ама е далечко от Езерото до Морето ;)
 

Горе