knowledgebase/journals/2024_01_26.md
2024-02-17 17:31:16 +01:00

3.4 KiB

  • Discussione con #GPT-4 per la creazione delle sessioni d'esame in #Probo
    • Supponi di avere un oggetto JSON di questo tipo:

      { "frutti": ["arance", "limoni", "ciliege", "meloni", "ananas", "mele", "pere"], "persone": ["Andrea", "Mario", "Fabio"] }

      Genera uno script in jq che a partire dall'oggetto JSON dato produca un altro oggetto JSON che associ ad ogni persona più frutti selezionati dal JSON in input. Ad ogni persona devono essere associati frutti differenti (non è possibile che per una persona venga ripetuto un frutto). Ciascuna persona deve possedere lo stesso numero di frutti. L'associazione dev'essere casuale.

      Esempio di output dello script jq:

      { "Andrea": ["arance", "limoni", "meloni"], "Mario": ["ciliege", "limoni", "pere"], "Fabio": ["mele", "arance", "ananas"] }

      jq non supporta la generazione di numeri casuali o l'accesso a elementi di un array in modo casuale. Tuttavia, puoi ottenere un risultato simile a quello che stai cercando utilizzando un linguaggio di scripting come Python o JavaScript insieme a jq.

      Ad esempio, in Python potresti fare qualcosa del genere:

      import json
      import random
      
      # Carica il JSON
      with open('input.json') as f:
          data = json.load(f)
      
      # Mescola la lista dei frutti
      random.shuffle(data['frutti'])
      
      # Calcola quanti frutti per persona
      fruits_per_person = len(data['frutti']) // len(data['persone'])
      
      # Crea un nuovo dizionario con le persone e i loro frutti
      output = {}
      for i, person in enumerate(data['persone']):
          output[person] = data['frutti'][i*fruits_per_person:(i+1)*fruits_per_person]
      
      # Stampa il risultato
      print(json.dumps(output, indent=2))
      

      Questo script caricherà il tuo JSON, mescolerà la lista dei frutti, quindi assegnerà ad ogni persona una porzione della lista dei frutti.

      Tieni presente che questo script non garantirà che ogni persona riceva un numero uguale di frutti se il numero totale di frutti non è un multiplo del numero di persone. Inoltre, non garantirà che ogni persona riceva frutti diversi, poiché i frutti vengono assegnati in blocchi.

      Secondo te qual è il linguaggio di scripting più adatto per questo caso d'uso a parte Python e JS?

      Oltre a Python e JavaScript, un altro linguaggio di scripting che potrebbe essere adatto per questo caso d'uso è Ruby. Ruby ha un'ottima gestione dei dati JSON e supporta nativamente la generazione di numeri casuali e l'accesso casuale agli elementi dell'array. Ecco un esempio di come potrebbe essere fatto in Ruby:

      require 'json'
      
      # Carica il JSON
      data = JSON.parse(File.read('input.json'))
      
      # Mescola la lista dei frutti
      data['frutti'].shuffle!
      
      # Calcola quanti frutti per persona
      fruits_per_person = data['frutti'].length / data['persone'].length
      
      # Crea un nuovo hash con le persone e i loro frutti
      output = {}
      data['persone'].each_with_index do |person, i|
        output[person] = data['frutti'][i*fruits_per_person...(i+1)*fruits_per_person]
      end
      
      # Stampa il risultato
      puts JSON.pretty_generate(output)
      

      Come con lo script Python, questo script Ruby non garantirà che ogni persona riceva un numero uguale di frutti se il numero totale di frutti non è un multiplo del numero di persone. Inoltre, non garantirà che ogni persona riceva frutti diversi, poiché i frutti vengono assegnati in blocchi.