Do tegorocznej edycji CONFidence nie zostało już za dużo czasu (3-4 czerwca), a ja mam jeszcze trzy wejściówki do rozdania. Czas najwyższy na zapowiadany konkurs, a w zasadzie trzy konkursy, każdy o jeden bilet wstępu.

Zanim jednak przejdę do konkursu kilka "przypomnień":
- Jeśli nadal chcecie kupić bilet na CONFidence, to najlepiej to zrobić przed 27 maja (wtedy zmienia się cena biletów).
- Z tego co mi wiadomo, to biletów już wiele nie zostało, a na kilka dni przed konferencją może ich zupełnie zabraknąć.
- Dla przypomnienia, kod rabatowy: GC_20 (20%)
- Dla osób w wieku 13-19 lat: Są jeszcze miejsca na CONFidence Class (to osobne wydarzenie, szczegóły na stronie).

A teraz CONFidence golf!

Konkursy w skrócie
Konkursy polegają na napisaniu jak najkrótszego kodu w językach C++, JavaScript lub Python (patrz zasady wspólne oraz per język poniżej), który wygeneruje następującą grafikę: click (SHA256: ab18085a27c560ff03d479c3f32b289fb0a8d8ebb58c3f7081c0b9e1895213b6).

Każdy wskazany język programowania to osobny konkurs, i nagrodą w każdym z nich jest jedna bezpłatna wejściówka na konferencję CONFidence 2019.

Deadline: 22 maja 2019 12:00 CEST

Wspólne zasady
1. Wygenerowana grafika MUSI być w 100% zgodna z oryginałem, tj. wartości kolorów wszystkich pikseli grafiki muszę całkowicie zgadzać się z wzorcową grafiką.
2. Zgłoszenie następuje poprzez wysłanie e-maila z załączonym plikiem zawierającym jeden plik (per konkurs) na adres: gynvael+confidence2019golf@coldwind.pl ORAZ umieszczenie SHA256 zgłoszonego pliku w komentarzu pod tym postem (wyjaśnienie "co to SHA256 i jak to obliczyć" w FAQ na dole posta).
3. Można wysłać dowolną liczbę zgłoszeń na dowolną liczbę konkursów, przy czym na potrzeby konkursu będą rozważane jedynie najnowsze zgłoszenia z danego języka od danego autora.
4. Żaden z komputerów, na których testowany będzie kod, nie będzie podłączony do internetu (tj. nie można korzystać z żadnych zewnętrznych zasobów).
5. W przypadku zgłoszeń o tej samej wielkości liczy się czas nadesłania (czym szybciej tym lepiej).
6. W razie wątpliwości zachęcam do pytania w komentarzach lub bezpośrednio (sekcja Kontakt).
7. Ograniczenie czasu wykonania zgłoszonych programów w każdym przypadku wynosi 60 sekund. [Dodane 2019-05-17 18:08]

Konkurs C++
1. Konkurs (i jedną wejściówkę na CONFidence 2019) wygrywa autor zgłoszenia (C++), który spełnia wszystkie zasady konkursowe i jest najkrótszy (w rozumieniu wielkości pliku "confidence.cc" w bajtach).
2. Zgłoszony plik źródłowy musi nazywać się "confidence.cc".
3. Kod będzie kompilowany domyślnym GCC (g++) zainstalowanym na najnowszym Ubuntu Server (19.04).
4. Po skompilowaniu (g++ confidence.cc - warningi będą ignorowane) oraz uruchomieniu (./a.out) program musi wygenerować plik zgodny z formatem BMP o nazwie "confidence.bmp". Obraz na wygenerowanym pliku BMP musi być w 100% zgodny z wzorcową grafiką (patrz Wspólne zasady punkt 1).
5. System operacyjny będzie świeżo po instalacji i nie będzie na nim żadnych dodatkowych bibliotek poza domyślnymi. System nie będzie miał dostępu do internetu.

