Rutsche-A-Pearing

16

Hier sind fünf Bilder von Birnen und einer Stahlrinne :

A: B: C: D: E:Birnen A Birnen B Birnen C Birnen D Birnen E

Dies sind nur Vorschaubilder. Klicken Sie auf die Vorschaubilder, um sie in voller Größe anzuzeigen.

(Ich habe diese mit Algodoo gemacht .)

Diese Bildklasse hat immer die folgenden Eigenschaften:

  1. Sie sind immer 400 × 400 Pixel mit weißem Hintergrund. (Es kann sein, dass es nicht genau weiß ist, da SE-Bilder verlustbehaftet komprimiert werden.)
  2. Sie haben 1 bis 4 identische Birnen, jede gedreht und (fast) beliebig positioniert.
  3. Sie haben eine vertikale Stahlrutsche, die bis zum unteren Bildrand reicht.
  4. Mit Ausnahme des unteren Randes der Schurre berühren die Schurre und die Birnenbegrenzungsrahmen ( Beispiel für einen Begrenzungsrahmen ) niemals die Bildgrenzen oder überschreiten diese.
  5. Die Begrenzungskästen der Birnen überlappen sich weder noch die Rutsche.
  6. Die Birnen können unter dem geneigten Teil der Rutsche, wie in seine B , C und D . (So ​​kann der Begrenzungsrahmen der Rutsche den Begrenzungsrahmen einer Birne überlappen.)
  7. Die Rutsche kann jede horizontale und vertikale Position einnehmen, solange genügend Platz vorhanden ist, damit alle Begrenzungskästen der Birnen frei darüber passen (es werden keine Fälle mit "kaum Passungen" getestet) und ein Teil des Säulenteils sichtbar ist.

Herausforderung

Schreiben Sie ein Programm, das ein solches Bild aufnimmt und ein weiteres 400 × 400-Bild ausgibt, wobei sich der Schacht an derselben Stelle befindet, die Birnen jedoch so positioniert sind, dass sie sich alle über dem Schacht befinden (damit sie hineinfallen und entsaftet werden können und so weiter).

Die Anforderungen für das Ausgabebild sind:

  1. Alle Birnen im Eingabebild müssen so positioniert werden, dass sie sich über dem Schacht zwischen der linken und rechten Kante des Trichters befinden. (Über einer Kante ist nicht in Ordnung.)
  2. Jede Birne muss ihren Drehwinkel beibehalten. (Sie sollten also die Birnen ausschneiden und einfügen, nicht neu zeichnen.)
  3. Die Birnen dürfen sich oder die Rutsche nicht überlappen oder berühren. (Die Birnenrahmen können sich jedoch überlappen.)
  4. Die Birnen dürfen die Bildgrenzen nicht berühren oder überschreiten.

Hier sind Beispiele für gültige Ausgaben für die fünf Beispielbilder:

A: B: C: D: E:aus A aus B aus C aus D aus D

Dies sind nur Vorschaubilder. Klicken Sie auf die Vorschaubilder, um sie in voller Größe anzuzeigen.

Beachten Sie, dass das Eingabebild für E bereits eine gültige Ausgabe war, die Neuanordnung der Birnen, wenn dies technisch nicht erforderlich ist, jedoch in Ordnung ist.

Einzelheiten

  • Übernehmen Sie den Dateinamen des Bildes oder die Rohdaten des Bildes über stdin / command line / function call.
  • Geben Sie das Bild in eine Datei mit dem Namen Ihrer Wahl aus oder geben Sie die Rohdaten der Bilddatei als Standardausgabe aus oder zeigen Sie das Bild einfach an.
  • Jedes gängige verlustfreie Bilddateiformat kann verwendet werden.
  • Grafiken und Bildbibliotheken können verwendet werden.
  • Ein paar falsche Pixel hier und da (wegen Verlust oder so) sind keine große Sache. Wenn ich visuell nicht sagen kann, dass etwas nicht stimmt, ist es wahrscheinlich in Ordnung.

Der kürzeste Code in Bytes gewinnt. Tiebreaker ist der am höchsten gewählte Beitrag.

Calvins Hobbys
quelle
Kann ich das Problem auf der Khan Academy lösen, da ich über ein Konto bei der Khan Academy verfüge und es dort perfekt zu lösen scheint? Es gibt nur eine Komplikation: Externe Bilder sind nicht zulässig. Zum Glück kann ich die Bilder durchlaufen diese sie zu Khan Academy freundlichen Daten zu konvertieren. Ist das akzeptabel?
BobTheAwesome
@BobTheAwesome Sie möchten also eine JavaScript-Antwort veröffentlichen? Das ist in Ordnung, obwohl es 400x400 Bilder ein- und ausgeben soll. Sie können Ihre Arbeit posten, um zu zeigen, wie Sie es mit KA gemacht haben, aber ich akzeptiere es möglicherweise nicht als Gewinner, wenn es mit 400x400-Bildern nicht funktioniert.
Calvins Hobbys
Ein perfekter Zufall; Khan Academy hat zufällig eine Standardgröße von 400x400px für Javascript + Pjs.
BobTheAwesome
Nein!! Imagenator ist auf 400x400 Bildern super langsam !!
BobTheAwesome

Antworten:

6

Python 2.7, 636 Bytes

import sys;from PIL.Image import*
_,m,R,I,p,H=255,400,range,open(sys.argv[1]).convert('RGB'),[],0
w,h=I.size;W,A,P,L=(_,_,_),[(x,y)for x in R(w)for y in R(h)],I.load(),I.copy()
try:
 while 1:
    s,x,y,X,Y=[[a for a in A if P[a][0]<50][0]],m,m,0,0
    while s:c=(a,b)=s.pop();x,y,X,Y=min(x,a),min(y,b),max(X,a),max(Y,b);P[c]=W;s+=[n for n in[(a+1,b),(a,b+1),(a-1,b),(a,b-1)]if n in A and P[n]!=W]
    p+=[((x,y,X,Y),X-x,Y-y)]
except:0
def G(a):r,g,b=P[a];return r==g==b and r<_
g=[a for a in A if G(a)]
(z,t),W=g[0],max([x for x,y in g]);t-=1
for r,w,h in p:
 if z+w>W:z,_=g[0];t-=H;H=0
 I.paste(L.crop(r),(z,t-h,z+w,t));z+=w;H=max(h,H)
I.show()

BEARBEITEN : Entfernt jetzt den Alphakanal, bevor das Bild bearbeitet wird, und richtet die Birnen bei Bedarf in mehreren Zeilen aus

Produzierte Bilder:

EIN B C D und E

und mit vertikalen Birnen (dauert auf meinem Computer ungefähr 3 Minuten):

Testfall Vertikale

Dieter
quelle
1
Sind die Bilder vor / nach? Wenn ja, ich denke, Sie haben die falschen für BE genommen ...
Sp3000
eingabebild links und ausgabebild rechts ... sie sind überhaupt nicht pixelgenau, da sie neu skaliert und kopiert wurden. Ich habe sie nur
eingefügt
Funktioniert das, wenn alle Birnen horizontal sind ?
Calvins Hobbys
eigentlich nein ... aus zwei gründen: es fällt in eine endlosschleife, weil dieses bild einen alpha-kanal hat -> das script so korrigieren, dass es das bild zuerst konvertiert. Der andere Grund ist, dass ich den Code entfernt habe, der die Birnen in mehreren Zeilen ausrichtet -> zurücksetzen
Dieter,