Problem: 1805. 字符串中不同整数的数目

lc题解地址

https://leetcode.cn/problems/number-of-different-integers-in-a-string/solutions/2009554/racket-shuang-zhi-zhen-by-yhm138_-hz47/

思路

  • 函数式编程?那是啥?有set!hash-set!好用吗

  • 开始那一堆是在实现while break continue.按照racket文档里说的,你(require dyoo-while-loop)也行。

    ?我require不了,leetcode没加载这个collection ,你应该去这个仓库把代码直接拉过来

  • 简单的语法还是问gptchat吧。不然你和我一样分不清{make-hash,make-hasheq,make-hasheqv,make-hashalw}的区别。

  • (string=? "0" (substring word p1 (+ p1 1))) 判断字符串某个下标的字符是不是字符'0',你应该这么写。其他写法可能行。

  • chatgpt基本上不会写racket程序,超过5行就别指望简单改改能运行起来;但是chatgpt具备将java代码改写成scala代码的能力,我把class改成object就过了这道leetcode题目

  • chatgpt将热门语言彼此做改写没什么问题的。2023-03-05将本次周赛t3t4AC的java代码交给chatgpt改写为scala代码,只需要把“class”改为“object”提交就能过题。

  • 以后简单的业务开发,可能交给专门写prompt的人员了。(x

Code


(require (for-syntax racket/base)
racket/stxparam) (provide while break continue) ;; The following is adapted from:
;;
;; http://matt.might.net/articles/implementing-exceptions/
;;
;; with a few adjustments so that break and continue are
;; hygienic, and the extent of the break and continue are
;; around the body.
;;
(define-syntax-parameter break
(lambda (stx)
(raise-syntax-error #f "Used outside the context of a while body" stx))) (define-syntax-parameter continue
(lambda (stx)
(raise-syntax-error #f "Used outside the context of a while body" stx))) ;; This enforces the use of break and continue:
;; you have to use them with parens, or else they should
;; complain at compile time.
(define-for-syntax (force-use-with-parens b)
(lambda (stx)
(syntax-case stx ()
[(_)
(with-syntax ([b b])
(syntax/loc stx
(b)))]
[(kw arg arg-rest ...)
(raise-syntax-error #f
(format "Must be directly used without arguments [e.g: (~a)]"
(syntax->datum #'kw))
stx
#'arg)]
[_
(identifier? stx)
(raise-syntax-error #f
(format "Must be directly used [e.g: (~a)]"
(syntax->datum stx))
stx)]))) (define-syntax (while stx)
(syntax-case stx ()
[(_)
(raise-syntax-error #f "missing test and body" stx)] [(_ cond)
(raise-syntax-error #f "missing body" stx)] [(_ cond body ...)
(syntax/loc stx
(let/ec fresh-break
(let loop ()
(when cond
(let/ec fresh-continue
(syntax-parameterize
([break (force-use-with-parens #'fresh-break)]
[continue (force-use-with-parens #'fresh-continue)])
(begin body ...)))
(loop)))))])) ;; By the way: it's a bit unclear what should happen if
;; someone tries using break and continue within the
;; context of a nested while loop's test... e.g.
;; (while true
;; (while (begin (break))
;; 'huh?)
;; 'what?)
;;
;; This particular implementation is implemented such that
;; the call to break will exit the outer loop. It is an odd
;; thing to think about, isn't it? :)
;;
;; It should be easy to syntactically restrict if this really
;; becomes an issue, by syntax-parameterizing error productions
;; in the context of evaluating the _cond_ition. (define/contract (num-different-integers word)
(-> string? exact-integer?) (define s (make-hash)) ;键不允许重复
(define n (string-length word))
(define p1 0)
(define p2 -1) (while #t
(while( and (< p1 n) (not (char-numeric? (string-ref word p1))) )
(set! p1 (+ p1 1)))
; (displayln (format "save1 p1= ~a p2= ~a" p1 p2))
(when (>= p1 n) (break)) ;建议when. if cond都不好使
(set! p2 p1)
; (displayln (format "save2 p1= ~a p2= ~a" p1 p2))
(while( and (< p2 n) (char-numeric? (string-ref word p2)) )
(set! p2 (+ p2 1))
)
; (displayln (format "save3 p1= ~a p2= ~a" p1 p2))
(while( and (> (- p2 p1) 1) (string=? "0" (substring word p1 (+ p1 1))) )
(set! p1 (+ p1 1))
)
( hash-set! s (substring word p1 p2) 1 )
(set! p1 p2)
)
(displayln (format "s= ~a" s)) ;看看这个哈希表长啥样
(hash-count s)
) ;下面是草稿
; (while (<= p1 5)
; (set! p1 (+ p1 1))
; ; (displayln p1)
; (displayln (string=? "0" (substring word p1 (+ p1 1))) )
; )

Racket while循环的更多相关文章

  1. scheme 教程 #lang racket

    scheme 教程 #lang racket 来源  https://blog.csdn.net/yemeishenme/article/details/51471037 原文: https://le ...

  2. racket学习-call/cc (let/cc)

    Drracket continuation 文中使用let/cc代替call/cc Racket文档中,let/cc说明为: (let/cc k body ...+) Equivalent to (c ...

  3. 【.net 深呼吸】细说CodeDom(8):分支与循环

    有人会问,为啥 CodeDom 不会生成 switch 语句,为啥没生成 while 语句之类.要注意,CodeDom只关心代码逻辑,而不是语法,语法是给写代码的人用的.如果用.net的“反编译”工具 ...

  4. Recurrent Neural Network系列1--RNN(循环神经网络)概述

    作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 本文翻译自 RECURRENT NEURAL NETWORKS T ...

  5. Python学习--04条件控制与循环结构

    Python学习--04条件控制与循环结构 条件控制 在Python程序中,用if语句实现条件控制. 语法格式: if <条件判断1>: <执行1> elif <条件判断 ...

  6. 模仿Linux内核kfifo实现的循环缓存

    想实现个循环缓冲区(Circular Buffer),搜了些资料多数是基于循环队列的实现方式.使用一个变量存放缓冲区中的数据长度或者空出来一个空间来判断缓冲区是否满了.偶然间看到分析Linux内核的循 ...

  7. 【JS基础】循环

    for 循环的语法: for (语句 1; 语句 2; 语句 3) { 被执行的代码块 } 语句 1 在循环(代码块)开始前执行 语句 2 定义运行循环(代码块)的条件 语句 3 在循环(代码块)已被 ...

  8. 【python之路4】循环语句之while

    1.while 循环语句 #!/usr/bin/env python # -*- coding:utf-8 -*- import time bol = True while bol: print '1 ...

  9. To Java程序员:切勿用普通for循环遍历LinkedList

    ArrayList与LinkedList的普通for循环遍历 对于大部分Java程序员朋友们来说,可能平时使用得最多的List就是ArrayList,对于ArrayList的遍历,一般用如下写法: p ...

  10. JavaScript单线程和浏览器事件循环简述

    JavaScript单线程 在上篇博客<Promise的前世今生和妙用技巧>的开篇中,我们曾简述了JavaScript的单线程机制和浏览器的事件模型.应很多网友的回复,在这篇文章中将继续展 ...

随机推荐

  1. secureCRT设置配色方案

    https://blog.csdn.net/qq_42672770/article/details/81301494

  2. 杭电oj--1019题C++实现

    这道题有两个问题: 首先,是求利用数论的辗转相除法求最大公约数,后再求最小公倍数m*n/gcd(m,n),其中,m*n可能会超过int 数据范围,所以,该语句换成m/gcd(m,n)*n. 然后是如果 ...

  3. libevent学习之入门--[01]概述与安装

    网上关于libevent的介绍不在少数,我相信目前看到我这篇博客时已经基本了解libevent是用来做什么的,有什么功能,在此就不重复介绍了.我会按照我学习的过程来完整记录整个库的所有核心内容和具体应 ...

  4. axios基本配置

    点击查看代码 <!-- axios基础用法 --> <script> /** * axios:一款基于promise设计模式封装的ajax库(JQ中的ajax就是最普通的aja ...

  5. windows ftp 简单搭建, wget ftp

    事情起因: 公司客户一台数据库服务器突然连不上了,一开始以为是密码过期了,联系学校的老师给改了密码之后,还是连不上,然后就怀疑是不是ssh服务有问题.然后发现这台服务器上没有安装包,yum 命令也不好 ...

  6. formidable处理文件上传的细节

    koa在请求体的处理方面依赖于通用插件koa-bodyparser或者koa-body,前者比较小巧,内部使用了co-body库,可以处理一般的x-www-form-urlencoded格式的请求,但 ...

  7. Django框架搭建web项目(一)

    建议查看官方文档:https://docs.djangoproject.com/zh-hans/4.0/intro/tutorial01/ 1.本地安装python环境(略) 2.本地安装Django ...

  8. idea中 .gitignore文件的使用

    idea中 .gitignore文件的使用 首先保证当前的所有文件都没有被git追踪 如果被追踪,建议先取消git的版本控制 输入如下指令 find . -name ".git" ...

  9. springboot启动图标banner

    将springboot项目中的banner.txt文件替换成下面代码即可 ${AnsiColor.BRIGHT_YELLOW} ┏━┓ ┏━┓ ┏┛ ┻━━━━━┛ ┻┓ ┃ ┃ ┃ ━ ┃ ┃ ┳┛ ...

  10. Linux系统管理实战-DNS

    DNS 域名解析 DNS(domain name system) 解析方式 1.本地解析 /etc/hosts 127.0.0.1 localhost localhost.localdomain lo ...