僅五個字符的新繪圖語言火了,ChatGPT都學會了
只用五個字符,就能完成一幅像素畫的繪制了。
這是一種新的繪圖語言,一共支持8種顏色,畫幅可達256*256。
它包含了“CFR[]”這五個符號,因此名字也就叫CFR[]了,主打的就是一個直觀。
而且CFR[]免費開源,無需部署安裝,在線就能體驗。
雖然只有5個符號,但是它能繪制出的圖像可并不簡單,比如作者展示的這個DEMO:
CFR[]推出之后,在Reddit和The Hacker News上都引發(fā)了熱烈討論,網(wǎng)友們也紛紛曬出了自己的作品:
網(wǎng)友看了這些展示以后,不由得評價說真的是泰褲辣~
那么,這五個符號各自代表了什么含義,又該如何使用呢?
五個字符就能繪圖
前面已經(jīng)說到,這種繪圖語言包含了“C”“F”“R”“[”和“]”這五個字符。
直觀的不只是名字,這幾個符號本身也是直觀的英文首字母,它們的含義和用法是這樣的:
C代表color,用來切換顏色,支持的顏色一共有八種,依次為黑、藍、綠、藍綠(Cyan)、紅、品紅(Magenta)、黃和白。
△最左邊發(fā)灰的是白色
如果不輸入C指令則默認為白色(畫布為黑色),其他顏色則輸入相應數(shù)量的C。
F則代表Forward,每輸入一個F指令都會向前前進(繪制)出一個點(初始方向向上)。
R則是Rotate的首字母,也就是旋轉(zhuǎn),每一個R指令會使前進方向順時針旋轉(zhuǎn)45度。
有了上面這三個命令,就已經(jīng)可以拿來畫一些簡單的圖了。
不過這個工具一次性最多輸入256個字符,所以只靠這些基本指令還沒辦法畫得太復雜。
沒關(guān)系,我們還有兩個符號——“[”和“]”。
這兩個符號是成對使用的,用來表示循環(huán)結(jié)構(gòu)。
假如我們要畫一條長度為32的線,直接輸入32個F顯然太麻煩了。
利用循環(huán)結(jié)構(gòu),我們就可以把它化簡成[[[FFFF]]]。
在這樣一個洋蔥結(jié)構(gòu)中,紅色部分的FFFF會因為綠色括號的存在被執(zhí)行兩次。
同理,藍色括號是把整個綠色括號執(zhí)行兩次,黑色則是執(zhí)行兩次藍色,最終就畫出了長度為2×[2×(2×4)]=32的線。
為了更好地理解循環(huán)的執(zhí)行方式,我們來對比看看這兩個命令:
先說結(jié)論,它們繪制出的效果分別是這樣的:
還是同樣的道理,綠色括號中的內(nèi)容,即第一個指令中CF(這部分的一串F將用一個字母代替)首先重復一次形成最內(nèi)部的循環(huán)體(CFCF),然后再經(jīng)兩次循環(huán)得到[(CFCF)(CFCF)]和{[(CFCF)(CFCF)]},其間顏色一共發(fā)生了8次變化。
而第二組命令中,F(xiàn)首先被綠色括號變成(FF),這樣藍色括號中的內(nèi)容就是C(FF),重復后得到[C(FF)C(FF)],最終被黑色括號變成{[C(FF)C(FF)][C(FF)C(FF)]},一共涉及四次顏色變化,且每一個色條的長度都是第一種命令的兩倍。
理解了這樣的循環(huán)方式之后,我們就可以繪制各種復雜的圖形了,比如作者展示的這組條帶(相對于CFR的像素繪圖方式,它只是看上去簡單):
它由上圖中所示的命令繪制而成,如果進行一下拆解的話是醬嬸兒的(小編真的已經(jīng)很盡力了):
如果展開則是這樣的形式:{256個F-RRFRRRRRRR}循環(huán)32次然后加C作為新的循環(huán)體循環(huán)8次。
至于更復雜的圖案,可能就需要豐富的想象力和邏輯運算能力了。
不過我們還試了試把這種新語言教給ChatGPT,前面的對話大概是給它介紹規(guī)則以及試著畫了一個藍色正方形。
ChatGPT理解了CFR[]的一部分規(guī)則,不過對于循環(huán),它似乎還沒理解透徹。
下圖中ChatGPT給出的指令雖然是正確的,但還不是最簡形式。
又經(jīng)歷了一輪“拉鋸”之后,ChatGPT成功寫出了最簡形式的正方形指令。
需要說明的是,CFR[]繪制的圖像必須是連續(xù)的,如果有斷點則無法完成想要的效果。
不過,ChatGPT只能畫一些簡單圖形,作者和網(wǎng)友們展示的案例還是有些困難的。
那么,CFR[]又是如何實現(xiàn)的呢?
“畫板后藏著一只烏龜”
作者介紹,他是受到了教育編程語言Logo編程語言P′′的啟發(fā)。
這里的Logo不是我們想的商標,而是希臘語中的“文字”或“思考”、“想法”。
這是MIT在LISP的基礎(chǔ)之上專門為兒童開發(fā)的一種模塊化語言,具有豐富的繪圖功能。
而它的Web界面,則是利用Canvas和JavaScript實現(xiàn)的。
作者說,在界面中256*256的畫布背后“隱藏著一只烏龜”,它包含了位置、顏色和方向三個參數(shù)。
值得一提的是,Logo語言的圖表也是一只小烏龜。
這個烏龜?shù)某跏嘉恢檬钱嫴颊?,方向向上,顏色為白色?/p>
當收到用戶的指令時,這只“烏龜”就會按照用戶要求的方向和距離移動,并留下相應顏色的痕跡。
想要體驗一下的朋友,傳送門放在下方了~
傳送門:https://susam.net/cfr.htmlGitHub項目頁:
https://github.com/susam/cfr