# -*- coding: utf-8 -*-
"""P2-BCandidate Elimination algorithm (1).ipynb

Automatically generated by Colab.

Original file is located at
    https://colab.research.google.com/drive/1J2QTr3esKQiO5tSmwN9heAyTb86Lzh7f
"""

import numpy as np
import pandas as pd

data = pd.read_csv('/content/enjoysport.csv')
data

concepts = np.array(data.iloc[:,0:-1])
print("\nInstances are:\n",concepts)
target = np.array(data.iloc[:,-1])
print("\nTarget Values are: ",target)

def learn(concepts, target):
    specific_h = concepts[0].copy()
    print("\nInitialization of specific_h and genearal_h")
    print("\nSpecific Boundary: ", specific_h)
    general_h = [["?" for i in range(len(specific_h))] for i in range(len(specific_h))]
    print("\nGeneric Boundary: ",general_h)

    for i, h in enumerate(concepts):
        print("\nInstance", i+1 , "is ", h)
        if target[i] == "yes":
            print("Instance is Positive ")
            for x in range(len(specific_h)):
                if h[x]!= specific_h[x]:
                    specific_h[x] ='?'
                    general_h[x][x] ='?'

        if target[i] == "no":
            print("Instance is Negative ")
            for x in range(len(specific_h)):
                if h[x]!= specific_h[x]:
                    general_h[x][x] = specific_h[x]
                else:
                    general_h[x][x] = '?'

        print("Specific Bundary after ", i+1, "Instance is ", specific_h)
        print("Generic Boundary after ", i+1, "Instance is ", general_h)
        print("\n")

    indices = [i for i, val in enumerate(general_h) if val == ['?', '?', '?', '?', '?', '?']]

    for i in indices:
        general_h.remove(['?', '?', '?', '?', '?', '?'])
    return specific_h, general_h

s_final, g_final = learn(concepts, target)
print("Final Specific_h:", s_final, sep="\n")
print("Final General_h:", g_final, sep="\n")

#my coode

import pandas as pd
import numpy as np

# Load dataset
data = pd.read_csv(r'/content/enjoysport.csv')

# Split into features and target
concepts = np.array(data.iloc[:, :-1])
target = np.array(data.iloc[:, -1])

def find_s(concepts, target):
    for i, val in enumerate(target):
        if val.lower() == 'yes':
            specific_h = concepts[i].copy()
            break

    for i, val in enumerate(concepts):
        if target[i].lower() == 'yes':
            for x in range(len(specific_h)):
                if val[x] != specific_h[x]:
                    specific_h[x] = '?'
    return specific_h

print("Most specific hypothesis:", find_s(concepts, target))

