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

@Hans Kloss PL

Niestety ale takie coś mi nie działa, co prawda cmd się otwiera, ale już z odpaleniem komend jest problem, próbowałem na kilka sposobów :C

Nie ma nic na temat tych spacji pomiędzy nickami (zrobiłem dokładnie takie odstępy jak w twoim przykładzie, jednak nie wiem co zrobić gdy użytkownicy mają różne długości nicków, więc zostawiłem tak jak jest, jak jest źle to napisz, najwyżej poprawie)

 

W tym wypadku z exeka nic nie będzie, skoro i tak wszystko jest printowane w konsoli scite, więc podaje kod :(

http://pastebin.com/eW6bLqWJ

 Pisałem go "na szybko", wiem że można zrobić to dużo lepiej i ładniej. :P

 

Język to oczywiście autoit

Bot do gry NosTale:


[bOT] NosBota 1.3v

Opublikowano

@MistrzMaster

Super - wszystko ok :)  +10 pkt.

 

Tip:

Do ładnego sformatowania tabelki możesz użyć takiej funkcji:

 ; funkcja pobiera zmienną i zwraca łańcuch znaków o podanej długości

 Func formatOutput($input, $targetChars)
	Local $stringLength = StringLen($input)
	If $stringLength < $targetChars Then
	   Local $spacesToAdd = $targetChars - $stringLength
	   For $i = 0 To $spacesToAdd - 1
		  $input = $input & " "
	   Next
	EndIf
	Return $input
 EndFunc

Wtedy kod drukujący wyniki będzie wyglądać następująco:

 ConsoleWrite("Position | Nick            | Points" & @CRLF)
 ConsoleWrite("---------|-----------------|-------" & @CRLF)
 $index = 0
 $tempPoints = $properPointsArray[0]
 $indexToPrint = 0
 For $i = 0 To $lenOfArray - 1
	 If $tempPoints = $properPointsArray[$i] Then
		 $indexToPrint = $index
	 Else
		 $indexToPrint = $i
		 $index = $indexToPrint
	 EndIf

	 $tempPoints = $properPointsArray[$i]

	 ConsoleWrite(formatOutput($indexToPrint + 1, 8)  & " | " & formatOutput($properNickArray[$i], 15) & " | " & $properPointsArray[$i] & @CRLF)
 Next

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" 

  • 2 tygodnie później...
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://kapitalny.com/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)

 

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

To samo co @petergood czyli [] używamy do tablic danych, lub wielu obiektów a {} do pojedyńczych obiektów

// W przypadku tablic nie ustawiamy "key:..." czyli nazwy kontenera
["bG92ZS", "Bkxbx", "lanNvbg==", 15]
// możemy robić tablice w tablicy czyli wielowymiarowe
[
    [
        "jestę"
    ],
    [
        "obiektę"
    ]
]
// Oraz tablicę obiektów
[{
    "a": "b"
}, {
    "a": "b"
}]


// Natomiast w przypadku obietu już trzeba używać "keya"
{
    "1": "bG92ZS",
    "a": "Bkxbx",
    "b": "lanNvbg==",
    "num": {
        "Abc": "123"
    }
}
Opublikowano

@cody3223

Mniej więcej o taka odpowiedź mi chodziło ;) - lecą +2 punkty

 

 

 

Sory, że kolejny odcinek zagadek się tak przeciąga, ale mam ostry zapieprz w pracy;)

Btw - nikt jeszcze nie podał odpowiedzi do zadania dodatkowego ;)

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

@Mikr CS @cody3223

 

Nie hostingu, a domeny ;) Już naprawione.

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

Pewnie dało się lepiej napisać, ale z racji, że dopiero zaczynam chciałem pobawić się kodem :P. Dodałem, że niezależnie jak długi jest nick tabelka dobrze wygląda (wcześniej to się wszystko rozjeżdżało :P).

 

Użyty język: Python

Source:

 

 

import json
from urllib.request import urlopen

response = urlopen("http://appst.pl/projects/mpc/my_name_is_dzejson.php").read().decode('UTF-8')
data = json.loads(response)

