Questions d'entretiens - Perl developer

100

Questions d'entretien pour Perl Developer partagées par les candidats

Principales questions d'entretien

Trier: Pertinence|Populaires|Date
Booking.com
On a demandé à un Perl Developer...24 mars 2014

You have datastructure my $users = [ { name => 'John', score => 10, }, { name => 'Bob', score => 1, }, { name => 'Carlos', score => 5 }, { name => 'Alice', score => 5, }, { name => 'Donald', score => 7 } ]; now u have to arrange the name with highest to lower score, if score is same than in alphabetical order #expected output: # John # Donald # Alice # Carlos # Bob

13 réponses

$users = [['name' => 'lucas', 'score' => 10], ['name' => 'pablo', 'score' => 5], ['name' => 'luis', 'score' => 7], ['name' => 'diego', 'score' => 10]]; $res = []; foreach($users as $user) { $res[$user['score']][] = $user['name']; } krsort($res); foreach($res as $score => $users) { if(count($users) > 1) natsort($users); foreach($users as $user) { echo "#".$user." "; } } echo "\n"; Moins

Can be done easily, if we use a stable sort. I dont know perl; but I am guessing the provided data structure is a hashtable (or a dictionary!) sorted_names = sorted(users.keys()) this will sort all names in alphabetical order Now python's sort is stable; so we can simply finish this by: return sorted(sorted_names, key=lambda x: users[x], reverse=True) Moins

