Zdecydowany prawdziwy programista może pisać programy Fortran w dowolnym języku.
od prawdziwych programistów nie używaj Pascala
Twoim zadaniem jest napisanie programu w wybranym języku programowania, ale możesz używać tylko innego języka. Oznacza to, że wyrzuć wszystkie konwencje kodowania z jednego języka i zastąp je konwencjami kodowania z innego języka. Im więcej tym lepiej. Spraw, aby Twój program wyglądał tak, jakby został napisany w innym języku.
Na przykład fan Pythona, który nienawidzi Java, może napisać następujący program Python w Javie:
void my_function() {
int i = 9 ;
while(i>0) {
System.out.println("Hello!") ;
i = i - 1 ;}}
Entuzjasta Pascala zmuszony do używania C mógłby napisać:
#define begin {
#define end }
#define then
#define writeln(str) puts(str)
if (i == 10) then
begin
writeln("I hate C");
end
Musisz napisać kompletny program. Program nie musi robić nic pożytecznego.
Powodzenia. To konkurs popularności, więc wygrywa kod z największą liczbą głosów!
źródło
.litcoffee
. To może pomóc.Odpowiedzi:
C w C ++
źródło
char*
zamiaststd::string
).char *argv[]
!Montaż x86 w GNU C.
Nie, nie użyłem tylko tego
asm
słowa kluczowego, ponieważ ustalone pytanie dotyczy prawdziwych programistów ... powinno działać dobrze na ARM.(Aby to udowodnić, wcale nie „napisałem” zestawu - jest to wynik wygenerowany przez
GCCClang (503.0.38) dla komentowanego kodu u góry, ślepo przetłumaczony na makra.)Działa to tylko w trybie 32-bitowym. To w porządku, ponieważ prawdziwi programiści i tak kodują rozmiar słowa.
Spójrz tylko na te wszystkie obsady. Obsada oznacza, że jestem prawdziwszym programistą niż kompilator, prawda?
źródło
call
Szczególnie podoba mi się to, jak sobie poradziłeś .for pass=1:3...next
. Wykonanie go w interpretera BASIC go zmontowało.Angielski w C.
Wszelkie pomysły na wyeliminowanie
;
?źródło
the
dwa razy?#define . ;
Brainfuck w JavaScript
JavaScript jest trudnym językiem! Użyjmy Brainfuck, bardziej zrozumiałego języka: o)
Wydaje mi się, że napisałem pieprzonego tłumacza w javascript.
Powyższy przykład po prostu wypisuje
Hello World!
i ignoruje dane wejściowe (bez,
symbolu).Ale to też działa z wejściami! Na przykład spróbuj
,+>,+>,+>,+<<<.>.>.>.
wpisaćgolf
w oknie dialogowym. Wypisze kolejne znaki w tabeli ASCII:hpmg
EDYCJA : Krótkie wyjaśnienie dla osób, które nie wiedzą o pieprzeniu mózgów.
Wyobraź sobie nieskończoną tablicę liczb całkowitych
a
inicjowanych wszędzie na zero, wskaźnik na jednym elemencie tej tablicyi
i dane wejściowe użytkownikau
.Brainfuck jest naprawdę łatwy do nauczenia, ale trudny do napisania:
+
przyrosty do bieżącej wartości:a[i]++
-
zmniejsza to:a[i]--
>
sprawia, że wskaźnik wskazuje następny element:i++
<
poprzednie :i--
[
i]
zdefiniuj pętlę, która pęka, gdy aktualna wartość wynosi zero:while (a[i]) { ... }
.
wydrukuj bieżący element:String.fromCharCode(a[i])
,
ustawia bieżący element na podstawie danych wprowadzonych przez użytkownika:u.charCodeAt(...)
źródło
replace
instrukcjach nie wpływają na program?--i
szybciej niżi--
? Wydaje się fałszywy od lat: jsperf.com/decrementgolf .Myślę, że genialny Lennart Augustsson już dwukrotnie to wygrał.
Po pierwsze, oto przykład jego implementacji BASIC pod hasłem „weekendowy hack” jako Haskell Monadic DSL z 2009 roku:
Działa poprzez przeciążenie typu numeru. Numery linii są tak naprawdę funkcjami, które akceptują argumenty. Reszta linii to argumenty funkcji. Funkcja zwraca reprezentację abstrakcyjnego drzewa składni dla interpretera BASIC, z którym można rozpocząć pracę.
Polecam również sprawdzić udział Augustsson w Międzynarodowym Konkursie Obfuscated C w 2006 roku, w którym udało mu się wcisnąć do 4k:
Mogą współdzielić ten sam plik, ponieważ kod bajtowy jest umieszczony w komentarzach C.
Minęło kilka lat, odkąd śledziłem prace Augustssona, więc od tego czasu mogą być inne genialne rzeczy ...
źródło
PHP i JavaScript
To jest poliglot:
Możesz uruchomić ten kod w obu językach:
Sztuczka polega na tym, że JavaScript wykorzystuje sekwencje specjalne w ciągach zaczynających się od
'
i"
.Z drugiej strony PHP używa tylko sekwencji specjalnych w ciągach zaczynających się od
"
i<<<
.Następnie deklarujemy funkcję
printf
, która jest podobna do,print
ale wyświetla sformatowany ciąg znaków w PHP.PHP wymaga, aby vars zaczynał od
$
, podczas gdy JavaScript po prostu pozwala.źródło
Array(…)
w JS, i to wyraźniearray(…)
w PHP.[…]
byłoby znacznie lepiej;)!Array()
JS, czy nie: zależy mi na PRAWDZIWYM poliglocie. Robię jedną z najgorszych zbrodni JS za pomocą tego kodu, ale wszystko, czego chcę, to to, że działa i robi dokładnie to samo w obu przypadkach, ale jednocześnie wygląda jak JS i PHP.[...]
jest niepoprawny w PHP <5.4.0, co jest złe ....... Jeśli wrzucę to do PHP 4, 5 lub JavaScript, spodziewam się, że zadziała, zamiast wszędzie podawać błędy składniowe.[…]
, co wydaje się dość standardowe w PHP i dlatego jest w porządku dla twojego celu. A tak przy okazji, PHP <5.4? Czas na aktualizację, koleś…Array
to jest PRAWA nazwa konstruktora obiektu Array. Zasadniczo używanie[]
jest takie samo jakArray()
. Nie widzę w tym nic złego. Ale mam jedno proste pytanie: działa? (btw, ja mam korzystać z PHP 5.3.28 w pracy.)Brainfuck in JS
źródło
><,.-
Jest to jeden ze zwycięzców IOCCC z 2005 r. , Program w C, który oprócz tego zestawu definicji wygląda jak program Java:
źródło
C ++ w C.
OK, więc jesteś programistą C ++, ale jesteś zmuszony używać C? Nie ma problemu, wystarczy napisać kilka uzupełniających nagłówków brakujących w C. Na przykład, tutaj jest poprawny program Hello World w C:
W dodatkowym pliku nagłówkowym
iostream
napisz:W pliku
string
napiszW pliku
helloworld.c
(Twój aktualny kod C) napiszPodczas kompilacji
helloworld.c
z kompilatorem C poinstruuj kompilator, aby szukał również<...>
plików nagłówkowych, gdziekolwiek je zapisałeś,iostream
istring
na przykład, jeśli kompilujesz za pomocą gcc i umieścisz plikiiostream
orazstring
w bieżącym katalogu, skompiluj zUwaga: W
volatile
nagłówkuiostream
znajduje się kompilacja wolna od ostrzeżeń, nawet na maksymalnym poziomie ostrzeżenia (uważa się, że odczyt ze zmiennej lotnej ma wpływ).źródło
volatile
i jakie ostrzeżenie?CQL - Caffeinated Query Language
(lub „SQL na kofeinie”)
To mogło być nieco zbyt ambitne. Oto próba napisania deklaratywnego kodu SQL (ish) w CoffeeScript . Wymaga to funkcji proxy ECMAScript 6 . Możesz to przetestować w węźle za pomocą
--harmony-proxies
.Ustawmy szablon do definiowania serwerów proxy. (Pochodzą z Na podstawie komentarza Benvie na ten temat )
Teraz zdefiniuj obiekt proxy oraz niektóre podejrzane zmienne globalne i funkcje:
To była całkiem spora konfiguracja! Ale teraz możemy wykonać następujące czynności (wejście / wyjście w stylu konsoli):
To nie jest prawdziwy poliglot, ale nie o to tak naprawdę chodzi. wiem to
@
jest to używane w przypadku zmiennych w SQL, ale potrzebuję wszystkich@
liter s dla nazw kolumn i tabel, ponieważ nie znalazłem sposobu na proxy obiektu globalnego (i nie zdziwiłbym się, gdyby to naprawdę nie było możliwe - i dla dobry powód).Zmieniłem także niektóre nawiasy na nawiasy (w szczególności po
VALUES
iIN
). Niestety, to, czego w ogóle nie mogłem rozgryźć, jest sposobem na dopuszczenie normalnych warunków, takich jakyear > 2000
, ponieważ od razu zmieniliby się na wartość logiczną.Mimo to wygląda to bardzo podobnie do SQL i jest zdecydowanie bardziej deklaratywne niż tryb imperatywny / funkcjonalny / obiektowy, więc powinien dobrze się nadawać do tego pytania. Właściwie myślę, że jeśli trochę dopracowałem kod i obsłużyłem kilka innych funkcji, może to być przydatny moduł CoffeeScript.
W każdym razie to było fajne! :)
Dla osób niezbyt zaznajomionych z CoffeeScript zapytania SQL kompilują się do następującego JavaScript:
źródło
@
SQL jest używany dla zmiennych sesji.@
s dla nazw kolumn i tabel.Visual Basic 6 (w JavaScript)
Działa również w VBScript.
źródło
F # w C ++
Raczej niewyobrażalne i nieprzyjemne nadużycie preprocesora. Pomyślałem, że fajnie byłoby zmienić C ++, aby wyglądał jak zupełnie inny język zamiast używać kilku aliasów, aby wyglądał jak Java lub PHP. Tak naprawdę nie spodziewam się, że przyniesie to mnóstwo pozytywnych opinii, jest to wejście dla zabawy.
Wypróbuj tutaj .
Niestety pisanie czegoś do STDOUT to wszystko, co może zrobić, chociaż jestem pewien, że jeśli ktoś rzuciłby na to wystarczająco dużo czarów, może zrobić to więcej.
źródło
exit 0
albo po prostu0
.Python i ... nikt nie zgadnie (edytuj: dc)
Oto poprawny kod Pythona, ale tak naprawdę program jest napisany w zupełnie innym języku:
Kod działa w obu językach bez błędów.
Ta kombinacja jest bardzo szalona; Z przyjemnością poczekam dzień lub dwa, zanim powiem, który jest inny język; proszę zostawić komentarz do zgadnięcia.
edycja: Język był językiem stosu z dc. Można zobaczyć tu dobrze znane słowa kluczowe jak
for
,if
,or
,in
, ale tylko litery znaczenia! To,,
co nie ma znaczenia w dc, jest zamieniane na rejestr, ponieważ po raz pierwszy pojawia się po literzes
(to samo dla:
).źródło
C ++ umożliwia pisanie kodu podobnego do seplenienia za pomocą biblioteki InteLib:
por. http://www.informatimago.com/articles/life-saver.html
źródło
C # w spacji
Dobra, najpierw spróbuj jednego z nich, więc zobaczmy, jak idzie.
I w przypadku, gdy formatowanie poszło nie tak z powodu konieczności umieszczenia czterech spacji na początku każdej linii, tutaj znowu jest. dla spacji i # dla tab:
źródło
HTML i CSS
Nie języki programowania, ale… ten dokument jest prawidłowym HTML i CSS:
Działa to, ponieważ komentarze HTML są dozwolone w arkuszach stylów ze względów historycznych. Aha, i każdy ważny dokument HTML jest również prawidłowym programem PHP, więc jest to również PHP . :)
źródło
C w Scali
Warstwa pomostowa emuluje bardziej romantyczną erę, gdy łańcuchy wciąż były tablicami bajtów zakończonymi zerami.
źródło
"This program does not take parameters!"
oszukaćsed i APL
Mój szef chce, żebym pisał skrypty sed, ale wolę pisać APL cały dzień. Niemniej jednak jest bardzo zadowolony z mojej pracy, ponieważ takie skrypty działają idealnie z jego wersją sed:
Możesz go wypróbować na mojej nowej stronie za pomocą tego bezpośredniego łącza . Jest to skompilowana do javascript wersja GNU APL. Ostateczne wydanie nastąpi później wraz z oficjalnym wydaniem GNU APL, wer. 1.3, ale możesz doskonale używać go do swoich bezpośrednich odnośników, jeśli lubisz GNU APL.
źródło
C w Haskell
Oczywiście, ponieważ
cmain
nic nie robi zargc
lubargv
, kod zestawiania argumentów nie ma żadnego efektu, a ponieważcmain
zawsze zwraca 0, gałąź „else” instrukcji „if” jest martwa. Ale stwierdzenie „jeśli” i tak nic nie robi.Wszystkie nawiasy klamrowe i średniki są niepotrzebne, podobnie jak większość nawiasów i niektóre
do
słowa kluczowe. Instrukcja „if” mogła zostać zapisana jakoif exitCode == 0 then exitWith ExitSuccess else exitWith (ExitFailure (fromIntegral exitCode))
.źródło
C ++ in Forth
Nie jest to najbardziej elastyczne rozwiązanie, ale działa, jeśli jest napisane dokładnie tak, jak pokazano.
źródło
Haskell w Javie
(„waniliowy” Java 7, nie Java 8) (Tak, wiem, że boks niszczy wydajność; nawet próba użycia funkcji wyższego rzędu staje się szalona: D)
Java ma bardzo sztywną składnię, więc zamiast zmieniać składnię, próbowałem uczynić kod semantycznie bardziej podobnym do stylu Haskell.
Edytuj - dodano aplikację funkcji częściowej.
(Tak, wszystko, co robi to szaleństwo, to informatyka
6!
)źródło
COBOL w AWK
W duchu cytatu. Czysty, nieskażony AWK, ponieważ może być napisany przez programistę COBOL.
Zadanie polega na zliczeniu rekordów w pliku. Ta wczesna wersja rozwojowa liczy się do testowania. Właściwy plik zostanie później zakodowany na stałe po zwolnieniu z testów jednostkowych ...
Gdybym mógł uzyskać podświetlanie składni, aby zrobić fosforyzujący zielony na czarnym, byłoby świetnie ...
Nawet poprawiłem liczby kolumn na tym, to siedem pustych znaków na początku każdej linii (nigdy nie robiłem tego w awk) i łamie instrukcje długiego drukowania w kolumnie 72.
źródło
Brainfuck (lub cokolwiek innego) w Racket
Elastyczny moduł i system makr Racketa pozwala na implementację obsługi modułów dla zupełnie nowych języków, zarówno specyficznych dla domeny, jak i ogólnego przeznaczenia. Gotowe jest wsparcie zarówno dla Datalog, jak i Algol 60 , więc oba są poprawnymi programami dla rakiet:
Możesz także dodać obsługę innych języków: np. Zobacz opis Danny'ego Yoo, jak zaimplementować obsługę Brainfuck, która zezwala na programy Racket, takie jak:
A ponieważ obsługa jest dodawana na poziomie skompilowanego modułu, możliwe jest łączenie modułów napisanych w różnych językach lub osadzanie fragmentu jednego języka wewnątrz modułu napisanego w innym.
źródło
SML w Javie
Nadal mam jakiś starożytny kod, od kiedy zacząłem uczyć się języka Java i próbowałem używać go w funkcjonalnym stylu. Lekko oczyszczone:
źródło
Java w Perlu
Może się liczyć jako łamanie zasad, ale mnie to nie obchodzi. Oczywiście ma to wyglądać jak program Java. Drukuje 20 liczb Fibonacciego, na wypadek, gdyby nie było to oczywiste.
źródło
J i ... nikt nie zgadnie (edytuj: dc)
To jest mój drugi wpis; oto fragment poprawnego kodu J, który zwraca 1:
Czekam jeden lub dwa dni, zanim powiem, który inny język uruchamia ten sam fragment kodu bez błędów. Po prostu zostaw komentarze, aby spróbować zgadnąć.
edycja: Drugi język to język oparty na stosie z bardzo starożytnego kalkulatora uniksowego dc.
źródło
.,+-<>[]
więc twój program jest równoważny z...[.]+
brainfuck, który jest prawidłowym, ale bezcelowym programem. AFAIK program pieprzenia mózgu może być nieważny tylko przez niedopasowanie[]
.dc z uruchomionym plikiem PostScript
dc może uruchomić następujący fragment kodu bez błędu:
źródło
ML / (Strict) Haskell w Javie
To pochodzi z prawdziwego prawdziwego projektu. Wykorzystuje trwałe niezmienne struktury danych i wykorzystuje rekurencję, nawet jeśli nie jest to konieczne. W rzeczywistości jest bardziej podobny do Kore (języka, który implementuje projekt) w Javie, ale styl jest w zasadzie taki sam jak ML. Ale filozofią Kore jest to, że autor nie powinien formatować swojego kodu, więc żaden z kodów Java też nie jest formatowany (jest automatycznie formatowany przez zaćmienie).
upuść n elementów z listy :
W ML / Haskell, gdzie wzorzec pasowałby do wyciągania głowy i ogona, tutaj mówisz
list.cons().x
ilist.cons().tail
.wstaw element do listy :
Lista jest zdefiniowana dosłownie, jak miałby być zdefiniowany typ danych algebraicznych. Oto wersja z usuniętym generatorem zaćmienia:
Oto struktura danych mapy zaimplementowana w kategoriach trie :
Typy zaczynają zajmować tyle samo miejsca co kod. Na przykład, w Put , metoda ma 302 znaków rodzajów i 343 znaków kodu (nie licząc miejsca / znaki nowej linii).
źródło
BASIC w Ruby
Wdrożono to dawno temu. Źródłem jest na GitHub . Inspirowany podobną rzeczą w Scali
Ustawiać
Kod podstawowy
źródło
Haskell w szablonach C ++
Zrobiłem ten FizzBuzz w szablonach C ++ kilka miesięcy temu na skowronku. Jest to w zasadzie implementacja następującego kodu Haskell, wszystko w szablonach C ++. W rzeczywistości nawet arytmetyka liczb całkowitych jest reimplementowana na poziomie typu --- zauważ, że żaden z szablonów nie używa parametrów int!
Kod Haskell:
oraz wersja metaprogramowania szablonu C ++:
źródło