僅5個字符的新繪圖語言火了,ChatGPT都學會了

只用五個字符,就能完成一幅像素畫的繪製了。

這是一種新的繪圖語言,一共支持8種顏色,畫幅可達256*256。

它包含了“CFR[]”這五個符號,因此名字也就叫CFR[]了,主打的就是一個直觀。

而且CFR[]免費開源,無需部署安裝,在線就能體驗。

雖然只有5個符號,但是它能繪製出的圖像可並不簡單,比如作者展示的這個DEMO:

CFR[]推出之後,在Reddit和The Hacker News上都引發了熱烈討論,網友們也紛紛曬出了自己的作品:

網友看了這些展示以後,不由得評價說真的是泰褲辣~

那麼,這五個符號各自代表了什麼含義,又該如何使用呢?

前面已經說到,這種繪圖語言包含了“C”“F”“R”“[”和“]”這五個字符。

直觀的不只是名字,這幾個符號本身也是直觀的英文首字母,它們的含義和用法是這樣的:

C代表color,用來切換顏色,支持的顏色一共有八種,依次爲黑、藍、綠、藍綠(Cyan)、紅、品紅(Magenta)、黃和白。

△最左邊發灰的是白色

如果不輸入C指令則默認爲白色(畫布爲黑色),其他顏色則輸入相應數量的C。

F則代表Forward,每輸入一個F指令都會向前前進(繪製)出一個點(初始方向向上)。

R則是Rotate的首字母,也就是旋轉,每一個R指令會使前進方向順時針旋轉45度。

有了上面這三個命令,就已經可以拿來畫一些簡單的圖了。

不過這個工具一次性最多輸入256個字符,所以只靠這些基本指令還沒辦法畫得太複雜。

沒關係,我們還有兩個符號——“[”和“]”。

這兩個符號是成對使用的,用來表示循環結構。

假如我們要畫一條長度爲32的線,直接輸入32個F顯然太麻煩了。

利用循環結構,我們就可以把它化簡成[[[FFFF]]]。

在這樣一個洋蔥結構中,紅色部分的FFFF會因爲綠色括號的存在被執行兩次。

同理,藍色括號是把整個綠色括號執行兩次,黑色則是執行兩次藍色,最終就畫出了長度爲2×[2×(2×4)]=32的線。

爲了更好地理解循環的執行方式,我們來對比看看這兩個命令:

先說結論,它們繪製出的效果分別是這樣的:

還是同樣的道理,綠色括號中的內容,即第一個指令中CF(這部分的一串F將用一個字母代替)首先重複一次形成最內部的循環體(CFCF),然後再經兩次循環得到[(CFCF)(CFCF)]和{[(CFCF)(CFCF)]},其間顏色一共發生了8次變化。

而第二組命令中,F首先被綠色括號變成(FF),這樣藍色括號中的內容就是C(FF),重複後得到[C(FF)C(FF)],最終被黑色括號變成{[C(FF)C(FF)][C(FF)C(FF)]},一共涉及四次顏色變化,且每一個色條的長度都是第一種命令的兩倍。

理解了這樣的循環方式之後,我們就可以繪製各種複雜的圖形了,比如作者展示的這組條帶(相對於CFR的像素繪圖方式,它只是看上去簡單):

它由上圖中所示的命令繪製而成,如果進行一下拆解的話是醬嬸兒的(小編真的已經很盡力了):

如果展開則是這樣的形式:{256個F-RRFRRRRRRR}循環32次然後加C作爲新的循環體循環8次。

至於更復雜的圖案,可能就需要豐富的想象力和邏輯運算能力了。

不過我們還試了試把這種新語言教給ChatGPT,前面的對話大概是給它介紹規則以及試着畫了一個藍色正方形。

ChatGPT理解了CFR[]的一部分規則,不過對於循環,它似乎還沒理解透徹。

下圖中ChatGPT給出的指令雖然是正確的,但還不是最簡形式。

又經歷了一輪“拉鋸”之後,ChatGPT成功寫出了最簡形式的正方形指令。

需要說明的是,CFR[]繪製的圖像必須是連續的,如果有斷點則無法完成想要的效果。

不過,ChatGPT只能畫一些簡單圖形,作者和網友們展示的案例還是有些困難的。

那麼,CFR[]又是如何實現的呢?

作者介紹,他是受到了教育編程語言Logo編程語言P′′的啓發。

這裡的Logo不是我們想的商標,而是希臘語中的“文字”或“思考”、“想法”。

這是MIT在LISP的基礎之上專門爲兒童開發的一種模塊化語言,具有豐富的繪圖功能。

而它的Web界面,則是利用Canvas和JavaScript實現的。

作者說,在界面中256*256的畫布背後“隱藏着一隻烏龜”,它包含了位置、顏色和方向三個參數。

值得一提的是,Logo語言的圖表也是一隻小烏龜。

這個烏龜的初始位置是畫布正中,方向向上,顏色爲白色。

當收到用戶的指令時,這隻“烏龜”就會按照用戶要求的方向和距離移動,並留下相應顏色的痕跡。