KeyF
Jump to navigation
Jump to search
KeyF is an esolang invented by User:None1.
Execution
KeyF uses a simplified version of computer keyboard:
1 2 3 4 5 6 7 8 9 0
Q W E R T Y U I O P
A S D F G H J K L
Z X C V B N M
_________
(_________ is the space bar)
There is a pointer that starts at F.
Commands
< Move pointer to leftmost key above and adjacent to current key. for example, F -> R, if there's no such key, do nothing > Move pointer to rightmost key above and adjacent to current key. for example, F -> T, if there's no such key, do nothing v Move pointer to the rightmost key under the current key. for example, F -> V, if there's no such key, do nothing ^ Move pointer to the leftmost key under the current key. for example, F -> C, if there's no such key, do nothing . Press the key , Press the key and shift simutaneously ! Press caps lock ? Press enter
BORING, so let's add some restrictions, the pointer must stop at K in the end, and should reach U first then C before the end.
To say it more simply, fuck must be a subsquence of all the keys the pointer reached.
Examples
Print FUCK
!.>v>v>.^^<^<^.>>v>v>v>v.
Print HI
!>v>v.>v>.^<^^<^<^>>v>v>v>v
Print line feed
?>v>v>^^<^<^>>v>v>v>v
Hello World!
>v>v,<^<^<^<.v>v>v>v>v>v>v..<.^^<^^.<<<,v>v>v>v>v>v>v>.^<^<^<^<^<.v>v>v>v>v>v.<^<^<^<^<^<^.<^<^<<,vvv>v>v>v>v>v>v>
Yes, I spent 16 minutes writing it.
Interpreters
Python
The esolang is simple, yet making an interpreter is hard.
import re
keys={'0': ' pp',
'1': ' qq',
'2': ' ww',
'3': ' ee',
'4': ' rr',
'5': ' tt',
'6': ' yy',
'7': ' uu',
'8': ' ii',
'9': ' oo',
'_': 'xn ',
'a': 'qwzz',
'b': 'gh__',
'c': 'df__',
'd': 'erxc',
'e': '33sd',
'f': 'rtcv',
'g': 'tyvb',
'h': 'yubn',
'i': '88jk',
'j': 'uinm',
'k': 'iomm',
'l': 'op ',
'm': 'jk ',
'n': 'hj__',
'o': '99kl',
'p': '00ll',
'q': '11aa',
'r': '44df',
's': 'wezx',
't': '55fg',
'u': '77hj',
'v': 'fg__',
'w': '22as',
'x': 'sd__',
'y': '66gh',
'z': 'as '} # Keys in a keyboard
code=input()
shiftkeys=')!@#$%^&*('
k='f'
reached_keys='f'
output=''
caps=False
def printkey(x,shift):
if x.isalpha():
return (x.upper() if (shift!=caps) else x.lower())
if x=='_':
return ' '
return (shiftkeys[int(x)] if shift else x)
for i in code:
if i in '<>^v':
temp_k=keys[k]['<>^v'.index(i)]
if temp_k!=' ':
k=temp_k
reached_keys+=k
else:
if i=='.':
output+=printkey(k,False)
if i==',':
output+=printkey(k,True)
if i=='!':
caps=(not caps)
if i=='?':
output+='\n'
if not re.search('u(.*)c',reached_keys) or k!='k':
raise Exception('Invalid program')
print(output)