2022年1月19日水曜日

続・お年賀 2022

 元々、python 電卓が豊作という所でこしらえた「お年賀」コードでしたが、HP Primeのpython文法はXCASのもので、純正upythonとは異なるらしく、動作するコードを作るのに難儀して、結局はPPLにて作成した次第。

データ量が多く、入力するのには大変な苦痛を伴うものでしたが、コードのメインパートは至極単純なので、誰か移植してくれないものか、などと甘い期待をしておりましたが、みている人が少ない「鄙びた辺りにある」当blogなので、誰も移植を試みようとは言って呉れませんヨ、トホホ。

そこで、遅ればせながら、python電卓でも動きそうなコードを提示しておかないとならぬ、と刻苦奮励、どうにかソレらしいコードをでっち上げた次第。

取り敢えずマニュアルが参照できるCASIO fx-CG50向けでコードを作成してみましたが、実機を持っているわけでないので、誰か、お試し戴けたら幸甚ではあります。

データ部分の行がやたらと長いので、python電卓といえども、長い行のハンドルは可能なのか ? という興味もあります。お持ちの方は是非ともお試し戴き度。

また、Numworks, TI-84+ CE edition-python とかでも、移植しやすい筈なので、やってみた方は是非ともレポート戴くと有り難いです。 

2022-01-20 追記
コードを修正してみました。


リストだよん 

# title : gprint-run.py
# begin : 2021-12-20 02:54:36 

from casioplot import *

#  functions definitions

#  plot services
def  plot(x, y, d, c) : 
  for j in range(d) :
    for i in range(d) :
      set_pixel(x+i, y+j, c)

#  colour string generates
def RGB(r, g, b) :
  return  (r, g, b) 

#
def  gprint(x, y, d, str) :
  for c in str:
    num = '0123456789ABCDEF'.index(c)
    code = colour[num]
    plot(x, y, d, code)
    x = x+d

#  main part

#  colour parettes
colour = []
colour = colour + [ RGB (32, 30, 22)  ]
colour = colour + [ RGB (93, 94, 86)  ]
colour = colour + [ RGB (51, 69, 71)  ]
colour = colour + [ RGB (77, 52, 30)  ]
colour = colour + [ RGB (111, 146, 156)  ]
colour = colour + [ RGB (94, 121, 131)  ]
colour = colour + [ RGB (173, 199, 205)  ]
colour = colour + [ RGB (228, 229, 222)  ]
colour = colour + [ RGB (163, 160, 155)  ]
colour = colour + [ RGB (172, 138, 110)  ]
colour = colour + [ RGB (153, 113, 87)  ]
colour = colour + [ RGB (210, 173, 158)  ]
colour = colour + [ RGB (200, 150, 119)  ]
colour = colour + [ RGB (223, 201, 180)  ]
colour = colour + [ RGB (98, 76, 50)  ]
colour = colour + [ RGB (144, 93, 56)  ]

#  colour code 

