Vinnaren i pepparkakshustävlingen!
  • 1
  • 2
2020-08-24, 18:06
  #1
Medlem
Tänkte vi kunde ha en separat tråd för detta, samlat och snyggt.

Snubblade över detta "spel", LÄNK

Spelreglerna är lite oklara (och barn bryr sig inte - de kan hålla på i evighet...). Men om vi skulle sätta upp ett par regler (modifiering efter behov);
  • Lag A består av n_A spelare och lag B består av n_B spelare. I demokratisk anda kan vi säga att n_A=n_B=10.
  • Spelare från lag A avancerar fram med hastigheten v_A ringar/steg per tidsenhet, och spelare från lag B avancerar fram med hastigheten v_B ringar/steg per tidsenhet/loop (barnen i video har slumpmässig hastighet, det låter vi vara en överkurs kanske)
  • När två spelare möts utkämpar de en "strid" där A vinner med slh p_A (och B med slh 1-p_A)
  • För att inte göra barnen ledsna slås de ej ut och ej längre får vara med och leka, utan den utslagna tas till fånga, konverteras till spelare av det vinnande laget, d.v.s. om en A-spelare vinner över en B-spelare blir B-spelaren en A-spelare och ställer sig sist i A-lagets rad.
  • Efter en vinst hoppar den vinnande spelaren framåt med sin hastighet samtidigt som det förlorande laget skickar ut sin nästa "soldat" med dess hastighet, varpå de möts och ny "strid" sker.
  • Skulle en spelare nå motståndarens läger belönas detta med F st. fångar från motståndarlägret som tillsammans med "soldaten" återvänder hem och ställer sig sist i kön, och vardera lag skickar ut var sin ny spelare.
  • Spelet är slut när ena laget är tömt på spelare.
Någon som har lust och tid att skriva ett Python-program för detta spel?
Citera
2020-08-31, 23:04
  #2
Medlem
sten-bertil.taubes avatar
Nu svamlar jag bara fritt men för att nå ända fram till motståndarens läger krävs väl att motståndarlagets personal har nått antalet noll? I alla fall om man tänker sig odiskret tid och plats. Jag uppfattar "motståndarens läger" som startplatsen för motståndarlagets spelare. Känns som jag har missförstått något.
Citera
2020-08-31, 23:51
  #3
Medlem
Citat:
Ursprungligen postat av sten-bertil.taube
Nu svamlar jag bara fritt men för att nå ända fram till motståndarens läger krävs väl att motståndarlagets personal har nått antalet noll? I alla fall om man tänker sig odiskret tid och plats. Jag uppfattar "motståndarens läger" som startplatsen för motståndarlagets spelare. Känns som jag har missförstått något.
Om vi antar att lag A har ring #1 närmast och lag B har ring #n närmast och om B-spelare står i ring #2 och möter A-spelare kan B-spelaren förlora och återvänder hem, eller vinna och tar ett steg fram till ring #1. Problemet här är då att A-spelaren inte har en ring att gå in i. Kanske man får säga att när B-spelaren är i ring 1 är det samma som att han är i lägret, och tar sina "fångar" med hem. En enklare modifiering kanske skulle vara att en "strid" endast utkämpas när båda spelare står i samma ring. Det är som sagt väldigt oklara spelregler i detta "spel" och det är fritt att ställa upp de regler som önskas för att få någon form av slut på ett spel. Det verkar annars pågå i evigheter (kanske... Finns ett matematiskt bevis för det?)
Citera
2020-09-01, 00:02
  #4
Medlem
sten-bertil.taubes avatar
Citat:
Ursprungligen postat av Math-Nerd
Om vi antar att lag A har ring #1 närmast och lag B har ring #n närmast och om B-spelare står i ring #2 och möter A-spelare kan B-spelaren förlora och återvänder hem, eller vinna och tar ett steg fram till ring #1. Problemet här är då att A-spelaren inte har en ring att gå in i. Kanske man får säga att när B-spelaren är i ring 1 är det samma som att han är i lägret, och tar sina "fångar" med hem. En enklare modifiering kanske skulle vara att en "strid" endast utkämpas när båda spelare står i samma ring. Det är som sagt väldigt oklara spelregler i detta "spel" och det är fritt att ställa upp de regler som önskas för att få någon form av slut på ett spel. Det verkar annars pågå i evigheter (kanske... Finns ett matematiskt bevis för det?)
Nähä börja inte snacka matematiskt bevis med mig, då skiter jag i brallan och går hem. Det där med ringar gör att det låter diskret, även om jag var odiskret med brallan. Ska ta och kolla på länken, tack för svar.
Citera
2020-09-01, 00:11
  #5
