Små problemer kan løses gratis. Du trenger ikke å registrere en bruker. Det er to måter å bruke Alloker på:
.xlsx fil i riktig format så vil algoritmene fungere.
Prøv selv med f.eks. algoritmen Utsatt aksept.Når beregningen er gjort får du resultatet tilbake. Du kan anonymisere data slik at personsensitive opplysninger aldri forlater ditt system, men alle data slettes uansett etter én time.
Det er viktig at strukturen i ditt regneark er identisk med eksemplene.
Det eneste som skjer automatisk er at ekstra mellomrom før og etter tekst fjernes, f.eks. vil " Ola Nordmann " tolkes som "Ola Nordmann".
Men dersom du skriver "Ola Nordmann" i en celle og "ola nordmann" i en annen, så vil dette tolkes som to ulike personer.
Du kan teste Excel-opplasting på f.eks. algoritmen Utsatt aksept.
Et API (Application Programming Interface) lar datamaskiner snakke sammen. APIet lar deg løse store problemer, automatisere og integrere med andre IT-systemer.
Du kan bruke APIet direkte fra nettsiden om du ønsker:
{"data": {...}, ...}Alle moderne programmeringsspråk gjør det enkelt å jobbe med APIet. Her er et eksempel i språket Python, som viser hvordan man kan kalle APIet både med og uten API-nøkkel.
import requests
import time
import json
# Dersom du har en API nøkkel, legg den inn her for å bruke den
API_KEY = ""
headers = {"X-API-Key": API_KEY} if API_KEY else None
# Data du vil sende inn
data = {
"data": {
"persons": [
{"id": "Ola", "preferences": ["B", "C", "D", "A"]},
{"id": "Kari", "preferences": ["D", "C", "B", "A"]},
{"id": "Petter", "preferences": ["D", "A", "B", "C"]},
{"id": "Lise", "preferences": ["C", "D", "B", "A"]},
],
"groups": [
{"id": "A", "capacity": 1, "priorities": ["Petter", "Lise", "Kari", "Ola"]},
{"id": "B", "capacity": 1, "priorities": ["Petter", "Kari", "Lise", "Ola"]},
{"id": "C", "capacity": 1, "priorities": ["Ola", "Petter", "Kari", "Lise"]},
{"id": "D", "capacity": 1, "priorities": ["Petter", "Kari", "Ola", "Lise"]},
],
}
}
# Send inn problemet med data
response = requests.post(
"https://alloker.no/api/v1/algorithms/top-trading-cycles/tasks",
json=data,
headers=headers,
)
response.raise_for_status()
# Lagre task ID slik at vi kan hente resultatet
task_id = response.json()["task_id"]
print(f"Opprettet oppgave med ID: {task_id}")
for attempt in range(10):
# Prøv å hent ut svaret. Hvis ikke, vent litt
result_response = requests.get(
f"https://alloker.no/api/v1/tasks/{task_id}", headers=headers
)
result_response.raise_for_status()
response_json = result_response.json()
if response_json["result"]:
break
time.sleep(2**attempt)
assert response_json["task"]["status"] == "SUCCESS"
print("Resultat:")
print(json.dumps(response_json, indent=2))
Fra terminalen kan du bruke verktøy som curl (eller wget) til å kalle APIet.
Dersom du har en fil data.json med input-data og en fil api_key.txt med din
API-nøkkel, så kan du kalle APIet slik:
$ curl -X POST https://alloker.no/api/v1/algorithms/top-trading-cycles/tasks \
-H "Content-Type: application/json" \
-H "X-API-Key: $(cat api_key.txt)" \
-d @data.json
Du vil få et svar som ligner på dette:
{"task_url":"https://alloker.no/api/v1/tasks/f5181f12-d26d-4236-8822-fdd16de53eaa",
"task_id":"f5181f12-d26d-4236-8822-fdd16de53eaa"}
Du kan hente resultatet med en GET request:
$ curl -X GET https://alloker.no/api/v1/tasks/f5181f12-d26d-4236-8822-fdd16de53eaa \
-H "Content-Type: application/json" \
-H "X-API-Key: $(cat api_key.txt)"
Dersom du har jq installert (et verktøy for å jobbe med JSON), kan du automatisere hele prosessen:
# Send inn oppgave og lagre task ID
curl -X POST https://alloker.no/api/v1/algorithms/top-trading-cycles/tasks \
-H "Content-Type: application/json" \
-H "X-API-Key: $(cat api_key.txt)" \
-d @data.json
TASK_ID=$(curl -X POST https://alloker.no/api/v1/algorithms/top-trading-cycles/tasks \
-H "Content-Type: application/json" \
-H "X-API-Key: $(cat api_key.txt)" \
-d @data.json | jq -r '.taskId')
# Vent litt for å være sikker å at beregningen er ferdig
sleep 2
# Hent resultatet
curl -X GET https://alloker.no/api/v1/tasks/${TASK_ID} \
-H "Content-Type: application/json" \
-H "X-API-Key: $(cat api_key.txt)" | jq '.'
{
"task": {
"id": "f5181f12-d26d-4236-8822-fdd16de53eaa",
"status": "SUCCESS",
"algorithm": "top-trading-cycles",
"submitted": "2025-11-29T12:06:33.835742Z",
"started": "2025-11-29T12:06:33.874989Z",
"finished": "2025-11-29T12:06:33.888530Z",
"submittedBy": "test",
"errorMessage": null,
"errorType": null
},
"result": {
"Kari": "C",
"Lise": "A",
"Ola": "B",
"Petter": "D"
}
}
Vår policy er å lagre minst mulig data. Input-data og det tilhørende resultatet lagres maksimalt i én time og slettes deretter fra serveren. Grunnen til at det lagres i én time er for å gi deg tid til å hente resultatene.
Selv om IT-sikkerhet er en prioritet, så er sannheten at alle IT-systemer kan kompromitteres: banker, pasientsystemer og kjernekraftverk har alle blitt hacket. Heldigvis finnes det en enkel løsning: dersom du har bekymringer rundt personvern, så anbefales det å konvertere navn til heltall.
012Du kan eventuelt konvertere til unike tilfeldige tall, eller til UUIDer. Uansett vil det være umulig for utenforstående å vite hva slags problem du bruker APIet til å løse. Da trenger du ikke å stole på IT-sikkerheten til denne tjenesten for å bruke den.
I regneark kan du bruke VLOOKUP-funksjonen for å konvertere mellom navn og tall.
Nedenfor er en Python-kodesnutt som viser hvordan konvertering kan gjøres programmatisk.
class Anonymizer:
"""Map data to integers 0, 1, 2, 3, ... and back."""
def __init__(self):
self._map: dict = {}
self._reverse_map: dict = {}
self._idx: int = 0
def map(self, value) -> int:
if value not in self._map:
self._map[value] = self._idx
self._reverse_map[self._idx] = value
self._idx += 1
return self._map[value]
def reverse_map(self, index: int):
return self._reverse_map[index]
anonymizer = Anonymizer()
names = ["full_name_A", "full_name_B", "full_name_C", "full_name_A"]
unique_ids = [anonymizer.map(name) for name in names] # [0, 1, 2, 0]
names_again = [anonymizer.reverse_map(_id) for _id in unique_ids]
assert names == names_again