Japanische Flagge /bzw. Kreis

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Wie schon vermutet - die Unterschiede sind gering. Eigentlich gibt es gar keine (mehr).

Ich habe nur das unäre Plus anders verteilt (- 1 Zeichen) und die '1' nicht als Zeichen(kette) ausgegeben (- 1 Zeichen).

Here it is (84 Byte):

Code: Alles auswählen

print"P3 90 60 1"
for p in range(5400):c=(p%90-45)**2+(p/90-30)**2>324;print 1,+c,+c
War eine reizvolle Sache. Vielleicht bringt der Apfel wieder mal eine interessante Hausaufgabe mit ...
BlackJack

Als ich noch zwei Schleifen hatte, sah's noch so aus:

Code: Alles auswählen

print'P3 90 60 1'
for b in range(-30,30):
 for c in range(-45,45):a=(b*b+c*c>324)+0;print'1',a,a
Das ist die Lösung, wo ich meinte, dass es fast als "echte" Lösung durchgehen kann wenn man es nicht ganz so "gequetscht" hinschreibt und vielleicht ein oder zwei erklärende Kommentare hinzu fügt. Und die Umwandlung `bool` nach `int` sollte man vielleicht anders schreiben. :-)
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Und hier meine Variante:

Code: Alles auswählen

s='P3 90 60 1'
for i in range(5400):x=i%90-45;y=i/90-30;s+=' 1'+' %i'%(x*x+y*y>324)*2
print s
MfG
HWK
lunar

BlackJack hat geschrieben:Also dann Leute, es ist Sonntag, High Noon. Zieht euren Colt, äh, Code. :-)
Black Jack
Der Geek, der schnell programmiert als sein Schatten

Darf ich das so vermarkten?
meneliel
User
Beiträge: 256
Registriert: Montag 25. Juni 2007, 08:35
Kontaktdaten:

lunar hat geschrieben:
BlackJack hat geschrieben:Also dann Leute, es ist Sonntag, High Noon. Zieht euren Colt, äh, Code. :-)
Black Jack
Der Geek, der schnell programmiert als sein Schatten

Darf ich das so vermarkten?
und schöner :)
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Ich würde mal sagen, jetzt fehlt nur noch der formale Beweis, dass es sich bei 84 Zeichen um die kürzeste Lösung handelt (ohne mögliche Importe von Modulen) ;-)
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Und die Korrektheit der Programme muss auch noch formal bewiesen werden :P
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Ihr könnt einem aber auch den ganzen Spaß nehmen ... :(
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Leonidas hat geschrieben:Und die Korrektheit der Programme muss auch noch formal bewiesen werden :P
Da möchte ich einfach mal behaupten, dass dies in diesem Fall nicht so schwierig ist :P

@pütone: Es geht hier doch nicht um Spaß ;-) !
BlackJack

Weil Leonidas in einem anderen Thread meinte man müsste hier noch ein paar weitere Programmiersprachen abdecken, habe ich mal eine Flagge in CBM BASIC V2 geschrieben:

Code: Alles auswählen

10 rem@ £protocol
12 rem@ £fastfor:£shortif:£constant w,h,cx,cy,r,sc,cr
14 rem@ £byte c=2:£word x=fast,y=fast,o:£integer xx,yy
100 ti$="000000"
105 w=40:h=25:cx=int(w/2):cy=int(h/2):r=int((w/4)^2):sc=1024:cr=55296
110 for y=0 to h-1:for x=0 to w-1
120 c=2:xx=x-cx:yy=y-cy:if xx*xx+yy*yy>=r then c=1
130 o=w*y+x:poke sc+o,81:poke cr+o,c:next x,y:print"{home}"ti$
150 goto 150
Laufzeiten in Sekunden:
40 normal,
13 ohne die rem@ mit Basic Boss kompiliert,
10 mit den Optionen und Deklarationen kompiliert.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Und ich habe mich von diesem Thread inspirieren lassen für eine Aufgabe des Shortening Contest.
BlackJack

@numerix: Bin ja mal gespannt, ob noch jemand mit einer Python 2.5 Lösung <119 Bytes kommt. :-)
Benutzeravatar
b.esser-wisser
User
Beiträge: 272
Registriert: Freitag 20. Februar 2009, 14:21
Wohnort: Bundeshauptstadt B.

Da probier ich gleich mal meine neuen erlang-Kenntnisse aus.
Wir haben schon 10% vom 21. Jahrhundert hinter uns!
BlackJack

10 Sekunden war mir für den C64 zu langsam, darum habe ich es noch einmal in C geschrieben. Das läuft in <1 Sekunde:

Code: Alles auswählen

#include <stdint.h>
#include <string.h>

#define WIDTH           40
#define HEIGHT          25
#define X_CENTER        (WIDTH / 2)
#define Y_CENTER        (HEIGHT / 2)
#define RADIUS          (WIDTH / 4 * WIDTH / 4)
#define COLOR_WHITE     1
#define COLOR_RED       2
#define SCREEN_CODE     160

int main(void)
{
    uint8_t x, y;
    uint16_t xx, yy;
    register uint8_t *color_ram = (void*) 0xd800;
    
    memset((void*) 0x400, SCREEN_CODE, 1000);
    for (y = 0; y < HEIGHT; ++y) {
        for (x = 0; x < WIDTH; ++x) {
            xx = x - X_CENTER;
            yy = y - Y_CENTER;
            *color_ram++ = (xx * xx + yy * yy >= RADIUS)
                ? COLOR_WHITE : COLOR_RED;
        }
    }
    return 0;
}
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

BlackJack hat geschrieben:@numerix: Bin ja mal gespannt, ob noch jemand mit einer Python 2.5 Lösung <119 Bytes kommt. :-)
Ich tippe mal stark auf "Nein", nachdem es mittlerweile vier 119 Bytes Lösungen gibt, die sich praktisch nicht unterscheiden. Die bisher einzige Python 3 Lösung mit 121 Bytes ist allerdings nicht die kürzest mögliche ...
Antworten