wdong 写了: 2025年 3月 2日 17:53 我折腾这么一番,最终目的当然是要用来测试AI到底能不能写程序,能不能把AI和古老的系统连起来做点什么事情。题目是写一个程序打印100以内的素数。当然这个是比较有挑战的,因为目标是1960年代的Cobol,语法和现在已经很不一样了。比赛结果,Claude 3.7 完胜。
我希望通过这个例子破除AI不能写程序,AI不能学习的疑虑。我相信任何今天的AI训练数据中60年代的cobol数据都少得可以忽略。所以AI需要通过错误消息来猜测怎么改能改对。这里的学习主要是in-context learning。整个过程很容易自动化。谁要是不服,自己可以试试看。
Claude 3.7成功破题 https://claude.ai/share/dcf7e3d4-bd1c-4 ... ef3b5148c4
GPT o1我放弃了 https://chatgpt.com/share/67c4e0d3-37d0 ... 652ae18fd8
方法就是反复把系统错误贴回去让它改。
$JOB COBOL PRIME NUMBERS
$EXECUTE IBJOB
$IBJOB GO,LOGIC,MAP,FIOCS
$IBCBC PRIMES FULIST,REF,NODECK,M94,XR7
000100 IDENTIFICATION DIVISION.
000200 PROGRAM-ID. PRIMES.
000300 AUTHOR. USER.
000400 INSTALLATION. IBM 7094.
000500 DATE-WRITTEN. MARCH 2025.
000600 DATE-COMPILED. MARCH 2025.
000700
001200 ENVIRONMENT DIVISION.
001300 CONFIGURATION SECTION.
001400 SOURCE-COMPUTER. IBM-7094.
001500 OBJECT-COMPUTER. IBM-7094.
001600 INPUT-OUTPUT SECTION.
001700 FILE-CONTROL.
001800
001900 DATA DIVISION.
002000 WORKING-STORAGE SECTION.
002100 01 NUM PICTURE 999 VALUE 2.
002200 01 DIV PICTURE 999 VALUE 0.
002300 01 QUOT PICTURE 999 VALUE 0.
002400 01 REM PICTURE 999 VALUE 0.
002500 01 FLAG PICTURE 9 VALUE 1.
002600 01 MSG PICTURE X(3).
002700
002800 PROCEDURE DIVISION.
002900 MAIN-PARA.
003000 GO TO START-PROGRAM.
003100
003200 START-PROGRAM.
003300 IF NUM GREATER THAN 99 GO TO FINISH-PROGRAM.
003400 MOVE 1 TO FLAG.
003500 MOVE 2 TO DIV.
003600 GO TO CHECK-DIV.
003700
003800 CHECK-DIV.
003900 IF DIV EQUAL TO NUM GO TO CHECK-RESULT.
004100 COMPUTE QUOT = NUM / DIV.
004200 COMPUTE REM = NUM - (QUOT * DIV).
004300 IF REM EQUAL TO 0 MOVE 0 TO FLAG.
004400 IF REM EQUAL TO 0 GO TO CHECK-RESULT.
004500 ADD 1 TO DIV.
004600 GO TO CHECK-DIV.
004700
004800 CHECK-RESULT.
004900 IF FLAG EQUAL TO 1
005000 MOVE NUM TO MSG
005100 DISPLAY MSG.
005200 ADD 1 TO NUM.
005300 GO TO START-PROGRAM.
005400
005500 FINISH-PROGRAM.
005600 STOP RUN.
$CBEND
Claude成功用Cobol对1962年的大型机IBM 7094编程
版主: hci
#21 Re: 讲讲IBM 7094的历史
你这假设人家没有很多COBOL的语料,这不太可能。COBOL的语料肯定很多。IBM的documentation还是很全的,现在这些AI公司到处疯狂扒数据,啥没见过。
标签/Tags:
#22 Re: 讲讲IBM 7094的历史
看来果然是Sonnet 3.7编程最好。
我也试试看。
我也试试看。
wdong 写了: 2025年 3月 2日 17:53 我折腾这么一番,最终目的当然是要用来测试AI到底能不能写程序,能不能把AI和古老的系统连起来做点什么事情。题目是写一个程序打印100以内的素数。当然这个是比较有挑战的,因为目标是1960年代的Cobol,语法和现在已经很不一样了。比赛结果,Claude 3.7 完胜。
我希望通过这个例子破除AI不能写程序,AI不能学习的疑虑。我相信任何今天的AI训练数据中60年代的cobol数据都少得可以忽略。所以AI需要通过错误消息来猜测怎么改能改对。这里的学习主要是in-context learning。整个过程很容易自动化。谁要是不服,自己可以试试看。
Claude 3.7成功破题 https://claude.ai/share/dcf7e3d4-bd1c-4 ... ef3b5148c4
GPT o1我放弃了 https://chatgpt.com/share/67c4e0d3-37d0 ... 652ae18fd8
方法就是反复把系统错误贴回去让它改。
$JOB COBOL PRIME NUMBERS
$EXECUTE IBJOB
$IBJOB GO,LOGIC,MAP,FIOCS
$IBCBC PRIMES FULIST,REF,NODECK,M94,XR7
000100 IDENTIFICATION DIVISION.
000200 PROGRAM-ID. PRIMES.
000300 AUTHOR. USER.
000400 INSTALLATION. IBM 7094.
000500 DATE-WRITTEN. MARCH 2025.
000600 DATE-COMPILED. MARCH 2025.
000700
001200 ENVIRONMENT DIVISION.
001300 CONFIGURATION SECTION.
001400 SOURCE-COMPUTER. IBM-7094.
001500 OBJECT-COMPUTER. IBM-7094.
001600 INPUT-OUTPUT SECTION.
001700 FILE-CONTROL.
001800
001900 DATA DIVISION.
002000 WORKING-STORAGE SECTION.
002100 01 NUM PICTURE 999 VALUE 2.
002200 01 DIV PICTURE 999 VALUE 0.
002300 01 QUOT PICTURE 999 VALUE 0.
002400 01 REM PICTURE 999 VALUE 0.
002500 01 FLAG PICTURE 9 VALUE 1.
002600 01 MSG PICTURE X(3).
002700
002800 PROCEDURE DIVISION.
002900 MAIN-PARA.
003000 GO TO START-PROGRAM.
003100
003200 START-PROGRAM.
003300 IF NUM GREATER THAN 99 GO TO FINISH-PROGRAM.
003400 MOVE 1 TO FLAG.
003500 MOVE 2 TO DIV.
003600 GO TO CHECK-DIV.
003700
003800 CHECK-DIV.
003900 IF DIV EQUAL TO NUM GO TO CHECK-RESULT.
004100 COMPUTE QUOT = NUM / DIV.
004200 COMPUTE REM = NUM - (QUOT * DIV).
004300 IF REM EQUAL TO 0 MOVE 0 TO FLAG.
004400 IF REM EQUAL TO 0 GO TO CHECK-RESULT.
004500 ADD 1 TO DIV.
004600 GO TO CHECK-DIV.
004700
004800 CHECK-RESULT.
004900 IF FLAG EQUAL TO 1
005000 MOVE NUM TO MSG
005100 DISPLAY MSG.
005200 ADD 1 TO NUM.
005300 GO TO START-PROGRAM.
005400
005500 FINISH-PROGRAM.
005600 STOP RUN.
$CBEND
#23 Re: IBM 7094:晶体管计算机的巅峰之作
我让Sonnet 3.7(开了extended模式,类似其他模型的deep think)和Deepseek R1比赛做信息学/算法竞赛的题,只要是有点难度的题,Sonnet基本被Deepseek完爆。很多deepseek做对了的,Sonnet根本做不对。就算两者都对的,deepseek的解法也一般明显比Sonnet的简单优雅。
而且每个题我都让他们互评,deepseek常常能指出sonnet解法的错误或者效率问题,然后我把deepseek的评语发给sonnet看,sonnet也一般心悦诚服。而sonnet能指出deepseek做错或者解法效率太低的情况基本没有。如果两者都是对的或解法效率差别不大的情况下,deepseek解法的优雅性也常常让sonnet甘拜下风。
但是!论对话的舒适性,deepseek又被Claude完爆。我一直认为claude在主流llm里“情商”最高,跟它说话很舒服。虽然这个Sonnet 3.7感觉情商有退步,但还是比deepseek不知道高到哪里去了。deepseek这货的默认模式跟个自闭症的nerd一样,唯一能干的就是技术活,你夸它几句它都不知道怎么回答的样子(除非你特意在prompt里指定它要怎么和你对话)。
以上仅仅基于我最近的测试。可能每个人的感觉不一样。
#24 Re: Claude成功用Cobol对1962年的大型机IBM 7094编程
说到这里,这个算法题,没有一个llm能做对,不管你怎么提示它:https://cses.fi/dsa25k/task/3442
这题里提到的“the robot of the previous task.”指的是前一个题里的 https://cses.fi/dsa25k/task/3441,这个“前导”题倒是简单,参考解法如下:
def calculate(input, rules):
symbols = ["L"] + list(input) + ["R"]
pos = 0
state = 1
counter = 0
while True:
found = False
for old_symbol, old_state, new_symbol, new_state, action in rules:
if symbols[pos] == old_symbol and state == old_state:
found = True
counter += 1
symbols[pos] = new_symbol
state = new_state
if action == "RIGHT": pos += 1
if action == "LEFT": pos -= 1
if action == "ACCEPT": return True
if action == "REJECT": return False
if pos < 0 or pos >= len(symbols):
return False
break
if not found or counter == 1000:
return False
——————————————————————————————
但这个给模拟图灵机写指令集的题我觉得正好踩在llm的弱项上。
话说回来,我试着自己做了做,也总是报错,哈哈 (比如不能让“print(calculate("10111011", rules))”输出True)。有没有哪位大佬来鄙视下llm(和我),弄出正确的指令集来?哈哈
这题里提到的“the robot of the previous task.”指的是前一个题里的 https://cses.fi/dsa25k/task/3441,这个“前导”题倒是简单,参考解法如下:
def calculate(input, rules):
symbols = ["L"] + list(input) + ["R"]
pos = 0
state = 1
counter = 0
while True:
found = False
for old_symbol, old_state, new_symbol, new_state, action in rules:
if symbols[pos] == old_symbol and state == old_state:
found = True
counter += 1
symbols[pos] = new_symbol
state = new_state
if action == "RIGHT": pos += 1
if action == "LEFT": pos -= 1
if action == "ACCEPT": return True
if action == "REJECT": return False
if pos < 0 or pos >= len(symbols):
return False
break
if not found or counter == 1000:
return False
——————————————————————————————
但这个给模拟图灵机写指令集的题我觉得正好踩在llm的弱项上。
话说回来,我试着自己做了做,也总是报错,哈哈 (比如不能让“print(calculate("10111011", rules))”输出True)。有没有哪位大佬来鄙视下llm(和我),弄出正确的指令集来?哈哈
上次由 abovetherim 在 2025年 3月 2日 20:49 修改。
#25 Re: Claude成功用Cobol对1962年的大型机IBM 7094编程
我的agent框架目前claude还跑不起来。没法follow我的instructiin。4o mini效果超乎想象的好。
我管这个叫模型刚性。deepseek我都没试,之前连过几次都没成功。就跟酒似的,gpt还是目前最醇正的。想着省钱酿出来的酒只能图醉,肯定不会好喝。
我管这个叫模型刚性。deepseek我都没试,之前连过几次都没成功。就跟酒似的,gpt还是目前最醇正的。想着省钱酿出来的酒只能图醉,肯定不会好喝。
上次由 wdong 在 2025年 3月 2日 20:54 修改。
#26 Re: Claude成功用Cobol对1962年的大型机IBM 7094编程
我觉得Sonnet 3.7似乎在follow instruction上确实退步了。(当然deepseek就更别胡说了,那货吭哧吭哧的干活还行,就是经常听不懂人话

#27 Re: Claude成功用Cobol对1962年的大型机IBM 7094编程
deepseek网络搜索功能应该还是不能用。不过不开搜索之前也一般一天最多能发一条消息,哈哈。这几天似乎好多了,至少中国的睡觉时间里,可以随便用了
#28 Re: Claude成功用Cobol对1962年的大型机IBM 7094编程
你这题我也不会。要写这个得查书,把图灵机到正则语言查一遍,做一些习题,然后才能做这个题。否则就相当于自己发明这套体系。图灵机编程有一些基本套路,得先熟悉熟悉。abovetherim 写了: 2025年 3月 2日 20:34 说到这里,这个算法题,没有一个llm能做对,不管你怎么提示它:https://cses.fi/dsa25k/task/3442
这题里提到的“the robot of the previous task.”指的是前一个题里的 https://cses.fi/dsa25k/task/3441,这个简单题的参考解法如下:
def calculate(input, rules):
symbols = ["L"] + list(input) + ["R"]
pos = 0
state = 1
counter = 0
while True:
found = False
for old_symbol, old_state, new_symbol, new_state, action in rules:
if symbols[pos] == old_symbol and state == old_state:
found = True
counter += 1
symbols[pos] = new_symbol
state = new_state
if action == "RIGHT": pos += 1
if action == "LEFT": pos -= 1
if action == "ACCEPT": return True
if action == "REJECT": return False
if pos < 0 or pos >= len(symbols):
return False
break
if not found or counter == 1000:
return False
——————————————————————————————
这个给模拟图灵机写指令集的题我觉得正好踩在llm的弱项上。
话说回来,我试着自己做了做,也总是报错,哈哈 (比如不能让“print(calculate("10111011", rules))”输出True)。有没有哪位大佬来鄙视下llm,弄出正确的指令集来?哈哈
上次由 wdong 在 2025年 3月 2日 20:57 修改。
#29 Re: IBM 7094:晶体管计算机的巅峰之作
和claude说话非常不爽,老是在最后反客为主地问我我怎么想,我接下来想干嘛,感觉他是boss一样。我已经很久不用claude了。abovetherim 写了: 2025年 3月 2日 20:24 我让Sonnet 3.7(开了extended模式,类似其他模型的deep think)和Deepseek R1比赛做信息学/算法竞赛的题,只要是有点难度的题,Sonnet基本被Deepseek完爆。很多deepseek做对了的,Sonnet根本做不对。就算两者都对的,deepseek的解法也一般明显比Sonnet的简单优雅。
而且每个题我都让他们互评,deepseek常常能指出sonnet解法的错误或者效率问题,然后我把deepseek的评语发给sonnet看,sonnet也一般心悦诚服。而sonnet能指出deepseek做错或者解法效率太低的情况基本没有。如果两者都是对的或解法效率差别不大的情况下,deepseek解法的优雅性也常常让sonnet甘拜下风。
但是!论对话的舒适性,deepseek又被Claude完爆。我一直认为claude在主流llm里“情商”最高,跟它说话很舒服。虽然这个Sonnet 3.7感觉情商有退步,但还是比deepseek不知道高到哪里去了。deepseek这货的默认模式跟个自闭症的nerd一样,唯一能干的就是技术活,你夸它几句它都不知道怎么回答的样子(除非你特意在prompt里指定它要怎么和你对话)。
以上仅仅基于我最近的测试。可能每个人的感觉不一样。
#30 Re: IBM 7094:晶体管计算机的巅峰之作
哈哈,sonnet3.5是那样的,3.7不会那样了。不过我不太介意那个,主要claude理解我意思的能力我觉得比其他llm好多了,迎合我的情绪的能力也挺强的,哈哈。看来我喜欢别人顺着我说。


#31 Re: Claude成功用Cobol对1962年的大型机IBM 7094编程
哈哈,确实。我随便试了试,它系统的test cases总能找到我的指令的问题, 我就放弃了。这个多试几次,再一看到和编程有关的事,就首先想的是怎么用它那样的rule set解决。要等一会才回过神来:草,这种破问题高级语言就几行的事。 所以做这个题真有金庸小说练功走火入魔的感觉。wdong 写了: 2025年 3月 2日 20:49 你这题我也不会。要写这个得查书,把图灵机到正则语言查一遍,做一些习题,然后才能做这个题。否则就相当于自己发明这套体系。图灵机编程有一些基本套路,得先熟悉熟悉。

(这个回复好像被吞了,只有重发)
#32 Re: Claude成功用Cobol对1962年的大型机IBM 7094编程
cobol是最容易生成得语言把,这些老的语言规则特别死板。
wdong 写了: 2025年 3月 2日 11:03 模拟器配置viewtopic.php?p=5121857#p5121857
AI编程内容viewtopic.php?p=5122340#p5122340
IBM 7094 是 IBM 在 1962 年推出的晶体管计算机,作为 IBM 7000 系列的旗舰产品,它不仅是 当时计算速度最快的商用计算机之一,更是 科学计算、航空航天、国防军事 领域的中流砥柱。7094是 IBM 最后一代基于批处理模式的大型科学计算机。
IBM 7094 的突破点:
* 完全晶体管化(替代电子管,提高可靠性,降低功耗)
* 性能提升(每秒 50 万条指令,比 7090 提高 1.6 倍)
* 双处理器支持(可选双 CPU,提高并行计算能力)
* 拓展存储(支持更大的磁芯存储和更先进的磁盘存储)
下图是7094和上一代计算机的性能参数对比。
7094 是 IBM 7000 系列中最昂贵的一款,成本主要来自:
- 磁芯存储器(32K 磁芯存储就接近百万美元)
- 磁带存储系统(IBM 729 磁带机,每台 5 万美元)
- 高速处理器晶体管组件
推测:整机制造成本约 300 万~400 万美元。
7094的直接购买价格是$3-5百万美元(相当于今天的$30-50M)。但是IBM采取的是租赁策略(其实IBM才是云计算的鼻祖)。租金大概是每月 $5万美元,大概租10年能接近购入成本。具体到模块,价格组成如下:
按现存的模拟器配置,7094的典型运行配置是1xCPU, 1x core memory, 10x磁带机,外加打印机,打卡机,读卡机各一。
下面是我在网上找到的最有代表性的图片(7090,差不多), 我把各个模块进行了标注(设备名见下)。 但是标完后我发现了一些问题,存疑:
- 图里没找到7090本尊。
- 7100是商用机,和709x是不同的型号。图里面有两台。
我自己是把7100想象成7094.
再来几张图片
几个视频
设备名, 这些名字在7094的命令中,以及模拟器中都会用到。
- CPU (7094)
- M (7302) 磁芯存储器内存
- DC (7606, Data communication)
- CHAN (7607, Channel controller)
- TTY (7617, Teletype Terminal)
- LPR (716, Line Printer)
- CDR (711, Card Reader)
- CDP (721, Card Puncher)
- MTA (Magnetic tape)
CPU链接CHAN, CHAN链接除了DC以外的所有I/O设备(TTY, LPR, CDR, CDP, MTA)。DC直连CPU,然后通过电话线连接远程 TTY终端(1050/2741)。
所有的设备都是面向行/记录/卡片的。输入设备就是一行一行(一张卡片一张卡片)读入,输出设备就是一行一行输出。LPR, MTA, TTY虽然物理上不是卡片,但是逻辑上还是按卡片的方式运作。
对7094编程,主要的概念就是控制权,也就是哪个程序在运行。7094一次只能运行一个程序。一开始运行IBSYS,然后IBSYS会读取 SYSIN(一般是MTA3)的下一行进行对应的操作。一般这个命令就是$EXECUTE IBJOB。然后IBJOB会载入,控制权交给IBJOB。IBJOB会读取下一行,比如IBCBC (Cobol编译器)或者IBFTC (FORTRAN编译器)。编译器开始运行后,接下来的卡片就都是源代码了。
这种方式有点像以下面的方式调用gcc
gcc -x c -o hello - # 特殊文件名表示从stdin读入。这时gcc无法根据文件名判别语言, -x c指定c语言
#include <stdio.h>
int main () {
printf("Hello, world!\n");
return 0;
}
上面的内容存诚sysin.txt,然后bash < sysin.txt就会生成hello。但是因为C语言没有"end"标记,所以上面的脚本就没法接更多的bash命令了。其实如果有一个特殊字符EOF代表文件结束,并在读到EOF时向程序发出文件结束信号,就可以接更多的命令。那样unix的stdin就和IBM的卡片序列一样了。
If printing money would end poverty, printing diplomas would end stupidity.
#33 Re: Claude成功用Cobol对1962年的大型机IBM 7094编程
学术界或者家长就是这么折磨孩子的。现在每一道题目,以前多多少少是一篇paper。现在的孩子就要在个把小时的时间内把这些paper的核心技术解出来。怎么办?只能去背题。背多了慢慢天性就磨灭了。abovetherim 写了: 2025年 3月 2日 21:09 哈哈,确实。我随便试了试,它系统的test cases总能找到我的指令的问题, 我就放弃了。这个多试几次,再一看到和编程有关的事,就首先想的是怎么用它那样的rule set解决。要等一会才回过神来:草,这种破问题高级语言就几行的事。 所以做这个题真有金庸小说练功走火入魔的感觉。![]()
(这个回复好像被吞了,只有重发)
我自己的孩子也在背题。没法对抗这个系统。好在只有那么几年,完了大家各干各的,你不去联系别人,互相也就没法比了。
-
- 论坛元老
Caravel 的博客 - 帖子互动: 564
- 帖子: 24671
- 注册时间: 2022年 7月 24日 17:21
#34 Re: IBM 7094:晶体管计算机的巅峰之作
IBM all in AI估计也干不过这些startup,年轻,糙快猛。hci 写了: 2025年 3月 2日 13:09 搞笑吧。你对IBM一点都不了解。IBM的东西大都是自己发明的,硬盘,关系数据库,OpenAI发明了啥?
IBM是个销售驱动的公司(就是利润率驱动),什么赚钱就卖什么,绞肉机都卖过,从来就不会乱烧钱的。这是个有百多年历史的公司,有自己的DNA,与OpenAI是完全不同性质的公司。这么说吧,OpenAI嗝屁了,IBM都还会继续存在。
虽然IBM不乱烧钱,但对科技的投入是一贯的,无论生意好坏,每年恒定两个B的研究投入,雷打不动。没有几个公司能这样。IBM的研究可不光是计算机,而是理工科行行都维持研究投入,物理化学材料,样样齐全。比如在以前我供职的Almaden研究院,CS department是最小的department,但这个Department发明了硬盘,发明了关系数据库。很多CS名人都是从那里出来的。AMD的苏妈,陆奇,等等,都在Almaden混过。
不过CS现在已经在Almaden都被取消了,没有CS department了,哈哈。
你看看微软底子也不错
搞了什么情况
#35 Re: 讲讲IBM 7094的历史
cobol的规则特别简单,和fortran, pascal一样,不是说这些东西有多难,反而是因为语言功能少,什么轮子都没有,啥都要自己搭,这反而适合AI,因为他们学习了规则以后可以大批量生成,和以前的code generator一样
wdong 写了: 2025年 3月 2日 17:53 我折腾这么一番,最终目的当然是要用来测试AI到底能不能写程序,能不能把AI和古老的系统连起来做点什么事情。题目是写一个程序打印100以内的素数。当然这个是比较有挑战的,因为目标是1960年代的Cobol,语法和现在已经很不一样了。比赛结果,Claude 3.7 完胜。
我希望通过这个例子破除AI不能写程序,AI不能学习的疑虑。我相信任何今天的AI训练数据中60年代的cobol数据都少得可以忽略。所以AI需要通过错误消息来猜测怎么改能改对。这里的学习主要是in-context learning。整个过程很容易自动化。谁要是不服,自己可以试试看。
Claude 3.7成功破题 https://claude.ai/share/dcf7e3d4-bd1c-4 ... ef3b5148c4
GPT o1我放弃了 https://chatgpt.com/share/67c4e0d3-37d0 ... 652ae18fd8
方法就是反复把系统错误贴回去让它改。GPT的最佳战绩是修正所有编译错误,但是只能打印出2和3。再让它改,就又是一大堆编译错误了。
下面是Claude产出的程序。
$JOB COBOL PRIME NUMBERS
$EXECUTE IBJOB
$IBJOB GO,LOGIC,MAP,FIOCS
$IBCBC PRIMES FULIST,REF,NODECK,M94,XR7
000100 IDENTIFICATION DIVISION.
000200 PROGRAM-ID. PRIMES.
000300 AUTHOR. USER.
000400 INSTALLATION. IBM 7094.
000500 DATE-WRITTEN. MARCH 2025.
000600 DATE-COMPILED. MARCH 2025.
000700
001200 ENVIRONMENT DIVISION.
001300 CONFIGURATION SECTION.
001400 SOURCE-COMPUTER. IBM-7094.
001500 OBJECT-COMPUTER. IBM-7094.
001600 INPUT-OUTPUT SECTION.
001700 FILE-CONTROL.
001800
001900 DATA DIVISION.
002000 WORKING-STORAGE SECTION.
002100 01 NUM PICTURE 999 VALUE 2.
002200 01 DIV PICTURE 999 VALUE 0.
002300 01 QUOT PICTURE 999 VALUE 0.
002400 01 REM PICTURE 999 VALUE 0.
002500 01 FLAG PICTURE 9 VALUE 1.
002600 01 MSG PICTURE X(3).
002700
002800 PROCEDURE DIVISION.
002900 MAIN-PARA.
003000 GO TO START-PROGRAM.
003100
003200 START-PROGRAM.
003300 IF NUM GREATER THAN 99 GO TO FINISH-PROGRAM.
003400 MOVE 1 TO FLAG.
003500 MOVE 2 TO DIV.
003600 GO TO CHECK-DIV.
003700
003800 CHECK-DIV.
003900 IF DIV EQUAL TO NUM GO TO CHECK-RESULT.
004100 COMPUTE QUOT = NUM / DIV.
004200 COMPUTE REM = NUM - (QUOT * DIV).
004300 IF REM EQUAL TO 0 MOVE 0 TO FLAG.
004400 IF REM EQUAL TO 0 GO TO CHECK-RESULT.
004500 ADD 1 TO DIV.
004600 GO TO CHECK-DIV.
004700
004800 CHECK-RESULT.
004900 IF FLAG EQUAL TO 1
005000 MOVE NUM TO MSG
005100 DISPLAY MSG.
005200 ADD 1 TO NUM.
005300 GO TO START-PROGRAM.
005400
005500 FINISH-PROGRAM.
005600 STOP RUN.
$CBEND
If printing money would end poverty, printing diplomas would end stupidity.
#36 Re: IBM 7094:晶体管计算机的巅峰之作
不賺錢。
微软CEO现在自己也这么说了。
早干嘛去了。
年轻糙快猛,这种硅谷初创公司的路数,搞AI并不適用,因为AI是个技術路线并不清楚的行当。一堆人一擁而上各顯神通乱试一气不一定有人能蒙对。事实上,所有人都在白忙乎的可能性很大。
微软CEO现在自己也这么说了。
早干嘛去了。
年轻糙快猛,这种硅谷初创公司的路数,搞AI并不適用,因为AI是个技術路线并不清楚的行当。一堆人一擁而上各顯神通乱试一气不一定有人能蒙对。事实上,所有人都在白忙乎的可能性很大。
上次由 hci 在 2025年 3月 3日 00:57 修改。
原因: 未提供修改原因
原因: 未提供修改原因
-
- 论坛元老
Caravel 的博客 - 帖子互动: 564
- 帖子: 24671
- 注册时间: 2022年 7月 24日 17:21
#37 Re: Claude成功用Cobol对1962年的大型机IBM 7094编程
abovetherim 写了: 2025年 3月 2日 20:34 说到这里,这个算法题,没有一个llm能做对,不管你怎么提示它:https://cses.fi/dsa25k/task/3442
这题里提到的“the robot of the previous task.”指的是前一个题里的 https://cses.fi/dsa25k/task/3441,这个“前导”题倒是简单,参考解法如下:
def calculate(input, rules):
symbols = ["L"] + list(input) + ["R"]
pos = 0
state = 1
counter = 0
while True:
found = False
for old_symbol, old_state, new_symbol, new_state, action in rules:
if symbols[pos] == old_symbol and state == old_state:
found = True
counter += 1
symbols[pos] = new_symbol
state = new_state
if action == "RIGHT": pos += 1
if action == "LEFT": pos -= 1
if action == "ACCEPT": return True
if action == "REJECT": return False
if pos < 0 or pos >= len(symbols):
return False
break
if not found or counter == 1000:
return False
——————————————————————————————
但这个给模拟图灵机写指令集的题我觉得正好踩在llm的弱项上。
话说回来,我试着自己做了做,也总是报错,哈哈 (比如不能让“print(calculate("10111011", rules))”输出True)。有没有哪位大佬来鄙视下llm(和我),弄出正确的指令集来?哈哈
看上去不难,先从左移动到最右端,把位数算出来。
倒车回去
第二遍跑前半部分,把结果放到state里面
再跟后半部分比较不就行了
上次由 Caravel 在 2025年 3月 3日 00:52 修改。
#38 Re: 讲讲IBM 7094的历史
对,AI对简单的技術有利。
赖美豪中 写了: 2025年 3月 3日 00:26 cobol的规则特别简单,和fortran, pascal一样,不是说这些东西有多难,反而是因为语言功能少,什么轮子都没有,啥都要自己搭,这反而适合AI,因为他们学习了规则以后可以大批量生成,和以前的code generator一样
#39 Re: Claude成功用Cobol对1962年的大型机IBM 7094编程
大哥,你的思路在高级语言里绝对正确,但在纯状态机模型下要怎么整?这玩意连个计数器都没有,哈哈
"先从左移动到最右端,把位数算出来"这步看似简单,但状态机可以编码的信息量有限。虽然状态能记录简单信息(如"已找到一个0,等待1"),但难以编码"已数到第n位"这种需要计数的信息,尤其当n可能很大时。
"把结果放到state里面再跟后半部分比较": 你似乎没注意状态机的根本限制:
1. 单指针特性:状态机在任何时刻只能访问磁带上的一个位置,无法同时"看到"前半部分和后半部分进行直接比较
2. 状态空间限制:如何用有限状态记住任意的前缀内容(如任意长度和组合的0和1序列)?你要记住前半部分的每个位置是0还是1,然后在遇到后半部分时还要从状态中"提取"出这个信息来比较。这怎么在这个破状态机上实现?

所以这个看似简单的东西,其挑战至少包括:
长度确定:状态机无法直接'数数',必须通过多次遍历或特殊标记来确定字符串长度和中点位置
记忆内容:不能用变量存储,只能通过改变磁带符号
实际比较:每次只能比较一个位置,需要复杂的来回操作
我觉得唯一可行的解法是借鉴上题思路:在磁带上用ABCD等符号标记信息,让"磁带内容"成为扩展存储。状态只负责记录"当前处于检测流程的哪个阶段",而不是存储大量数据。
所以这个题的根本挑战在于:怎么在极其受限的计算模型中实现看似简单的操作。
但现在的问题是:可能我设计的ACCEPT路径有小问题,很多本该返回True的test cases,却返回false。不过我累了,不想整了。哈哈。
-
- 论坛元老
Caravel 的博客 - 帖子互动: 564
- 帖子: 24671
- 注册时间: 2022年 7月 24日 17:21
#40 Re: Claude成功用Cobol对1962年的大型机IBM 7094编程
我知道这是类似图灵机啊abovetherim 写了: 2025年 3月 3日 12:31 大哥,你的思路在高级语言里绝对正确,但在纯状态机模型下要怎么整?这玩意连个计数器都没有,哈哈
"先从左移动到最右端,把位数算出来"这步看似简单,但状态机可以编码的信息量有限。虽然状态能记录简单信息(如"已找到一个0,等待1"),但难以编码"已数到第n位"这种需要计数的信息,尤其当n可能很大时。
"把结果放到state里面再跟后半部分比较": 你似乎没注意状态机的根本限制:
1. 单指针特性:状态机在任何时刻只能访问磁带上的一个位置,无法同时"看到"前半部分和后半部分进行直接比较
2. 状态空间限制:如何用有限状态记住任意的前缀内容(如任意长度和组合的0和1序列)?你要记住前半部分的每个位置是0还是1,然后在遇到后半部分时还要从状态中"提取"出这个信息来比较。这怎么在这个破状态机上实现?![]()
所以这个看似简单的东西,其挑战至少包括:
长度确定:状态机无法直接'数数',必须通过多次遍历或特殊标记来确定字符串长度和中点位置
记忆内容:不能用变量存储,只能通过改变磁带符号
实际比较:每次只能比较一个位置,需要复杂的来回操作
我觉得唯一可行的解法是借鉴上题思路:在磁带上用ABCD等符号标记信息,让"磁带内容"成为扩展存储。状态只负责记录"当前处于检测流程的哪个阶段",而不是存储大量数据。
所以这个题的根本挑战在于:怎么在极其受限的计算模型中实现看似简单的操作。
但现在的问题是:可能我设计的ACCEPT路径有小问题,很多本该返回True的test cases,却返回false。不过我累了,不想整了。哈哈。
计数不是很容易实现吗,每次右移一位状态加一
状态数空间有限制么?
只要状态数够大,你可以encode任何数字,
这玩意跟高级语言编程没有本质区别,只是极其缓慢