Zagadka logiczna

Odpowiedz Nowy wątek
2011-09-16 16:53

Rejestracja: 16 lat temu

Ostatnio: 2 dni temu

0

Cześć, mam problem logiczny i w żaden sposób nie mogę znaleźć wyniku.
O co chodzi: jest liczba w postaci binarnej i na jej podstawie jest tworzony bajt. Pytanie w jaki sposób, oto zestaw danych przykładowych:

Liczba: 00001000 01011100 01110010 00100000
bajt: 11001000

liczba: 00001000 00100101 01000110 01101000
bajt: 01001000

liczba: 00001000 10100000 11111101 11101010
bajt: 01011000

liczba: 00001000 01110111 11111100 11101010
bajt: 01011000

liczba: 00001000 00000100 00000011 11101011
bajt: 01011000

liczba: 00001000 00001000 10011001 11101010
bajt: 01011000

liczba: 00001000 11100101 11001111 11101010
bajt: 01011000

liczba: 00001000 10010001 00110010 00111101
bajt: 10111000

Wg mnie najbardziej liczą się 2 skrajne bajty, ale w jaki sposób to nie mam pojęcia.

Pozostało 580 znaków

msm
2011-09-17 16:54
msm
Administrator

Rejestracja: 10 lat temu

Ostatnio: 8 godzin temu

0

Masz może trochę więcej danych przykładowych?

Na początku myślałem że ostateczny bajt to suma 4 składowych (mod 256). Niestety nie... Sprawdziłem dodatkowo, żadna kombinacja operacji dodawania, odejmowania, mnożenia, dzielenia, and, or, xor i mod nie prowadzi do wyniku.

Zająłem się za to poszczególnymi bitami, i wygląda to tak:

                   A B CD
 01011100 01110010 00100000
 00100101 01000110 01101000
 10100000 11111101 11101010
 01110111 11111100 11101010
 00000100 00000011 11101011
 00001000 10011001 11101010
 11100101 11001111 11101010
;10010001 00110010 00111101

~C  B  D  A
 1  1  0  0
 0  1  0  0
 0  1  0  1
 0  1  0  1
 0  1  0  1
 0  1  0  1
 0  1  0  1
;1  0  1  1

Za wyjątkiem ostatniego bajta który do niczego nie pasuje (dosłownie, to praktycznie negatyw poprawnego rozwiązania) wszystko się podejrzanie zgadza. Dość dużo jak na zbieg okoliczności, ale kto wie...

edytowany 4x, ostatnio: msm, 2011-09-17 16:55
Zbuduj model regresyjny. - somekind 2011-09-17 17:01

Pozostało 580 znaków

2011-09-17 17:49

Rejestracja: 9 lat temu

Ostatnio: 4 lata temu

0

może jakaś podpowiedź skąd to masz?
i czy możesz sam wprowadzać dane na wejście? jak tak to zapodałbyś kilka przykładowych danych koło siebie


Pół giga extra na dropboxie? Pół giga extra na dropboxie! Tyle wygrać! >>Klik here<<
Przydałyby się też dane dla samych zer i samych jedynek. - msm 2011-09-17 18:12

Pozostało 580 znaków

2011-09-17 21:33

Rejestracja: 12 lat temu

Ostatnio: 3 lata temu

0

Idąc tropem MSMa wykombinowałem coś takiego:

                   AC B D
 01011100 01110010 00100000
 00100101 01000110 01101000
 10100000 11111101 11101010
 01110111 11111100 11101010
 00000100 00000011 11101011
 00001000 10011001 11101010
 11100101 11001111 11101010
 10010001 00110010 00111101

~C ~B  D  A
 1  1  0  0
 0  1  0  0
 0  1  0  1
 0  1  0  1
 0  1  0  1
 0  1  0  1
 0  1  0  1
 1  0  1  1

Tylko mi się A w ostatnim nie zgadza

Pozostało 580 znaków

2011-09-19 09:40

Rejestracja: 16 lat temu

Ostatnio: 12 godzin temu

0
  1. wymagany GCC, albo przerobić liczby binarne na hex albo dec
  2. może być potrzebna zamiana kolejności bajtów (endianess)
  if (liczba = 0b00001000010111000111001000100000)
    bajt = 0b11001000;
  else if (liczba = 0b00001000001001010100011001101000)
    bajt = 0b01001000;
  else if (liczba = 0b00001000101000001111110111101010)
    bajt = 0b01011000;
  else if (liczba = 0b00001000011101111111110011101010)
    bajt = 0b01011000;
  else if (liczba = 0b00001000000001000000001111101011)
    bajt = 0b01011000;
  else if (liczba = 0b00001000000010001001100111101010)
    bajt = 0b01011000;
  else if (liczba = 0b00001000111001011100111111101010)
    bajt = 0b01011000;
  else if (liczba = 0b00001000100100010011001000111101)
    bajt = 0b10111000;
  else throw "dupa";