gdata = [
   '000000012324445205444467526677846777425466444541122200214444467776645000445' , 
   '000000084114445505644467226777846666405666444555122000214114667776445002465' , 
   '00000091A845444504444466524777446667405467454555122000214444777677445002445' , 
   '000000432664466525645466554777446676404476456444112202111118667776442002445' , 
   '00000012046676640544446752667784666760546664688B88BC88DB6954777776442002645' , 
   '00100012246677640564446742477744666762546768D6DB8BBBBCBDDDB8667777642002645' , 
   '0022011221666774254444664247776566666546D698DBD77DDD77DD8D78886777645002445' , 
   '00200522224677642444446742477764667767777BEE8BB77D777777DBB7644666445002465' , 
   '2332252322567764054444674267776467777777745399D777D777777DB8D68488641202645' , 
   '3E2025002E5467742244446742467784677777771B828BD7D77D7777DDD8968886684002442' , 
   '2E30220302114774226444676267776BBD77777B8123BDB67D7777777DD8589487766502645' , 
   '322312020222477425444466424777BBBDD7777B8308BBD7DDDD7777DDC9911EAD777B55445' , 
   '323212030112567422444466424777BBD77777D89EA8BDDBDDDDD7D7DB9891AA99B77768645' , 
   '2302100222242674225555468256DBBB77777777B86BBBBDDD6BDDDDB8888596D899D776645' , 
   '3222100202565464224444666058B7BBBD777777DBDBDBBDBBBBBBBB8888888D77D89877645' , 
   'E32110020E264266224554676286BBBBDBD77BDD8BBD6BD6DBB88BB88CAA888D777D8967745' , 
   'E222E0020E16826622445546B4BA8BBBBB9BBCB98BBBBBBBBB8B8B989BA195BD7777789D7D6' , 
   '3222200E0228656620445466BBAABBBBBBA9AA89BBBB6BBBD88BBBB989AA9AB7DD777DB8777' , 
   '202010020114744422445866B9ACBBBBBCAAB8B89BBBBBA8BBBBB8BCC9AA9ABDDDD7777B877' , 
   'E22210020218764422444888BCACBBBBBCABBBB8B595BB9188BBBB888A19A8BB98DD7777B8D' , 
   'E20212020E28765422444DBBBBAABBBDBBBBDBBBCA851BBAA8B8BB8C9AA9A8BAA9DDD7777DD' , 
   '2022E0000228774550448DBBBBAABBBBBBBBBBBB91B82ABB1BB8BC9C9A99199AF989D77777D' , 
   '22321002211477655245BDDBBBCCABBBBBBBBBBBB14129B8F98B8B989A9F9AAAE999DDDDD77' , 
   '222220020114676450448DDBBBCCCABDBBBBBBBB812238BBAA8B99CA999E91A1FA99B9DD677' , 
   '222EE00301247774525486DBDBBCCABBDDDBDBBBB5103BBBAAB8999CA1AAEEA11AA9C9CD8DD' , 
   '323222002229777652445DDBBBBBCBBBDBBDBDBBBA1E1B8BAA9CC999A9AAEEAE1AA9A988DDD' , 
   '212220020E156776554448BBBBDDBDDDDDBBBBBBB95AABBB998C999119A1EF1E1FA9F9988DB' , 
   '1112200522E577774446488DDDDBBDBBBBDBBBBBBCB9BCCC9C9999AEF91EE11E11AAE999CC9' , 
   '21125200022167674445466BBDDBDDDBBBBBBBBBCCCCBBB89CC99AEE19E0E1E1EFAE1A998B8' , 
   '151E12000144666654812246BDBDDBDBBBBBBBBCBCC8CCC998CAAFEEAAE3EEE11FE21A599CC' , 
   '151222000224666686DD7641CDBDDDBDBBBCCBCCB99CCB8C8CAAEE3191321EE1FEEEFAA998C' , 
   '1122E200000224686DD77777ABBBDBBBBBBBCCCC99C89C9CCAFEEE319E33E1FE1E2E11AA9C8' , 
   '21E2E2000112039DDDD7777DCCCDBBDBBBC8CC9C99C9C8CC9F133E3AA332EEE1EEEEEEAAA99' , 
   '212222200111199CDD77D77DCCBBBDDBBBBCC9C99C9C9CBAA133E3EA323EEEEEEEE1EF1A199' , 
   'E22E2E200221999B7D7D77DCBCCDBBBBBB9999AA9AA999A1E33333AF0333EEE1EEE1EFAA199' , 
   '11223200022289CD77DD77CCCCCDBBBCCCC9999C9999A12E33003FA003E22E1EEE1E211AF99' , 
   '222322200221CCDDDDDDDDDCCCCBBBDBB99A98C9A9AEE3030300FA0033E23E1EEE1E2F1F199' , 
   '32020230022ACDDDCCBBCCCACCCCCDBCCCAAAA9AAA1EF3300303F30330333113EEE3E11A19A' , 
   '022002000EABDDD9FCCACFFFCCBCBCCCCAAAF1A58AAAA133303F300330322EE3EEE22EA1F9A' , 
   '302000001B7DDDCCCCAC9FFFFCCCCCCAAAAFAF1ABAB33A1103E300303203E1332EE2E1AE19A' , 
   '00000018DDDDDDC9CFFFFFEEF33EF3FFFFEFEEEEA3193FB9F330033003333303EEE23EF1FA1' , 
   '00001BDDDDDC9CA9FFFFEEE3333333EE1FA1FFAFA1F13EFA3333333303030003E1E0EEA119A' , 
   '0E9DDD7DBCFCA9FFFFEF333FE33FF9AFAFE33333EF1E1E33E333303003030003EA10EE1EA9A' , 
   '8DD7DDCCFCFAFFFFFEE33FF33FAA9FFF3303330300003F11EE33300000000003FAE03EEAF9A' , 
   'DDCCCFCFACFFFEEFFEFFFFFFCCFFFFE303FCFFE3000000003000000000000000AAE2EE1F19F' , 
   'CFCCAACAAFFFFFFF3FFA9CCFA33F9F33F9CAAFF3300000000000000000000000FA122EF1F9A' , 
   'FCFFCFFFFEFFFFFFACAAFFFAF3FCA33ACCAAAFFF330000000000000000000000E99E2EF119A' , 
   'FFCFFFFFEFFFAFCCFFFEFCCA3FCCF3ACCAACAAFFF33000000000000000000000E98EEE11AAA' , 
   'CCFFFEF3FFFFCCFFFFACCCAFFCCF3ACC9CCAAC9BAFF300000000000000000000EFCAF3A3F9A' , 
   'FFFFFFFFFFCCFFFFACCCCCF3FC9FFCBCCCCBBDD77DBA30000000000000000000EFC9EEFEA99' , 
]