Konkurs Python 3.x
1. Konkurs (i jedną wejściówkę na CONFidence 2019) wygrywa autor zgłoszenia (Python 3.x), który spełnia wszystkie zasady konkursowe i jest najkrótszy (w rozumieniu wielkości pliku "confidence.py" w bajtach).
2. Zgłoszony plik źródłowy musi nazywać się "confidence.py".
3. Kod będzie uruchamiany poleceniem python3 na domyślnej instalacji najnowszego Ubuntu Server (19.04).
4. Po uruchomieniu (python3 confidence.py) programu musi wygenerować plik zgodny z formatem PNG o nazwie "confidence.png". Obraz na wygenerowanym pliku PNG musi być w 100% zgodny z wzorcową grafiką (patrz Wspólne zasady punkt 1).
5. System operacyjny będzie świeżo po instalacji i nie będzie na nim żadnych dodatkowych bibliotek poza domyślnymi. System nie będzie miał dostępu do internetu.

Konkurs JavaScript
1. Konkurs (i jedną wejściówkę na CONFidence 2019) wygrywa autor zgłoszenia (HTML/JavaScript, środowisko przeglądarki Chrome), który spełnia wszystkie zasady konkursowe i jest najkrótszy (w rozumieniu wielkości pliku "confidence.html" w bajtach).
2. Zgłoszony plik źródłowy musi nazywać się "confidence.html".
3. Kod będzie uruchamiany w najnowszej przeglądarce Chrome na Windows 10.
4. Po uruchomieniu (chrome file:///.../confidence.html) program musi wyświetlić wygenerowaną grafikę na elemencie HTML typu <CANVAS> o wielkości zgodnej z wzorcową grafiką. Podczas testów wygenerowana grafika zostanie zapisana na dysk (rclick na CANVAS → Save image as...) i porównana z grafiką wzorcową, z którą musi być zgodna w 100% (patrz Wspólne zasady punkt 1).
5. System operacyjny i przeglądarka Chrome będą świeżo po instalacji i nie będzie na nich żadnych dodatkowych bibliotek i rozszerzeń poza domyślnymi. System nie będzie miał dostępu do internetu.

FAQ
Q: Kiedy wyniki?
A: W ciągu 24h po deadline (22 maja 2019 12:00 CEST).

Q: Czy wielkość i umiejscowienie wyświetlanego elementu <CANVAS> (JavaScript) jest istotne?
A: Nie. Ważne, żeby <CANVAS> był widoczny na stronie, i żeby, po zapisaniu na dysk, grafika z <CANVAS> miała wymiary grafiki wzorcowej.

Q: Jak dokładnie będą grafiki porównywane?
A: Grafika testowana oraz wzorcowa zostaną sprowadzone do plików "raw" (czysta beznagłówkowa bitmapa 24bpp), po czym zawartość plików zostanie porównana (nie może być żadnych różnic).

Q: Jak wygenerować SHA256 pliku?
A: W skrócie, SHA256 to 256-bitowy numer wyliczany z zestawu danych (np. z pliku). Jego obliczenie w zasadzie sprowadza się do użycia jakiegoś narzędzia, które to za nas zrobi. Wyliczony numer jest pseudo-unikatowy dla każdego pliku, więc może służyć np. do rozróżniania plików, lub weryfikacji czy dany plik doszedł bez uszkodzeń.
Przykładowy SHA256 wygląda następująco:
559aead08264d5795d3909718cdd05abd49572e84fe55590eef31a88a08fdffd (SHA256 wygenerowany z pliku zawierającego pojedynczą literę "A").
Aby obliczyć SHA256:
- na Linuxie w terminalu: sha256sum nazwa.pliku
- na Windowsie w terminalu: certutil -hashfile nazwa.pliku sha256
Ew. można na google znaleźć wiele innych sposobów jak to zrobić.

HF GL!

Comments:

2019-05-17 17:05:26 = 42
{
1) Czy jest ograniczenie czasu wykonania programu (od uruchomienia do zakończenia tworzenia pliku graficznego) ( ͡° ͜ʖ ͡°)? Rozumiem, że nie wypada by ten czas wynosił kilka dni z powodu deadlineu :)