Medlem
Citat:
Ursprungligen postat av sten-bertil.taube
Nähä börja inte snacka matematiskt bevis med mig, då skiter jag i brallan och går hem. Det där med ringar gör att det låter diskret, även om jag var odiskret med brallan. Ska ta och kolla på länken, tack för svar.
Jag tror inte det går att finna ett strikt bevis för detta spel. Simulering är nog det bästa man kan göra. Det är inte "bara" en enklare Markov-process då den har avbrott genom sina "delsegrar" och annat som stökar till det.
Citera
2020-09-01, 00:17
  #6
Medlem
sten-bertil.taubes avatar
Citat:
Ursprungligen postat av Math-Nerd
Jag tror inte det går att finna ett strikt bevis för detta spel. Simulering är nog det bästa man kan göra. Det är inte "bara" en enklare Markov-process då den har avbrott genom sina "delsegrar" och annat som stökar till det.
Jag har föresatt mig att göra ett dataprogram som simulerar detta. Jag måste bara fatta hur spelet går till. Jag hyser hopp om att jag med hjälp av länken och dina förklaringar ska förstå det. Det kan dock ta tid.
Citera
2020-09-01, 00:24
  #7
Medlem
Citat:
Ursprungligen postat av sten-bertil.taube
Jag har föresatt mig att göra ett dataprogram som simulerar detta. Jag måste bara fatta hur spelet går till. Jag hyser hopp om att jag med hjälp av länken och dina förklaringar ska förstå det. Det kan dock ta tid.
Låter intressant - tag den tid som behövs. Vi har ingen brådska.
Man får nog uppfinna lite egna regler. Spelet visat i videon verkar inte ha något slut. De bara fyller på med barn i slutet av varje lag. Eftersom ingen spelare når motståndarens lag är det svårt att säga vad som sker då. Man får definiera regler som passar. Jag gjorde ett försök - det är bara att ändra om så önskas.
Citera
2020-09-01, 01:04
  #8
Medlem
sten-bertil.taubes avatar
Citat:
Ursprungligen postat av Math-Nerd
Låter intressant - tag den tid som behövs. Vi har ingen brådska.
Man får nog uppfinna lite egna regler. Spelet visat i videon verkar inte ha något slut. De bara fyller på med barn i slutet av varje lag. Eftersom ingen spelare når motståndarens lag är det svårt att säga vad som sker då. Man får definiera regler som passar. Jag gjorde ett försök - det är bara att ändra om så önskas.
Jag har nu ägnat 30 minuter till att ens förstå reglerna. Jag klarar inte ens av att formulera reglerna i vanlig text.

Fan Math-Nerd, har du trollat mig? Du som verkade så schysst.
__________________
Senast redigerad av sten-bertil.taube 2020-09-01 kl. 01:06.
Citera
2020-09-01, 09:54
  #9
Medlem
Citat:
Ursprungligen postat av sten-bertil.taube
Jag har nu ägnat 30 minuter till att ens förstå reglerna. Jag klarar inte ens av att formulera reglerna i vanlig text.

Fan Math-Nerd, har du trollat mig? Du som verkade så schysst.
Jag skall försöka skriva någon form av pseudokod i veckan.
Citera
2020-09-03, 22:40
  #10
Medlem
Igni-ferroques avatar
Citat:
Ursprungligen postat av Math-Nerd
Tänkte vi kunde ha en separat tråd för detta, samlat och snyggt.

Snubblade över detta "spel", LÄNK

Spelreglerna är lite oklara (och barn bryr sig inte - de kan hålla på i evighet...). Men om vi skulle sätta upp ett par regler (modifiering efter behov);
  • Lag A består av n_A spelare och lag B består av n_B spelare. I demokratisk anda kan vi säga att n_A=n_B=10.
  • Spelare från lag A avancerar fram med hastigheten v_A ringar/steg per tidsenhet, och spelare från lag B avancerar fram med hastigheten v_B ringar/steg per tidsenhet/loop (barnen i video har slumpmässig hastighet, det låter vi vara en överkurs kanske)
  • När två spelare möts utkämpar de en "strid" där A vinner med slh p_A (och B med slh 1-p_A)
  • För att inte göra barnen ledsna slås de ej ut och ej längre får vara med och leka, utan den utslagna tas till fånga, konverteras till spelare av det vinnande laget, d.v.s. om en A-spelare vinner över en B-spelare blir B-spelaren en A-spelare och ställer sig sist i A-lagets rad.
  • Efter en vinst hoppar den vinnande spelaren framåt med sin hastighet samtidigt som det förlorande laget skickar ut sin nästa "soldat" med dess hastighet, varpå de möts och ny "strid" sker.
  • Skulle en spelare nå motståndarens läger belönas detta med F st. fångar från motståndarlägret som tillsammans med "soldaten" återvänder hem och ställer sig sist i kön, och vardera lag skickar ut var sin ny spelare.
  • Spelet är slut när ena laget är tömt på spelare.
