Załóżmy, że wyzwanie dla codegolf nie liczy białych znaków w długości twojego programu. Oszukuj ten system, kodując skrypt w białe spacje, i golfuj skrypt, który dekoduje i wykonuje osadzone białe spacje.
Przykład
Moje rozwiązanie do JBernardo „s Meta Golf Wyzwanie było zakodować Sage (lub Python) kod do spacji, a golf dekoder.
s = ' '
for c in '<lots of whitespace>'.split(s):
s+=chr(len(c))
exec s
Kodowanie polega na wzięciu skryptu, wstawieniu nowego wiersza i dla każdego znaku c
w skrypcie, ord(c)
tabulacji wyjściowych, a następnie spacji. Przygotowanie nowej linii jest konieczne, ponieważ używam Pythona i zaczynam skrypt s
spacją.
Punktacja
Kompletne rozwiązanie zawiera opis używanego kodowania (jeśli jest skomplikowane, podaj skrypt) oraz skrypt „dekoduj i wykonaj”. Twój wynik to liczba znaków spacji w skrypcie dekodowania i wykonania.
Biała spacja (język) jest zabroniona
Ponadto jakikolwiek język, który ma pełny zestaw operatorów, które używają tylko białych znaków, jest niedozwolony: zaakceptuję najniższy wynik niezerowy.
źródło
.n/{,}%+~
by działały.CPAN, 16
CPAN ma to wszystko. A przynajmniej odpowiedni moduł.
źródło
Perl, 29
Wewnątrz
s///
są zakładka, a następnie spacja. Kodowanie jest ultra-podstawowym kodowaniem ze spacjami, poprzedzonymi tabulatorami.Wypróbuj ten w wierszu poleceń:
Edycja: cóż, lol, nie mogę znaleźć odpowiedniego sposobu na skopiowanie i wklejenie tabulacji / spacji. Uwierz mi, to działa w domu :)Aktualizacja: tam, tam, zakodowanetr
źródło
\t
a my uwierzymy, że to działa z białymi\t
interpretować to przez powłokę i faktycznie mieć cholerną rzecz działającą w widoczny sposób. Robię to za kilka godzin.JavaScript
Zamień
\t
na tabulator, aby uzyskać liczbę wysłanych znaków.Standard (64 znaki)
Funkcja strzałki (49 znaków)
Program enkodera dla obu
źródło
(s)=>...
w funkcji strzałki,s=>...
aby zapisać dwa bajty" t " [ 1 ]
aby oznaczać „t”)eval("".replace(/ +/g,s=>' []+!()'[s.length]))
Yabasic (88 znaków)
Użyj tego samego programu kodującego, co w moim rozwiązaniu C, ale nie usuwaj pierwszego znaku. Twój oryginalny kod musi mieć postać podprogramu
a()
, na przykład:źródło
C (99 znaków)
Testowane tylko z (i być może działa tylko z) GCC.
Odpowiedni program enkodera (ręcznie usuń pierwszy znak z jego wyjścia):
źródło
D (101 znaków)
takie samo kodowanie jak w pytaniu (nie ma potrzeby nowego wiersza)
źródło
Bash (tylko wbudowane, 44 znaki)
Odpowiadający skrypt kodera:
źródło
man
podnieść, żeby się z tym pogryźć.K5, 12 bajtów
Wykonaj (
.
) ciąg utworzony z wartości ascii (`c$
) podanych przez różnicę między każdą parą (-':
) indeksów, gdzie (&
) wejściem jest tab (9=" "
).Dane wejściowe to ciąg znaków tabulatorów i tabulatorów, a wartości znaków są zakodowane w liczbie znaków tabulacji (spacji lub znaków nowej linii) między poszczególnymi tabulatorami. Przykładowy koder:
Wykonaj działające sprzężenie, zaczynając od spacji ponad (
" ",/
) x spacjami (x#" "
) połączonych tabulatorem (,"\t"
), gdzie X oznacza każdy z ({...}'
) jeden minus wartości znaków ciągu wejściowego (-1+
).W akcji:
źródło
Ruby, 43
Bardzo proste, kodowanie polega na wstawieniu x spacji na linię, gdzie x jest wartością ascii znaku, dekodowanie jest odwrotne.
Poniższy skrypt jest zwykłym konwerterem ASCII i działa nawet wtedy, gdy rzeczy inne niż spacje są wolne:
Po prostu zamień pusty ciąg na program, który ci się podoba.
Rzecz w formacie wielokrotnego użytku:
źródło