Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
select Name from `test` where score=(SELECT score FROM `test` ORDER BY Score desc limit 3,1)SELECT * FROM `players` WHERE Score = (SELECT Score FROM `players` ORDER BY Score DESC LIMIT 2,1)with scores as(
select 1 id, 'Ivan' name, 8 score from dual union all
select 2, 'Stepan', 10 from dual union all
select 3, 'Irina', 3 from dual union all
select 4, 'Vasily', 7 from dual union all
select 5, 'Vladimir', 9 from dual union all
select 6, 'Svetlana', 10 from dual union all
select 7, 'Valentin', 9 from dual union all
select 8, 'Bla', 0 from dual
)
select name
, score
, dense_rank() over(order by score desc) as PLACE
from scores
order by score descStepan 10 1 Svetlana 10 1 Valentin 9 2 Vladimir 9 2 Ivan 8 3 Vasily 7 4 Irina 3 5 Bla 0 6
select *
from (
select name, score
-- минимальное место в группе (по очкам)
, min(place) keep(dense_rank first order by PLACE) over(partition by score) min_place
-- максимальное место в группе (по очкам)
, max(place) keep(dense_rank last order by PLACE) over(partition by score) max_place
from (
select name
, score
-- пронумеровываем результаты
, row_number() over(order by score desc) as PLACE
from scores
)
)
-- желаемое место между минимальным и максимальным в группе
where 3 between min_place and max_placeimport Data.List
dividedBy :: Int -> String -> Bool
dividedBy _ [] = False
dividedBy n b = case read b of
0 -> False
x -> n `mod` x == 0 && n /= x
dividers :: Int -> Int
dividers n = length . filter (dividedBy n). subsequences . show $ n
import Data.List
treeData = [
"0110",
"0000",
"0001",
"0000"
]
employeeSubs = elemIndices '1'
employees = map employeeSubs treeData
calcEmpl d n = foldr (\x -> (+) (calcEmpl d x)) 1 (d !! n)
calcAll = map (calcEmpl employees) [0..(length employees) - 1]
The subsequences function returns the list of all subsequences of the argument.
subsequences «abc» == ["",«a»,«b»,«ab»,«c»,«ac»,«bc»,«abc»]
Без остатка 1938 делится на четыре из этих подчисел: 1, 3, 13 и 38.
dividers = length.((.(filter (/=0).map read.tail.init.subsequences.show)) =<< filter.((0 ==).).mod)import Data.List
import Control.Monad.Instances
dividers = length.((.(filter (/=0).map read.tail.init.subsequences.show)) =<< filter.((0 ==).).mod)
main = print.dividers $ 1938dividers n = let d = (length.show) n
in length [ subNumer | a<-[1..d], b<-[0..a-1], a-b/=d, let subNumer = div (mod n (10^a)) (10^b), subNumer /= 0, mod n subNumer == 0]import Control.Applicative
import Control.Monad.Instances
import Data.List
solve = length.tail.((filter.((==0).).mod)<*>(filter (>0).map (read .('0':)).(>>= tails).inits.show))
main = readLn >>= print . solve
var n = 1938;
var s = n.ToString();
var l = s.Length;
Enumerable.Range(0, l)
.SelectMany(x => Enumerable.Range(1, l - x).Select(i => int.Parse(s.Substring(x, i))))
.Where(i => i != n && n%i == 0)
.Dump();
var src = new[] { "0110", "0000", "0001", "0000" };
Func<int, int> getRating = null;
getRating = index => src[index].OfType<Char>().Select((c, i) => c == '1' ? getRating(i) : 0).Sum() + 1;
src.Select((s, i) => getRating(i)).Sum().Dump();
#!/usr/bin/env perl
use common::sense;
use re 'eval';
my $n = 1938;
my @to_check;
for (1..length($n)-1) {
$n =~ /.{$_}(?{ push @to_check,$& })(*FAIL)/;
}
say scalar grep { $n % $_ == 0 } @to_check;select distinct a.id,a.name,a.score
from players a
left join (select distinct score from players) b on (a.score<b.score)
group by a.id,a.name,a.score
having count(b.score)=2
order by a.score desc;
select distinct a.id,a.name,a.score
from players a
left join players b on (a.score<b.score)
group by a.id,a.name,a.score
having count(b.score)=2
order by a.score desc;select a.id, a.name
from @players a
cross join @players b
group by a.id, a.name
having 3 between
sum(case when (b.Score > a.Score) then 1 else 0 end) + 1
-- минимальное место
and (sum(case when (b.Score > a.Score) then 1 else 0 end) +
sum(case when (b.Score = a.Score) then 1 else 0 end))
-- максимальное место
select a.Id, a.CategoryId, a.Name from Books a
left join Books b on b.Id = a.Id and b.CategoryId = 2
where a.CategoryId = 1 and b.Id is nulln = 1938
s = str(n)
r = set()
for a in range(len(s)):
for b in range(len(s)-a):
num = int(s[a:a+b+1])
if not n % num:
r.add(num)
print len® - 1n = "1938"
print len([i for i in range(len(n)-1) for j in range(len(n)-i) if int(n[j:j+i+1]) and int(n)%int(n[j:j+i+1])==0])
В программировании я новичок, могут быть ляпы, писал решение первой задачи на Python 2.7:
l = [str(1938)[i] for i in range(len(str(1938)))] res = 0 def sr(): m = '' for n in range(len©): m += c[n] if m != '': return int(m) else: return 0.1 for j in range(len(l)): for i in range(len(l)): c = l[i:j+1] if l != c and 1938%sr() == 0: res += 1 print res
Был бы очень признателен, если бы Вы указали узкие места и ошибки в коде. Пытаюсь научиться программировать, начал с Python.
a = '1938'
print len([1 for k in range(len(a)) for l in range(k+1,len(a)+1) if int(a[k:l]) if int(a)%int(a[k:l])==0])-1


