Bedste svar
Der er mange interessante svar på dette … bizzare spørgsmål … kan lige så godt prøve lykken, formoder jeg ?
Så vi får: 2 + 2 = 6 og 1 + 3 =?
Metode 1:
Dette spørgsmål er på en eller anden måde tagget under Matematiske tricks og gåder og jeg formoder, at vi kan suspendere al matematisk logik, som vi kender, siger ceteris paribus.
Ved nærmere eftersyn ser vi, at den eneste forskellen mellem begge ligninger er -1 (2 → 1) og +1 (2 → 3). Forudsat at ceteris paribus som nævnt, skal svaret også opleve både -1 og +1.
Derfor er det enkle svar muligvis
1 + 3 = 6
Metode 2:
Og da dette er en puslespil, lad os tage tingene fra et andet perspektiv. Mens andre metoder er begyndt at bruge alfabeter, vil jeg prøve en typisk underafdelingsteknik … skønt den kan være mangelfuld.
Lad os antage, at 2 = 3.
2u = 3, så derfor, 1u = 1,5 og 3u = 4,5
Derfor 1 + 3 = 1,5 + 4,5 = 6
Metode 3:
Vi ser, at der er 4 tal til stede (2, 2, 1, 3), hvoraf to er ens (2) . Hvis vi skulle bruge multiplikation, hvad så hvis tallene blev opdelt i begge ligninger?
2 × 3 = 6. Vi er tilbage med 2 og 1.
Derfor 2 × 1 = 2 = 1 + 3 = 2.
Der er så mange mulige svar, og det hele koger ned til vores kreativitet i at bøje matematiske love.
Opdatering: Jeg kunne virkelig godt lide bogstavtilgangen til puslespillet og hænder nede, skal det være den mest logiske og alligevel mest passende metode til et puslespil.
Svar
Det ser ud til, at dette kræver overbelastning af + symbolet!
Hvad med dette? Hvis du har et udtryk, hvor et givet heltal – kalder det Kanin af hensyn til diskussionen – vises på begge sider af +, påhviler det dig at fordoble Kanin, kvadratere resultatet og tilføje Kanin til kvadratet. Så 7 + 7 betyder, at du skal fordoble 7, hvilket giver 14. Kvadrat 14, hvilket giver 196. Endelig tilføj 7 til 196, hvilket giver 203.
Det ser ud til at være den lette del. Den interessante del af puslespillet er for mig, hvordan man skriver en definition af den overbelastede + metode i Scala, således at definitionens krop kan bruge + med sin almindelige betydning af simpel tilføjelse, ikke en rekursiv reference.
Jeg bliver nødt til at skrabe hovedet over det.
Opdatering: Følgende Scala REPL-dialog illustrerer en måde at give + en ny betydning i sammenhæng med en ny datatype ved navn Rabbit.
scala> case class Rabbit(i: Int) {def +(y:Rabbit):Int=4*i*i+y.i}
defined class Rabbit
scala> Rabbit(7)
res5: Rabbit = Rabbit(7)
scala> res5+res5
res6: Int = 203
scala> (1 to 7).map(Rabbit(\_)).map(r=>r+r)
res7: scala.collection.immutable.IndexedSeq[Int] = Vector(5, 18, 39, 68, 105, 150, 203)