d = 4     #  pixel size
x = 10    # picture x coords
y = 10    # picture y coords

for str in gdata :
  gprint(x, y, d, str)
  y = y + d

show_screen()

16 件のコメント:

hangyodon さんのコメント...

こんにちは。

早速、CASIO fix-CG50で動作確認しました。
結果はSyntax Error: invalid syntax でした。

リストで変数にstrがありますが、これって予約語では?
とりあえずstraに変更しても同じエラーでした。

自分は、Pythonの細部はまだ勉強中でして、、、
どなたか知識のある方に応援願います。

実は現在、各社のPython電卓で共通のソースで
動作出来る様に試行錯誤しています。
既に、TI-Planetのホームページで頻繁に
使われているソースを改良しようと思っています。

その機能とは、Pythonの例外処理(TRY文)を使って
プラットフォームを特定して動作させるものです。

今回の様に各社専用のソースを準備するのではなく、
共通のソースでそのまま動作出来れば便利だと思います。

中途半端で申し訳ありません。

ではでは。

akatuki さんのコメント...

hangyodon 様、早々のご報告、有り難く !

当方の掲げたコードに誤りがありました、申し訳ない。

コード中の

def RGB(r, g, b) :
return list(r, g, b)



def RGB(r, g, b) :
return (r, g, b)

に変更して、(list, を取り除く) お試し戴きたく !

hangyodon さんのコメント...

またまた、こんにちは。

えーと、動画はTwitterを参照下さい。

https://twitter.com/hangyodon1123/status/1484049094893248513?s=21

また、エラーの原因が判明しました。
原因は、ファイル名にハイフンを使ったのがNGでした。

https://twitter.com/hangyodon1123/status/1484051604047556609?s=21

エラーを探す為、ソースの全てをコメントにしてみたら、
まだエラーが出るので判明した次第です。
ファイル名が8文字までの制限は知っていましたが
まさかの落とし穴が、、、

エラーメッセージが、自分のファイルのimport で
発生していたとは、、、

まとめますと、自分が指摘したstrはそのままでOKです。
akatuki様のご指摘のlistを削除のみで動作できます。

ではでは。

akatuki さんのコメント...

hangyodon 様、お知らせ多謝であります !

> えーと、動画はTwitterを参照下さい。
> https://twitter.com/hangyodon1123/status/1484049094893248513?s=21

おおっ、よかった ! 無事に動いたようですネ。
ご評価戴き、ありがとうございます !

> また、エラーの原因が判明しました。
> 原因は、ファイル名にハイフンを使ったのがNGでした。
> https://twitter.com/hangyodon1123/status/1484051604047556609?s=21
> エラーを探す為、ソースの全てをコメントにしてみたら、
> まだエラーが出るので判明した次第です。
> ファイル名が8文字までの制限は知っていましたが
> まさかの落とし穴が、、、