'John', 'score' => 10], ['name' => 'Bob', 'score' => 1], ['name' => 'Carlos', 'score' => 5], ['name' => 'Alice', 'score' => 5], ['name' => 'Donald', 'score' => 7] ]; $list = []; foreach ($users as $user) { $name = $user['name']; $score = $user['score']; if (!isset($list[$score])) { $list[$score] = [$name]; continue; } //User with same count, push the name array_push($list[$score], $name); } krsort($list); foreach ($list as $users) { if (count($users) > 1) { natsort($users); } foreach($users as $user) { echo $user . "\n"; } } Moins

Afficher plus de réponses
Booking.com

I face only one question. If you are given 2 array A={3,1,2,4} B={1,4}. Write a program to compare two arrays and create another array which holds the common values between two array!

12 réponses

my @A = ( 3,1,2,4,3 ); my @B = ( 1,4,4,5,5 ); my $hash = +{}; my @C; for ( @A ) { $hash->{$_} = 1; } for ( @B ) { $hash->{$_} = 2 if $hash->{$_}; } for ( keys %$hash ) { push @C, $_ if $hash->{$_} > 1; } Moins

my @a=(1,2,3,4,8,9,0); my @b=(2,5,6,8); my %a = map{$_ => undef} @a; my @ix = grep { exists( $a{$_} ) } @b; Moins

in the previous post was a small error .. correct answer is reposted here #!/usr/bin/perl my @a = ('3','1','2','4','44'); my @b = ('23','44','1','4'); print "@a \n"; print "@b \\n"; my @res; my %a_hash =(); foreach (@a) { ++$a_hash{$_}; }; foreach (@b) { if ($a_hash{$_} >0) {push @res, $_; }; }; print "Common values @res\n"; Moins

Afficher plus de réponses
Booking.com

one question was as under - "Symmetric Difference of Arrays" Input: two arrays of integers Output: one array of integers which occur in only one (not both) arrays Test case: Input: [ 1, 7, 8, 2, 4, 5 ] [ 3, 5, 1, 7, 6, 9 ] Output: [ 8, 2, 4, 3, 6, 9 ]

9 réponses

I answered in Python. I gave them two answers as under def get_diff(a,b): c=[] for i in a: if not(i in b) and not(i in c): c.append(i) for i in b: if not(i in a) and not(i in c): c.append(i) return c or set.union(set(a),set(b))-set.intersection(set(a),set(b)) Moins

In java: Integer[] input = new Integer[] {1, 7, 8, 2, 4, 5}; Integer[] input2 = new Integer[] {3, 5, 1, 7, 6, 9}; Set set = new HashSet(Arrays.asList(input)); Set set2 = new HashSet(Arrays.asList(input2)); Set intersection = new HashSet(set); intersection.retainAll(set2); set.removeAll(intersection); set2.removeAll(intersection); set.addAll(set2); Integer[] uniques = new Integer[set.size()]; set.toArray(uniques); Moins

use strict; use warnings; use Data::Dumper qw(Dumper); my @a1 = (1, 7, 8, 2, 4, 5); my @a2 = (3, 5, 1, 7, 6, 9); my @r = (); for my $item (@a1) { if(!grep {$_ == $item} @a2) { push @r, $item; } } for my $item (@a2) { if(!grep {$_ ==$item} @a1) { push @r, $item; } } print Dumper \@r; Moins

Afficher plus de réponses
Booking.com

How do you remove duplicates from an array of integers?

7 réponses

my @input = (1,2,3,1,10,4,3,4,5,2,3,4); my $seen = {} my @result = grep { not $seen->{$_} } @input; Moins

hi

aliissa

Afficher plus de réponses
Booking.com

You have the file with word at a single line. #input sample file abactor abaculus abacus Abadite . . Zyrenian #Output ******************a **********b ************************c a) you have to count the character and create a histogram in alphabetical order. b) now you have to produce a histogram with max 80 character in line in reference to max count c) now same out based histrogram based on the character count

6 réponses

#!/usr/bin/env perl use strict; use warnings; &main(); sub main { my %hist; open (my $fh, ") { my $line = lc($_); @arr = split("", $line); foreach my $ch (@arr) { $hist{$ch}++; $char_counter++; $most = $hist{$ch} if $most = $most-$a) { print "x "; } else { print " "; } } print "\n"; } print " a b c d e f g h i j k l m n o p q r s t u v w x y z\n"; } Moins

#!/bin/perl # # # # my %tab; while() { chomp; map { ++$tab{$_} } split // ; } foreach my $key (sort keys %tab) { print '*' x $tab{$key}; print "$key\n"; } __DATA__ abactor abadite abaculus abacus Moins

#!/bin/perl # # All three conditions a,b,c is here. # use strict; use warnings; open my $fh, 'input.txt' or die('Cannot open file.'); my %counter; my $max = 0; while () { map { $max = ++$counter{$_} > $max ? $counter{$_} : $max } grep { $_ =~ /[a-z]/ } split //, lc $_; } foreach my $k ( reverse sort { $counter{$a} $counter{$b} } keys %counter ) { print ( ('*' x int( 79 / $max * $counter{$k} ) ) . $k . ($counter{$k} == $max ? '' : "\n")); } print "\n"; close($fh); Moins

Afficher plus de réponses
Booking.com

Can you optimize the algoritm which you wrote.

5 réponses

With hash table is fastest

sub anagram_part { my ( $str, $substr ) = @_; my @str = split //, $str; my @substr = split //, $substr; L: while ( @str && @substr ) { my $cl = shift @substr; while ( my $c = shift @str ) { goto L if $cl eq $c; } return 0; } return 0 if scalar @substr; return 1; } Moins

public static boolean check(String original, String subString) { if(original == null || subString == null) { return false; } if("".equals(subString)) { return true; } int positionAtOriginal = 0; for(int i = 0; i < subString.length(); i++) { char currentChar = subString.charAt(i); boolean findCurrentChar = false; while(positionAtOriginal < original.length()) { if(original.charAt(positionAtOriginal) == currentChar) { findCurrentChar = true; } positionAtOriginal++; if(findCurrentChar) { break; } } if(!findCurrentChar) { return false; } } return true; } Moins

Afficher plus de réponses
Booking.com

Write a function get_hops_from(page1, page2) that will determine the number of hyperlinks that you would need to click on to get from some page1 on the web to some other page2 on the web. For example, if each page below links to the pages that are indented below it, e.g. page 1 links to pages 2 and 5, and page 2 links to pages 3 and 4, and page 5 links to pages 3 and 7, then the get_hops_from(page1, page7) should return 2 (2 hops), since you have to hop once from page 1 to 5 and once more from page 5 to page 7. page1 : distance == 0 page2 : distance == 1 page3 : distance == 2 page4 : distance == 2 page5 : distance == 2 page3 : distance == 2 page7 : distance == 2 Assume that an API is available to: * get_links(a_page) will return an array/list of all pages that a_page links to

5 réponses

The above answer will perform very poorly since you are using a Depth First Search. In the world wide web the depth of your graph can be practically infinite therefore you should have used BFS (breadth first search) Moins

/** * Notes: * ------ * This solution assumes that there must be a sequence of hops from p1 to p2. * BFS uses a large amount of memory because we have to store the pointers. */ public static int getHopsFrom(int p1, int p2) { Queue queue = new LinkedList(); ArrayList pages = getPages(p1); HashSet visitedPages = new HashSet(); visitedPages.add(p1); queue.addAll(pages); int levelSize = pages.size(); int newLevelSize = 0; int hops = 1 ; while(!queue.isEmpty()) { int currentPage = queue.remove(); if(currentPage==p2) { return hops; } else { if(!visitedPages.contains(currentPage)) { queue.addAll(getPages(currentPage)); newLevelSize+= getPages(currentPage).size(); visitedPages.add(currentPage); } } levelSize--; if(levelSize == 0) { hops++; levelSize = newLevelSize ; newLevelSize = 0; } } return -1; } Moins

public static int GetHops(int p1, int p2) { Queue currentLevel = new Queue(); Queue nextLevel = new Queue(); int hops = 0; HashSet visited = new HashSet(); currentLevel.Enqueue(p1); while (currentLevel.Count > 0) { int temp = currentLevel.Dequeue(); visited.Add(temp); if (temp == p2) { return hops; } List pages = GetPage(temp); foreach (int item in pages) { if (!visited.Contains(item)) { nextLevel.Enqueue(item); } } if (currentLevel.Count == 0) { currentLevel = new Queue(nextLevel); nextLevel.Clear(); hops++; } } return -1; } Moins

Afficher plus de réponses
Booking.com

Create monolithic sublists from an array of integers ,in increasing order for example [1,2,4,7,5,6,3,2] will give [[1,2,4,7][5,6],[3],[2]]

5 réponses

my @array = (1,2,4,7,5,6,3,2); my @sub; my $i=0; while ($i<=$#array) { my @set; push(@set,$array[$i]); for(my $j=$i;$j<=$#array;$j++){ if($array[$j]<=$array[$j+1]){ push(@set,$array[$j+1]); } else{ $i= $j+1; last; } } push(@sub,\@set); } Moins

$src = [1,2,4,7,5,6,3,2]; foreach (@{$src}) { ++$idx if $dest->[$idx]->[-1] > $_; push @{$dest->[$idx]}, $_; } # result: $dest = [[1,2,4,7][5,6],[3],[2]] Moins

use strict; use warnings; use Data::Dumper qw(Dumper); my @main_list = (1, 2, 4, 7, 5, 6, 3, 2); my $prev = $main_list[0]; my @result = (); my $index = 0; foreach my $num (@main_list) { if($prev > $num) { print Dumper \@result; @result = (); $index++; } push @result, $num; $prev = $num; } print Dumper \@result; Moins

Afficher plus de réponses
Booking.com

Convert number above in hexadecimal 312312 Ex. 255 -> FF 254 -> 254 div 16 = 14, int(254/16) = 15. -> F, E Later I found the detailed Division-remainder in source base http://en.wikipedia.org/wiki/Hexadecimal#Division-remainder_in_source_base

3 réponses

#*************************************************************************** # Creator: Zoran Hristov 03-02-2015 # # NAME: # convertDecToHex # # # PARAMETERS: # $decimal - decimal input # # RETURNS: # $rez - hexadecimal representation of the decimal input #*************************************************************************** sub convertDecToHex { my $decimal = $_[0]; my %conversionHash; $conversionHash{0} = '0'; $conversionHash{1} = '1'; $conversionHash{2} = '2'; $conversionHash{3} = '3'; $conversionHash{4} = '4'; $conversionHash{5} = '5'; $conversionHash{6} = '6'; $conversionHash{7} = '7'; $conversionHash{8} = '8'; $conversionHash{9} = '9'; $conversionHash{10} = 'A'; $conversionHash{11} = 'B'; $conversionHash{12} = 'C'; $conversionHash{13} = 'D'; $conversionHash{14} = 'E'; $conversionHash{15} = 'F'; my $decimali = $decimal; my $rez; my $rem = 1; while ( $decimal ne 0 ) { print " curent print reminder decimal \n"; $rem = $decimal % 16; print "curent devision returns $rez\n"; my $ind = $decimal - $rem; if ( $ind = 0 ) { $rez = $conversionHash{$rem} ; } else { print "For curent decimal $decimal we will transalte to $conversionHash{$rem}\n"; $decimal = ( $decimal - $rem ) / 16 ; $rez = $conversionHash{$rem} . $rez; } } print "\n Input decimal value $decimali was translated in hex reresented by: $rez \n"; } # end of sub convertDecToHex Moins

my @digits = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F); my $num = 312312; { my $out = ""; use integer; while($num > 16) { $m = $num % 16; $num = $num / 16; $out = $digits[$m] . $out; } print "$num$out\n"; } Moins

That's more perlish, universal approach :X perl -e '($n,$b)=@ARGV;@m=(0..9,"A".."F");$o="";while($n>0){$r=$n%$b;$n=int$n/$b;$o="$m[$r]$o"};print $o' 256 16 Moins

Booking.com

You have input arrays and one output. The output one contains only the elements that are only in one of the arrays. Fallow u question is what is the complexity of problem and algorithm

3 réponses

I answered as compare every element of the first one if exist in the second one and vice versa Moins

sub difference { my ($arr1, $arr2) = @_; %count = (); foreach $element (@{$arr1}, @{$arr2}) { $count->{$element}++; } @difference = (); foreach $key (keys $count) { if ($count->{$key} eq 1) { push (@difference, $key); } } print "Uncommon numbers from both arrays are : @difference", "\n"; } Moins

my $arr1 = [1,3,5,6,7,8,9,77]; my $arr2 = [43,6,3,5,234,66,4]; print join ' ', @{difference($arr1, $arr2)}; sub difference{ my ($arr1, $arr2) = @_; my @difference = (); my $count = {}; $count->{$_}++ for (@$arr1, @$arr2); for (keys %$count) { push @difference, $_ if ($count->{$_} == 1) ; } return \@difference; } Moins

1 - 10 sur 100 questions d'entretien

Consultez les questions posées en entretiens pour des emplois similaires

data engineeretl developerphp developerpython developersite reliability engineer