table = sorted(data["ranking"], key=lambda k: k['points'], reverse=True)
longestNickname = sorted(data["ranking"], key=lambda l: len(l['nick']), reverse=True)
spaces = len(longestNickname[0]['nick']) + 3


def makechars(value, char=" "):
    space = ""
    for i in range(value):
        space += char

    return space

print('Position | Nick' + makechars(spaces - 4) + '| Points')
print('---------|-' + makechars(spaces, "-") + '|-------')
pos = 0
for i in table:
    prevPosition = pos - 1
    if(table[prevPosition]['points'] == i['points']):
        curPosition = prevPosition
    else:
        curPosition = pos
    print('' + str(curPosition + 1) + '' + makechars(9 - len(str(pos))) + '| ' + i['nick'] + '' + makechars(spaces - len(i['nick']) ) + '| ' + str(i['points']) + '')
    pos += 1

 

 

 

Screen z outputu

 

 

5616014536387401181804.jpeg

 

 

Opublikowano

Moje podejście do zadania 5, w pythonie, bez wyrównywania tabelki.

 

 

import requests
from operator import itemgetter

r = requests.get('http://appst.pl/projects/mpc/my_name_is_dzejson.php')

data = r.json()['ranking']
sorted_data = sorted(data, key=itemgetter('points'), reverse=True) #sortuje wg punktów


print('Position | Nick   | Points')
print('---------|--------|-------')
last_person = None

for i in range(len(sorted_data)):
    if last_person and last_person['points'] == sorted_data[i]['points']:
        print(str(last_i+1) + ' | ' + sorted_data[i]['nick'] + ' | ' + str(sorted_data[i]['points']))
    else:
        print(str(i+1) + ' | ' + sorted_data[i]['nick'] + ' | ' + str(sorted_data[i]['points']))
    last_person = sorted_data[i]
    last_i = i

 

output z terminala:

 

 

Position | Nick   | Points
1 | petergood | 18
2 | mistake010 | 14
2 | FakeGuy1 | 14
4 | MistrzMaster | 13
5 | cody3223 | 7
6 | Vertoi | 2
6 | FakeGuy2 | 2
8 | Writen | 1

 

plz dodatkowe punkty bo kod ladniejszy :p

 

 

kolega wyzej dał skrinshot to ja też dam nie będę gorszy.

 

 

6tY8KdW.png

 

 

 

trudniejsze zadanka, ale wykonywalne w kazdym jezyku plz.

space-core-o.gif

  • 2 tygodnie później...
Opublikowano

C# .Net

 

 

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using System.Web;
using Newtonsoft.Json;
using MoreLinq;

namespace Program
{
    public class MpcUser
    {
        [JsonProperty("nick")]
        public string Nick { get; set; }
        [JsonProperty("points")]
        public int Point { get; set; }
    }
    class Program
    {
        static void Main(string[] args)
        {
            var myJson = GetJson("http://appst.pl/projects/mpc/my_name_is_dzejson.php");
            var myObject = JsonConvert.DeserializeObject<Dictionary<string, List<MpcUser>>>(myJson);

            var selectRanking = myObject.Where(x => x.Key == "ranking").Select(y => y.Value).FirstOrDefault();
            if(selectRanking != null)
            {
                var orderByScore = selectRanking.OrderByDescending(x => x.Point);
                int stage = 1;
                Console.WriteLine("{0,10}|{1,15}|{2,15}", "Pozycja", "Nick", "Punkty");
                Console.WriteLine("--------------------------------------------------");
                foreach(var eachElement in orderByScore)
                {
                    Console.WriteLine("{0,10}|{1,15}|{2,15}", stage, eachElement.Nick, eachElement.Point);
                    stage++;
                }
            }
            
        }

        public static string GetJson(string url)
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);

            WebResponse response = request.GetResponse();
            using (Stream responseStream = response.GetResponseStream())
            {
                StreamReader reader = new StreamReader(responseStream, Encoding.UTF8);
                return reader.ReadToEnd();
            }
        }
    }
}
 

 

 

y3hl2h.jpg

Osobiście pomagam tylko na PW lub e-mail


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


https://github.com/smietanka

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...