< Zpět na seznam úloh

A2 Černá skříňka

var names = ["a", "b"]
var mainFunction = "napodob"
var remapInput = `
def skrinka(a, b):
  return [b, a + b, a][(len(a) > len(b)) + (len(a) >= len(b))]
`
var datasets = [
  {argv: ["pes", "kočka"], out: "kočka"},
  {argv: ["kočka", "pes"], out: "kočka"},
  {argv: ["sup", "los"], out: "suplos"},
  {argv: ["daman", "kapybara"], out: "kapybara"},
  {argv: ["zebra", "rehek"], out: "zebrarehek"},
  {argv: ["luskoun", "hroch"], out: "luskoun"},
  {custom: true},
]

Ve vašem prostředí je připravená funkce skrinka(a, b). Můžete ji volat, kolikrát chcete, ale nemůžete si ji přečíst: nikde neuvidíte, jak je naprogramovaná. Jediné, co o ní víte, je jaké vrací výsledky.

Úkol má tři kroky:

  1. Používejte ji. Zavolejte skříňku a dívejte se, co vrací. Zkoušejte i vlastní vstupy (testovací sada "Vlastní...").
  2. Popište ji. Napište česky pravidlo, podle kterého se skříňka rozhoduje. Stačí jedna věta, ale musí být přesná: musí platit i pro vstupy, které v testovací sadě nejsou.
  3. Nahraďte ji. Zkuste napsat funkci napodob(a, b), která se chová úplně stejně jako skříňka, ale už ji nevolá. To znamená, že return skrinka(a, b) v nějakou chvíli smažete.

Odevzdejte buďto kód z kroku 3, nebo aspoň komentář z kroku 2.

Nápověda: Budou se vám hodit dvě věci, které už v principu znáte z C#:

# sem napište pravidlo, podle kterého se skříňka rozhoduje.
# 

def napodob(a, b):
  return skrinka(a, b)