number = 1938.to_s
unpack_string = ""
number.length.times do |num|
unpack_string += "@#{num}aa*" unless num+1 == number.length
unpack_string += "@0a#{num}" unless num < 2
end
p (number.unpack(unpack_string) - ["0"]).find_all{|element|number.to_i%element.to_i==0}.count
SELECT GROUP_CONCAT(a.Name)
FROM players AS a
INNER JOIN players AS b
ON a.Score = b.Score
GROUP BY a.Score, b.Name
ORDER BY a.Score DESC
LIMIT 2,1;SELECT sg.name
FROM Players sg
INNER JOIN Players gr2
ON (sg.score <= gr2.score)
LEFT JOIN Players gr1
ON (sg.score < gr1.score)
GROUP BY sg.name
HAVING COUNT(DISTINCT gr1.name) < 3
AND 3 <= COUNT(DISTINCT gr2.name);with
t as (select 1938 as num from dual),
tt as (select level lev, num from t connect by level <= length(to_char(num)))
select
count(
case when mod(t1.num, substr(to_char(t1.num), t1.lev, length(to_char(t1.num)) - t1.lev + 1 - t2.lev + 1)) = 0
then 1 end)
from
tt t1,
tt t2
where
t2.lev <= length(to_char(t1.num)) - t1.lev + 1
and substr(to_char(t1.num), t2.lev, length(to_char(t1.num)) - t1.lev + 1-t2.lev+1)!= t1.num
* This source code was highlighted with Source Code Highlighter.declare @num as int, @i as int = 1, @j as int = 1
set @num = 1938
drop table #t
create table #t (a int)
while @i <= len(@num) begin
set @j = 1
while @j <= len(@num) begin
insert into #t (a)
select substring(cast(@num as varchar),@i,@j) a
set @j = @j + 1
end
set @i = @i + 1
end
select distinct *, @num % a from #t where @num % a = 0 and @num <> a
* This source code was highlighted with Source Code Highlighter.var data = [
"0110",
"0000",
"0001",
"0000"
];
function calc(row){
var res = 0;
return !!row.replace(/1/g, function(m, i){
res += calc(data[i]);
}) + res;
}
for (var i = 0, row, result = 0; row = data[i++];)
result += calc(row);
alert(result); // вывод результата, выдаст 8
var data = [
"0110",
"0000",
"0001",
"0000"
];
alert(data.reduce(function calc(res, row){
return !!row.replace(/1/g, function(m, i){
res = calc(res, data[i]);
}) + res;
}, 0)); // выдаст 8
var num = String(1938);
var result = -1;
for (var e = num.length; e; e--)
for (var s = 0; s < e; s++)
result += num % num.substring(s, e) == 0;
alert(result);
<code class="python">n = 1938 r = lambda x, y: r(0, x) + r(x[1:], 0) if x else int(n % int(y) == 0 if int(y) else 0) + r(0, y[:-1]) if y else 0 print r(str(n), 0) - 1</code>
#include <iostream>
int GetRating(std::string *Data, int index)
{
int rate = 1;
for (int i =0; i<Data[index].size(); i++)
if(Data[index][i] == '1')
rate+=GetRating(Data, i);
return rate;
}
void main()
{
std::string srcData[]={"0110", "0000", "0001", "0000"};
int rate=0;
for(int i=0; i < (sizeof(srcData)/sizeof(srcData[0])) ; i++)
if(srcData[i]=="0000")
rate++;
else
rate+=GetRating(srcData,i);
std::cout << rate;
}
(define (calc tbl)
(define (rating str)
(apply + 1
(map (λ (x) (rating (list-ref tbl (car x))))
(regexp-match-positions* "1" str))))
(apply + (map rating tbl)))
(calc '("0110" "0000" "0001" "0000"))
Праздничный биатлон