ウーム。「まさかの坂」 ... 。
しかし、それをSyntax errorだけ示す、ちうのは、
なかなか慣れてこないと難しいですネ。

> エラーメッセージが、自分のファイルのimport で
> 発生していたとは、、、

> まとめますと、自分が指摘したstrはそのままでOKです。
> ... listを削除のみで動作できます。

お知らせ有難う御座います。
当方、まだ、pythonも入門したてであり、「色指定でリストまたはタプルで行う」と取説にあって、「listって付けてリストを作るもんなのか」と思ってしまい、こんな間違いをやってしまった次第。
まだまだ勉強が足りませんネ。

そういや、リスト末尾の方の

d = 4 # pixel size

の数値を小さくすると、画素の大きさが小さくなります。すると、画像の鮮明度が見かけ上増えるので、より表示が鮮明になります。
(画像は小さくなりますけれど)

ちなみに、Numworks電卓でも、少しの改変で動くのではないか、と考えております。
ただ、ソース、特にデータ文字列がやたらと長いので、メモリに読み込めるのか ? という懸念もあります。(古い方、メモリが少ないとか)

from casioplot import *

from kandinky import *
に、

# plot services
def plot(x, y, d, c) :
fill_rect(x, y, d, d, c)

とかやればいいのかナ ?

色々と、実機で実行してみないと、わからない事があります。
お骨折り戴き、有難う御座います。

hangyodon さんのコメント...

ども、こんにちは。

ご要望のNumWorksに対応しました。
Twitterの動画を参照下さい。

https://twitter.com/hangyodon1123/status/1484407945442250755?s=21

https://twitter.com/hangyodon1123/status/1484407945442250755?s=21

どちらも、同じソースで動作しています。
スクリプトの冒頭で、動作プラットフォームを判定し、
描画ルーチンを分岐させています。

実は、4種類のPython電卓を同じソースで動作すべく
格闘中です。

今回で2機種は、対応出来ました。
Casio fx-CG50
NumWorks

残り2機種がクセモノです。
TI-84 Plus CE Python
HP Prime

TI-84 Plus CE Python
標準ライブラリのimport判定は出来るのですが、
肝心の描画ライブラリがアドオンらしく上手く
importできません。
何か裏技があるかテスト中です。

