Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Zagadki programistyczne!


Rekomendowane odpowiedzi

Opublikowano

-------------------- RANKING -------------------- 
 
1. @petergood - 18 pkt.

2. @1373230489-U611928.pngmistake010 - 14 pkt.

3. @MistrzMaster - 13 pkt.

4. @cody3223 - 12 pkt.

5. @`Wolen - 10 pkt.

6. @Vertoi - 2 pkt.
7. @Writen - 1 pkt.
 
-----------------------------------------------------
 
 
Ponieważ w niezbędniku brakuje konkursów dla amatorów programowania postanowiłem rozpocząć serię z prostymi łamigłówkami - być może będę tu coś wrzucał (nie)regularnie dla poćwiczenia mózgownicy swojej i Waszej. Nagród jako takich nie ma, zabawa powstaje z inicjatywy własnej, być może kiedyś się coś zorganizuje wspólnie z administracją, jeśli formuła się przyjmie.

Będę natomiast prowadził prosty ranking punktowy - ku chwale uczestników ;)

Na początek prosta łamigłówka na rozgrzewkę:
 
Part 1: Masquarade

function getPass() {
    $result = '';
    for ($i = 0; $i < 3; $i++) {
        for ($i = 0; $i < 3; $i++) {
            $result += 'A';
        }
        $result += 'B';
    }
    return $result;
}

$pass = getPass();

// do zadania specjalnego (funkcja ma wypisywać hasło w konsoli):
echo($pass); 

Pytania:
1. W jakim języku napisany jest skrypt? - 1pkt.
2. Z ilu liter składa się hasło? Podaj numery dwóch zbędnych, niepustych linii, które można usunąć bez zmiany działania funkcji. - 2pkt.
3. Zmień dokładnie 3 znaki w oryginalnej funkcji getPass(), tak aby hasło wydłużyło się trzykrotnie. - 2pkt.

4. Kod funkcji jest co prawda poprawny, ale dobrą praktyką byłoby dodanie jednego słowa kluczowego - jakie to słowo i w którym miejscu należy je dodać? Dlaczego? - 3pkt.

Zadanie specjalne:
5. Funkcja echo() nie działa? Czemu? Jak to naprawić? Dopisz odpowiedni kod (max 32 znaki nie licząc białych znaków) - 5pkt.
 
*na zielono zaznaczone są już rozwiązane zadania

Punkty zdobywają osoby, które jako pierwsze udzielą poprawnych odpowiedzi (nie trzeba odpowiadać na wszystkie pytania aby zdobyć punkty).

Powodzenia!
 
---------------------------------------------------------------------
Poprawny kod:


Dla wypisywania krótkiego hasła:

function getPass() {
    var $result = '';
    
    for (var $i = 0; $i < 3; $i++) {
        $result += 'A';
    }
    $result += 'B';
    return $result;
}

$pass = getPass();

echo($pass);

function echo(x) {
    console.log(x);
}
 

Dla wypisywania długiego hasła:

function getPass() {
    var $result = '';

    for (var $i = 0; $i < 3; $i++) {
        for (var $j = 0; $j < 3; $j++) {
            $result += 'A';
        }
        $result += 'B';
    }
    return $result;
}

$pass = getPass();

echo($pass);

function echo(x) {
    console.log(x);
} 

 

 

Chcesz precyzyjnej i zrozumiałej odpowiedzi? - Zadaj precyzyjne i zrozumiałe pytanie. Nie przyjmuję zleceń.
Nie odpowiadam na priv na pytania, które można zadać na forum. Chcesz mojej pomocy - oznacz mnie w poście =>  @"Hans Kloss PL" 

Opublikowano

Fajna inicjatywa, jeżeli chcesz mogę Ci pomóc to rozwijać :)

 

1. PHP

2. 4; 3 i 8

3. Zadeklarować inną zmienną (np j) w warunku zagnieżdżonej pętli (l. 4)

5. Nie trzeba nic dopisywać, wystarczy zastosować poprawny operator łączenia ciągów (.=):

function getPass() {
    $result = '';
    for ($i = 0; $i < 3; $i++) {
        for ($i = 0; $i < 3; $i++) {
            $result .= 'A';
        }
        $result .= 'B';
    }
    return $result;
}
 
$pass = getPass();
 
// do zadania specjalnego (funkcja ma wypisywać hasło w konsoli):
echo($pass); 
Opublikowano

 

Kluczowe w zadaniu jest to zdanie:

4. Kod funkcji jest co prawda poprawny [...]

 

W związku z czym:

 

Fajna inicjatywa, jeżeli chcesz mogę Ci pomóc to rozwijać :)

 

1. PHP

2. 4; 3 i 8  +2pkt.

3. Zadeklarować inną zmienną (np j) w warunku zagnieżdżonej pętli (l. 4) +2pkt

5. Nie trzeba nic dopisywać, wystarczy zastosować poprawny operator łączenia ciągów (.=):

 

Zdobywasz 4pkt. ;)

 

Zadania 1, 4 i 5 ciągle czekają na poprawne rozwiązanie :)

 

 

UWAGA: Nie można poprawiać własnych odpowiedzi, dajmy szansę wykazać się innym.

 

PS

A propos współpracy - jeśli ktoś przyszykuje podobne zadanko to może wysłać na priv razem z rozwiązaniami - sprawdzę i opublikuję z nickiem autora ;)

Chcesz precyzyjnej i zrozumiałej odpowiedzi? - Zadaj precyzyjne i zrozumiałe pytanie. Nie przyjmuję zleceń.
Nie odpowiadam na priv na pytania, które można zadać na forum. Chcesz mojej pomocy - oznacz mnie w poście =>  @"Hans Kloss PL" 

Opublikowano

@petergood

Tak, zadanie jest podchwytliwe ;)

To nie pehap, gdyż jak sam zauważyłeś do łączenia stringów w pehapie nie używa się "+" - to nie był błąd w kodzie.

Chcesz precyzyjnej i zrozumiałej odpowiedzi? - Zadaj precyzyjne i zrozumiałe pytanie. Nie przyjmuję zleceń.
Nie odpowiadam na priv na pytania, które można zadać na forum. Chcesz mojej pomocy - oznacz mnie w poście =>  @"Hans Kloss PL" 

Opublikowano

@1373230489-U611928.pngmistake010

Zgadza się ;)

Zgarniasz 6 punktów :D

 

Zostało jeszcze jedno pytanko za 3 punkty!

Chcesz precyzyjnej i zrozumiałej odpowiedzi? - Zadaj precyzyjne i zrozumiałe pytanie. Nie przyjmuję zleceń.
Nie odpowiadam na priv na pytania, które można zadać na forum. Chcesz mojej pomocy - oznacz mnie w poście =>  @"Hans Kloss PL" 

Opublikowano
4. Kod funkcji jest co prawda poprawny, ale dobrą praktyką byłoby dodanie jednego słowa kluczowego - jakie to słowo i w którym miejscu należy je dodać? Dlaczego? - 3pkt.

 

 

@Hans Kloss PL

Powinniśmy dodać słowo kluczowe var w miejscu:

$result = '';

tzn:

var $result = '';

Dlaczego? Bo zapobiegnie to deklarowaniu zmiennej jako zmiennej globalnej.

PS. Nigdy nie pisałem niczego w javascript więc mogę się mylić :c

Bot do gry NosTale:


[bOT] NosBota 1.3v

Opublikowano

@MistrzMaster

Nie mylisz się - 3 punkty są Twoje;)

 

Ok, mamy komplet odpowiedzi - kolejny konkurs będzie... jak będzie :D Cały czas myślę nad ciekawym zadaniem;)

Chcesz precyzyjnej i zrozumiałej odpowiedzi? - Zadaj precyzyjne i zrozumiałe pytanie. Nie przyjmuję zleceń.
Nie odpowiadam na priv na pytania, które można zadać na forum. Chcesz mojej pomocy - oznacz mnie w poście =>  @"Hans Kloss PL" 

Opublikowano

A fakt, plus za czujność ;) Musiałem ukryć, że to nie php i w końcu przeoczyłem :D

+1 pkt ;)

 

 

PS

Dziś wieczorem powinna pojawić się kolejna zagadka.

Chcesz precyzyjnej i zrozumiałej odpowiedzi? - Zadaj precyzyjne i zrozumiałe pytanie. Nie przyjmuję zleceń.
Nie odpowiadam na priv na pytania, które można zadać na forum. Chcesz mojej pomocy - oznacz mnie w poście =>  @"Hans Kloss PL" 

Opublikowano

Part 2: My name is Dżejson
 
Tym razem pobawimy się formatem JSON (JavaScript Object Notation) - jest to uniwersalny format wymiany danych - wbrew nazwie jest on niezależny od języka i można go z powodzeniem stosować w niemal każdej aplikacji.
Dokładnie wyjaśniał go nie będę, to do Was należy wyszukanie odpowiednich informacji w internecie (jeśli jeszcze go nie znacie) - polecam zacząć od tej strony: http://www.json.org/json-pl.html

Jedno jest pewne - JSONa powinien znać każdy szanujący się programista, dlatego warto spróbować wykonać przynajmniej zadania 1-3 i 5a-c.
 
Poniżej standardowo kod, który będziemy analizować - przedstawia on dotychczasowy przebieg "Zagadek Programistycznych" jako dane w formacie JSON:

{
    "ranking": [
        {
            "nick": "petergood",
            "points": 4
        },
        {
            "nick": "mistake010",
            "points": 6
        },
        {
            "nick": "Writen",
            "points": 1
        },
        {
            "nick": "MistrzMaster",
            "points": 3
        }
    ],
    "tasks": {
        {
            "id": 1,
            "published_at": 1451346540,
            "title": "Masquarade",
            "description": "Tricky JavaScript function, which returns simple password.",
            "completed": true
        },
        {
            "id": 2,
            "published_at": 1451691600,
            "title": "My name is Dżejson",
            "description": "Simple JSON operations.",
            "completed": false
        },
        {
            "id": 3,
            "published_at": null,
            "title": "Oatmeal with fingernail clippings",
            "description": "((def when? #(println "Soon" % % %)) ".")",
            "completed": false,
        }
    }
}

 
Zadania podstawowe:
1. Format JSON jako kontenery na dane może stosować obiekty { } lub tablice [ ] - wyjaśnij kiedy należy zastosować dany kontener i popraw związany z tym błędny zapis w kodzie. - 2 pkt.
2. Znajdź i popraw dwa pozostałe typy błędów w kodzie - 2 pkt.
3. W jakim formacie zapisane są czasy publikacji zadań? Czas publikacji drugiego zadania jest niepoprawny - podaj poprawną liczbę. - 2pkt

4. Podaj odpowiednik powyższego JSONa dla formatu XML - 2 pkt.
 
Zadanie specjalne:
Pod adresem :

http://appst.pl/projects/mpc/my_name_is_dzejson.php

znajduje się JSON zawierający ranking uczestników "Zagadek programistycznych" (z jednym dodatkowym rekordem, żeby można było przetestować punkt 4d).
Aby łatwiej się go czytało, polecam zainstalować sobie dodatek do przeglądarki, dla chrome będzie to:

https://chrome.google.com/webstore/detail/json-formatter/bcjindcccaagfpapjjmafapmmgkkhgoa

 
5. W dowolnym języku programowania napisz kod o następującej funkcjonalności:
 
    a. wykonanie requesta pobierającego JSON z powyższego adresu i wyświetlającego zawarte w nim dane na stronie internetowej (niezależnie od ilości uczestników) - 3 pkt.
    b. dane powinny być przedstawione jako podstawowa tabela HTML, nie trzeba dodawać żadnego CSSa - 2 pkt.
    c. pozycja powinna być obliczana na podstawie ilości punktów uczestnika - 2 pkt.
    d. miejsca ex aequo powinny mieć tą sama pozycję, a numeracja dalszych miejsc powinna się dostosowywać zgodnie z przykładem poniżej - 3 pkt.

 

    Podano już rozwiązania w następujących językach: PHP (klik), JavaScript (klik), AutoIt (klik), Python (klik)
 
Format tabeli:

Position | Nick   | Points

przykład:

Position | Nick   | Points
---------|--------|-------
1        | Gracz1 | 100
1        | Gracz5 | 100
3        | Gracz2 | 60
4        | Gracz4 | 25
5        | Gracz3 | 10
  • Kod rozwiązania należy opublikować w swoim poscie, w przypadku języków innych niż JavaScript lub PHP należy dodatkowo podać link do działającego przykładu (oczywiście mile widziane będzie podanie linków także dla rozwiązań w PHP i JS).
  • Punkty za to zadanie będą naliczane zgodnie z kolejnością podpunktów - aby dostać punkty za podpunkt "b", podpunkt "a" musi być wykonany poprawnie, itd.
  • Pierwsza osoba, która wrzuci swoje kompletne, poprawne rozwiązanie otrzyma dodatkowe 5pkt.
  • Kolejne osoby mogą również podawać swoje rozwiązania, o ile są one napisane w innych językach niż rozwiązania poprzednie lub rozwiązanie w danym języku nie otrzymało maksymalnej ilości punktów (15 punktów w przypadku pierwszej osoby lub 10 w przypadku kolejnych osób )
  • Każda osoba może podać rozwiązanie tylko w jednym języku.
  • Rozwiązania można nadsyłać do czasu publikacji kolejnej części Zagadek (pewnie w przyszły weekend).

 
Zadanie bonusowe:
6. Jaki język będzie bohaterem kolejnych "Zagadek programistycznych"? Podpowiedzi znajdziesz w moim JSONie ;) - 3 pkt.

 

*na zielono zaznaczone są już rozwiązane zadania

* na żółto zaznaczone są zadania wymagające poprawy

Chcesz precyzyjnej i zrozumiałej odpowiedzi? - Zadaj precyzyjne i zrozumiałe pytanie. Nie przyjmuję zleceń.
Nie odpowiadam na priv na pytania, które można zadać na forum. Chcesz mojej pomocy - oznacz mnie w poście =>  @"Hans Kloss PL" 

Opublikowano

Zadania Podstawowe:
1. Nawiasy klamrowe stosuje się gdy chcemy zdefiniować obiekt JSON (składający się z poszczególnych wartości), a nawiasy kwadratowe stosujemy, aby przedstawić tablicę obiektów JSON.

    Poprawione: 

"tasks": [
    {
        "id": 1,
        "published_at": 1451346540,
        "title": "Masquarade",
        "description": "Tricky JavaScript function, which returns simple password.",
        "completed": true
    },

    ...
]

 
2. Poprawione:

 {
     "id": 3,
     "published_at": null,
     "title": "Oatmeal with fingernail clippings",
     "description": "((def when? #(println \"Soon \" % % %)) \".\")",
     "completed": false
 }

 
3. Zapisane są w formacie epoch time (unix time). 1451694960 (oczywiście w GMT+1)
4. 

<?xml version="1.0" encoding="UTF-8" ?>
<quiz>
    <ranking>
        <user>
            <nick>petergood</nick>
            <points>4</points>
        </user>
        <user>
            <nick>mistake010</nick>
            <points>6</points>
        </user>
        <user>
            <nick>Writen</nick>
            <points>1</points>
        </user>
        <user>
            <nick>MistrzMaster</nick>
            <points>3</points>
        </user>
    </ranking>
    <tasks>
        <task>
            <id>1</id>
            <published_at>1451346540</published_at>
            <title>Masquarade</title>
            <description>Tricky JavaScript function, which returns simple password.</description>
            <completed>true</completed>
        </task>
        <task>
            <id>2</id>
            <published_at>1451691600</published_at>
            <title>My name is Dżejson</title>
            <description>Simple JSON operations.</description>
            <completed>false</completed>
        </task>
        <task>
            <id>3</id>
            <published_at />
            <title>Oatmeal with fingernail clippings</title>
            <description>((def when? #(println "Soon" % % %)) ".")</description>
            <completed>false</completed>
        </task>
    </tasks>
</quiz>

Zadanie specjalne:

 

Kod źródłowy: https://gist.github.com/petergood/1e89d580dad107055611

Demo: http://petergood.pl/kosz/json.php

Opublikowano

@Vertoi

3. Co prawda @petergood był szybszy (liczy się czas ostatniej edycji posta, gdyż nie wiem co tam było wcześniej), ale Twoja odpowiedź jest dokładniejsza, więc obaj otrzymujecie punkty za to zadanie: +2pkt

 

-----------------------------------------------------------------------

 

@petergood

 

1. Poprawka kodu prawidłowa, jednak wyjaśnienie różnicy nieprecyzyjne, czekam na lepsze wyjaśnienie ;) - póki co +1pkt

2. Prawidłowo, ostatni element obiektu / tablicy nie może być zakończony przecinkiem, znaki specjalne (w tym przypadku ") wewnątrz stringów muszą być poprzedzone znakiem ucieczki \: +2pkt

3. Prawidłowo: +2pkt

4. Prawidłowo: +2pkt

    Tip: do konwersji jest mnóstwo darmowych narzędzi, nie trzeba tego robić ręcznie (z czego zapewne @petergood skorzystał), np:

http://www.freeformatter.com/json-to-xml-converter.html

5. Podpunkty a, b, c prawidłowo, brakuje podpunktu d: +7pkt

 

Razem: +14ptk

 

-----------------------------------------------------------------------

 

@1373230489-U611928.pngmistake010

5. Rozwiązanie kompletne - @petergood wyprzedził Cię co prawda z rozwiązaniem podpunktów a, b i c w PHP ale otrzymujesz +3pkt za podpunkt d oraz +5pkt za pierwsze kompletne rozwiązanie zadania, razem: +8pkt

 

 

Gratuluję i czekam na rozwiązania zadania nr 5 w innych językach (przypominam, że za każdy język można zgarnąć aż 10pkt),

wyjaśnienie do zadania nr 1

oraz rozwiązanie zadania bonusowego ;)

Chcesz precyzyjnej i zrozumiałej odpowiedzi? - Zadaj precyzyjne i zrozumiałe pytanie. Nie przyjmuję zleceń.
Nie odpowiadam na priv na pytania, które można zadać na forum. Chcesz mojej pomocy - oznacz mnie w poście =>  @"Hans Kloss PL" 

Opublikowano

Proszę, moja wersja punktu 5: JS

http://51.254.115.0/projects/MPCZadanie/

 

 

Wiem, że nie jest to DRY, ani czysty kod, ale "pisane na kolanie" :)

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>MPCForum</title>
</head>
<body>
    <h2 id="sending" style="text-align: center">Czekam na odpowiedź od serwera...</h2>
    <table id="table" style="display:none">
        <thead>
            <th>Position</th>
            <th>Nick</th>
            <th>Points</th>
        </thead>
        <tbody>
        </tbody>
    </table>
    <script src="main.js"></script>
</body>
</html>

main.js:

var theUrl = "http://kapitalny.com/projects/mpc/my_name_is_dzejson.php";
var response;
var sendtxt = document.getElementById("sending");
if (window.XMLHttpRequest)
{//IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp=new XMLHttpRequest();
}
else
{//IE6, IE5
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
    if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
        response = xmlhttp.responseText;
        sendtxt.style.display = "none";
        document.getElementById("table").style.display = "block";
    } else if(xmlhttp.status==404) {
        alert("HTTP Request: Not Found [404]");
    } else if(xmlhttp.status > 500 && xmlhttp.status < 550) {
        alert("HTTP Request: Server Error");
    }
}
xmlhttp.open("GET", theUrl, false );
xmlhttp.send();

var object = JSON.parse(response);

object.ranking.sort(function(a, {
    var keyA = a.points,
        keyB = b.points;
    if(keyA > keyB) return -1;
    if(keyA < keyB) return 1;
    return 0;
});
var lastpoints;
var position = 0;
var i=1;
object.ranking.forEach(function(o) {
    var tableRef = document.getElementById("table").getElementsByTagName('tbody')[0];
    var newRow   = tableRef.insertRow(tableRef.rows.length);

    var pos  = newRow.insertCell(0);
    var nick  = newRow.insertCell(1);
    var points  = newRow.insertCell(2);

    if(o.points != lastpoints) {
        position++;
    }

    i++;
    var posnode  = document.createTextNode(position);
    var nicknode  = document.createTextNode(o.nick);
    var pointsnode  = document.createTextNode(o.points);

    pos.appendChild(posnode);
    nick.appendChild(nicknode);
    points.appendChild(pointsnode);

    lastpoints = o.points;
});

 

 

Opublikowano

@cody3223

Spoko, wygląd kodu nie jest tym razem kryterium.

 

5. Punkty a, b c działają poprawnie, brakuje punktu d - póki co: +7pkt.

 

Gratuluję ;)

Chcesz precyzyjnej i zrozumiałej odpowiedzi? - Zadaj precyzyjne i zrozumiałe pytanie. Nie przyjmuję zleceń.
Nie odpowiadam na priv na pytania, które można zadać na forum. Chcesz mojej pomocy - oznacz mnie w poście =>  @"Hans Kloss PL" 

Opublikowano

@cody3223

Spoko, wygląd kodu nie jest tym razem kryterium.

 

5. Punkty a, b c działają poprawnie, brakuje punktu d - póki co: +7pkt.

 

Gratuluję ;)

Zmodyfikowałem kod na serwerze, czy o takie coś ci chodziło? :)

Opublikowano

@cody3223

Dokładnie - tak działa większość rankingów ;)+3pkt.

 

No to JS załatwiony;) Ciekawe czy znajdzie się śmiałek, który napisze to w mniej popularnym języku ;)

 

 

 

Jakby ktoś miał ochotę zrobić to w języku nie przeznaczonym typowo do webu to może zamiast linka wrzucić execa.

Chcesz precyzyjnej i zrozumiałej odpowiedzi? - Zadaj precyzyjne i zrozumiałe pytanie. Nie przyjmuję zleceń.
Nie odpowiadam na priv na pytania, które można zadać na forum. Chcesz mojej pomocy - oznacz mnie w poście =>  @"Hans Kloss PL" 

Opublikowano

@1373230489-U611928.pngmistake010

 

Nie, każdy język może być - tak jak napisałem wyżej:

 

Jakby ktoś miał ochotę zrobić to w języku nie przeznaczonym typowo do webu to może zamiast linka wrzucić execa (z tabelką rysowaną a ASCII w konsoli). 

 

Więc np. c++, AutoIt i inne tez mogą być ;) Do Pythona, Javy, AutoIt, AHK nie trzeba execa - wystarczy kod (mam poinstalowane).

 

PS

Ale pamiętaj, że każda osoba może dostać punkty tylko za jeden język.

Chcesz precyzyjnej i zrozumiałej odpowiedzi? - Zadaj precyzyjne i zrozumiałe pytanie. Nie przyjmuję zleceń.
Nie odpowiadam na priv na pytania, które można zadać na forum. Chcesz mojej pomocy - oznacz mnie w poście =>  @"Hans Kloss PL" 

Opublikowano

@MistrzMaster

 

Można zrobić tak:

; twój kod

$cmd = "echo linia 1 & echo linia 2 & echo linia 3 & pause"
RunWait(@ComSpec & " /c " & $cmd )

Chcesz precyzyjnej i zrozumiałej odpowiedzi? - Zadaj precyzyjne i zrozumiałe pytanie. Nie przyjmuję zleceń.
Nie odpowiadam na priv na pytania, które można zadać na forum. Chcesz mojej pomocy - oznacz mnie w poście =>  @"Hans Kloss PL" 

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...