Jeśli nie jesteś zaznajomiony z hakerem typer, zobacz hackertyper.net . Krótko mówiąc, jest to program, który generuje jeden fragment kodu na każde naciśnięcie klawisza, aby uzyskać efekt komediowy. ALE wersja hackertyper.net jest zbyt łatwa do wdrożenia. Po prostu wypisuje trzy znaki na raz z dowolnego fragmentu kodu. W przypadku tego wyzwania program musi wyprowadzić własny kod źródłowy i wydrukować jeden fragment kodu rozdzielany spacjami na jedno naciśnięcie klawisza.
Detale
- Nie można na stałe kodować nazwy pliku dla programu; musi dynamicznie określać swoją nazwę. Jeśli program kompiluje się do pliku wykonywalnego, może dołączyć standardowe rozszerzenie pliku do nazwy pliku wykonywalnego (z wyjątkiem .exe, jeśli używasz systemu Windows) i założyć, że plik źródłowy znajduje się w katalogu pliku wykonywalnego. Na przykład, jeśli plik wykonywalny C nosi nazwę „hacker”, powinien pobrać swój kod źródłowy z pliku o nazwie „hacker.c” w tym samym katalogu. Jeśli skompilowany program ma rozszerzenie, należy je usunąć przed określeniem nazwy jego kodu źródłowego („typer.exe” -> „typer.cs”).
- Programy muszą zawierać co najmniej 5 spacji, z co najmniej jedną postacią między każdą spacją. Oznacza to, że najmniejszy możliwy rozmiar tego wyzwania wynosi 9 bajtów. Przestrzenie nie muszą być kluczowe dla funkcjonowania programu.
- Każde formatowanie (wcięcie, nowe wiersze itp.) Musi zostać zachowane na wyjściu. To formatowanie może zostać wydrukowane z kodem, który go poprzedza, lub następuje po nim, ważne jest, aby zachować formatowanie.
- Unikaj używania komentarzy, aby spełnić wymagania 5 miejsca, chyba że nie ma innego sposobu na zaimplementowanie spacji w wybranym języku.
EDYCJA : Nowe linie mogą być używane zamiast spacji lub jako dodatek do spacji jako separatorów porcji.
Odpowiedzi:
bash, 51
58źródło
2: read: Illegal option -s
)cat $0
i$(<$0)
IFS=\
rzeczywiście jest potrzebny, jeśli pominiesz shebang? Domyślny IFS jest podobnyIFS=$'\n\t '
, a ponieważ nie masz już nowego wiersza, nie sądzę, że musisz ograniczać go do samej przestrzeni.for w in `<$0`;{ read \-sn1;printf $w\ ;}
HTML i JavaScript, 123
Działa to podobnie do typera hakerów, ale z własnym kodem źródłowym. Daj mi znać, jeśli źle zrozumiałem zasady.
A oto stylowa wersja (170 znaków):
Zrobiłem demo . Jest modyfikowany, ponieważ JS Bin dodaje dużo dodatkowego kodu, ale ogólny pomysł jest taki sam.
źródło
<head>
, dla którego przeglądarka doda go, jeśli go nie ma, więc zawsze będzie wyświetlany. Ale zapomniałem o tym<html>
.Perl + Term :: ReadKey, 56 bajtów
Dzięki ThisSuitIsBlackNot za oryginalną inspirację i primo za sugestie
open 0
i<0>
.Zauważ, że nowa linia po
for
jest właściwie niepotrzebna, z wyjątkiem tego, że muszę gdzieś dołączyć jedną nową linię, aby sprowadzić liczbę białych znaków do określonego minimum pięciu.Należy również pamiętać, że podobnie jak przesłanie ThisSuitIsBlackNot, ten program wymaga modułu Term :: ReadKey z CPAN. W systemie Debian / Ubuntu Linux ten moduł, jeśli nie jest jeszcze obecny, można łatwo zainstalować za pomocą polecenia
sudo apt-get install libterm-readkey-perl
.Ponadto, aby zaoszczędzić kilka znaków, ten program nie przywraca trybu wprowadzania do normalnego stanu po wyjściu, więc możesz nie być w stanie zobaczyć, co piszesz później. Wykonanie polecenia powłoki
stty sane
lubreset
powinno to naprawić. Ten problem można naprawić kosztem 10 dodatkowych bajtów za pomocą:Bonus: czysty quine, 81 bajtów
Znów nowa linia po przecinku jest potrzebna tylko, aby spełnić minimum pięciu białych znaków.
W przeciwieństwie do powyższego 56-bajtowego programu ta wersja nie musi w rzeczywistości czytać własnego kodu źródłowego, ponieważ jest oparta na quinie - a konkretnie na tej quinie:
Zaletą tego quine jest to, że może on łatwo przenosić dowolną „ładowność” w
q{ }
bloku, bez konieczności powtarzania go. Chociaż nie może pobić<0>
w skrócie, zbliża się całkiem.Uwaga: Ten program korzysta z funkcji Perl 5.10+
say
, dlatego należy go wywołać za pomocą przełącznika wiersza poleceń-M5.010
(lub-E
). Zgodnie z ustalonym konsensusem w sprawie meta, takie przełączniki używane do włączania nowoczesnych funkcji językowych nie są liczone jako dodatkowe znaki . Najkrótsze rozwiązanie bez którego mogę znaleźćsay
to 83 bajty:Oba z nich można również uczynić bardziej przyjaznymi dla terminali poprzez (połączenie dwóch ostatnich linii i) wstawienie:
przed ostatnim
}
.źródło
stty sane
zamiastreset
(co w niektórych systemach operacyjnych czasami robi coś więcej niż tylko resetuje niektóre parametry terminala ^^)open F,$0
i<F>
może być zastąpiony przezopen 0
i<0>
. Ponadto twierdzę, że jeden post w meta tak naprawdę nie stanowi konsensusu. Ta opcja-M5.01
nie „sprowadza języka do określonego punktu” , jak sugeruje autor, włącza funkcje. Nie ma wersji perla, dla której te funkcje są domyślnie włączone.ruby golfscript.rb foo.gs
liczy się jako prawidłowe polecenie do uruchomienia programu napisanego w GolfScript, toperl -M5.010 foo.pl
powinno się liczyć jako prawidłowe polecenie do uruchomienia programu napisanego w „Perlu 5.10”. Ale takie argumenty naprawdę należą do meta, a nie tutaj.)Python 3 - 124 bajty - 7 spacji
Kod:
Nie golfowany:
Wersja w stylu:
źródło
Ruby,
85, 71Szkoda, że
IO#raw
nie jest częścią standardowej biblioteki.Poprawa
Ten eliminuje wezwanie do wyjścia jądra # i używa zmiennych globalnych do skracania kodu.
źródło
Befunge - 21
Jestem z tego całkiem zadowolony, ponieważ właśnie dowiedziałem się o Befunge. Jeśli nie masz nic przeciwko „wpisywaniu” okna wyskakującego, możesz uruchomić je tutaj lub tutaj, dopóki nie znajdę lepszego tłumacza online.
źródło
PowerShell, 89
źródło
Python 3-299
To jest quine. Skrócono z 507 poprzez użycie
exec
i przenoszenie niektórych instrukcji.źródło
C,
211186 bajtówMoje rozwiązanie w C przy użyciu biblioteki curses. Może być dłuższy niż inne rozwiązanie C, ale jest to quine. Chociaż nie jest to wymagane przez pytanie, wciąż jest całkiem miłe. Działa również całkiem nieźle:
Bardziej czytelna wersja z kilkoma komentarzami i innymi rzeczami:
Połącz z:
źródło
C -
136 135132 bajtów (tylko Windows)Uwaga: na końcu programu znajduje się spacja, która prawdopodobnie się nie pojawi.
Nie mogę zagwarantować, że ten program będzie działał na jednym komputerze innym niż mój, ponieważ jest niesamowicie włamany. Gdyby wszyscy mieli tylko 32-bitowe maszyny, wszystko byłoby znacznie prostsze. Wtedy nie musiałbym się martwić,
sizeof(int*)
że będę miał 8 lat (co zdecydowanie jest; wydrukowałem to, żeby się upewnić), gdysizeof(int)
jest 4.Na szczęście nazwa pliku wykonywalnego jest przechowywana w pierwszym ciągu w argv.
Jednak umieszczenie wskaźnika jako argumentu funkcji oznacza, że muszę jawnie określić typ WSZYSTKICH argumentów funkcji - co oznacza, że musiałbym wpisaćNa szczęście znalazłem obejście. Miałem drugi argument do głównegoint
dwa razy - ogromna strata znaków.q
, bądź tylko kolejnym int. Następnie przypisanieq
do zmiennej typuint**
jakimś sposobem udało się pobrać wszystkie niezbędne bajty ze stosu.Nie udało mi się znaleźć takich sztuczek, aby zinterpretować typ zwracany
fopen
jako wskaźnik, bez deklarowania funkcji.Edycja: Zauważyłem, że powinienem użyć
~fscanf(*v,"%s",b)
zamiast,fscanf(*v,"%s",b)>0
ponieważ zwracany jest -1 po osiągnięciu EOF.źródło
void **v;
) zamiast prototypowaniafopen()
.fopen
. Nie rozumiem, dlaczego podstawienie void na int powinno mieć znaczenie, ponieważ i tak wszystkie wskaźniki są tego samego rozmiaru.b[1<<20];main(int *c,char **v){strcpy(b,*v);strcat(b,".c");c=fopen(b,"r");for(;fscanf(c,"%s",b)>0;printf("%s ",b))getch();}
(miałem zastąpiłgetchar()
nagetch()
choć).*fopen()
Zamiast*fopen(a,b)
?Perl - 87 bajtów
Nie widziałem nic w regułach dotyczących tego, co robić po przeczytaniu pliku do końca, więc po prostu czeka na dane wejściowe po wydrukowaniu ostatniej porcji.
źródło
node.js z LiveScript:
wersja asynchroniczna:
źródło
Kobra - 147
CobraCore.exePath
jest bardzo przydatne!źródło
JavaScript ES6, 154
Firefox 154 :
Chrome 175 :
Zarówno 274 :
Nie golfowany (chrom):
Ma dwie wersje, ponieważ Chrome nie obsługuje funkcji strzałek, a konsola nie jest czyszczona tą samą metodą
Firefox jeden działa z firebug, wydaje się, że domyślnej konsoli programisty nie można usunąć ze skryptu.
źródło
Groovy - 379
Ponieważ nie ma
getch()
ani nie ma odpowiednika w językach Java i językach Java, takich jak Groovy ... w zasadzie mój kod nie obsługuje naciśnięć klawiszy. To wszystko: Dźródło
C, 248 znaków
Prawdziwy quine
Działa tylko w systemie Unix, w systemie Windows można go zaimplementować za pomocą _getch.
źródło
HTML i JavaScript, 232 bajty
Tradycyjna wersja Javascript, ale zmodyfikowana.
JSFiddle tutaj .
źródło
SmileBASIC,
7975 bajtówBardzo łatwo jest uzyskać konkretną LINIĘ programu w SmileBASIC, więc po prostu wstawiam spacje przed łamaniem każdej linii.Myślałem, że jestem taki sprytny, stawiając spacje przed każdym łamaniem linii, ale najwyraźniej wolno nam używać łamania linii zamiast spacji ...Wyjaśnienie:
źródło
Haskell
źródło