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