Unifuck

From Esolang
Jump to navigation Jump to search

Unifuck (a portmanteau of Unicode and brainfuck) is a Brainfuck derivative made by User:SzszszszszszszsZ where the regular instructions are changed this way:

n%8 is Original
0 +
1 -
2 <
3 >
4 .
5 ,
6 [
7 ]

where n is any integer. n then gets converted into a Unicode character.

Examples

@@@@@@@@FC@@@@FC@@C@@@C@@@C@BBBBAGC@C@CACC@FBGBAGCCDCAAAD@@@@@@@DD@@@DCCDBADBD@@@DAAAAAADAAAAAAAADCC@DC@@D
````````fc````fc``c```c```c`bbbbagc`c`cacc`fbgbagccdcaaad```````dd```dccdbadbd```daaaaaadaaaaaaaadcc`dc``d
        &#    &#  #   #   # """"!'# # #!## &"'"!'##$#!!!$       $$   $##$"!$"$   $!!!!!!$!!!!!!!!$## $#  $
(h0( 0  f[0 `p.S8x3x8@[xx@C8:rRZagkP3Ps9S{862gjQO#{D3Aq),80X0(P8|,8(hTsst2Ql:t(pX$ia))AaL1QaaQ1AALCcX\{P ,
ЀЀЀЀЀЀЀЀІЃЀЀЀЀІЃЀЀЃЀЀЀЃЀЀЀЃЀЂЂЂЂЁЇЃЀЃЀЃЁЃЃЀІЂЇЂЁЇЃЃЄЃЁЁЁЄЀЀЀЀЀЀЀЄЄЀЀЀЄЃЃЄЂЁЄЂЄЀЀЀЄЁЁЁЁЁЁЄЁЁЁЁЁЁЁЁЄЃЃЀЄЃЀЀЄ
шЈҨАҨҘӠјҮгӘҰиѰӞӃҠҨңѠӐӰЛҸшѰӓрӪҪѪњѹӧӓРӃҀгҡѻѫј҆ТӇъѱ҇ћӳѼҳұѩЙФШиѠҐАѐиЄҬҠӸѠԄуУӌҢЁдѢҼРРҸԄӁЁҩӹә҉мҩӹөӹЩҙөӱЬЛЫИӬћӠѸ҄
₠₸₸₸₨₠₰₠₮₣₠₰₰₨₶₣₸₰₳₠₠₰₫₰₸₨₳₠₲₺₢₺₱₯₳₠₻₨₣₹₫₫₸₮₲₿₲₹₷₳₫₼₣₡₩₹₤₠₠₨₠₠₨₠₴₴₠₰₸₤₫₳₼₲₹€₲₤₨₠₨₴₱₱₡₩₡₡₴₡₱₹₩₡₹₹₩₴₫₣₨₴₻₸₰₴
▀■▐█▐█▀■▖▛▀▘▀▀▦▓▘▀▛▐█▘▃■▀▐▛▀▒▚▚▢▙▇▋■▓■▋▉▃▣█▆▢▏▚▙▏▛▋▔▣▙░▁▄▀▀██▘■▐▔▤█▐█▄▣▃▄▢▙▄▊▄▐■▐▄▉░▉░░▁▌▉▙□□▙▁□□▔▓▛▐▤▓▀▐▔
⽀⼰⾸⾀⼨⽈⽀⾨⼆⼓⿘⾨⽰⽰⽦⾋⿀⼨⽛⽰⾘⿀⼫⼸⽰⾘⽻⿈⽢⼪⼪⽂⿁⾏⽛⽠⼫⾈⼻⾁⼣⼳⼠⾶⼂⿟⾂⾹⼷⼣⼳⼤⼻⾡⾩⽙⼬⼠⼸⾨⾘⼀⾈⿐⽤⽼⾐⽠⽘⼌⼣⽻⿄⽂⽱⾼⽺⾴⼈⿈⼐⾼⽱⿁⾉⾩⾡⿑⾼⾉⼑⾑⾩⼩⾩⼙⼱⼄⽣⽣⼰⼔⿓⾸⾸⽤
ぐヨ゠ジぐぐゐむゖィグムヰジてホムヸビぐトエんグジグッよモヒゲりラはっヘルダにゑ・ほ゠ゎなェモべでにか゜んぁけらボぐヸエじよぐばがゔバムじツかッガずケゴひいヨゐ぀やヹすららヱべゼらァヹヱぱべちぱぬ・にグゔルとエぼ
@@@@@@@@FC@@@@FC@@C@@@C@@@C@BBBBAGC@C@CACC@FBGBAGCCDCAAAD@@@@@@@DD@@@DCCDBADBD@@@DAAAAAADAAAAAAAADCC@DC@@D
͸ﷀ뤸娰裸坨饀냐엾ᅳᒸ㰠䌨址咾勃雈瑰㋫坘썰⍘駃垈⎐㴠隃ﻘ췲➪鮢䕒ထ栯耫뮸㏳鬘⽓信퀛볳啐鵮쥊䝿⊢䀹宧졳䙃⼌C悉A쭩馼蛀▨瞈ⱀﲘ저齸氤獄瑨⼸視瘔ꖳ鑫䉌휪箑覄汪ࡴ埸直ᤨ꾴㤱謙䚩ᓁ쪑蹩砌ᆙ㳱夁䜙싹쬡붩東潼ɛ굛梐눜᲋亐૘낌

are all valid Unifuck programs because when the strings' code points are modulo 8, they turn into this:

0000000063000063003000300030222217303031330627217334311140000000440004334214240004111111411111111433043004

And according to the table above, comes down to this:

++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.

In which outputs "Hello World!".

Unifuck to Brainfuck translator

def convert(s: str) -> str:
    table = {
        0: "+",
        1: "-",
        2: "<",
        3: ">",
        4: ".",
        5: ",",
        6: "[",
        7: "]",
    }

    try:
        codepoints = [ord(ch) for ch in s]
        mods = [cp % 8 for cp in codepoints]
        bf_code = "".join(table[m] for m in mods)
    except:
        return "Something went wrong"

    return bf_code

print(convert(input("Enter unifuck code: ")))