2) Czy 'programu musi wygenerować plik zgodny z formatem' jest rozumiane jako utworzenie i zapis do pliku o danej nazwie w katalogu w którym znajduje się plik źródłowy?
}
2019-05-17 17:33:00 = qq
{
Czy mógłbyś udostępnić, najlepiej jako 'one-liner', komendę wykonującą:
"""
Grafika testowana oraz wzorcowa zostaną sprowadzone do plików "raw" (czysta beznagłówkowa bitmapa 24bpp), po czym zawartość plików zostanie porównana (nie może być żadnych różnic).
"""
Czy będziesz to robił bardziej "ręcznie" (np. GIMPem).
}
2019-05-17 18:07:15 = Gynvael Coldwind
{
@42
1) Ah, miałem to napisać. 60 sekund :)
2) Tak

@qq
Ręcznie będę to robił, najpewniej IrfanView, a potem porównanie czymkolwiek.
}
2019-05-17 20:20:28 = Code
{
Minifikacja wchodzi w grę?
}
2019-05-17 20:35:44 = Gynvael Coldwind
{
@Code
Yup :)
}
2019-05-17 21:01:50 = 42
{
Co z kanałem Alfa? Musi nadal być w pliku PNG?
GIMP np. wydaje różne pliki .data dla różnych trybów (RGB, RGBA, indexed itp.) mimo że zawartość plików jest taka sama.
Uzyskałem jednolitość otwierając dany plik, robiąc Ctrl+A, Ctrl+C, Ctrl+Shift+V i dopiero to zapisując jako plik .data.
Nie mam jak teraz przetestować jak generuje pliki RAW Irfan, ale zwróć na to uwagę ;)
}
2019-05-17 21:13:24 = srakai
{
sha: b31423c5d644e680e1a538477917ac95bed5dabeaa1c6d7b4af71f7bd5bed5ec
}
2019-05-17 21:35:42 = blamedrop
{
3e5a2276dcf7f23d574855ea1968e6fe67af4614b749f2e0a550bcd21b3e5f86
}
2019-05-17 21:44:54 = blamedrop
{
cd8a93300183503b81290b1f0d52584dc764584bcc00645d9816241d6f7214b7
}
2019-05-17 21:46:51 = Gynvael Coldwind
{
@42
Jak pisałem w FAQ, porównywać będę 24-bitowe bitmapy, więc kanał alpha (jeśli będzie), będzie ignorowany. Co znaczy również, że po prostu nie musi go być.
}
2019-05-17 21:47:50 = Gynvael Coldwind
{
Ah, no i jeśli się nie mylę, to wzorcowy PNG ma kanał alpha i tak ustawiony na 255 wszędzie, więc kanał nie wpływa w żaden sposób na wyświetlenie obrazu :)
}
2019-05-17 23:44:50 = blamedrop
{
0d88ca64f8b402f90949a24a9eece29eec2f8f6027bb4cb4a127de6fd792e6e2
}
2019-05-18 01:06:48 = blamedrop
{
f37b6f7a8c82c47a673503addb1dd9bc77aed4d4993cc6e26ed7b437bf5802be
}
2019-05-18 18:11:24 = Aresqn
{
3d6410f0d5a61ef2526c919c827b9a049f058322e3876258bab72374af329857
}
2019-05-18 20:48:34 = Aresqn
{
cfff29aefa19e7f96e0e80da85dc645e3b57fd9247d2697936d45b3f3abf44b9
}
2019-05-18 21:26:26 = Aresqn
{
0f2df2a2cbfd5a5a799a8bce628f34fe68fd2da79c1f5dd95cf5d6cdd2e3ef4f
}
2019-05-19 08:31:18 = Aresqn
{
a35a735527838af342d07e54098fc553a1586b98b6b385a6d311a34f91bc647b
}
2019-05-19 14:10:30 = Aresqn
{
11cb228e3f4db7fa08dff203993ef784e55e49ac213ef206788342d554453c00
}
2019-05-19 15:26:09 = Kamil
{
068f37cebec7b9806ed8cd04063b3a11deeaa6b8
}
2019-05-19 15:27:38 = Kamil
{
26312e4b5cbce56dffea90edad8d81babec25c6eb247509300e6f5ac031b6ab0
}
2019-05-21 09:44:36 = Nism0
{
cec78cf05e53814269cfec68c8c3fa64ea79850a9fdc76f5412cfbe40198e47d
}
2019-05-21 15:20:15 = d33tah
{
6cebde61f8a06555e5979360b0d54d38d726d384306eec12b3edd25779b94d59
}
2019-05-21 16:11:35 = Nism0
{
36295ebee532c08caef76620f40f159d0108449193700b706686d20d5d1cceb9
}
2019-05-21 19:21:43 = kcpikkt
{
d644a10121b3eadb9be7f42907fc5c6a141a91276cfec8e9a445bc590e19aceb
}
2019-05-21 19:26:51 = Aresqn
{
7a7d1624952ecda3b56106e565dce2214aeebd28ef254b6c4717161757977b57
}
2019-05-21 21:51:23 = sokol
{
7df88892d4c30481bcb34f17253469099ce148fbeab6b73dd9ff57be86405417
}
2019-05-21 22:21:26 = Tomą
{
9747a2df36f0ebc60f97a4042a84ecabb3fa65bf6c4f5d0c9950dcdb9d96aaf5
}
2019-05-21 22:24:41 = sokol
{
6a857a3fd0685a640841769698a82f78002473c0213f98a46ea5d32a46ba3390
}
2019-05-21 22:54:40 = sokol
{
171ee8762ae66a933b956652110a8642b2405a4fc9548749c98ee047d4199a6d
}
2019-05-21 22:57:11 = argeento
{
9371c9a15609566799b616c4fcc0b05cffaa8b1bb0c96ecd8ad75658fc9621d8
}
2019-05-21 23:20:04 = MarekR22
{
d716448da3dbc79852adec7ef8352961ace6b62720e0f8b070a0a5925a7591b1
}
2019-05-21 23:35:52 = MarekR22
{
a5f75111a8c462dcd666a5501a0b50aa2af9eef73b38a9bca604c0840a931843
}
2019-05-22 01:17:24 = Tinekk
{
6be87346fe956442290c415df4443fd3d11c8ac2e95b0e5a045f39fd9ac8a676
}
2019-05-22 03:52:53 = argeento
{
24319380c0ec692bec9c512ab1a9bd4ee12d75a6e619194131eefc24aaff983a
}
2019-05-22 08:54:57 = sokol
{
3dccb495877181a34984a1db8a1ec1534c51546849557b7d3655c44a85a65d82
}
2019-05-22 09:20:57 = sokol
{
67363fd0bbd191a150131b65860eb1537613354634bbe7196c56397c2d05a64f
}
2019-05-22 09:34:47 = sokol
{
95e8d3a0247666da7d4d4614eb0e8c703c5646eec1f104cc765bb314891c4f79
}
2019-05-22 09:55:10 = Nism0
{
11cca0fb1440f7633d35cb42d0b060ad6b6885e7d61722e8df505794ea2b4240
}
2019-05-22 11:25:37 = sokol
{
eb5f3d670ec8700f0222e7c6a9b9c1c6c880f0c9fb8a0d60e35b65c42d3eff9a
}
2019-05-22 11:39:42 = Nism0
{
7df10667386bb3f66237f6cd062a966b469700a667edc1c57dd393d25744bf28
}

Add a comment:

Nick:
URL (optional):
Math captcha: 5 ∗ 6 + 10 =