tyle można powiedzieć z pewnością na podstawie danych.

edytowany 1x, ostatnio: Azarien, 2011-09-19 09:40
nie ma switcha w gcc? ;) - unikalna_nazwa 2011-09-19 16:17
jest std::map :-P - Azarien 2011-09-19 16:37

Pozostało 580 znaków

2011-09-19 11:58

Rejestracja: 16 lat temu

Ostatnio: 2 dni temu

0
unikalna_nazwa napisał(a)

może jakaś podpowiedź skąd to masz?
i czy możesz sam wprowadzać dane na wejście? jak tak to zapodałbyś kilka przykładowych danych koło siebie

Dane mogę sam wprowadzać. Chodzi o numery kart sczytywanych przez dwa urządzenia różnych firm. Niestety ze względu na ograniczoną ilość zbliżeniówek nie mam więcej danych.

Też wymyśliłem kilka teorii i zawsze jeden albo dwa się nie zgadzały ;>

Pozostało 580 znaków

msm
2011-09-19 12:43
msm
Administrator

Rejestracja: 10 lat temu

Ostatnio: 8 godzin temu

0

Jakich urządzeń? Może po prostu poszukaj jakiejś specyfikacji zamiast się z bitami bawić?
Tak czy inaczej na chwilę obecną Azarien ma rację...

edytowany 1x, ostatnio: msm, 2011-09-19 12:44

Pozostało 580 znaków

2011-09-19 15:55

Rejestracja: 9 lat temu

Ostatnio: 4 lata temu

0

możesz też zwracać zawsze 01011000 z 62,5% szansą trafienia ;)
a to nie są po prostu jakieś identyfikatory kart, a ten bajt na wyjściu to po prostu uprawnienia przypisane danej karcie w bazie danych?

nie za bardzo widzę inny sens produkowania jednego bajta z czterech poza czymś takim i jakąś funkcją hashującą ale to odpada bo coś ten zwracany "hash" jest za bardzo kolizyjny


Pół giga extra na dropboxie? Pół giga extra na dropboxie! Tyle wygrać! >>Klik here<<
edytowany 1x, ostatnio: unikalna_nazwa, 2011-09-19 15:58

Pozostało 580 znaków

2011-09-19 16:39

Rejestracja: 16 lat temu

Ostatnio: 12 godzin temu

0

zbuduj sieć neuronową, naucz znanymi danymi i zobacz może na coś wpadnie :-)

To już drzewo decyzyjne było by znacznie lepsze. Przynajmniej łatwo odczytać wzór. - 0x200x20 2011-09-19 16:41
Drzewa są dla lamerów, to musi być sieć! - somekind 2011-09-19 17:25
Tja jak się nie ma pojęcia co wybrać to zawsze to będzie sieć neuronowa albo algorytm genetyczny. Przynajmniej brzmi kozacko. - 0x200x20 2011-09-19 17:32
A ciemny lud wszystko kupi, bo to przecież "sztuczna inteligencja". ;) - somekind 2011-09-19 17:59

Pozostało 580 znaków

2011-09-30 04:13

Rejestracja: 12 lat temu

Ostatnio: 5 lat temu

0

Mam nadzieje, ze jeszcze sie przyda autorowi :) Szkoda, ze wczesniej przeoczylem ten watek(lubie zagadki:)) :/
Moja 'wizja'(kolejnosc troche zmieniona):

                  xGxHxIJK
10100000 11111101 11101010
 bajt: 0101
01110111 11111100 11101010
 bajt: 0101
00000100 00000011 11101011
 bajt: 0101
00001000 10011001 11101010
 bajt: 0101
11100101 11001111 11101010
 bajt: 0101 
01011100 01110010 00100000
 bajt: 1100
00100101 01000110 01101000
 bajt: 0100 
10010001 00110010 00111101
 bajt: 1011

A = ~G, B = ~H, C = I, D = J or K. Bajt to ABCD. Przykladowo pierwszy(z listy autora tematu) przypadek:
00001000 01011100 01110010 00100000 -> 00100000 czyli G, H, I, J, K = 0. Z tego wynika, że A = 1, B=1, C=0, D=0 -> 1100
Ostatni z listy przypadek:
00001000 10010001 00110010 00111101 -> 00111101 -> G=0, H=1, I=1, J=0, K=1 -> A=1, B=0, C=1, D=1 ->1011
Wydaje mi się, że jest ok w każdym przypadku.... chociaż i tak uwazam, ze ten algorytm wyglada 'jakos inaczej' i gdybysmy mieli wiecej przykladowych danych to dla ktorego zestawu moj sposob by nie zadzialal ;)


Pisze programy/skrypty na zlecenie/zaliczenie - c/c++/asembler/java. GG - 2100119, mail w profilu.

edytowany 3x, ostatnio: cyriel, 2011-09-30 04:16

Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0