To jest odmiana quine .
Wprowadzenie
Wszyscy piszemy krótki kod, ponieważ z jakichś niejasnych powodów , ale cokolwiek zrobimy, zajmie co najmniej 144 pikseli / bajt (czcionką 12px). Ale co by się stało, gdybyśmy kodowali nasz kod w obrazach? To jest dzisiaj twoje zadanie.
Wyzwanie
Twoim zadaniem jest odczytanie własnego kodu źródłowego (dozwolone są niepoprawne quiny, np. Dosłowne czytanie pliku źródłowego) i utworzenie z niego obrazu, poprzez ustawienie czerwonych, zielonych i niebieskich składników piksela na podstawie ASCII wartość znaku.
Przykład:
Mamy ciąg „Witaj świecie!”
Hello world!
Przekształćmy to w wartości ASCII:
72 101 108 108 111 32 119 111 114 108 100 33
Odwzoruj na nim wartości RGB (jeśli długości kodu źródłowego nie można podzielić przez 3, użyj 0 jako pozostałych znaków):
__________________________________________________
| R | G | B || R | G | B || R | G | B || R | G | B |
----------------------------------------------------
|72 |101|108||108|111|32 ||119|111|114||108|100|33 |
----------------------------------------------------
Następnie tworzymy obraz z najmniejszym obszarem z niego. Mamy 4 zestawy wartości RGB, więc najmniejszy obraz będzie obrazem 2 * 2, przechodzącym od lewego górnego piksela w prawo:
Otrzymujemy ten okropnie kolorowy obraz (przeskalowany, więc jest przynajmniej widoczny, dowodzi również, jak mały może być)
Zasady / Informacje dodatkowe
- Nie ma danych wejściowych
- Dane wyjściowe powinny znajdować się w osobnym pliku lub w osobnym oknie.
- W przypadku znaków wielobajtowych podziel znak na 2 bajty.
- Kod źródłowy musi mieć co najmniej 1 bajt
- Obraz powinien być tym z możliwych rozmiarów, który ma najbliższy stosunek szerokości do wysokości do 1
- Liczba pikseli na obrazie powinna dokładnie wynosić pułap (liczba bajtów / 3), nie należy dodawać żadnych dodatkowych pikseli
Punktacja
To jest golf golfowy , więc wygrywa najmniejsza odpowiedź w bajtach.
źródło
height = N
iwidth = 1
? Myślę, że masz na myśli szerokość / wysokość najbliższą 1.Odpowiedzi:
Właściwie 12 bajtów
Wypróbuj online!
Ten program działa również na poważnie.
Ten program wyświetla obraz PPM , który jest domyślnie akceptowany .
Obraz wyjściowy (przeskalowany w górę 50x):
Wyjaśnienie:
źródło
MATLAB,
817269 bajtówTworzy to anonimową funkcję, którą można wkleić do okna poleceń i uruchomić za pomocą
ans()
. Po uruchomieniu tworzy 23-pikselowy obraz (liczba pierwsza), dlatego najbardziej kwadratową reprezentacją jest prosta tablica pikseli.Wyjaśnienie
Po wklejeniu do okna poleceń funkcja anonimowa automatycznie przypisuje się do zmiennej
ans
. Następnie z funkcji anonimowej korzystamy:który ocenia
char(ans)
w obrębie przestrzeni nazw okna poleceń, a nie w lokalnej przestrzeni nazw funkcji anonimowej. Dlatego jest w stanie przekonwertować samą funkcję anonimową na reprezentację ciągu.Następnie mamy następujące operacje, które są prostsze:
źródło
ans
pomysł!ans
do momentu zakończenia pierwszego uruchomienia, co spowoduje,ans
że stanie się samą funkcją. Za drugim razem używa „własnego” kodu (właściwie to kod oddzielnej, ale identycznej anonimowej funkcji). Biorąc to pod uwagę, nie znam MATLAB, więc mogę się mylić.evalin
wywoływaniachar(ans)
w podstawowym obszarze roboczym.evalin
Jest oceniana tylko w czasie wykonywania więc chociażans
nie jest zdefiniowany po wklejeniu go w oknie poleceń, gdy dzwoniszans()
do uruchomienia tej funkcji anonimowej,ans
jest zdefiniowane ievalin
połączenia wewnątrz funkcji anonimowej do niego dostęp. Nie musisz więc uruchamiać go dwa razy. Gdybym mógł polegać na dwukrotnym uruchomieniu,evalin('base', 'char(ans)')
zostałbym zastąpiony przezchar(ans)
JavaScript (ES6)
324312309 bajtówJestem pewien, że to może być trochę golfa:
Nowe linie dla czytelności:
Wynik
źródło
f=()=>{
Tutaj, po prostu zróbf=_=>
, -1 bajt, po prostu nie używaj, javascript jest luźno wpisanyJavaScript ES6 - 216 bajtów
Nie golfowany:
Uwaga:
f
zwraca płótno.Przykład uruchomienia (przy założeniu, że jest
<body>
do dołączenia):Należy zrzucić następujący obraz na stronę (powiększenie):
źródło
PowerShell v4, 64 bajty
Pobiera zawartość własnej nazwy pliku, rzutuje ciąg znaków jako tablicę char, dodaje nagłówek PPM i ustawia zawartość na a.ppm jako wynik. 64 bajty to 11 x 2 piksele:
źródło
Node.js, 63 bajty
Wysyła obraz do pliku o nazwie
P6
znajdującej się w PPM formacie (P6).Oto wersja PNG (7 x 3 piksele):
źródło
PHP, 226 bajtów
Grał w golfa
Wersja bez golfa
Wprowadź ten skrypt do pliku o nazwie „p.php” i uruchom go. Potrzebujesz własnej metody uruchamiania skryptu PHP, ponieważ jest on odczytywany z pliku lokalnego.
Obraz wyjściowy:
źródło
Znaki Java 511
Długość rozwiązania prowadzi do większego obrazu, który jest fajny, ponieważ te zdjęcia są naprawdę ładne.
Zauważ, że jest niewidoczny końcowy znak nowej linii! Odczytuje plik źródłowy, który musi być „Q.java” i tworzy obraz „Q.png”, który wygląda następująco:
lub skalowane 100x
źródło
APL (Dyalog) , 33 bajty
Wymaga
⎕IO←0
ustawienia domyślnego w wielu systemach. Ponadto Autoformatowanie powinno być wyłączone, aby zachować program dokładnie tak, jak podano.Hex B9 BA FD 4E 50 55 54 BB F8 0D 50 0D C2 CD FD 41 56 B2 0D 03 0B 01 FF 0D C2 BB C8 FD 4E 52 0D 16 0D
Unicode 28 2282 2395 4E 50 55 54 2283 29 27 50 27 2C 2355 2395 41 56 2373 27 0D 026B 08 2363 27 2C 2283 233D 2395 4E 52 27 66 27
Tworzy
P
: P3 11 1 255 185 186 253 78 80 85 84 187 248 13 80 13 194 205 253 65 86 178 13 3 11 1 255 13 194 187 200 253 78 82 13 22 13Zapisujesz i upuszczasz tutaj, aby zobaczyć:
⎕NR'f'
N a est R reprezentacja programu f⊃⌽
wybierz ostatni (podświetlony pierwszy z odwróconego) elementu (linii)'␍ɫ␉⍣',
wstaw cztery znaki (typ pliku, szerokość, wysokość, maks.)⎕AV⍳
znaleźć odpowiadające indeksy w A Tomic V wtryskiwacza (zestaw znaków⍕
sformatuj jako tekst'P',
przygotować list(
…)
Zastosuj następującą funkcję ukrytą:⊂
weź cały argument [do]⎕NPUT
N atywny [plik,] Umieść [to z nazwą pliku składającą się z]⊃
pierwszy znak („P”)źródło
Python, 81 bajtów
Dane wyjściowe są w formacie PPM.
Oto jak wygląda obraz:
Skalowane w górę:
źródło
q
P6
formatu, nie musisz konwertować na liczby porządkowe. Dodatkowo, w przypadku 8-bitowego RGB,255
zamiast256
.q
raz, jak się wydaje, pozbądź się zadania i zastąp je bezpośrednio - pozwoli to zaoszczędzić trzy bajty.print'P3\n9 3 256 '+' '.join(map(lambda x:str(ord(x)),open(__file__).read()))
. To -4 bajty!