Wie wir alle wissen sollten, gibt es einen HTTP-Statuscode 418: Ich bin eine Teekanne .
Wenn Sie dies akzeptieren, besteht Ihre Aufgabe darin, Ihre Kreativität zu nutzen und den kleinstmöglichen Server zu schreiben, der auf jede an ihn gerichtete HTTP-Anfrage mit dem oben angegebenen Statuscode antwortet.
Es gelten Standardlücken , einschließlich
Abrufen der gewünschten Ausgabe von einer externen Quelle
Dies umfasst das Ausführen einer HTTP-Anforderung zum Abrufen der Seite mit der Frage und das Extrahieren einer Lösung von dieser Seite. Das war schon 2011 ein wenig amüsant, ist jetzt aber ableitend und uninteressant.
Das heißt, Sie können die Anforderung nicht einfach an einen anderen Server umleiten, damit dieser die Antwort zurückgibt.
Behebung von Unklarheiten in Bezug auf die Serverfunktionalität:
Ihr Server kann alles (oder nichts) tun, während keine HTTP-Anfrage an ihn gerichtet wird, solange er mit der richtigen Antwort antwortet, sobald eine HTTP-Anfrage gestellt wird.
Antworten:
GNU Awk: 69 Zeichen
Ein Server selbst (dient endlos einer Anfrage auf einmal), keine Bibliothek verwendet.
Senden Sie 418 an alle, die eine Verbindung herstellen (
82 bis69 Zeichen):Sende 418 an alle, die etwas senden (
9380 Zeichen):Senden Sie 418 an alle, die eine gültige HTTP-GET-Anfrage senden (
122109 Zeichen):quelle
netcat
,telnet
,wget
,curl
, eine andere GNU -awk
Skript, ... Theoretisch hört es auf localhost: 80, aber für diesen 1) ohne Web - Server, Skype oder ein anderes Programm sollte 80 Port verwenden; 2) Sie müssen Superuser sein, um Ports unter 1024 zu öffnen. Zum Testen ist es also einfacher, die Portnummer im Skript auf etwa 8080 (s="/inet/tcp/8080/0/0"
) zu ändern und dann eine Verbindung damit herzustellen. pastebin.com/zauP7LMABash (33)
quelle
\0
das Ende Ihrer Datei hinzu - Sie könnentruncate
dies und es funktioniert immer noch.s='echo HTTP/1.1 418|nc -lp80 -q1;$0' ; echo ${#s}
gibt 33 für mich$PATH
Verzeichnisse gespeichert ist oder dass es mit einem Pfad aufgerufen wird (Rekursion von$0
). ----- 2. HTTP erfordert, dass Zeilen\r\n
nicht nur von terminiert werden\n
. Hier sollte die Zeichenfolge$"HTTP/1.1 418\r\n\r"
(länger lesbare Form) sein. ------ Und zum Schluss: Das Skript könnte kürzer sein: Der-q1
Parameter ist nicht erforderlich.echo
Variante funktioniert nicht (zumindest erkennt Firefox sie nicht als 418). Die\r
s werden jedoch nicht benötigt. Die Spezifikation sagt es sollte sein\r\n\r\n
, aber zumindest Firefox und Chrome werden es akzeptieren\n\n
, so scheint es im Geiste des Golfsports zu sein, sie nicht einzuschließen. Der-q1
Parameter war auf meinem System notwendig, da der Browser die Verbindung nicht von selbst schließt.$0
funktioniert einwandfrei, wenn das Skript ausführbar gemacht und auf diese Weise aufgerufen wird.wget
was mit nur einer neuen Zeile in Ordnung zu sein scheintPHP - 85 Bytes
Wird mit Zeilenenden im Windows-Stil (CR-LF) gespeichert, muss
php_sockets
aktiviert sein.Ich habe dies tatsächlich als meinen Fehlercode für den Hard Code Golf verwendet: Erstelle eine Chatroom- Herausforderung, aber niemand hat es bemerkt.
Browserfreundliche Version
Starten Sie das Skript in der CLI und richten Sie Ihren Browser auf
http://localhost
.quelle
I'm a teapot
:-)Node.js (LiveScript)
http
Modul - 66Inspiriert von Qwertiys Antwort .
net
Modul - 76quelle
Ruby + Rack, 19 Bytes
Muss gespeichert
config.ru
und mit demrackup
Befehl ausgeführt werden.Oder wenn Sie "reinen" Rubin bevorzugen:
42 Bytes +
-rrack
Flag = 48 Bytesquelle
Allgemeine Bash + BSD-Befehle, 29
Ein bisschen von anderen Antworten zurückborgen:
Funktioniert bei mir mit
wget
.Erste Antwort zu verwenden
nc
, 38Ich gehe von root-Rechten aus - gehe wie folgt vor:
quelle
nc -l 80 <<<HTTP/1.1\ 418;$0
-p
Schalter nicht benutzt haben :) Ich habe den Code mit Firefox getestet und ohne zwei Zeilenumbrüche wird der Statuscode nicht erkannt.Ruby (nc system command) - 35
DigitalTrauma sollte den Verdienst für die Idee der Verwendung bekommen
nc
, aber Ruby kann eine Endlosschleife mit weniger Zeichen als Bash machen :)Ruby (TCPServer) - 75
Diese Zeilenumbruch ist beabsichtigt - das tatsächliche Zeilenumbruchzeichen ist ein Zeichen kürzer als "\ n".
Ruby (WEBrick HTTPServer) - 87
quelle
Node.js, 80
Die Antwort ist
quelle
Python 3 106
quelle
from socket import*;s=socket(AF_INET,SOCK_STREAM)
ist kürzer.while 1:s.accept()[0].sendall(bytes('HTTP/1.1 418\n','UTF8'))
- es sei denn, ich habe etwas verpasst. (Übrigens, zähle die Zeilenumbrüche nach Belieben. Auf diese Weise verlierst du nichts, indem du die Befehle statt durch Zeilenumbrüche trennst;
.)s=socket(2,1)
(zumindest sind dies ihre Werte auf meinem Linux).listen()
's Parameter steht, dass "der Maximalwert systemabhängig ist (normalerweise 5)". Anstelle von 10 ist 9 also mehr als genug und 1 Zeichen kürzer. Und stattbytes('HTTP/1.1 418\n','UTF8')
eines Buchstabensb'HTTP/1.1 418\n'
ist genug. Oder wenn Sie den Code Python 2 machen, dann wird dasb
bytesprefix nicht mehr benötigt. Und die kürzeresend()
scheint auch zu reichen.Haskell - 142 Bytes
quelle
Tcl (> = 8,5), 78 Bytes
Bearbeiten - Zur Einhaltung der Richtlinien wurde eine zusätzliche Zeile (insgesamt 2 Zeilen) hinzugefügt.
quelle
Julia:
8673 Zeichenquelle
Powershell, 398
258
quelle
R, 80 Zeichen
Nie zuvor Socket-Programmierung mit R, aber ich werde es versuchen:
Hier
socketConnection
öffnet sich ein Socket: Das erste Argument sollte der Host sein, standardmäßiglocalhost
können wir es hier überspringen; Das zweite Argument ist der Port, für den es keinen Standardserver
gibt. Das angegebene ArgumentTRUE
erstellt den Socket, wennFALSE
nur eine Verbindung zu einem vorhandenen hergestellt wird.T
ist standardmäßig gleichTRUE
, in R.Bearbeiten: Wie in einem Änderungsvorschlag von @AlexBrown vorgeschlagen, kann dies auf 69 Zeichen verkürzt werden :
quelle
Node.js koa , 61 Bytes
Antwort:
Benötigt Knoten v0.11.12 +
Rennen wie:
quelle
function*
?Shell + Socat, 60
quelle
echo -e HTTP/1.1 418 T\r\n\r
ist kürzer.\\ T
wird nicht mal gebraucht.MATLAB,
9786 BytesIn Bezug auf die absolute Byteanzahl kein ernstzunehmender Konkurrent, aber ich würde es gerne posten, weil ich nicht dachte, dass es möglich wäre, einen voll funktionsfähigen Webserver mit einem mathematischen Tool zu schreiben. Beachten Sie die Verwendung der Eigenschaftskürzung :
'Ne','s'
Wird intern auf erweitert'NetworkRole', 'server'
.quelle
Sie können dies mit minimalem Aufwand mit einer
.htaccess
Datei und PHP tun .Alle Zugriffe auf Ihren Server geben den Status 418 zurück.
Unten ist der Code:
.htaccess (28 Bytes)
PHP (
3819 Bytes)Vielen Dank an @primo , dass du mir ein paar Bytes gespart hast!
Ich habe dies getestet und bestätige, dass es das gewünschte Ergebnis liefert!
"Pedido" bedeutet übrigens "Request" und "Resposta" bedeutet "Answer".
quelle
node.js mit CoffeeScript (76)
Kompiliere es einfach in JavaScript, dann musst du es ausführen
npm install connect
. Beginnen Sie danach mitnode server.js
quelle
Nginx - 35
Wirf das in die nginx.conf, starte nginx.
Ich bin mir nicht sicher, ob dabei Standardlücken verwendet werden: "Eingebaute Funktionen für die Arbeit verwenden" oder "Die Herausforderung zu wörtlich interpretieren". Hoppla, es sieht so aus, als würde OP diese Antwort nicht mögen.
quelle
;
?Perl, 78
laufen als
plackup whatever.pl
.quelle
sub{[418,[],[]]}
sollte gerade ausreichen. (16 Zeichen.)Python 2.7 / Django, 94 Bytes
(hinzugefügt von Default Boilerplate von
django-admin.py startproject
) In urls.py:quelle
C # + OWIN
251240Ich hatte wirklich gehofft, dass es kürzer wird, aber die langen Namespaces haben diesen Plan ruiniert. Benötigt das
Microsoft.Owin.SelfHost
auf NuGet verfügbare Paket.quelle
node.js mit connect (78)
Sie müssen
npm install connect
zuerst laufen . Dann starte es mitnode server.js
quelle
Los, 162 Bytes
quelle
Faktor
101141 BytesGeben Sie 418 an alle zurück, die eine Verbindung herstellen.
quelle
Java 7, 208 Bytes
Diese Frage brauchte eine Java-Antwort.
quelle