📜  Smartprix 面试经验 |设置 4(校内)

📅  最后修改于: 2022-05-13 01:58:25.205000             🧑  作者: Mango

Smartprix 面试经验 |设置 4(校内)

最近,Smartprix 进行了一次池放置驱动。
有两轮:
1.逻辑/技术能力测试
2. 编码轮

第一回合:
第一轮分为两个测试,
1. 逻辑能力测试: 30分钟20题,答对一题扣3分,答错一题扣1分。大多数问题都是基于模式匹配的。除此之外,还有来自系列、缺项和血缘关系的问题。到处都是中级问题。

2. 技术 MCQ 测试:该测试由 30 分钟内的 10 个问题组成。问题来自 c++ 和Java。有些是基于输出的,而有些是基于逻辑测试的。问题是中等水平。
在大约 650 名学生中,有 63 名学生被选中参加下一轮 - 编码轮。

第二轮:
这一轮有 2 道编码问题,应该在 3 小时内完成。问题的水平相当不错。基本上问题是基于你在工作中最有可能面临的实际问题。
问题1。击键:编写一个程序来模拟具有给定键及其操作的键盘。要模拟的键类型为:字母数字空格:按原样打印并移动光标。
@ = 如果关闭则切换大写锁定,反之亦然,最初它是关闭的。
# = 在光标位置插入新行并移动光标。
/ = 删除左边的一个字符并将光标指向该位置。
? = 如果光标位于最后一行,则用作向下箭头,没有任何变化。
^ = 如果光标位于第一行,则用作向上箭头,没有任何变化。
这道题210分。

例子:

Input :  asdf#q#pqr^^23
Output :asdf23f
           q 
           pqr
# Python code
string=input()
caps=0
result=[]
j=0
i=0
pos=0
while (i=0):
            if(result[j]=='\n'):
                if(p_j-j-1=check :
            while(check):
                  
                j=j+1;
                check=check-1
            j=j+1
        else :
            while(result[j]!='\n'):
                j=j+1;
            j=j-1
                  
    elif string[i]=='?':
        count=0
        p_j=j
        while (string[i]=='?'):
            count=count+1
            i=i+1
        j=j-1
          
        if count==1 :
              
            while(count>0):
                  
                if result[j]=='\n':
                    count=count-1
                      
                j=j+1
              
        elif count>1 :
          
            while(check):
                j=j+1;
                check=check-1
            j=j+1
          
    else:
        if (caps==1) and  string[i].islower():
            result.insert( j,string[i].upper())
        else :
            result.insert( j,string[i])
        j=j+1
        i=i+1
print (''.join(result))

这道题250分。
问题2。这个程序有点像在你的程序中执行汇编语言的命令。给出的命令集是:
1. ECHO 1:打印数字。例如。 ECHO 1 打印 1
2. 退出:退出程序。
3. SET a 0:给变量赋值0。
4. ADD 2 3 z:这意味着 z = 2+3 将前两个值的总和分配给第三个值。
5. GOTO and LABEL:作为c语言定义的label和goto,label可以在goto之前也可以在goto之后
6. IF 和 END:如果 IF 条件为真,则执行 IF 和 END 命令之间的语句,否则不执行。例如。 IF a 10 statement1 statement2 END 即,如果 a=10。
7. CONTINUE:按c语言定义工作。
变量名只能是字母[az],变量的默认值为0,使用前无需定义或设置。
例子:

Input        Output
   SET a 0       1
   LABEL 100     2
   ADD a 1 a     3
   ECHO a        4
   IF a 5        5
   EXIT
   END    
   GOTO 100 
#Python code 
from sys import stdin
newdict = {}
dict={}
i=0
for line in stdin:
    list1=line.split(" ")
    list1[-1] = list1[-1].strip()
    newdict[i]=list1
    i=i+1
key=0
j=0
key_if=[]
label={}
while (key in newdict):
#    print (key)
    if newdict[key][0]=="SET":
        if not newdict[key][2].isalpha():
            dict[newdict[key][1]]= int(newdict[key][2])
        else:
            dict[newdict[key][1]]= int(dict[newdict[key][2]])
        key=key+1
    elif newdict[key][0]=="ADD":
        #print(key)
        if not newdict[key][1].isalpha() and not newdict[key][2].isalpha():
            dict[newdict[key][3]]=int(newdict[key][1])+int(newdict[key][2])
        elif not newdict[key][1].isalpha():
            dict[newdict[key][3]]=int(newdict[key][1])+int(dict[newdict[key][2]])
        elif not newdict[key][2].isalpha():
            dict[newdict[key][3]]=int(dict[newdict[key][1]])+int(newdict[key][2])
        elif newdict[key][1] in dict and newdict[key][2] in dict :
            dict[newdict[key][3]]=dict[newdict[key][1]]+dict[newdict[key][2]]
        key=key+1
    elif newdict[key][0]=="ECHO":
        if newdict[key][1].isalpha():
            print (dict[newdict[key][1]])
        else :
             print (int(newdict[key][1]))
        key=key+1
    elif newdict[key][0]=="EXIT":
        break;
    elif newdict[key][0]=="IF" :
        key_if=key_if+[key+1]
        if newdict[key][1] in dict and newdict[key][2] in dict :
            if(dict[newdict[key][1]]==int(dict[newdict[key][2]])):
                key=key+1
        elif(dict[newdict[key][1]]==int(newdict[key][2])):
             key=key+1;
        elif  dict[newdict[key][1]]!=int(newdict[key][2])  :
                while (newdict[key][0]!="END"):
                    key=key+1
                key=key+1
                key_if.pop()
        elif newdict[key][2].isalpha() and dict[newdict[key][1]]!=dict[newdict[key][2]]:
                while (newdict[key][0]!="END"):
                    key=key+1
                key=key+1
                key_if.pop()
    elif newdict[key][0]=="CONTINUE" :
        key=key_if[-1]
    elif newdict[key][0]=="LABEL" :
        label[newdict[key][1]]=key
        key=key+1
    #    print (key)
    elif newdict[key][0]=="GOTO":
        #print(label[newdict[key][1]])
        key=label[newdict[key][1]]