Någon som har lust och tid att skriva ett Python-program för detta spel?

Hej, mitt förslag på kod(Python):

import random
import math

def duell(posita,positb,quea,queb,fartaaa,fartbbb):
proba = 0.5
dist = positb - posita
fraca = fartaaa / (fartaaa + fartbbb)
fracb = fartbbb / (fartbbb + fartaaa)
moda = fartaaa % (fartaaa + fartbbb)
modb = fartbbb % (fartbbb + fartaaa)
floora = math.floor(fraca)
floorb = math.floor(fracb)
stepa = floora*dist
stepb = floorb*dist
posita = posita + stepa
positb = positb - stepb
if moda > 0 or modb > 0:
if moda >= modb:
posita = posita + 1
else:
positb = positb - 1
check = random.random()
if check <= proba:
positb = 21
posita = posita + 1
quea = quea +1
else:
posita = 0
positb = positb - 1
queb = queb + 1
return posita,positb,quea,queb;



def move(posia,posib,qua,qub,fartaa,fartbb):
vinst = 2
if posia == 20:
if qub >= vinst:
qua = qua +vinst +1
posia = 0
qub = qub - vinst
else:
qua = qua +qub + 1
qub = 0
posia = 0
elif posib == 1:
if qua >= vinst:
qub = qub + vinst + 1
qua = qua - vinst
posib = 21
else:
qub = qub + qua + 1
qua = 0
posia = 0
elif posia == 0:
posia = 1
qua = qua - 1
elif posib == 21:
posib = 20
qub = qub - 1
elif fartaa+fartbb < posib-posia:
posia = fartaa + posia
posib = posib - fartbb
else:
posia,posib,qua,qub = duell(posia,posib,qua,qub,fartaa,fartbb)
return posia,posib,qua,qub;


def main():
posa = 0
posb = 21
ringar = 20
farta = 2
fartb = 3
qa = 10
qb = 10
wina = 0
winb = 0
wintot = wina+winb
while wintot < 1:
if qa == 0 and posa == 0:
wintot =wintot + 1
winb = winb + 1
print("Lag B vinner!")
break
elif qb == 0 and posb ==21:
wintot = wintot + 1
wina = wina +1
print("Lag A vinner!")
break
else:
posa,posb,qa,qb = move(posa,posb,qa,qb,farta,fartb)

if __name__ == "__main__": main()

Jag införde litet regler:
1. Kollar alltid först om något lag nått sista ringen före motståndarlägret. I så fall behövs ingen duell utan man får ett antal spelare ur deras kö + den egna spelaren tillbaka till sin kö.
2. Om ej 1 så kolla om positionen för något lag är i kön(0 eller 21) I så fall flyttas automatiskt en spelare ut på banan.
3. Vid duell så får vinnaren flytta en ring pga "initiativ".

Jag körde med rätt små lag och rätt få ringar som startmodell kan återkomma med litet saftigare simuleringar om så önskas!
Citera
2020-09-04, 07:04
  #11
Medlem
Citat:
Ursprungligen postat av Igni-ferroque
Hej, mitt förslag på kod(Python):...
Ser intressant ut. Kan du lägga upp koden med indenteringar m.m.? N.v. kod ger många felmeddelande.
Citera
2020-09-04, 17:33
  #12
Medlem
Igni-ferroques avatar
Citat:
Ursprungligen postat av Math-Nerd
Ser intressant ut. Kan du lägga upp koden med indenteringar m.m.? N.v. kod ger många felmeddelande.

Här kommer en något modifierad version. Jag har ändrat litet i koden dist = positionb - positiona har ändrats till positionb - positiona - 1

Detta för att få duellen att utspelas i två angränsande ringar istället för samma ring(samma ring borde ge ett något snabbare program, men med såpass små lag och få ringar märkte inte jag någon skillnad)

länk: https://www.docdroid.net/u8gaHjA/fbspel-pdf#page=2
Citera
  • 1
  • 2

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback