Keine Ideen um das Gelernte umzusetzen
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Die maschinelle Bewertung eines "Puffers" dürfte eher schwierig sein... da wird sicherlich einfach die Ausgabe analysiert. Daher darf da ja auch nichts anderes ausgegeben werden, als die gewünschten Zahlen. Ich kann aus der Aufgabe auch nicht herauslesen, dass man irgend etwas puffern müsste... zugegeben finde ich das Beispiel auch ein wenig irreführend, dass bei Input nach der 42 noch eine Zahl auftaucht...
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
@Hyperion
Das ist aber sinnvoll um zu belegen, dass nach der 42 keine Ausgabe mehr erfolgt. Wuerde ich als Testcase auch so schreiben.
Das ist aber sinnvoll um zu belegen, dass nach der 42 keine Ausgabe mehr erfolgt. Wuerde ich als Testcase auch so schreiben.
@deets
Btw. verzweifeln soll wegen mir hier niemand. Ich überlege manchmal wirklich, ob ich es wieder sein lassen sollte, da ich mich oft extrem doof anstelle...
@snafu:
Ich wäre allerdings nicht im Traum darauf gekommen von sys.stdin einzulesen und ja ich hab da bei meiner Lösung ein input() im "Spiel".
Vielen Dank
LG
Daniel
Ok, dann ists ne klare Fehlinterpretation von mir. Das "Example", welches hier auf SPOJ gezeigt wird, halte ich dann jedoch auch für irreführend.Also ist puffern - da nicht gefragt - auch zu unterlassen
Btw. verzweifeln soll wegen mir hier niemand. Ich überlege manchmal wirklich, ob ich es wieder sein lassen sollte, da ich mich oft extrem doof anstelle...
@snafu:
Ich wäre allerdings nicht im Traum darauf gekommen von sys.stdin einzulesen und ja ich hab da bei meiner Lösung ein input() im "Spiel".
Vielen Dank
LG
Daniel
Zuletzt geändert von mcdaniels am Donnerstag 12. April 2012, 14:10, insgesamt 1-mal geändert.
Ich poste jetzt einfach meine Lösung, da die von deets ja auch schon reingestellt wurde:
Das war's. Gesonderte Prüfungen sind nicht nötig, da die Aufgabenstellung gültige Eingaben garantiert.
Code: Alles auswählen
import sys
for line in sys.stdin:
number = int(line)
if number == 42:
break
print number
Der Satzteil "rewrite small numbers from input to output" ist IMHO schon relativ deutlich ausgedrückt worden. Auch im Hinblick auf Brute Forcing als Kontext macht es Sinn, eher etwas dateiartiges zu haben als spielemäßig Zahlen abzufragen.mcdaniels hat geschrieben:Ich wäre allerdings nicht im Traum darauf gekommen von sys.stdin einzulesen und ja ich hab da bei meiner Lösung ein input() im "Spiel".
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Unsinn! Würde es uns nerven, würden wir hier nicht antworten Und solange Du etwas dabei lernst, sind wir ja auch "zufrieden"mcdaniels hat geschrieben:... leider jedoch euch genervt...
Ignoranz geht uns da eher auf die Nerven
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
Code: Alles auswählen
#include <stdio.h>
int main() {
char line[4];
int number;
while (fgets(line, 4, stdin) != NULL) {
number = atoi(line);
if (number == 42) break;
printf("%d\n", number);
}
return 0;
}
Wenn hier schon Lösungen gepostet werden.
Code: Alles auswählen
#include <stdio.h>
#include <string.h>
int main(void) {
char input[4];
while (fgets(input, 4, stdin) && strcmp(input, "42\n"))
fputs(input, stdout);
}
Code: Alles auswählen
from sys import stdin
from itertools import takewhile
print(''.join(takewhile(lambda x: x != '42\n', stdin)), end='')
@nomnom: Alternativ:
Code: Alles auswählen
for line in iter(sys.stdin.readline, '42\n'):
sys.stdout.write(line)
Ich würde so einer Anziehungskraft nachgeben, bzw. nachgehen.mcdaniels hat geschrieben:Immerwieder erwische ich mich dabei, wie ich von Tk bzw wxPython magisch angezogen werden.
@lunar: Weitere Alternative:
Wobei ich bei meiner Lösung auch nach der 42 noch fleissig weiter gelesen habe, denn wenn in der Beispieleingabe nach der 42 noch eine Zahl kommt, kann man ja auch nicht ausschliessen, dass da noch mehr kommt das vielleicht den Puffer füllt und dann blockiert das Prüfprogramm am Ende wenn mein Programm die Daten nicht mehr abholt.
Code: Alles auswählen
sys.stdout.writelines(iter(sys.stdin.readline, '42\n'))
Halli hallo,
na da gehts ja ordentlich rund . Unglaublich, wie kurz und bündig man das lösen kann, wenn man weiß, auf welches Modul man zurück greifen kann bzw. Gurustatus hat
@problembär:
LG
Daniel
na da gehts ja ordentlich rund . Unglaublich, wie kurz und bündig man das lösen kann, wenn man weiß, auf welches Modul man zurück greifen kann bzw. Gurustatus hat
@problembär:
Hilft ja nix, wenn ich die Basics noch nicht in und auswendig kann.Ich würde so einer Anziehungskraft nachgeben, bzw. nachgehen.
LG
Daniel
Zuletzt geändert von mcdaniels am Donnerstag 12. April 2012, 19:22, insgesamt 1-mal geändert.
@BlackJack: An ".writelines()" hatte ich nicht gedacht
Ich glaube nicht, dass das Blockieren des Puffers ein Problem sein sollte. Das Prüfprogramm mag blockieren, läuft aber spätestens dann weiter, wenn Dein Programm sich nach der ersten "42" beendet, und dabei seine Standardeingabe schließt. Der blockierende Aufruf von "write()" gibt dann EPIPE zurück, und ein anständig geschriebenes Programm sollte das eigentlich abfangen. Zudem müsste das Prüfprogramm schon eine ganze Menge Zahlen schreiben, um den Pipe-Puffer zu füllen
Ich glaube nicht, dass das Blockieren des Puffers ein Problem sein sollte. Das Prüfprogramm mag blockieren, läuft aber spätestens dann weiter, wenn Dein Programm sich nach der ersten "42" beendet, und dabei seine Standardeingabe schließt. Der blockierende Aufruf von "write()" gibt dann EPIPE zurück, und ein anständig geschriebenes Programm sollte das eigentlich abfangen. Zudem müsste das Prüfprogramm schon eine ganze Menge Zahlen schreiben, um den Pipe-Puffer zu füllen