[JS] Arrays - 2 зад.


8

Условието на задачата:

Write a script that that compares two char arrays lexicographically ( letter by letter).

Споделям решение : http://jsbin.com/amoxib/3/edit

Признавам си ,че за задачките от масиви отделям повечко време от всички други досега, понякога дори се замислям това което правя ли се иска, така че очаквам критиките ви :) и по-добрите решение да завалят :)

ЕДИТ Щеше да хубаво , ако и за javascript задачките имаше по ред, два упътвания , нали :) ( Поне като се почне със  C# тези дни ще знам вече какво значи да сравня два масива лексикографски )




Отговори



5
Здравей,
хубаво ги сравняваш, но имам забележка от към условието.
Такак както е написано, аз разбирам, че се изисква да се сравнят двата масив.
Два масива са еднакви когато дължината им е еднаква и елементите в тях съвпадат.
Т.е. имаш първа проверка за дължината.
и ако съвпадат тогава проверяваш елементите им, ако съвпадат изписваш че са еднакви, а може и самите елементи да изпишеш. ако не съвпада някой елемент, преценяваш кой масив е преди другия и изписваш резултата
ако не съвпадат изписваш съответно, че неса равни. и може да изпишеш по малкия или по големия
Какво ще изпишеш точно, ти си преценяваш :)
Поздрави,
Борис Гуцев

от Boris (3959 точки)


0
Съгласен съм със забележката на колегата. И аз в своето решение първо сравнявам дължините на масивите и ако не са равни няма смисъл от по-нататъшно сравняване.
Сега нямам възможност, но вечерта и аз ще си споделя решението, тъй като ми е на друг компютър.
Поздрави!

от georgi.s.yankov (6219 точки)

0
Незнам? Аз я разбирамам по този начин:

от hard.dido2 (44 точки)



3

Здравейте,

аз изхождам от задача 2 от учебника по C#, глава 7 - Mасиви - ЛИНК

Там задачата е сходна, но проверката се прави в C#, а не в JS.

Може да прочетете упътването към задачата, за повече информация какво се има предвид под лексикографско сравнение :)

Поздрави

Борис Гуцев


от Boris (3959 точки)


1
Интересно ми е как проверявате дали даден character е буква :)

от mihalkoff (0 точки)


0
Благодаря на всички , които са коментирали ;) заемам се и .. по-късно ще дам новото си решение :)

от aleahim (0 точки)


1

Ето го и моето решение, както обещах:
http://jsfiddle.net/georgi_yankov/DvukW/

Подавам два масива като аргументи на функцията twoArraysComparison(). Първо сравнявам дължините на масивите и ако те са различни не продължавам с по-нататъшно сравняване. Ако пък дължините им съвпадат следва сравняване и на техните елементи.

Поздрави!


от georgi.s.yankov (6219 точки)


3

На мен все ми се струва, че не става дума само за равни или неравни. Поне според указанието в книгата. Моето решение. И се ходи по дължината на по-късия.


от Velidar (1099 точки)


0
Да и аз мисля, че трябва да мине късия само...

от mihalkoff (0 точки)


2
Колеги, все още имам съмнения коя е правилната логика за решаване на задачата , и от вашите отговори се вижда ,че и вие я тълкувате различно. Подавайки тези два масива , какъв ще бъде резулата според вас :
масив 1 = ["F", "S", "G", "W"]; масив 2 = [ "F", "S", "A", "W", "T", "Q"];
Благодаря предварително :)

от aleahim (0 точки)


0
На мен би ми извело:
Is array [F,S,G,W] equal to array [F,S,A,W,T,Q] ? // false

от georgi.s.yankov (6219 точки)

0
ами , да именно тук се обърквам, сравнявайки ги според условието , не се ли очаква да се изведе масивът , който примерно е по-напред чисто лексикографаски ( който , макар и с повече елементи по пътя на логиката трябва да е масив 2 ) ?

от aleahim (0 точки)



0
ами, ето го и моето готово решение :
http://jsbin.com/amoxib/16/edit ... коментарите и забележките са добре дошли :)

от aleahim (0 точки)


0
Съжалявам колежке, но използването на вложени цикли в тази задача е не само излишно но даже грешно. Така ще се сравнява всеки символ от arr1 със всеки от arr2 и резултата ще е грешен. Правилно е да се сравняват arr1[ i ] със arr2[ i ] като i = 0 до по-малката от двете дължини на масивите. Поздрави!

от Vladi5rov (934 точки)


0

Ето едно доста просто решение на задачата -> http://jsfiddle.net/hriztian/6MhQU/

 


от hriztian (50 точки)


0
определено става въпрос за сравняване на масиви, чрез елементите им, но резулата би трябвало да е масив ;) остава въпроса само, дали ,ако са еднакви трябва да се изведе един от тях с елементите или просто да се каже,че са еднакви :)

от aleahim (0 точки)

0
Ами колега, ако си стигнал дотам, че да извеждаш, не вярвам да ти е проблем да изведеш 1 или да изведеш всичките елементи на масивите... :)

от hriztian (50 точки)



1
Здравейте колеги И колежки!
Аз явно съм много назад с домашните и сега поглеждам темата.
Явно има доста подходи за решаването и реших да споделя моя.
Понеже аз продължавам да упорствам и да въвеждам входните данни чрез prompt ми се налага постоянно да мисля как да е по-дуракоустойчиво от към некоректни данни. Например ако единия или и двата масива са нулеви/ празни/ дали ще ми работи скрипта? Или ако в единия масив има само едно "а", а в другия има само едно "ааааа" - то какво ще стане? Или ако имаме еднакви масиви, но преди или след единия има по един или няколко интервала?
Исках също да обърна внимание на факта, че всеки стринг е всъщност масив от символи, следователно може да се въведе и използва директо така:
arr=prompt("arr= "); или така arr=" Ala bala Nica";
len=arr.length;
arr[ i ] == arr[ j ] за адресиране на съответния символ. В началото използвах arr.substring( i,1 ) , но после се усетих за директно индексиране.
Иначе моето решение е като на Велидар - извеждам и двата масива със знак <,=,> между тях.

от Vladi5rov (934 точки)


0
проверката може да стане с hashCode-a на символите