From e226a751fad5900361243a3248c86ffa76fc60af Mon Sep 17 00:00:00 2001 From: samerbam Date: Wed, 23 Aug 2023 20:02:31 -0400 Subject: [PATCH] add sudoku solution --- application/main.py | 13 +++++++++- application/sudoku.png | Bin 10101 -> 1527 bytes application/sudoku_16.png | Bin 0 -> 10610 bytes application/sudoku_4.png | Bin 0 -> 1538 bytes application/sudoku_generator.py | 42 +++++++++++++++++++++++++------- application/thermal_print.py | 10 ++++++-- 6 files changed, 53 insertions(+), 12 deletions(-) create mode 100644 application/sudoku_16.png create mode 100644 application/sudoku_4.png diff --git a/application/main.py b/application/main.py index 78c3750..e411b11 100644 --- a/application/main.py +++ b/application/main.py @@ -37,6 +37,17 @@ class TodoDate(BaseModel): # date: str = datetime.today().strftime('%Y-%m-%d') +class PrintAction(BaseModel): + date: str = datetime.today().strftime('%Y-%m-%d') + action: str #Options: + # default (pulls current todos from date, needs date) + # sudoku (prints a random sudoku) + # todos (prints only dates todos) + # wordsearch (prints a random wordsearch) + # quote (prints a random quote) + # greeting (prints a greeting) + # + # @app.get("/api/public") # def public(): # """No access token required to access this route""" @@ -107,7 +118,7 @@ def write_todos(todos: TodoList, auth_result: str = Security(auth.verify)): @app.get("/api/todos/print") -def print_todos(date: str = datetime.today().strftime('%Y-%m-%d'), auth_result: str = Security(auth.verify)): +def print_todos(date: PrintAction, auth_result: str = Security(auth.verify)): """A valid access token is required to access this route""" # result = { diff --git a/application/sudoku.png b/application/sudoku.png index 79c96f248dc0ca89d5373971f93e9207b3735b65..e315a48f2d5d6fa399c7f978afd3aa0900d9b3bf 100644 GIT binary patch literal 1527 zcmZuxc~BBq7^id%6B5kqSVLjWGs*+k1H~jL^MFiRGd4U|(^knN2l7CZ5OvJ^AP?3` z(^4tP+=|u;tvpy$yvWI7Q}Rp=(J-yW-Ddh@_sx9oeeeBdzW4in^P4Z@DB&=8^RCSR z004Z%4R=g+l2nll+^E`ZF;!0ifbae|f^#L&%4f@4-EF*dpV}Sr`*IDUlNWFRiJa*> zk(pic25CBM!QO5-rqPCo$L^gWy*P;iZt&JB13q50(md@MWLe4sdK&W+;(Nv_1{7s- z(tYd{A`QkP7yCedEu(Z6~Fyv)ikdTld3iYYwa=CNw z-=9o+B%|+!!6^Rzt*xzE3X-|4on6=|e^cF})^AB*#-GlNob+v=pkv;c%2ndR20C zv=s(JxjB&X8FW?5i*u}SuO2R$jW2tMadw^^&fxJCf}Z8&mU`_tm&R$OBjXg=pai^s z2dHVN6wGRPm$Wf8&UfXF#vZF{-cpu=SuB; zZli`|-m;Blg!eNzzAWAbrL?l=SMi}Z+7zDoOtawO!dM7^qtDW<^4!unYKUkH$?jvC zcn~0|uGfH2I4&0g?F`NS&p%Cm!Ne^_W5O9Pq?uzR4bwf^pN~-0j%a?luyDJ%vLgh8 z!Q?7p?m1amNi7U?r7G98x8u(^b9+XjD(@;n`F^~i?Rt8vZ-Xmh#f8OUuA$9w4B>lN z;Xt5U)^cji{nAM!OBenZ(;9z^PN5VO&n)U8@RGWH1wQg`x2Saz2WXAwh(F_N@6w!2r2HkPIWl zpVxv`&5%ku>gYUfdO^h~7H5hcn4R3jcHd@Z-lNM168hjXJ8kd?K{8aT%<5*(_h$if zwi+i0owU>8`0mBxDaEIQ)yZ)%^<~+u8&!QX;Rv0?FJtSP9 zE$gmd(DpMdG{gD?uWJ$(-ZXZ7in(cBk+1n-VnoK~57KeG9#C29;_-*gm8M1 zZY@amW?jF?p0^Kt4w5_R&!std2O6qUGo%K>N4@ObxI%umNlZS@?RzrTFZkNSg~C0( zmB}gHzbVwhs9UDtU;NAZu+y9V9MvB@_!&pT(aPELaobe31#tpvs!R7mVmGSU%(my& zqNH?ZWRY`f)f8y|IzOTZJV?F*q7v0|B>>!>qK9jb?zG(8VCUp_CBJhtIpF2Ux-)MK z+?XYyO1dNjeB|_aj0EN7uT+h&svQ%Hj86L1UK)*d%ki@|%GTBvjqdVolQru|8yc_3 z&TX^h-K?db!i%QOBPhP!^81;WhmQ9P{ui2Zxi!^w7HDgTQ4Ms!5j+9chz+>#H@-~Y AFaQ7m literal 10101 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 diff --git a/application/sudoku_16.png b/application/sudoku_16.png new file mode 100644 index 0000000000000000000000000000000000000000..5efa509f6de21a304d7523d1ec63455362726113 GIT binary patch literal 10610 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 literal 0 HcmV?d00001 diff --git a/application/sudoku_4.png b/application/sudoku_4.png new file mode 100644 index 0000000000000000000000000000000000000000..0562f6de0734cb51e0ad9c1ba49e265d7fb332e3 GIT binary patch literal 1538 zcmY*Ze>l^59CuDfMKaT^F=L~m<1&&%^OUvCk5nl2Gr|w38s|H3_Bel_<{B3B!$sDgBV?d82qx%(@x(w zQ`4UuT%25?k8}$*VYiUdW_?bCUU#@NV6vV8@`d`4<2EG#TP_-wK8au)%? zX4Qw-oAoqiJ-$g^!XQjYl>XQQ?xkpV_tB2apg6Xm2I$Y{a^DOOCy3xv<)mgX7=W{pk?`t~7?GO(AsDpY9!0RgWRDf05y zgM*soWeW!OaYl!%xR>N+k^0crc*BMfsr2}al1*btB$5oYa{6p)>O=``Bg)MUa=B~t zom)`E(W4MJoUBbClgV&P%MyOQ{}xlGzzdDOM)kCmKZO1L=b4m+-=h)}`?R)Hmaw-s zQGvd3COTRmiKbGof20hYClYBNGXiVCns?nqRFVIs8@JzI5WMv;ZdXnssgf0SRKx;} zMQET@(98<-G;YrgJBJbpn!)>&Dtvrx z|K31Mo_7|85cFoIFE<-U2rAf=hsd)4*?@|tPBXDCo}l8|J1j8!Ez64iI+&aeyt3xG z(9vPD-H;V4yrsvw5)15s$KV=RZ92lFO@gq}o?apD7|Ct1t zfviC`c?eMX6pxK{X?HwiZGzZ?utS*C&O(9Q6{`t0o?#V%585tO=3=%r#kq7icQkbw z@ONV=B@`T~ZRuanITnY=o2t-8v;~1-ls3#oOs*cik`s3ukA#L7a##jzD>gV~2K+zi z3SKFKfd{y@XK`!Ttj{HovM99b6tmS=!L6$UY-rJr#_bWa3lGzN{Ls_ZI2Y_C&9=!Q zW@BiWl^kqE@6V-eRV}*e zR@x$+=hM()Gzzq{0|@50a07ogDMvsj6RYc(Ju435n&#0WBi&@pw{OrwK;~bVx!Hrw&fdD-1aH(!+W=_aTwCfl;jxK;^Txa!z17ONK)CQ8w=1PX!B5gwJJ 200 else 0 # canvas.convert('L').point(fn, mode='1') - canvas.save("sudoku.png", "PNG") + if flipped: + canvas = canvas.transpose(Image.FLIP_TOP_BOTTOM) + canvas.save("sudoku_" + str(size) +".png", "PNG") # img = Image.new('RGB', (200, 100)) # d = ImageDraw.Draw(img) # d.text((30, 20), sudoku[0], fill=(255, 0, 0)) @@ -122,11 +140,17 @@ def convert_to_image(sudoku): # print(text_width, text_height) if __name__ == '__main__': - su = generate_sudoku() + out = generate_sudoku() + su = out[0] + su_sol = out[1] + # print(out) for x in su: print(x) + for y in su_sol: + print(y) convert_to_image(su) - print(su) + convert_to_image(su_sol, size=4, flipped=True) + # print(su) # for x in generate_sudoku(): # print(x) diff --git a/application/thermal_print.py b/application/thermal_print.py index 9dfb35b..047b7f2 100644 --- a/application/thermal_print.py +++ b/application/thermal_print.py @@ -129,9 +129,15 @@ class ThermalPrinter(): # self.p.close() # self.p = Usb(0x0416, 0x5011, None, 4, 0x81, 0x02) # self.p = Usb(idVendor=0x0416, idProduct=0x5011, usb_args=None, timeout=4000 , in_ep=0x81, out_ep=0x02, profile="POS-5890") - convert_to_image(generate_sudoku()) + # convert_to_image(generate_sudoku()) + sudokus = generate_sudoku() + convert_to_image(sudokus[0], size=16, flipped=False) + convert_to_image(sudokus[1], size=4, flipped=True) + self.p.set(align="right") + self.p.image("sudoku_4.png") + self.p.text("\n") self.p.set(align="center") - self.p.image("sudoku.png") + self.p.image("sudoku_16.png") # self.p.close() # self.p = Usb(idVendor=0x0416, idProduct=0x5011, usb_args=None, timeout=4 , in_ep=0x81, out_ep=0x02, profile="POS-5890")