środa, 31 stycznia 2018

00021 - 804 - Gra Euklidesa - www.pl.spoj.com

Treść zadania:

Gra Euklidesa przebiega według następujących zasad:

•W grze bierze udział dwóch graczy (A i B). Początkowo każdy z nich dysponuje pewną niezerową liczbą identycznych żetonów - odpowiednio a i b.
•Jeżeli jeden z graczy ma mniej żetonów niż drugi, może wykonać ruch. Wykonując ruch, gracz zabiera partnerowi tyle żetonów, ile sam posiada. Żetony te są wyłączone z dalszej gry (tj. gracz wykonujący ruch ich nie przejmuje).
•Gra kończy się w sytuacji, gdy żaden z graczy nie może wykonać ruchu (w szczególności gra może skończyć się bezpośrednio po "rozdaniu" żetonów, bez jakichkolwiek ruchów).

Znając początkowe zasoby graczy (tj. wartości a i b), wyznacz łączną liczbę żetonów pozostałych w grze w chwili jej zakończenia.

Wejście
t [1 <= t <= 10; liczba partii]
a1 b1 [1 <= a1, b1 <= 1 000 000 000; początkowe liczby żetonów u graczy (partia #1) ]
a2 b2 [ jw. (partia #2) ]
...
at bt

Wyjście
r1 [ łączna liczba żetonów u obu graczy po zakończeniu partii #1 ]
r2 [ jw., dla partii #2 ]
...
rt

Przykład

Wejście:
3
1 1
2 4
9 6

Wyjście:
2
4
6

Kod źródłowy w C:
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int a, b, t;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d%d",&a,&b);
        if(a==b)
        {
            printf("%d\n",a+b);
        }
        else
        {
            while(a!=b)
            {
                if(b%a==0)
                {
                    printf("%d\n",2*a);
                    break;
                }
                if(a%b==0)
                {
                    printf("%d\n",2*b);
                    break;
                }
                if(a<b)
                {
                    b=b%a;
                }
                else
                {
                    a=a%b;
                }
            }
        }
    }
    return 0;
}


Kod źródłowy w C++:
#include <iostream>

using namespace std;

int main()
{
    int a, b, t;
    cin>>t;
    while(t--)
    {
        cin>>a>>b;
        if(a==b)
        {
            cout<<a+b<<endl;
        }
        else
        {
            while(a!=b)
            {
                if(b%a==0)
                {
                    cout<<2*a<<endl;
                    break;
                }
                if(a%b==0)
                {
                    cout<<2*b<<endl;
                    break;
                }
                if(a<b)
                {
                    b=b%a;
                }
                else
                {
                    a=a%b;
                }
            }
        }
    }
    return 0;
}


Źródło:
http://pl.spoj.com/problems/EUCGAME/

wtorek, 30 stycznia 2018

Przeplot dwóch list - Standard ML

Treść zadania:

Napisać deklarację funkcji g:int list * int list → int list, g(x, y) = przeplot list x, y liczb całkowitych

Na przykład:
g([1,4,2,5],[1,3,5,7,9,11]) = [1,1,4,3,2,5,5,7,9,11]
g([1,2,3],[4,5,6]) = [1,4,2,5,3,6]
g([1,2,3,4,5],[6,7,8]) = [1,6,2,7,3,8,4,5]
g([],[1,2,3]) = [1,2,3]
g([1,2,3],[]) = [1,2,3]

Kod źródłowy:
fun append(x, y) = if null(x) then y else hd(x) :: append(tl(x), y)
 fun g(x, y) = if null(x) then y else if null(y) then x else append(append([hd(x)],[hd(y)]),g(tl(x),tl(y)));


Przypadki testowe:
g([1,4,2,5],[1,3,4,5,7,9,11]);
g([1,2,3],[4,5,6]);
g([1,2,3,4,5],[6,7,8]);
g([],[1,2,3]);
g([1,2,3],[]);

Funkcja listy - Standard ML

Treść zadania:
Napisać deklarację funkcji f : int list → int list określonej następująco:

f(x) = lista otrzymana z listy x przez podzielenie wszystkich liczb parzystych w x przez 2 i powiększenie wszystkich liczb nieparzystych na liście x o 2.

Przykład:
f([1,2,3,4,5,6]) = [3,1,5,2,7,3]

Kod źródłowy:
fun append(x, y) = if null(x) then y else hd(x) :: append(tl(x), y)
 fun pn(x:int) = if x mod 2 = 0 then x div 2 else x+2
  fun f(x) =  if null(x) then x else append([pn(hd(x))],f(tl(x)));


Przypadek testowy:
f([1, 2, 3, 4, 5, 6]);


poniedziałek, 29 stycznia 2018

00020 - 1261 - PESEL - www.pl.spoj.com

Teść zadania:

Jan Kowalski musi wpisać do systemu szpitalnego dane osobowe pacjenta, oprócz imienia i nazwiska musi również wpisać PESEL pacjenta. Jakież było jego zdziwienie, gdy spostrzegł, że pewnych pacjentów system nie przyjmował z powodu wadliwego PESELu.

Twoim zadaniem jest sprawdzenie, czy podana liczba 11-cyfrowa jest poprawnym PESELem.

Aby sprawdzić czy dany PESEL jest prawidłowy należy wykonać następujące działania:

Pierwszą cyfrę mnożymy przez 1,
drugą cyfrę mnożymy przez 3,
trzecią cyfrę mnożymy przez 7,
czwarta cyfrę mnożymy przez 9,
piątą cyfrę mnożymy przez 1,
szóstą cyfrę mnożymy przez 3,
siódmą cyfrę mnożymy przez 7,
ósmą cyfrę mnożymy przez 9,
dziewiątą cyfrę mnożymy przez 1,
dziesiątą cyfrę mnożymy przez 3,
jedenastą cyfrę mnożymy przez 1.

Tak uzyskane 11 iloczynów dodajemy do siebie. Jeśli ostatnia cyfra tej sumy jest zerem to podany PESEL jest prawidłowy. Przykład dla numeru PESEL 44051401458

4*1 + 4*3 + 0*7 + 5*9 + 1*1 + 4*3 + 0*7 + 1*9 + 4*1 + 5*3 + 8*1 = 4 + 12 + 0 + 45 + 1 + 12 + 0 + 9 + 4 + 15 + 8 = 110

Źródło: www.wikipedia.pl

Jeśli suma jest większa od zera, wtedy sprawdzamy jej poprawność. W przeciwnym przypadku nr PESEL jest błędny. Ponieważ ostatnia cyfra liczby 110 jest zerem więc podany PESEL jest prawidłowy.

Na wejściu podana jest w pojedyńczej linii ilość t<=100 numerów PESEL do sprawdzenia. W kolejnych t liniach są 11-cyfrowe liczby.

Output
W pojedyńczej linii powinna zostać wyświetlona litera D, jeśli numer PESEL jest poprawny lub N, gdy nie.

Przykład:
Input:
2
44051401458
12345678901

Output:
D
N




Więcej o numerze PESEL: https://pl.wikipedia.org/wiki/PESEL

Kod źródłowy w C++:
#include <iostream>

using namespace std;

int main()
{
    int t, s;
    char pesel[12];
    cin>>t;
    while(t--)
    {
        cin>> pesel;
        s = 0;
        s+=(pesel[0] - '0')*1;
        s+=(pesel[1] - '0')*3;
        s+=(pesel[2] - '0')*7;
        s+=(pesel[3] - '0')*9;
        s=s+(pesel[4] - '0')*1;
        s=s+(pesel[5] - '0')*3;
        s=s+(pesel[6] - '0')*7;
        s=s+(pesel[7] - '0')*9;
        s=s+(pesel[8] - '0')*1;
        s=s+(pesel[9] - '0')*3;
        s=s+(pesel[10] - '0')*1;

        if (s>0 && s%10 == 0)
        {
            cout << "D" << endl;
        }
        else
        {
            cout << "N" << endl;
        }
    }
    return 0;
}


Kod źródłowy w Python 3:
a = input()
t = 0
while (int(t)<int(a)):

    i = input()
    j = 0
    j+= (int(i)%10*1)
    i = int(i)/10
    j+= (int(i)%10*3)
    i = int(i)/10
    j+= (int(i)%10*1)
    i = int(i)/10
    j+= (int(i)%10*9)
    i = int(i)/10
    j+= (int(i)%10*7)
    i = int(i)/10
    j+= (int(i)%10*3)
    i = int(i)/10
    j+= (int(i)%10*1)
    i = int(i)/10
    j+= (int(i)%10*9)
    i = int(i)/10
    j+= (int(i)%10*7)
    i = int(i)/10
    j+= (int(i)%10*3)
    i = int(i)/10
    j+= (int(i)%10*1)
    i = int(i)/10
 
    if (int(j)==0):
        print ("N")
    elif (int(j)%10==0):
        print ("D")
    else:
        print ("N")
    t+=1


Źródło:
http://pl.spoj.com/problems/JPESEL/

piątek, 19 stycznia 2018

Prosta funkcja - Standard ML

Napisz program który zrobi prostą funkcję w SML

f(1) = 2 = 21
f(2) = 4 = 22
f(3) = 16 = 24
f(4) = 256 = 28
f(5) = 65536 = 216

Kod źródłowy:
fun f(x:int) = if x=1 then 2 else f(x-1)*f(x-1);


Wywołania funkcji:
f(1);
f(2);
f(3);
f(4);
f(5);


czwartek, 18 stycznia 2018

Odwracanie listy - Standard ML

Funkcja przyjmuje za argument listę i odwraca ją (zmienia kolejność elementów)

Kod programu:
fun append(x, y) = if null(x) then y else hd(x) :: append(tl(x), y)
 fun reverse(x) = if null(x) then x else append(reverse(tl(x)), hd(x) :: [ ]);


Wywołanie funkcji dla listy: 1, 2, 3, 4, 5
reverse ([[1],[2],[3],[4],[5]]);


Wynikiem jest:
val it = [[5],[4],[3],[2],[1]] : int list list


Funkcja McCarthy’ego - Standard ML

Implementacja funkcji McCarthy'ego w języku Standard ML

fun  f(x) = if x>100 then x-10 else f(f(x+11));

Dla danych wejściowych:
f(100+11);


Wynikiem będzie:
val it = 101 : int


poniedziałek, 8 stycznia 2018

Microsoft SQL Server Data Tools (SSDT) installation bug error (0x80072f76) (0x80072F76)

Procedure for install:
Microsoft SQL Server Data Tools included:
•Addon Data tools for Visual Studio
•SQL Server integration services
•SQL Server anaysis services
•SQL Server reporting services

1) Download and install Microsoft Visual studio:
https://www.visualstudio.com/pl/downloads/?rr=https%3A%2F%2Fwww.google.pl%2F
2) Download and install Microsoft SQL Server:
https://www.microsoft.com/en-us/sql-server/sql-server-downloads
3) Download and install Microsoft Managent Studio (SSMS):
https://docs.microsoft.com/en-us/sql/ssms/download-sql-server-management-studio-ssms 4) Download and install Microsoft SQL Server Data-Tier Application Framework: https://www.microsoft.com/en-us/download/details.aspx?id=56356
5) Download and install Microsoft SQL Server Data Tools (SSDT)
https://docs.microsoft.com/en-us/sql/ssdt/download-sql-server-data-tools-ssdt


















If you have "Setup filed" and "Unknown error (0x80072f76) (0x80072F76)
select only: SQL Server Data Tools, reboot and after that modify and install Microsoft SQL Server Integration Services after that download only Microsoft SQL Server Anaysis Services:
All links is for 15.5.1 version.
http://download.microsoft.com/download/9/B/E/9BEC121E-B9E1-4992-96ED-CB34BFE83A2F/Microsoft.DataTools.AnalysisServices.vsix
Reboot and download and install Microsoft SQL Server Reporting Services:
http://download.microsoft.com/download/9/9/3/993942D1-7C62-4709-A02C-CAD04C42ABCB/Microsoft.DataTools.ReportingServices.vsix
Reebot and after that run Microsoft SQL Server Data Tools installator rety and click reapir.


















Reboot and test result.














In Visual studio added "Buissnes inteligence" and all Microsoft SQL Server Data Tools components.