Napisz program, który jest tak krótki, jak to możliwe (mierzone liczbą bajtów), nie przyjmuje danych wejściowych, nie zawiera komentarzy i wyświetla ciąg znaków / sekwencję, tak że łączony program + wynik ma dokładnie 95 znaków długości i zawiera każdy znak ASCII do wydrukowania dokładnie raz , tzn. wyjście + program to permutacja 95 znaków z kodami ASCII 32-126:
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
W przypadku remisu zwycięzcą jest pozycja, której (95-znakowy) program połączony + wynik jest najbliższy powyższemu ciągowi, mierząc odległość edycyjną Levenshteina (tj. Liczbę usunięć, wstawień lub podstawienia wymagane do uporządkowania go w kolejności ASCII).
echo $0
jest zdyskwalifikowany.Odpowiedzi:
GolfScript, 14 znaków
Wyjście :
źródło
),
- łał. Uwielbiam to.Perl, 89 znaków
To najlepsze, co udało mi się do tej pory zrobić:
Dla tych, którzy nie znają Perla minutae, dwa argumenty
print
instrukcji mogą być renderowane jako~(-($=)) . (73 * 2)
itr///
.Program wyświetla 6 znaków:
Niestety każda pojedyncza iteracja konstrukt, że mogę myśleć w Perlu (
for
,while
,until
,map
,grep
) akcji co najmniej jeden znak zprint
. Jeśli pozwolono na pojawienie się znaków nowej linii, mógłbym użyć Perla 5.010, aby uzyskać 87-znakowe rozwiązanie:źródło
$=
to liczba poziomych linii w bieżącym urządzeniu wyjściowym. Domyślnie 60.~-$=
jest bitową inwersją ujemnego dopełniacza dwóch równą 60, co się zdarza59
.73*2
to 146..
i,
rób to, czego się od nich oczekuje.y[]{}
to inny sposób na powiedzenietr///
, którym jest operator transliteracji. Potrzeba$_
i nic nie robi, ponieważ nie dałeś jej żadnych znaków do zastąpienia. Zwraca liczbę zastąpionych znaków, czyli0
. Mamy więc~-$= . 73*2 , y[]{}
=59 . 146 , 0
= „591460”.PHP 67 bajtów
Wynik:
Wygląda na to, że powinno istnieć rozwiązanie 65-bajtowe, generujące 30 znaków zamiast tylko 28, ale nie udało mi się wyrównać.
OSXouz
Zamiast tego 6 nieużywanych znaków zostało przyczepionych do jednego z literałów łańcucha.Edycja: Po dalszej refleksji nie jest możliwe wygenerowanie więcej niż 28 znaków w ten sposób.
UPPER ^ lower
będzie zawsze skutkować znakiem między 32 a 63, więc wszystkie 10 cyfr jest wymagane@[\]_`{|}~
. Cztery pozostałe 22 są używane w samym skrypcie, pozostawiając tylko 18, które można uzyskać za pomocą samych liter. Jednak remis można znacznie poprawić.źródło
Ruby, 91 znaków
Wyjścia
6273
.%{...}
sztuczka skradziona Janowi Dvorakowiźródło
%{ !"#$&\',-/450:<=>ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcefghijklmnqvwxyz|~};puts([email protected]*98+1)
to, co myślę, że chcesz (dla 91 znaków) z przesuniętym średnikiem, który ma być używany jako separator do wydruku (zamiast nowego wiersza), a litery „ord” są usuwane z nawiasów klamrowych.Perl, 61 znaków
Wynik:
$:
domyślnie to" \n-"
.x8
powtarza to osiem razy; wynik 24 znaków jest następnie bitowo xoredowany 23-znakowym gołym łańcuchem (ostatni-
pozostaje niezmieniony ). Druga część to 12-znakowy ciąg q bitowo i 10-znakowy łańcuch (ostatnie 2 znaki są odrzucane).źródło
Ruby, 95 znaków, 6 edycji
Tak. Otóż to. Po prostu swobodny ciąg literału, który nigdy nie jest drukowany. Ruby obsługuje literały łańcuchowe (jak sądzę, zapożyczone z Perla) w postaci separatora typu procentowego - separator jest dowolnym znakiem niealfanumerycznym, a jeśli separator otwierający jest nawiasiem otwierającym (dowolnym z
[({<
), separator zamykający odpowiada klamra zamykająca (dozwolone są klamry zagnieżdżone).Zdaję sobie sprawę, że jest to bardziej podstawowe przesłanie, ale chyba że komuś uda się coś wydrukować lub jeśli nie będzie języka z dwuznakowym dosłownym ciągiem literalnym z innym otwierającym i zamykającym ogranicznikiem, jest to najlepszy z dostępnych.
źródło
Tcl 96, edycja odległości 12
źródło
join {!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghklmpqrstuvwxyz|~}
wydaje się działać przy użyciu 95 znaków? (Dziękuję za wpis. Przepraszam za kameleona - niestety redagowałem w pośpiechu i powinienem był zrobić inaczej).