HP Prime
他機種と共有出来るソースを考えた場合、やはり
CASを使うことにしました。
スクリプトの先頭と最後におまじないを付加する
だけです。
(#にcas、endを付加)
しかし、上手く動作しません、、、
動作プラットフォーム判定が、上手く動作して
いないようで、、、
TI-84の判定制御が悪さしているかも???

参考まで、2機種対応のスクリプトを載せます。
何かヒントがあれば幸いです。

ではでは。

以下、スクリプトです。


# for HP Prime cas

# title : gprint1m.py ver 0.1
# version : 2022-01-21 ver 00.01
# original : akatuki (for Casio fx-CG50)
# modification : hangyodon1123 (for Numworks,TI-84 Plus CE,HP Prime cas)

# functions definitions

# getting platform id
def getplatform():
pid = -1
try:
from casioplot import *
pid = 0 # Casio fx-CG50
except:
pass
try:
from kandinsky import *
pid = 1 # Numworks
except:
pass
try:
from ti_graphics import *
pid = 2 # TI-84 Plus CE Python
except:
pass
try:
from graphic import *
pid = 3 # HP Prime cas
except:
pass
if pid == 2:
from ti_draw import *
return pid

# colour string generates
def RGB(r, g, b):
return (r, g, b)

# plot control
def gprint(pf, x, y, d, st):
for c in st:
num = '0123456789ABCDEF'.index(c)
code = colour[num]
if pf == 0: # for Casio fx-CG50
for j in range(d):
for i in range(d):
set_pixel(x+i, y+j, code)
elif pf == 1 or pf == 3: # for Numworks, HP Prime cas
fill_rect(x, y, d, d, code)
else: # for TI-84 Plus CE Python
fill_rect(x, y, d, code)
x = x + d

# main part

# colour parettes
colour = []

途中省略

d = 4 # pixel size
x = 10 # picture x coords
y = 10 # picture y coords

pf = getplatform()
# pf :
# -1 = non
# 0 = Casio fx-CG50
# 1 = Numworks
# 2 = TI-84 Plus CE Python
# 3 = HP Prime cas

if pf == -1:
print('non support')
else:
for st in gdata:
gprint(pf, x, y, d, st)
y = y + d
if pf == 0: # for Casio fx-CG59
show_screen()
elif pf == 1: # for Numworks
pass
elif pf == 2: # for TI-84 Plus CE Python
pass
else: # for HP Prime cas
wait

# for HP Prime cas

hangyodon さんのコメント...

あらま、スクリプトのインデントが
上手くコピペできてませんね、、、

明日にでもGitHubにアップします。

スクリプトの公開は、問題ありませんか?

ご返事、お待ちしております。

ではでは。

akatuki さんのコメント...

遅くなりまして申し訳ない。取り急ぎ。

github への公開、大いにやって下さい !

hangyodon さんのコメント...

ども、こんにちは。

今日の成果報告です。
まず、Twitterの動画を参照下さい。

https://twitter.com/hangyodon1123/status/1484798201538695168?s=21

https://twitter.com/hangyodon1123/status/1484798683174809601?s=21

4種類のPython電卓を同じソースで動作すべく
格闘中ですが、3機種目で挫折しました。

とりあえず2機種は、対応出来ました。
Casio fx-CG50
NumWorks

3機種目
TI-84 Plus CE Python
標準ライブラリのimport判定は出来るのですが、
肝心の描画ライブラリがアドオンらしく上手く
importできません。
結局、ソースを専用とし、import文を固定して
対応しました。
また、そのままではメモリ不足な為、データの
一部をコメントアウトしました。

最後は、クセモノです。
HP Prime
CASを使うことにしましたが、今日の時点では
まだ、テストしていません。
昨日は、エラーすら出なかったので、
苦労しそう、、、

今日の成果をGitHubに公開しました。

https://github.com/hangyodon1123/gprint_sample

gprint1m
Casio fx-CG50,NumWorks 向け

gprint2m
TI-84 Plus CE Python 向け

NumWorksは、ブラウザ上でシミュレーションできますよ。
下記のページを開き、再生ボタンを押せば実行します。

https://my.numworks.com/python/vef03715/gprint1m

ではでは。

akatuki さんのコメント...

hangyodon 様、お知らせ多謝であります !

> まず、Twitterの動画を参照下さい。
> https://twitter.com/hangyodon1123/status/1484798201538695168?s=21
> https://twitter.com/hangyodon1123/status/1484798683174809601?s=21

動いておりますなァ ! いや、素晴らしい !!
TI-84 CE, チョット遅いですネ。ウーム。 Z80だからなのか ?

> 4種類のPython電卓を同じソースで動作すべく
> 格闘中ですが、3機種目で挫折しました。

あの仕掛け、大変勉強になりました。
upython の可能性を感じさせる、うまいコードですネ。

> 3機種目
> TI-84 Plus CE Python
> 標準ライブラリのimport判定は出来るのですが、
> 肝心の描画ライブラリがアドオンらしく上手く
> importできません。
> 結局、ソースを専用とし、import文を固定して
> 対応しました。

TIのupythonのインプリメント方式が、少し違っているのか ?
それが実行速度にも影響している ?
この辺り、使ってみないとワカランものですネ。

> また、そのままではメモリ不足な為、データの
> 一部をコメントアウトしました。

これは意外。
TI-84 CE, メモリは割合多いのではないか、と思っておりましたが。
そういや、python editionになって、RAM領域が少し減っている様な感じだった ?

> 最後は、クセモノです。
> HP Prime

コレはクセモノであります !

> CASを使うことにしましたが、今日の時点では
> まだ、テストしていません。

古いsimulatorで試した範囲では、リストの表記がpythonのソレとは異なる様子でしたネ。
また、リストを保持する変数の扱いが自由ではなく、リスト専用変数 (L0..L9) を使うなど、見通しが悪かったので、諦めて PPL にて作業したのでした。
新しい環境では、どうなのか ? 楽しみではあります。

> 今日の成果をGitHubに公開しました。
> https://github.com/hangyodon1123/gprint_sample

イイですネ !
HP Prime版も、期待しております。

> NumWorksは、ブラウザ上でシミュレーションできますよ。
> 下記のページを開き、再生ボタンを押せば実行します。
> https://my.numworks.com/python/vef03715/gprint1m

オオッ、コレは愉快であります。
Numworksの方が、TI-84 CEよりも長いコードが収容できる、のか ?
少々意外な感じですネ。

お知らせ、有難う御座います。

hangyodon さんのコメント...

ども、こんにちは。

本日の成果報告です。Twitterを参照下さい。

https://twitter.com/hangyodon1123/status/1485156664341057545?s=21

https://twitter.com/hangyodon1123/status/1485157277883826179?s=21

やはり予想通りHP Prime対応は苦戦しました。

当初のCAS環境での動作が上手く行かず、、、
なにやら、毎回テーブル設定なのか、まるで
コンパイルしているかの様に砂時計が出たり、
スクリプト修正しても、修正前の動作をしたりと
自分の手に負えない状況になりました。

で、CAS環境は諦めて構築することに、、、

やはりimportでつまづき、global変数を無くし、
PPLからの呼び出し処理を付加して、どうにか
動作出来る様になりました。

やはりmicro Pythonは、各社でクセがある様です。

今回の対応で、CASIOとNumWorks がとても
シンプルで作り易いと思いました。

スクリプトの互換性を求めるのは、自分だけでは
無いと思います。
まあ、複数の機種を購入している方は、少ないで
しょうが、今回の対応でまとめてひとつの
スクリプトにならないのは、とても残念です。

もしかすると、裏技があるのかも?

最後に全機種の記念写真とGitHubです。

https://twitter.com/hangyodon1123/status/1485158976799100928?s=21

また、面白いスクリプトがありましたら、
今回の様に対応してみたいと思います。

ではでは。

akatuki さんのコメント...

hangyodon 様、お知らせ有り難く。

> 本日の成果報告です。Twitterを参照下さい。
> https://twitter.com/hangyodon1123/status/1485156664341057545?s=21
> https://twitter.com/hangyodon1123/status/1485157277883826179?s=21

お疲れ様であります !

> やはり予想通りHP Prime対応は苦戦しました。
> ...
> で、CAS環境は諦めて構築することに、、、

やはり、最新のファームで使える、pythonメニューからのコードでありますネ。いいなぁ。
import とか使えないとなりません。
pythonコードの勉強にもなります。有難う御座居ます。

> スクリプトの互換性を求めるのは、自分だけでは
> 無いと思います。

仰る通りです。一応 python電卓なのですからネ。
ただ、基本はupythonつうても、各社の「味付け」があるので ... 。

> もしかすると、裏技があるのかも?

ウーム ... 。
HP PrimeはXCAS由来らしく、互換が難しいのは納得ではあります。
TI-84 CEの場合、独自色が強い ?
たしか、Roverデバイスとか、pythonから制禦出来るとか。

> 最後に全機種の記念写真とGitHubです。
> https://twitter.com/hangyodon1123/status/1485158976799100928?s=21

圧巻ですなァ。いや、お疲れ様であります !

> また、面白いスクリプトがありましたら、

アイデヤがあるとイイんですケド ... 。

hangyodon さんのコメント...

こんにちは。
今回のネタで多分最後の報告です。

TI-84 Plus CEの描画ライブラリのbug修正と
RGBテーブルの変更を実施しました。
省略は、GitHubを参照下さい。

https://github.com/hangyodon1123/gprint_sample

画ライブラリのbug修正とは、full_rectで四方の
1ドットが抜け落ちるのを修正したものです。

https://twitter.com/hangyodon1123/status/1485492821130117125?s=21

今回の画像データで、TI-84がメモリ不足になりましたが、
おそらく脱獄アプリかゲームアプリの影響かと
思われます。
メモリをフルリセットして確認すれば良いのですが、
再構築が面倒なのでご勘弁を、、、

また、TI-84の描画が遅い原因は不明です。
今回利用したti_drawの下位であるti_graphicsの
ルーチンを使えば少しは改善するかも???

今回のテストは、とても疲れました。
NumWorksは、Web上でテストできますが、
それ以外は、PCとケーブル接続してスクリプトを
コピペや転送しなければならず、ケーブルの抜き差しが
とんでもない回数になりました。

でも、おかげさまで今回で各機種のクセがある程度
理解出来たので、次回からはもっと効率が良くなる
と思います。

ではでは。

akatuki さんのコメント...

hangyodon 様、お知らせ多謝です。

> TI-84 Plus CEの描画ライブラリのbug修正と
> RGBテーブルの変更を実施しました。
> 省略は、GitHubを参照下さい。
> https://github.com/hangyodon1123/gprint_sample
> 画ライブラリのbug修正とは、full_rectで四方の
> 1ドットが抜け落ちるのを修正したものです。
> https://twitter.com/hangyodon1123/status/1485492821130117125?s=21

TIのグラフィクスAPIの仕様に合わせる、という事ですネ。

> 今回の画像データで、TI-84がメモリ不足になりましたが、
> おそらく脱獄アプリかゲームアプリの影響かと
> 思われます。

おっ、もう脱獄アプリがあるのですネ、流石はTI hackers !
道理でメモリが ... 。

> メモリをフルリセットして確認すれば良いのですが、
> 再構築が面倒なのでご勘弁を、、、

バカみたいにデータが多く、通常の利用とは異なるものですから、
リセットしてまで使う様なもんじゃありません。
コメント削除など、コードを削り込む方が「正解」なのです。お疲れ様です。

> また、TI-84の描画が遅い原因は不明です。
> 今回利用したti_drawの下位であるti_graphicsの
> ルーチンを使えば少しは改善するかも???

おっ、そんなもんがあるのですネ。
TIのmodule、充実している ?

> 今回のテストは、とても疲れました。
> NumWorksは、Web上でテストできますが、
> それ以外は、PCとケーブル接続してスクリプトを
> コピペや転送しなければならず、ケーブルの抜き差しが
> とんでもない回数になりました。

お疲れ様です !
それも実機を持つ者の苦労であり、愉しみであり ... 。

> でも、おかげさまで今回で各機種のクセがある程度
> 理解出来たので、次回からはもっと効率が良くなる
> と思います。

労作であります。
当方も、HP Primeのpython環境など、色々と勉強になりました。有難う御座います。

hangyodon さんのコメント...

こんにちは。
あれから、HP PrimeのPythonを調べています。

Twitterにも上げましたが、Pythonの実行環境は
3種類ある様です。
CAS環境
PPL環境
Python Shell環境

CAS環境と他は別物の様で、今回の様な他機種との
互換性を考えるとCAS環境以外が妥当です。

PPL環境とは、PPLからPythonスクリプトを
呼び出すだけです。
おそらくPython Shell経由だと思います。
今回は、これで移植しました。

アプリから実行するのが、Python Shell環境です。
他機種は、こちらが標準です。

しかし、HP Primeだと、スクリプトのPC経由で
コピペが未対応の様です。
何度かテストしたのですが、電卓本体の
強制リセットの連続で、断念しました。

PCのコネクトアプリがまだ未対応なのかも?

さすがに、今回のスクリプトを電卓のみで
入力するのは地獄、、、
当面は、PPL環境で使おうと思います。

やはり残念なのが、HP Primeのヘルプが
Pythonだけ英語のまま、かつモジュールの
一部が欠落しています。
HPは、やる気が無いのでしょうか?
このハードウェアを活かしてほしいものです。

ではでは。

hangyodon さんのコメント...

こんにちは。
HP PrimeのPythonについて、追加で調査
しました。

akatuki様の返信で気になった所がありました。



> あれっ、そうなったのですか !

> 当方、古いシミュレータで止まっているので、
> 最新の環境は「?」なのです、申し訳ない。

> 以前は、

> 「XCASのプログラミング言語がPPL」

> 「XCASのプログラミング言語がpython文法にも対応した」

> という認識だったのですが、Python shellを新設する事で、
> 色々と仕掛けを変えてきている ... ?

この認識は、正しいと思います。

英語のWikiにHP Primeのプログラミング言語は
PPL
Python(ベータテスト中)
の2種類があり、CASエンジンを搭載とあります。

自分の定義をもう少し細かく書くとこうなります。

Pythonの実行環境は3種類
CAS環境---> CASエンジンがPython文法を解釈しPPLで実行
PPL環境---> PPLがPythonスクリプトを呼び出して実行
Python Shell環境---> Python Shellがスクリプトを直接実行

PPL環境、Python Shell環境は、純正なPythonの
実行環境です。

ここで注意するのは、CAS環境の場合です。
CAS環境では、Pythonのモジュールは使えません。
(importができません)
CASエンジンは、あくまでもPython文法を
解釈するだけで、実行される命令は標準の
PPLコマンドになります。

これは、以前ご紹介頂いたpyhat(帽子の描画)の
描画コマンドがPPLコマンドそのものでした。
そして、このスクリプトは、CAS環境で動作
していることで証明されます。

今回のHP Primeへの移植で、CAS環境で動作
させるには、描画コマンドをPPLコマンドに
変更する必要があり、変数の管理もCAS対応
しなくてはならず、あきらめて正解でした。

移植中、砂時計が出てまるでコンパイルしていた
みたいだと言っていたのは、CASエンジンが
スクリプトを解釈して、CAS変数(関数)の変換
を実行していたと思われます。

それにしても、HP PrimeのPythonがまだ
ベータテスト中とは、、、
他社に先を越されている感じです。
CAS環境よりもPython Shell環境を優先して
欲しかったと思います。

ではでは。

akatuki さんのコメント...

hangyodon 様、遅れており申し訳ない。

> HP PrimeのPythonについて、追加で調査
> しました。

恐れ入ります。

> 英語のWikiにHP Primeのプログラミング言語は
> PPL
> Python(ベータテスト中)
> の2種類があり、CASエンジンを搭載とあります。

なるほどですネ。
やはり、最新のファームでpythonが正式に登場、しかもβという位置づけでしたか。

> 自分の定義をもう少し細かく書くとこうなります。
> Pythonの実行環境は3種類
> CAS環境---> CASエンジンがPython文法を解釈しPPLで実行
> PPL環境---> PPLがPythonスクリプトを呼び出して実行
> Python Shell環境---> Python Shellがスクリプトを直接実行
> PPL環境、Python Shell環境は、純正なPythonの
> 実行環境です。

ということは、新しいファームでは、PPLがpython拡張となった、という感じですか !?
ウーン ... 。

> ここで注意するのは、CAS環境の場合です。
> CAS環境では、Pythonのモジュールは使えません。
> (importができません)
> CASエンジンは、あくまでもPython文法を
> 解釈するだけで、実行される命令は標準の
> PPLコマンドになります。
> これは、以前ご紹介頂いたpyhat(帽子の描画)の
> 描画コマンドがPPLコマンドそのものでした。
> そして、このスクリプトは、CAS環境で動作
> していることで証明されます。

そうでしたネ。
当方も、古いシミュレータではPPLの描図APIでグラフを描くなど、少し研究してみたのです。
import も不要だった。

> 今回のHP Primeへの移植で、CAS環境で動作
> させるには、描画コマンドをPPLコマンドに
> 変更する必要があり、変数の管理もCAS対応
> しなくてはならず、あきらめて正解でした。

やっぱり、そうでしたか。
変数もXCASの流儀で扱う、というのは、古いシミュレータでも同様でした。
リスト記法もXCAS流でやらないとならず。
そこで、upythonをまともにインプリメントするとなって、XCAS python(便宜上、この様に記述します)との間で齟齬が生じているのかなぁ ... ?

> それにしても、HP PrimeのPythonがまだ
> ベータテスト中とは、、、
> 他社に先を越されている感じです。
> CAS環境よりもPython Shell環境を優先して
> 欲しかったと思います。

元々、XCASのプログラムがpython文法に対応した、という所からHP Primeのpython対応が
始まっている様な感じらしく、他社のupython対応をにらんで、python対応をより強化した、
と言った趣きの様ですネ。

お知らせ有難う御座居ます。