Dad jokes are fun

50

5

We all know the classic dad joke that goes something like this:

  1. Somebody says a sentence to describe their self (e.g. I'm tired or I'm confused).

  2. A dad-joke enthusiast comes along and replies Hi <adjective>, I'm Dad!, because introductions follow the same format (I'm Peter follows the same format as I'm hungry).

Your job is to take in an input in the form of a self-descriptor, and output the appropriate dad-joke form, but instead of using the word "Dad", you'll use the name of the programming language you're programming in.

Test cases (assume that they are being parsed by Python):

I'm amazing                  Hi amazing, I'm Python!
I'm tired                    Hi tired, I'm Python!
I'm hungry                   Hi hungry, I'm Python!
I'm fat                      Hi fat, I'm Python!

Now assume that these test cases are being parsed by Golfscript:

I'm a programmer             Hi a programmer, I'm Golfscript!
I'm a question-writer        Hi a question-writer, I'm Golfscript!
I'm a Stack-Overflow-er      Hi a Stack-Overflow-er, I'm Golfscript!

The exact challenge:

  1. Take in a string in the self-descriptor format (I'm <adjective> or I'm a(n) <noun>) using standard input or through a function.

    • Assume there is no ending punctuation.

    • Assume the word I'm is used and not I am.

  2. Convert it to a dad-joke format - see the above examples for exactly how that should look.

Other stuff:


Leaderboard

You can view the leaderboard for this post by expanding the widget/snippet below. In order for your post to be included in the rankings, you need a header (# header text) with the following info:

  • The name of the language (end it with a comma , or dash -), followed by...

  • The byte count, as the last number to appear in your header.

For example, JavaScript (ES6), 72 bytes is valid, but Fortran, 143 bytes (8-bit) is invalid because the byte count is not the last number in the header (your answer will be recognized as 8 bytes - don't take advantage of this).

<iframe src="https://ozewski.github.io/ppcg-leaderboard/?id=185872" width="100%" height="100%" style="border: none;">Oops, your browser is too old to view this content! Please upgrade to a newer version of your browser that supports HTML5.</iframe><style>html,body{margin:0;padding:0;height:100%;overflow:hidden}</style>

connectyourcharger

Posted 2019-05-20T23:29:56.310

Reputation: 2 056

42One of the ways I considered telling my family that my wife was expecting was by telling as many dad jokes as possible and seeing who caught on! – Giuseppe – 2019-05-21T00:54:07.770

7Some example outputs end with exclamation and some do not. What is the significance? – recursive – 2019-05-21T01:56:41.737

1@recursive Whoops! That's a mistake on my part. All inputs should end in exclamation marks. – connectyourcharger – 2019-05-21T09:48:44.213

9

Usual practice is to give it much longer before accepting an answer, if you do so at all: https://codegolf.meta.stackexchange.com/q/2035/66252

– user2390246 – 2019-05-21T10:58:45.243

7And the tie-breaker isn't votes, it's who reached the lowest score first. – Shaggy – 2019-05-21T12:08:06.547

1In the interest of 100% fairness, I think every contestant should be required to rename his language to a 100-byte name (in such a way that both the external and internal representation are 100 bytes) . Then see how long the codes are. – Carl Witthoft – 2019-05-21T13:18:52.667

I think the examples including a or an don't make sense (grammatically) – Bill – 2019-05-21T14:30:51.940

Does the "or" in "I'm <adjective> or I'm a(n) <noun>" mean both have to be parsed correctly by an answer, or can I choose which one? – dzaima – 2019-05-21T16:52:58.710

1You should probably require that the Language's Name appears verbatim in the source code, but allow it to be subtracted from the byte count for the answer. – william porter – 2019-05-21T17:48:53.037

5Now waiting for the next golfing language that's name is an empty string. – 640KB – 2019-05-21T18:24:16.150

@dzaima Both have to be parsed, but it should be the same procedure for both - you're just taking everything after I'm. – connectyourcharger – 2019-05-21T20:03:03.737

@connectyourcharger ah okay, I just wanted to see if splitting on spaces & taking the 2nd element was a valid algorithm. – dzaima – 2019-05-21T20:06:19.920

@CarlWitthoft And then, a language which has a built-in for its name wins. – tsh – 2019-05-22T09:27:19.013

1No requirements on behavior if the input does not start with "I'm "? – aschepler – 2019-05-23T12:42:26.310

Answers

27

V, 13 bytes

cEHi<esc>A, <C-r>" V!

Try it online!

Inspired by tsh's answer

This takes advantage of the fact that I'm is yanked from the start of the string when deleting the text from the start, and pastes it to the end with <C-r>" while in insert mode.

Candy Gumdrop

Posted 2019-05-20T23:29:56.310

Reputation: 396

I just edited I'm to <C-O>p and then notice your answer... – tsh – 2019-05-21T10:11:27.627

2A golfing language using Vim and escape takes 5 characters??? – mowwwalker – 2019-05-21T18:13:21.790

4@mowwwalker Nope. It's really the byte 0x1B, but it's easier and more obvious what it means if you write it as <esc>. The same for <C-r>, which is really 0x12 – James – 2019-05-21T21:19:45.040

@DJMcMayhem, ah that makes much more sense – mowwwalker – 2019-05-21T21:22:52.177

18

C (gcc), 59 42 33 bytes

-17 bytes thanks to @Conor O'Brien noticing that the import wasn't necessary

-9 bytes thanks to @tsh pointing out a shorter, UB way of writing the function

a(x){printf("Hi%s, I'm C!",x+3);}

Try it online!

Chops off the first 3 characters of the input (removes I'm) and surrounds it with the desired text.

Neil A.

Posted 2019-05-20T23:29:56.310

Reputation: 2 038

The program compiles without the import, so you can drop it for 42 bytes. – Conor O'Brien – 2019-05-21T02:39:30.483

@ConorO'Brien nice catch! – Neil A. – 2019-05-21T03:28:50.880

3And the int is also optional. – tsh – 2019-05-21T04:08:45.080

2(?) And also the char*, maybe...; so a(x){printf("Hi%s, I'm C!",x+3);} should work – tsh – 2019-05-21T04:13:03.140

3@tsh: yes, in practice that will work on most 32-bit C implementations (where an int can hold a char* without truncating it), despite the undefined behaviour. On x86-64 gcc on Linux, it will always fail in a PIE executable (typically no pointers are in the low 32 bits of virtual address space, and gcc won't happen to copy the high 32 bits while calculating x+3 from the function arg in the RDI register). But in a non-PIE executable, static addresses are in the low 31 bits of virtual address space, so if the caller passed a string literal or a static buffer, it would happen to work. – Peter Cordes – 2019-05-21T09:54:56.950

Yes, but, you know, 42 - 33 = 9 not 11. – tsh – 2019-05-22T06:47:10.430

@tsh: haha, I totally missed that. – Neil A. – 2019-05-22T18:56:23.370

16

V, 13 bytes

cEHi<Esc>A, <C-O>p V!

Try it online!

New to V. Just knew it about 30 minutes ago. Anyway, this language is chosen just because its name only cost 1 byte. I'm not sure how to send <End> key in V. Most vim environment would accept <End> as a replacement of <Esc>A in this example. But, you know, V is 2 characters shorter than vim. :)

Thanks to @Candy Gumdrop, saves 1 byte.

tsh

Posted 2019-05-20T23:29:56.310

Reputation: 13 072

1Could save one byte by changing c3l to cE. – Candy Gumdrop – 2019-05-21T09:39:24.370

@CandyGumdrop Wow, I didn't know the upper case E before. – tsh – 2019-05-21T09:52:15.477

You could also do cW (which seems different, but is actually identical to cE) or 3s. Nice job! I was just about to post almost this exact answer when I saw that there were 2 V answers already, which was a nice surprise. I've tried several different approaches, but I'm not sure if it'll be possible to get <13 bytes. – James – 2019-05-21T17:21:53.273

11

Stax, 13 bytes

â∞¿φ‼0▲(─ƒSqÄ

Run and debug it

Unpacked, ungolfed, and commented, it looks like this.

.Hip        print "Hi" with no newline
3tp         trim 3 characters from start of input and print with no newline
            final line is to print the unterminated compressed literal ", I'm stax!"
`dYgAwg_

I moved the final comment up one line since nothing may follow an unterminated string literal.

Run this one

recursive

Posted 2019-05-20T23:29:56.310

Reputation: 8 616

I'm going to declare you the winner because your post had more votes, but you technically were tied with one other person. Congratulations! – connectyourcharger – 2019-05-21T10:02:16.663

10

brainfuck, 164

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

Try it online!

The "brainfuck!" part of the string is generated with this tool, can probably be golfed further by hand.

cardboard_box

Posted 2019-05-20T23:29:56.310

Reputation: 5 150

2

Try BF Crunch

– Jo King – 2019-05-21T02:58:09.343

10

Excel, 36 33 bytes

-3 bytes thanks to Johan du Toit.

Input goes into A1.

="Hi "&MID(A1,4,99)&", I'm Excel"

First attempt:

=REPLACE(A1,1,3,"Hi")&", I'm Excel!"

Wernisch

Posted 2019-05-20T23:29:56.310

Reputation: 2 534

="Hi "&MID(B13,4,99)&", I'm Excel" 34 bytes – Johan du Toit – 2019-05-25T11:24:48.250

Thank you @JohanduToit. A1 instead of B13 so actually 33 bytes. – Wernisch – 2019-06-13T14:03:27.240

8

Python 3, 35 34 bytes

lambda s:"Hi%s, I'm Python!"%s[3:]

Try it online!

-1 byte thanks to Embodiment of Ignorance

Also 34 bytes, using the newer formatted strings, thanks to Gábor Fekete:

lambda s:f"Hi{s[3:]}, I'm Python!"

Try it online!

Stephen

Posted 2019-05-20T23:29:56.310

Reputation: 12 293

334 bytes – Embodiment of Ignorance – 2019-05-21T02:00:01.203

What about losing lambda s: and replacing %s[3:] with %input()[3:]? (-4 bytes) – niko – 2019-05-21T21:01:34.577

@niko if I understand what you are saying, that will not print anything. Default rules on this site are either a full program that prints output or a function that returns output. Usually what you are suggesting is called a snippet, and would not be a complete solution, it would need to be wrapped with print() for 7 more bytes, which is why Python answers usually use lambdas. – Stephen – 2019-05-21T21:07:43.153

But how is that different from your (and actually most) answer(s) here? I mean both by themselves do not print anything, and both return the same output right? (Fairly new here - still getting used to CG) – niko – 2019-05-21T21:22:38.277

2@niko It's OK! With lambda s, I have defined an (anonymous) function. If you look at the header and the footer in the TIO link, I name that function f, and then called it with f("I'm whatever"). Then the function returns the expected output. With your snippet, you neither print nor return from a function - you just have a bit of code that evaluates to the correct result, but does not do anything with it. You can run programs multiple times, you can call functions multiple times, but a snippet is just a snippet. – Stephen – 2019-05-21T21:34:04.037

See this meta post for where the decision was made.

– Stephen – 2019-05-21T21:34:06.650

alternative, but still 34-byte solution: lambda s:f"Hi{s[3:]}, I'm Python!" – Gábor Fekete – 2019-05-22T09:04:24.630

@GáborFekete that was the first thing I tried, and I swear it gave me an error. No idea what I did differently. – Stephen – 2019-05-22T14:46:08.400

6

Java, 36 bytes

s->"Hi"+s.substring(3)+", I'm Java!"

Try it online.

Kevin Cruijssen

Posted 2019-05-20T23:29:56.310

Reputation: 67 575

6

R 45 44 39 bytes

@Giuseppe Edit

sub("I'm(.*)","Hi\\1, I'm R",scan(,""))

@AaronHayman Edit

function(s)sub("I'm (.*)","Hi \\1, I'm R",s)

Try it online!

niko

Posted 2019-05-20T23:29:56.310

Reputation: 231

can save one byte replacing "(I'm ) with "(.* ) – Aaron Hayman – 2019-05-21T09:32:41.383

1@AaronHayman, doesn't work for I'm a programmer (many spaces) because of greediness – Nahuel Fouilleul – 2019-05-21T09:48:25.397

@NahuelFouilleul Right, I wasn't sure if the first or last white space would be considere. – niko – 2019-05-21T09:54:39.380

lazy quantifier(.*? ) could be used but it's the same length as (I'm ) – Nahuel Fouilleul – 2019-05-21T09:58:11.703

1

Okay, I saved a byte, and I think this one works properly Try it online!

– Aaron Hayman – 2019-05-21T10:22:50.913

2

2 bytes by changing the sub to "I'm(.*)" and "Hi\\1, I'm R" and 3 bytes by taking input from stdin using scan: Try it online

– Giuseppe – 2019-05-21T14:14:52.933

Note that the TIO link does some messing with aliases to make it work for multiple strings. – Giuseppe – 2019-05-21T14:21:55.623

@Giuseppe Smooth circumventing function – niko – 2019-05-21T14:49:39.483

@niko that's a classic R golf trick! You should check out the other tips there, too!

– Giuseppe – 2019-05-21T14:55:23.337

6

PHP, 34 32 bytes

Hi<?=substr($argn,3)?>, I'm PHP!

Try it online!

Input via STDIN, call with -F.

$ echo I'm a Stack-Overflow-er|php -F dad.php
Hi a Stack-Overflow-er, I'm PHP!

$ echo I'm hungry|php -F dad.php
Hi hungry, I'm PHP!

640KB

Posted 2019-05-20T23:29:56.310

Reputation: 7 149

6

x86, 37 36 bytes

$ xxd DAD.COM
00000000: d1ee ac8a d8c6 0024 adc7 0448 698b d6b4  .......$...Hi...
00000010: 09cd 21ba 1901 cd21 c32c 2049 276d 2078  ..!....!., I'm x
00000020: 3836 2124                                86!$

Unassembled:

D1 EE       SHR  SI, 1                  ; point SI to DOS PSP (080H)
AC          LODSB                       ; load string length into AL, advance SI
8A D8       MOV  BL, AL                 ; put string length into BL
C6 40 24    MOV  BYTE PTR[BX][SI], '$'  ; add string terminator to end of string
AD          LODSW                       ; advance SI two chars
C7 04 6948  MOV  WORD PTR[SI], 'iH'     ; replace second and third char with 'Hi'
8B D6       MOV  DX, SI                 ; load string address for INT 21H string function
B4 09       MOV  AH, 9                  ; display a '$' terminated string function
CD 21       INT  21H                    ; call DOS API
BA 0119     MOV  DX, OFFSET S           ; load address for second part of string
CD 21       INT  21H                    ; call DOS API
C3          RET                         ; return to DOS
S  DB ", I'm x86!$"  

A standalone executable DOS program. Input from command line, output to screen.

enter image description here

Download and test DAD.COM.

* The exact "language" name here is a little ambiguous as CPU machine code isn't really a language in a formal sense. Going with "x86" as a generally understood and accepted name for the target platform.

640KB

Posted 2019-05-20T23:29:56.310

Reputation: 7 149

[moving comment down from main thread] I'd say "x86" is the architecture, while "MA SM" would be one of the available languages on that architecture (note it does have a space in it though). – Jonathan Allan – 2019-05-22T18:34:35.320

5I think "x86" is probably fine really, it is golf after all :) – Jonathan Allan – 2019-05-22T18:51:45.677

5

Ruby -p, 32 27 26 bytes

-5 bytes by leveraging Nick Kennedy's Jelly answer.

-1 byte from splitting on a different point in the string. Also realized my old bytecount was wrong.

~/m/;$_="Hi#$', I'm Ruby!"

Explanation

                            # -p gets line of input and saves to $_
~/m/;                       # Find first 'm' in $_ using regex
     $_="Hi#$', I'm Ruby!"  # Save modified string to $_
                            # ($' is the string AFTER the most recent regex match)
                            # -p outputs $_ to screen

Try it online!

Value Ink

Posted 2019-05-20T23:29:56.310

Reputation: 10 608

Cool! Where's your input? – connectyourcharger – 2019-05-20T23:37:40.747

@connectyourcharger added an explanation. Input is STDIN. – Value Ink – 2019-05-20T23:40:59.697

Gotcha. Good answer! – connectyourcharger – 2019-05-20T23:42:01.850

5

Japt, 18 bytes

`Hi{s3}, I'm Japt!

When Japt's string compression library achieves a 0% compress rate...

Try it

Another 18-byte alternative:

`Hi{Ť}, {¯4}Japt!

Embodiment of Ignorance

Posted 2019-05-20T23:29:56.310

Reputation: 7 014

1... but still beats Jelly and 05AB1E :) – Shaggy – 2019-05-21T08:25:31.403

5

Octave, 35 bytes

@(s)["Hi" s(4:end) ", I'm Octave!"]

Try it online!

@(s)                                 % Anonymous function taking a string input
    [                             ]  % Concatenate everything inside the brackets
     "Hi"          ", I'm Octave!"]  % The fixed parts of the output string
          s(4:end)                   % The input, except "I'm"

                                     % Returns the concatenated string

42 bytes:

I tried retrieving "Octave" somehow, without writing it out, since 6 chars is quite a lot compared to some of the other language names here. Unfortunately, I could only find ver, which outputs a struct with comma separated fields. Takes way more than 6 bytes. :(

@(s)["Hi" s(4:end) ", I'm " {ver.Name}{1}]

Try it online!

Stewie Griffin

Posted 2019-05-20T23:29:56.310

Reputation: 43 471

5

Whitespace, 267 bytes

[S S S T    S S T   S S S N
_Push_72_H][T   N
S S _Print_as_character][S S S T    T   S T S S T   N
_Push_105_i][T  N
S S _Print_as_character][S S S N
_Push_0][S N
S _Duplicate_0][S N
S _Duplicate_0][T   N
T   S _Read_STDIN_as_character][T   N
T   S _Read_STDIN_as_character][T   N
T   S _Read_STDIN_as_character][N
S S N
_Create_Label_INPUT_LOOP][S S S N
_Push_0][S N
S _Duplicate_0][T   N
T   S _Read_STDIN_as_character][T   T   T   _Retrieve][S N
S _Duplicate_input][S S S T S T S N
_Push_10][T S S T   _Subtract][N
T   S S N
_If_0_Jump_to_Label_TRAILING][T N
S S _Print_as_character][N
S N
N
_Jump_to_Label_INPUT_LOOP][N
S S S N
_Create_Label_TRAILING][S N
N
_Discard_top][S S T T   S S S T S T N
_Push_-69_!][S S T  T   N
_Push_-1_e][S S T   T   T   N
_Push_-3_c][S S T   T   S T N
_Push_-5_a][S S S T S T S N
_Push_10_p][S S S T T   S T N
_Push_13_s][S S T   T   N
_Push_-1_e][S S S T T   T   S N
_Push_14_t][S S S T T   N
_Push_3_i][S S S T  S N
_Push_2_h][S S T    T   T   T   T   N
_Push_-15_W][S S T  T   S S S T T   S N
_Push_-70_space][S S S T    T   T   N
_Push_7_m][S S T    T   T   T   T   T   T   N
_Push_-63_'][S S T  T   T   T   S T N
_Push_-29_I][S T    S S T   T   N
_Copy_0-based_3rd_-70_space][S S T  T   T   T   S T S N
_Push_-58_,][N
S S T   N
_Create_Label_PRINT_TRAILING_LOOP][S S S T  T   S S T   T   S N
_Push_102][T    S S S _Add][T   N
S S _Print_as_character][N
S N
T   N
_Jump_to_Label_PRINT_TRAILING_LOOP]

Letters S (space), T (tab), and N (new-line) added as highlighting only.
[..._some_action] added as explanation only.

Since Whitespace inputs one character at a time, the input should contain a trailing newline so it knows when to stop reading characters and the input is done.

Try it online (with raw spaces, tabs, and new-lines only).

Explanation in pseudo-code:

Print "Hi"
Read three characters from STDIN, and do nothing with them
Start INPUT_LOOP:
  Character c = STDIN as character
  If(c == '\n'):
    Call function PRINT_TRAILING
  Print c as character
  Go to next iteration of INPUT_LOOP

function PRINT_TRAILING:
  Discard the top of the stack (the c='\n' that was still on the stack)
  Push "!ecapsetihW m'I ," one character at a time
  Start PRINT_TRAILING_LOOP:
    Print as character
    Go to next iteration of PRINT_TRAILING_LOOP

The characters of ", I'm Whitespace!" are pushed in reversed order, and then printed in a loop. All values of these characters are also lowered by 102, which are added in the loop before printing to save bytes. This constant 102 to lower each character with is generated with this Java program. Also, instead of pushing the value -70 for both spaces twice, the second space in "!ecapsetihW m'I ," is copied from the first with the Copy builtin to save a few bytes.

Kevin Cruijssen

Posted 2019-05-20T23:29:56.310

Reputation: 67 575

5

IBM/Lotus Notes Formula Language, 61 62 bytes

+1 because I hadn't noticed the ! at the end of the output.

"Hi"+@Right(i;"I'm")+", I'm IBM/Lotus Notes Formula Language!"

Computed field formula that takes it's input from an editable field i. It would fail for "I'm an I'm" but since that wouldn't make any sense at all I'm assuming that it won't happen.

Shame that at 32 bytes, the name of the language is more than half the total length of the formula!

Screenshot below showing an example input and output:

enter image description here

ElPedro

Posted 2019-05-20T23:29:56.310

Reputation: 5 301

5It looks like your language would be good for the job if the name wasn't so long :) – connectyourcharger – 2019-05-21T09:59:32.727

if I was being serious I would probably just call it Formula which is how it is referred to in the Notes/Domino developer community :-) – ElPedro – 2019-05-21T10:10:48.517

@connectyourcharger: How strict is the requirement to introduce yourself with your full formal name in a dad joke? Wouldn't Lotus Notes introduce itself with "I'm Lotus Notes"? Some other answers are things like "I'm Perl 5 -p", as if the -p option was really part of the language name. Easy to argue that Perl5 could introduce itself as "Perl". – Peter Cordes – 2019-05-21T10:10:55.993

1@PeterCordes - Possible but Lotus Notes/Domino also has LotusScript as an inbuilt language so we probably need to be a little more specific ;-) – ElPedro – 2019-05-21T10:12:56.043

"Hi @ElPedro, I'm a Lotus Notes Formula"? – Peter Cordes – 2019-05-21T10:13:35.963

1Could actually go a little better than that since IBM rebranded it to IBM Notes but then they rebranded again to IBM Domino so I guess that to be strictly correct it should be "Hi @PeterCordes, I'm IBM Domino Formula" :) – ElPedro – 2019-05-21T10:16:06.430

1@PeterCordes Only the essential parts of the language name are required - I'm accepting Perl as a substitution for Perl 5 or Perl 5 -p. – connectyourcharger – 2019-05-21T10:23:03.343

But I think that in this case, the formal name should be used (there's no version numbers - the whole language name is what it should be referred to as). – connectyourcharger – 2019-05-21T10:24:41.950

I'm not even sure if this is the official name but it's the name that I use when I am posting answers so I'll stick with it here. In the light of this question I maybe should have used a shorter name in the beginning :) – ElPedro – 2019-05-21T11:36:49.847

5

sed (-r), 31 28 25 bytes

-3 bytes thanks to Shaggy -3 bytes because -r not needed in output

s/I'm(.*)/Hi\1, I'm sed!/

TIO

Nahuel Fouilleul

Posted 2019-05-20T23:29:56.310

Reputation: 5 582

28 bytes? – Shaggy – 2019-05-21T12:25:35.460

Hmm ... Our way around counting flags was to declare them as different languages so I think you may need the -r but it would be worth getting Meta to weigh in on it. – Shaggy – 2019-05-21T17:40:16.897

i removed because of perl 5 answer and comments – Nahuel Fouilleul – 2019-05-22T05:34:59.380

4

Jelly, 20 17 bytes

ṫ4;“'ṫṗḶ/÷!Ṗ»⁾Hi;

Try it online!

A monadic link taking the input as its argument and returning a Jelly string.

Explanation

ṫ4                | everything from 4th character on
  ;“'ṫṗḶ/÷!Ṗ»     | concatenate ", I’m Jelly!" to the end
             ⁾Hi; | concatenate "Hi" to the beginning

Nick Kennedy

Posted 2019-05-20T23:29:56.310

Reputation: 11 829

1Hang on, Jelly has a built-in just for the word "Jelly"? – connectyourcharger – 2019-05-20T23:55:31.823

3@connectyourcharger it’s a compressed dictionary word – Nick Kennedy – 2019-05-20T23:56:04.360

Ah, that makes sense – connectyourcharger – 2019-05-20T23:56:51.110

4

Perl 6, 30 28 27 bytes

{S/.../Hi/~", I'm Perl 6!"}

Try it online!

Jo King

Posted 2019-05-20T23:29:56.310

Reputation: 38 234

4

Perl 5 -p, 31 24 bytes

Cut down based on clarifications from OP and a suggestion from @NahuelFouilleul.

/ /;$_="Hi $', $` Perl!"

Try it online!

Xcali

Posted 2019-05-20T23:29:56.310

Reputation: 7 671

129 bytes – Nahuel Fouilleul – 2019-05-21T07:14:48.347

1also maybe $^X $] special variables could be used, however 5 is shorter than $] – Nahuel Fouilleul – 2019-05-21T07:18:08.037

Do you need to include the 5 as part of the name of the language? i.e. could you argue that Perl 5 "thinks of itself" as "Perl"? That was the case before Perl 6 existed, and codegolf answers only need to work on at least one implementation of the language, so pick an old one? – Peter Cordes – 2019-05-21T09:58:41.127

OP confirms that Perl is sufficient. And that the use of the -p option doesn't have to be considered part of the language name. – Peter Cordes – 2019-05-21T10:24:46.783

4

Rust, 41 bytes

|x:&str|print!("Hi{}, I'm Rust!",&x[3..])

Try it online!

darrylyeo

Posted 2019-05-20T23:29:56.310

Reputation: 6 214

4

VBA (Excel), 27 28 bytes

?"Hi"Mid([A1],4)", I'm VBA!

Input goes in cell A1 of the Active Sheet in Excel, run code in the Immediate Window

Takes advantage of the fact that "SomeString"SomeValue and SomeValue"SomeString" will implicitly concatenate, and that omitting the third argument from the MID function will take all characters from the end of the input - turning it into a "dump initial characters" function

(-1 byte thanks to Shaggy, but +1 when OP confirmed that all answers should end with an exclamation mark)
(-1 byte thanks to Taylor Scott reminding me that the final double-quote was optional)

Chronocidal

Posted 2019-05-20T23:29:56.310

Reputation: 571

1Could you remove the space after Hi and replace 5 with 4? – Shaggy – 2019-05-21T12:24:11.130

@Shaggy ... Yes, yes I could. No idea how I missed that, thank you – Chronocidal – 2019-05-21T12:27:30.050

1You can drop a byte by removing the very last " from this solution, and as you use evaluate notation (the square brackets) you should mark this solution as being Excel VBA, as that notation is only available in Excel – Taylor Scott – 2019-06-06T12:18:30.740

4

Batch, 22 + 3 = 25 bytes

@echo Hi %*, %0 Batch!

+3 bytes for naming this file I'm (with the required .bat extension for Batch files). Invoke as I'm hungry, when it will echo Hi hungry, I'm Batch!.

Neil

Posted 2019-05-20T23:29:56.310

Reputation: 95 035

program should receive I'm but here it's the name of the script don't know if it's valid, or unless it's the interpreter with the script in current path – Nahuel Fouilleul – 2019-05-21T09:43:53.933

1@NahuelFouilleul The interpreter is CMD, so would that actually save me 2 bytes? – Neil – 2019-05-21T10:03:43.090

4

Jelly,  16  15 bytes

Ḋa⁾Hi“'ṫṗḶ/÷!Ṗ»

A full program accepting a (Python formatted) string argument which prints the result.

Try it online!

How?

Ḋa⁾Hi“'ṫṗḶ/÷!Ṗ» - Link: list of characters    e.g. "I'm a programmer"
Ḋ               - dequeue                          "'m a programmer"
  ⁾Hi           - pair of characters               "Hi"
 a              - logical AND (vectorises)         "Hi a programmer"
     “'ṫṗḶ/÷!Ṗ» - list of characters               ", I'm Jelly!"
                -  - since this is a new leading constant chain the previous result
                -    is implicitly printed (with no trailing newline)
                - program result is implicitly printed (again with no trailing newline)

Note: Ḋ⁾Hio... works too.

Jonathan Allan

Posted 2019-05-20T23:29:56.310

Reputation: 67 804

3

J, 22 bytes

', I''m J!',~'Hi',3}.]

Try it online!

Jonah

Posted 2019-05-20T23:29:56.310

Reputation: 8 729

3

JavaScript, 38 37 bytes

x=>`Hi${x.slice(3)}, I'm JavaScript!`

Try it online!

darrylyeo

Posted 2019-05-20T23:29:56.310

Reputation: 6 214

3

05AB1E, 23 21 bytes

Saved 2 bytes thanks to Kevin Cruijssen

',«#À„Hiš"05AB1E!"ªðý

Try it online!

Explanation

',«                    # append ","
   #                   # split on spaces
    À                  # rotate left
     „Hiš              # prepend "Hi"
         "05AB1E!"ª    # append the language name
                   ðý  # join on spaces

Emigna

Posted 2019-05-20T23:29:56.310

Reputation: 50 798

21 bytes. And too bad the exclamation mark is there.. Since •äƵí•hR is 1 byte shorter than "05AB1E". :) – Kevin Cruijssen – 2019-05-21T07:44:35.063

@KevinCruijssen: Wow! I feel stupid that I didn't start with the ",". Yeah I tried •äƵí•hR as well, but as you say, it unfortunately doesn't save any here. – Emigna – 2019-05-21T08:08:50.553

3

bash, 24 bytes

echo Hi ${@:2}, $1 bash!

TIO

Nahuel Fouilleul

Posted 2019-05-20T23:29:56.310

Reputation: 5 582

replace bash with $0 to save a couple of bytes – roblogic – 2019-05-23T01:04:30.103

1@roblogic, $0 would print script name or running bash -c 'echo Hi ${@:2}, $1 $0!' bash $@ but should count in size – Nahuel Fouilleul – 2019-05-23T18:16:20.623

3

Retina 0.8.2, 26 25 23 bytes

^...
Hi
$
, I'm Retina!

-1 byte thanks to @attinat.
-2 bytes by porting @Adám's QuadR answer, so make sure to upvote him!!

PS: @Neil posted a shorter Retina answer in the new version, so I've changed this answer to Retina 0.8.2 explicitly.

Try it online.

Explanation:

Replace the first three characters with "Hi":

^...
Hi

And then append a trailing ", I'm Retina!" (by replacing the end of the string):

$
, I'm Retina!

Kevin Cruijssen

Posted 2019-05-20T23:29:56.310

Reputation: 67 575

1

Shouldn't it be like this instead?

– attinat – 2019-05-21T08:06:02.537

2

or better, 25 bytes

– attinat – 2019-05-21T08:09:18.220

@attinat Ah, of course, hadn't even noticed the incorrect output.. >.> And thanks for the -1! – Kevin Cruijssen – 2019-05-21T08:43:20.807

3

Javascript (Node.js in TIO), 60 bytes

s=>"Hi"+s.slice(3)+", I'm J"+process.argv[0].slice(6,15)+"!"

Try it online

Johan du Toit

Posted 2019-05-20T23:29:56.310

Reputation: 1 524

javascript is shorter than "+process.argv[0].slice(5,15)+" – Nahuel Fouilleul – 2019-05-21T09:28:15.137

2@NahuelFouilleul yes, but +process.argv[0].slice(5,15)+ is more fun ;-) – Johan du Toit – 2019-05-21T09:37:21.750

1The consensus on language names is that we must use proper casing - JavaScript, not javascript. – Shaggy – 2019-05-21T12:10:47.850

@Shaggy, point taken. – Johan du Toit – 2019-05-22T05:03:31.367

3

QuadR, 22 bytes

^...
$
Hi
, I'm QuadR!

Try it online!

This replaces:

^... three initial characters
and
$ the end-of-line

with

Hi
and
,I'm QuadR
respectively

Adám

Posted 2019-05-20T23:29:56.310

Reputation: 37 779

So you could exchange the middle two lines and change the language to Retina and still beat @KevinCruijssen's answer? – Neil – 2019-05-21T12:28:40.310

@Neil I guess so, but your's is still shorter. Tbf, QuadR is but a thin cover for the not-intended-for-golf ⎕R APL operator. – Adám – 2019-05-21T15:22:44.037

Ah, but my answer only works for Retina 1, not Retina 0.8.2 though. – Neil – 2019-05-21T15:35:27.853

3

Retina, 22 21 bytes

3L$`
Hi$', $` Retina!

Try it online! Link includes test cases. Does not work in Retina 0.8.2, so adapt @Adám's QuadR answer instead. Explanation: The pattern is empty, so it matches at every position in the input string. We only need the third (or fourth would work) match however. The substitution is then applied to that match. Within that substitution, $' refers to the rest of the string and $` refers the the beginning of the string.

Neil

Posted 2019-05-20T23:29:56.310

Reputation: 95 035

2

Wolfram Language (Mathematica), 43 bytes

"Hi"<>#~StringDrop~3<>", I'm Mathematica!"&

Try it online!

attinat

Posted 2019-05-20T23:29:56.310

Reputation: 3 495

2

Befunge-93, 45 bytes

"iH",,~~~>~# :1+#,_0"!39-egnufeB m'I ,">:#,_@

Try it online!

Dissected:

"iH",,                                           Push then output constant "Hi"
      ~~~                                        Read "I'm" from output, which gets unused
         >~# :1+#,_                              Non-wrapping cat program
                   0"!39-egnufeB m'I ,"          Push null-terminated constant string to stack
                                       >:#,_@    Output string and exit

negative seven

Posted 2019-05-20T23:29:56.310

Reputation: 1 931

2

C (gcc), 49 bytes

+3 Bytes: was not working
-3 Bytes: K&R style function. thanks JohanduToit

This is similar to the answer from Neil A. but takes the input as commandline arguments instead of a function parameter.

main(b,a)char**a;{printf("Hi%s, I'm C!",a[1]+3);}

Try it online!

peterzuger

Posted 2019-05-20T23:29:56.310

Reputation: 73

Oh, thanks! @JohanduToit Don't know how I missed that. – peterzuger – 2019-05-22T06:34:58.037

2

T-SQL, 44 bytes

SELECT STUFF(v,1,3,'Hi')+', I''m SQL!'FROM t

Input is taken via pre-existing table t with text field v, per our IO standards.

STUFF is shorter than variations using SUBSTRING or RIGHT.

Can handle multiple inputs (as separate rows in t), although that's not required.

BradC

Posted 2019-05-20T23:29:56.310

Reputation: 6 099

2

Canvas, 19 bytes

jjjHiŗ, I'm Canvas!

Try it here!

18 bytes only handling single letter names

dzaima

Posted 2019-05-20T23:29:56.310

Reputation: 19 048

2

GFortran, 80 76 bytes

As usual, Fortran string handling is clunky and annoying!

try it online

character(99)S;read(*,'(A)')S
print*,'Hi',trim(S(4:)),', I''m GFortran!'
end

This is how I compile and run it (on Mac with homebrew + gcc + source file dad.f):

$ gfortran -std=gnu -Wextra -Wall -pedantic -ffree-form -fcheck=all -fbacktrace dad.f -o dad.app

roblogic

Posted 2019-05-20T23:29:56.310

Reputation: 554

2

PowerShell Core, 53 bytes

Filter f{$_-replace"(...)(.*)",'Hi$2, $1 PowerShell'}

Try it online!

Probably could do more improvement on the regex. Oh well.

Jeff Freeman

Posted 2019-05-20T23:29:56.310

Reputation: 221

2

Sinclair ZX80 BASIC, 92 tokenized BASIC bytes

As the Sinclair ZX80 character set only allows for upper-case and 'inversed' characters, and doesn't include a single-quote, shifted-E is substituted here. There is no exclamation mark in the ZX80 character set either - Source.

 1 INPUT A$
 2 FOR I=0 TO 2
 3 LET A$=TL$(A$)
 4 NEXT I
 5 PRINT "HI";A$;","
 6 PRINT "I'M SINCLAIR ZX80 BASIC"

How it works:

Line 1 takes the input as a string value to A$; Line 2 - 4 creates a loop to remove the first three characters of the entered value; Line 5 - 6 then outputs the ultimate Dad joke.

ZX80 Dad Joke answer

Shaun Bebbers

Posted 2019-05-20T23:29:56.310

Reputation: 1 814

2

AWK, 28 25 bytes

$1="Hi",$0=$0", I'm AWK!"

Try it online!

This program modifies the contents of field "$1" and "$0" in a range pattern. Because no actions are specified after the pattern, the default action {print $0} is executed.

user4098326

Posted 2019-05-20T23:29:56.310

Reputation: 241

1

C# (Visual C# Interactive Compiler), 33 bytes

n=>$"Hi{n.Substring(3)}, I'm C#!"

Try it online!

Embodiment of Ignorance

Posted 2019-05-20T23:29:56.310

Reputation: 7 014

1

APL+WIN, 31 21 bytes

10 bytes saved by taking on board Adam's comments. Thanks.

"Hi",3↓⎕,", I'm APL!"

Prompts for input string.

Try it online! Courtesy of dzaima/APL

Graham

Posted 2019-05-20T23:29:56.310

Reputation: 3 184

1

K (ngn/k), 21 bytes

{"Hi",3_x,", I'm K!"}

Try it online!

Galen Ivanov

Posted 2019-05-20T23:29:56.310

Reputation: 13 815

1

Red, 39 bytes

func[s][rejoin["Hi"at s 4", I'm Red!"]]

Try it online!

Galen Ivanov

Posted 2019-05-20T23:29:56.310

Reputation: 13 815

1

Nim, 32 bytes

s=>"Hi"&s[3..s.len]&", I'm Nim!"

Try it online!

darrylyeo

Posted 2019-05-20T23:29:56.310

Reputation: 6 214

1

Icon, 52 bytes

procedure d(s);return"Hi"||s[4:0]||", I'm Icon!";end

Try it online!

Galen Ivanov

Posted 2019-05-20T23:29:56.310

Reputation: 13 815

1

Haxe, 57 54 bytes

function(x:String)return'Hi${x.substr(3)}, I\'m Haxe!'

Try it online!

darrylyeo

Posted 2019-05-20T23:29:56.310

Reputation: 6 214

1

Charcoal, 21 bytes

Hi✂S³P, I'm Charcoal!

Try it online! Link is to verbose version of code. Explanation: is the Slice operator which normally takes four arguments, however the use of the P command to output the suffix allows Charcoal to deduce that the last two arguments were omitted.

Neil

Posted 2019-05-20T23:29:56.310

Reputation: 95 035

1

PowerShell, 42 41 40 37 bytes

-1 byte thanks to Spitemaster

"Hi$($args|% s*g 3), I'm PowerShell!"

Try it online!

There might be a cheaper automatic variable holding the PowerShell version hiding somewhere but I'm not sure. Answer takes the substring after I'm to the end and builds a string with it.

Veskah

Posted 2019-05-20T23:29:56.310

Reputation: 3 580

1You could save a byte by only skipping 3 characters and outputting "Hi$_\, I'm PowerShell!"` – Spitemaster – 2019-05-21T14:15:48.057

@Spitemaster Oh yeah, I guess I could. Thanks – Veskah – 2019-05-21T14:28:04.643

@Veskah You can output the working directory with $pshome but that prints something like /opt/microsoft/powershell/6 – Jeff Freeman – 2019-05-23T15:39:01.367

You could use the -f formatting operator for 33 bytes: Try it online!

– Gabriel Mills – 2020-01-02T20:27:56.780

@GabrielMills Breaks for multiple words

– Veskah – 2020-01-03T13:02:07.217

@Veskah ah, I hadn't caught that. Sorry! – Gabriel Mills – 2020-01-03T14:16:22.337

1

Clojure, 36 bytes

#(str"Hi"(subs % 3)", I'm Clojure!")

user70585

Posted 2019-05-20T23:29:56.310

Reputation: 181

1

SNOBOL4 (CSNOBOL4), 55 bytes

	INPUT "I'M" REM . X
	OUTPUT ="HI" X ", I'M SNOBOL"
END

Try it online!

Giuseppe

Posted 2019-05-20T23:29:56.310

Reputation: 21 077

1

Lua, 68 59 bytes

function d(s)return(s:gsub("(I\'m)(.*)","Hi%2, %1 Lua"))end

Uses a pattern to swap in the I'm in the original and then returns the joke. Having chucks on a single line like this is valid, but ugly.

Edit: More efficient use of gsub

Scribblemacher

Posted 2019-05-20T23:29:56.310

Reputation: 111

Consider adding a short explanation to your answer. Code-only answers tend to get automatically flagged as low quality. – mbomb007 – 2019-05-22T13:40:29.727

@mbomb007 Thanks; I updated my answer. – Scribblemacher – 2019-05-22T14:26:53.820

1

Kotlin, 34 bytes

"Hi${i.substring(3)}, I'm Kotlin!"

Try it online!

Kotlin, 26 bytes

Is this a loop hole ?

"Hi${i.s(3)}, I'm Kotlin!"

Try it online!

The 26 is definitely a loophole else I can golf it to 5 bytes with:

i.k()

which is meaningless.

Try it online!

Xvolks

Posted 2019-05-20T23:29:56.310

Reputation: 111

1

Forth (gforth), 40 bytes

: f 3 -3 d+ ." Hi"type ." , I'm Forth!";

Try it online!

Code Explanation

: f                 \ start a new word definition
  3 -3 d+           \ add 3 to the starting address and subtract 3 from the string length
  ." Hi"type        \ output "Hi" followed by all but the first 3 characters of the input string      
  ." , I'm Forth!"; \ output ", I'm Forth!" and end the word definition

reffu

Posted 2019-05-20T23:29:56.310

Reputation: 1 361

1

VSL, 51 bytes

fn f(s:String){print("Hi "+s[from:4]+", I'm VSL!")}

Glad VSL can now participate in some golfs :)

Try it online! (doesn't have latest VSL so might not work just yet)

Downgoat

Posted 2019-05-20T23:29:56.310

Reputation: 27 116

Are you doing much with Teascript these days? It was a cool project,.. – roblogic – 2019-05-24T04:31:46.950

1@roblogic unfortunately not anymore. I ended up adding most of its better features (unicode shortcuts, compression) to Japt so now that's generally always the better choice – Downgoat – 2019-05-24T04:38:07.423

1

ReRegex, 31 bytes

^I'm/Hi/[^!]$/$0, I'm ReRegex!/

This assumes input doesn't end on !.

TIO

Cedric Reichenbach

Posted 2019-05-20T23:29:56.310

Reputation: 448

1

Julia 1.0, 30 bytes

s->"Hi$(s[4:end]), I'm Julia!"

Try it online!

gggg

Posted 2019-05-20T23:29:56.310

Reputation: 1 715

1

Ed, 30 bytes

I couldn't leave a sed answer without an ed answer!

%s/I'm\(.*\)/Hi\1, I'm ed!
wq

Try it online!

Jeff Schaller

Posted 2019-05-20T23:29:56.310

Reputation: 111

1

I prepended a “#” to your post's first line to turn it into heading, so the Leaderboard script be able to parse it and list it. Funny choice for the link, though I'm sure some readers would be happier with something more informative.

– manatwork – 2019-05-23T15:41:56.443

1

Thank you, manatwork. https://www.gnu.org/software/ed/ would be a reasonable place to go to learn more about ed.

– Jeff Schaller – 2019-05-23T15:48:54.513

1

JavaScript (V8), 37 bytes

s=>`Hi${s.slice(3)}, I'm JavaScript!`

Try it online!

user2657799

Posted 2019-05-20T23:29:56.310

Reputation: 11

1

Pyth, 21 bytes

++"Hi">z3", I'm Pyth!

Try it here

Ian Pringle

Posted 2019-05-20T23:29:56.310

Reputation: 11

1

Malbolge, 24477 bytes

Mors sum, Dominus Pestifer Mundi

Hi, Dominus Pestifer Mundi, I'm dad!

bP&A@?>=<;:9876543210/.-,+*)('&%$T"!~}|;]yxwvutslUSRQ.yx+i)J9edFb4`_^]\yxwRQ)(TSRQ]m!G0KJIyxFvDa%_@?"=<5:98765.-2+*/.-,+*)('&%$#"!~}|utyrqvutsrqjonmPkjihgfedc\DDYAA\>>Y;;V886L5322G//D,,G))>&&A##!7~5:{y7xvuu,10/.-,+*)('&%$#"yb}|{zyxwvutmVqSohmOOjihafeHcEa`YAA\[ZYRW:U7SLKP3NMLK-I,GFED&%%@?>=6;|9y70/4u210/o-n+k)"!gg$#"!x}`{zyxZvYtsrqSoRmlkjLhKfedcEaD_^]\>Z=XWVU7S6QPON0LKDI,GFEDCBA#?"=};438y6543s1r/o-&%*k('&%e#d!~}|^z]xwvuWsVqponPlOjihgIeHcba`B^A\[ZY;W:UTSR4PI2MLKJ,,AFE(&B;:?"~<}{zz165v3s+*/pn,mk)jh&ge#db~a_{^\xwvoXsrqpRnmfkjMKg`_GG\aDB^A?[><X;9U86R53ONM0KJC,+FEDC&A@?!!6||3876w4-tr*/.-&+*)('&%$e"!~}|utyxwvutWlkponmlOjchg`edGba`_XW\?ZYRQVOT7RQPINML/JIHAFEDC&A@?>!<;{98yw5.-ss*/pn,+lj(!~ff{"ca}`^z][wZXtWUqTRnQOkNLhgfIdcFaZ_^A\[Z<XW:U8SRQPOHML/JIHG*ED=%%:?>=~;:{876w43210/(-,+*)('h%$d"ca}|_z\rqYYnsVTpoRPledLLafIGcbE`BXW??TY<:V97S64P31M0.J-+G*(DCB%@?"=<;|98765.3210p.-n+$)i'h%${"!~}|{zyxwvuXVlkpSQmlOjLbafIGcbE`BXW??TY<:V97S64P31M0.J-+G*(D'%A@?"=<}:98y6543,1r/.o,+*)j'&%eez!~a|^tsx[YutWUqjinQOkjMhJ`_dGEaDB^A?[><X;9U86R53O20LKJ-HG*ED'BA@?>7~;:{y7x5.3210q.-n+*)jh&%$#"c~}`{z]rwvutWrkpohmPkjihafI^cba`_^A\[>YXW:UTS5QP3NM0KJ-HGF?D'BA:?>=~;:z8765v32s0/.-nl$#(ig%fd"ca}|_]yrqvYWsVTpSQmPNjMKgJHdGEa`_B]\?ZY<WVUTMR5PO20LK.IHA))>CB%#?87}}49zx6wu3tr0qo-nl*ki'hf$ec!~}`{^yxwvotsrUponQlkMihKIe^]EEZ_B@\?=Y<:V97S64P31M0.J-+GFE(C&A@?8=<;:{876w43s10qo-&%kk"'hf$ec!b`|_]y\ZvYWsVTpSQmlkNiLgf_dcba`C^]\?ZY;WV97SLK33HM0.J-+G*(D'%A$">!};|z8yw543t1r/(-,+*)(i&%fd"!~}|_t]xwvutslqTonmPNdchKIeHFbaD_AWV[><X;9U86R53ON1L.DCH+)EDC&;@#>=<;|98x6wu32s0p(',mk)(i&f|{"ca}`^z][wZXtWUqTRnmPNjcbJJ_dcbEDYB@@?ZSX;VUTS6QPO11F..CHGF)(C<A$?>=<}:98xx/uu,10/po,+$kiih%$#z!b}|{z]xwvXXmUUjonmPOjihafIdcbaD_^]??T<<QVUT76QPONG0..-HGFED=B%@?>=~|438yw5vt21r/o'&+lj(ig%fd"ca}`^z][wZXtWUqpoRQlkjihafIdcbaD_^]??T<<QVUT76QPONMLE.,,+FEDCBA@9>!<;:9zx0/uu,10/po,+*)('&}$e"!~}`{zy[[pXXmrqpSRmlkjihgf_Hcba`_AW\[ZY;Q:OTSRKPIN1//.CH+FEDC&A@?>=~|:327xv43tr0)(-nl*ki'hf$ec!b`|_]y\ZvYWsVTponQPejMhgfeHcbaCCX@@UZYX;:UN7554ONGL/JIHG*ED&BA$?!76;|zyy054us1*).om+lj(ig%fd"ca}`^z][wZXWWlqpoRQlkdiLgfedGba`BBW??TYXW:9TSRK4221LKJIBG*EDCB%@?>~~5{{2765vu210/(-n+*)(i&%$ddyaav{zy\[vutsrkTRRQlkjihg`eHcba`C^]\>>S;;PUTS65PONMLKDI,GFED'%;:?"~<}{9zx6wu3tr0qo-nl*ki'hfeez!~}`_zyxwvutmVTTSnmlkjihg`eHcba`C^]?>>SXW:8TMLQPO21LKJIHGFE>C&A@?>=}5:987w/v-210).',m*)('h%$#ccx``uzyx[ZoXVVUpinQlkjiLgfeGG\DDY^]\?>YRW:UTSR5PON00E--BGFE('BA:#!!~;:927x5432s0/.nn%kk"'&%fe"!~w|_zyxwZutsUUjRRglkjMLgfed]FDDC^]\[ZSX;VUTS6QPO11FKJ-H*@?D'%A$">!}||387xv4-,1rp.om+lj(ig%fd"ca}`^zyx[ZutsrqjoRmlkjMhgfHH]EEZ_^]@?ZYXWVUN7554ONMLKJIBG*EDCB%@?>~~5{{2765vu210/.-,%*k('&%f#"b~a_{^\x[YutWUqjinQOkNLhKIeHFbEC_B@\?=<<QVUT76QPONMLKJC,GFEDC%;@?>=}5|381654-2sqqp',m*)('h%$#ccx``uzyx[ZotWrqpoRmlkMMbJJ_dcbED_XA??>YXQV9TSRQ4ON0L/-IH+F(>=B%#?>!<|438yw5vt2sq/pn,mk)jh&%fd"yx``uzyx[ZutmrUponmPkjiKK`HH]ba`CB]\[T=;;:UTSRKP3NMLK.IHG))>&&;@?>!~;:9816w4321r/.-mm$jj!&%$ed!~}|{t][[ZutsrqpinQlkjiLgfeGG\DDY^]\?>YXWVUTMR5PONM0KJI++@((=BA@#"=<;:9870wuut10/.-,+*#(i&%$#d!~}__t\\qvutWVqponmlkjchKfedcbDZ_^]\>T=RWVUNSLQ4ONML/-CBG*(D'%A$">=~|:327xv43tr0)(-nl*ki'hf$ec!b`|_]\\qvutWVkTRRQlejMhgfeHcbD`_B]?UTY<:99NSR5P2HGL/-IH+F(>=B%#""7<;|9y105vt2sq/pn,mk)jh&%$ed!x}`{z]xwYuXVrUSoRPlkNLha`eHFbEC_B@??TYX;V8NMR53ON1L.DCH+)ED'B$:9>!};|z876wv32+r/.-n+*j(ig%$ec!xw|_]yx[YunmrUSonQOkdchKIeHFbEC_B@\?=Y<:99NSRQ43NMLKD-++*EDCBA:?"=<;|z21ww.321rq.-,+*#(i&%$e"!~``uzy\ZvonsrqTSnmlkjibKIIHcba`_^]V[>YXW:UTS55JON1L.DCH+)E(&BA$?!76;|z8ywvv-21r/o'&+lj(ig%fd"ca}`^z][ZZotsrUTonmlkjibgJedcFa`_^]@>ZSRW:877LQP31MFEJ-+GF)'C<;@#!=~|:{y76wu3,+0qo-nl*ki'hf$ecbbw|{z]\wvutsrqpiRmlkjiKafedcE[DY^]\UZSX;998MR5PON1LK-,,AFE(C%;:?"~<;|9y105vt2sq/pn,+l)i!~%fd"ca}`^z][wZXtsrUTinQlkNihgII^FF[`_^A@[T=XWV9TSR44INM0K-CBG*(D'%$$9>=~|:327xv4usrr).-nl*#"'hf$ec!b`|_]y\ZvYWsrqTSnmleNLLKfedc\aD_^]@[ZYXW:8TMLQ42NM0K-CBG*(DC&A#98=~|:9z7w/.3tr0/p-m%$)jh&ge#db~a_{^\x[YXXmrqpSRmlkjchKfedGbaC_^A\>TSX;9UT75QJIN1/KJ-+G@?D'%A@#!=65:{y7xv4us1rp.om+lj('&gf#"!~}v_]]\wvutsrkpSnmlOjihJJ_dcFaCYX]@>Z=;WV9T6LKP31M0.--BGF)D&<;@#!=~|:{y7xv4us1rpoo&+*)ji&%$#"!x}`{zy\ZpotWUTTinmPNjcbgJHdGEaDB^A?>>SXW:8TMLQ42N1/K.,H+)E(&%%:?>=~}:987654-trrq.-,+*)('~%f#"!b}|{]]rwvYWslkpSQPPejiLgI_^cFD`CA]@>Z=;::OTS6Q3IHM0.J-+G*(D'%A$">=<}|98765432+0q.-,+*j"'&%$dzcx}|uzyrwZutsrUponPPeMMbgfeHGbaZCAA@[ZYRW:UTSR5PONML/-IBAF)'C&$##8=<}{9216wu3tr0qo-nl*ki'hf$ec!b`__tyxwZYtsrkpSnmlkNihgII^cbE`BXW\?=Y<:VU8S5KJO20L/-I,*F)'C&$@#!=~|:9z7w/.321rq.-,+$kiih%$#"!x}`{zyx[vuWsVTSShmlOMibafIGFF[`_B@\UTY<:VU8S5KJO20L/-I,*F)'C&$@#!~~5:98yx54321*/p-,+*k('&ff{ccx}|{^]xwvutsrqjSnmlkjLbgfedF\EZ_^]V[TY<::9NS6QPON1LK-I,*FE(C%;:?"~}}498y6v.-2sq/pn,mk)jh&ge#db~a_^^sxwvYXmrUponmPkjLhKIHH]baDB^WV[><X;9U86R53O20L/-I,*FED'&A:#!!~;:38y65vt,+qq(-,+lk('~%f#"cawv{^\x[YuXVrUSoRPOOdihKfH^]bEC_B@\?=<<QVU86RKJO20LKJ-,GFE>'%%$?>=<5:{87x54t21r/o'&+lj('h%e{z!b`|{^\xqpuXVrUSoRPlOMiLJfIGcFDCCX]\[>=XWVUNS6443NMLKJC,GFE(CB$@#!=~|{{276w4t,+0qo-nl*)j'g}|#db~a_{^\xwZuWmlqpoRQlkjihaJHHGba`_^]V[>YXW:UTSRQ42NGFK.,HG*E'=<A$">!};:{y70/4us10qo-&%*ki'hf$ec!b`|_]y\ZvutWVqponmlejMhgJedcEEZ_^A\>TSX;9UT7R4JIN1/KJ-H*@?D'%$$9>=~;{327xv4us1rp.om+lj(ig%fd"!~a`{zyxwvunWUUTonmlkjihafIdcbE`_A]\?=YRQV9766KPO2M/EDI,*F)'C&$@#!=~|:{y7xv4usrr).-,ml)('&%$#"y~a|{zyxZputsrTjShmlkdibgJedcbE`_^@@U==RWVU87L5332MFK.IHGF)DC%A$">=~;{327xv4us10q.n&%*ki'hf$ec!b`|_]y\ZvutWVqjoRmlkjMhgIHH]baDB^WV[><;;PUT75QJIN1/K.,H+)E(&B%#?"~<}{987xw43,sqqp-,+$)j'&%f#"!aav{z]xZpotWUqTRnmPkMcbgJHdGEaDB^A?[><X;9U86R5322GLKJ-,GFE>C&A@#>=<;:{y70/4us10qo-&%*ki'hf$ec!~a|^tsx[YuXVUUjonQOkdchgfIHcba`YB]\[>YX:99NSR5P2HGL/-IH+)E>=B%#?"~<}{9zx6wu3tr0qo-nlkk"'&%fe"!~}|{t][[ZutsrqpohmPkjiLgfHdGEa`C^@VUZ=;WV9T6LKP31ML/J,BAF)'C&$@#!=~|:{y7xvuu,10/po,+*)('&}$e"!~a|{zyx[YunmrUSoRPlkNLha`eHFbaDB^WV[><XW:8TMLQ42N1/K.,H+)E(&B%#?>=~}:9876543,s0/.-,l$)('&f|ez!~w|{ty\ZZYnsVqpoRmlkMMbgfIdF\[`CA]@>ZY<W9ONS64P3100EJI,G)?>C&$@#!=~|:{y7xv4usrr).-,ml#(i&%$e"!a}`^z][wZXtWUqpSQmfejMKgJHdGEaDB^A?>>SXWV98SL5332MLEJ-HGF)DCBA@#!=65:{y7xv4us1rp.om+*k(h~}$ec!b`|_]y\ZvYWsrqTSnmfkNLLKfed]Fa`_B]\>ZY<:VONS64P31M0.J-+G*(D'%A$">!};|zyy0543ts0/.'nllk('&%|#d!~}`{zy[[putWrTjinQONNchgJeG]\aDBAAV[Z=;WPOT75Q42N1/KJ-H*@?D'%A$">!};:{8x0/432sr/.-,%*kiih%$#"!xa|{z]xwvutWUqjinQOkNLKK`edGEaZY^A?[Z=X:POT7544INM0K-CBG*(DC&A#98=~|:{y7xv4usrr).-,ml)('&%|eccb}|{zyxqvYtsrUpoQmPNMMbgfIGc\[`CA@@UZY<W9ONS64P31M0.--BGF)'C<;@#!=~|:{y7xv4us10/po,+*)('~%fddc~}|{zyxqZutsVqpRnmPkMcbgJHdGEa`C^@VUZ=;WV9T6LKP31M0.J-+G*(D'%A$"!!6;:9zy6543210)pnnm*)('&%$#z!b}|{^yxZvuXsUkjoRPlkNiKa`eHFbECBBW\[><XQPU86RQ4O1GFK.,H+)E(&B%#""7<;:{z76543210).o,+*)(h~%$#"bxav{zyrwpuXsrqTonPlkNiKa`eHFbEC_B@\?=Y<:V97S64P31M0.--BGFE('<%##"=6;|987x54t2sq/pn,mk)(ig%|{"ca}|_z\rqvYWsVTSShmlOMibafIGcFD`CA]@>Z=;WVU87RKP3NML/JI+GF)D&<;@#!=~|:9z7w/.3tr0qo-nl*ki'hf$ec!b`|{z]\wvoXVVUponglOjiLgfHdcFaCYX]@>Z=;WV9T6LKP31M0.J-+G*(D'%A$">!};:9zy654-2s0/p-,+kk"'&g$dzy~}|_^yxwvoXVVUponmlejMhgfIG]\aDB^A?[><XW:U7MLQ42N1/..CHG*E'=<A$">!};|z8yw5vt210qp-,+*)"'h%$#d!~`|{^\xqpuXVrUSoRPlkNLha`eHFbaDB^WV[><XW:U7MLQ42N1/K.,H+)E(&BA@#"=<;:981xvvu210/.-,%*k('h%$d"!b}_uty\ZvYWsrUpRhglOMLLafeHcE[Z_B@??TYX;V8NMR53O20LK.I+A@E(&B%#?>!<|43876wv3210/.-&+l)('hf|{ccx}|{^]xwvutsrqjSnmlkjLbgfedF\EZ_^]V[TY<::9NS6QP3NMLKJ-+G@?D'%A$">=~;{327xvuu,10qo-&%*ki'hf$ec!~a|^tsx[YXXmrqTRngfkNLKK`edGEaZY^]\?>SX;998SRKP3NM0.DC++@EDC&%@?8=~;:9z765uu,10qo-&%*)(ih%$#zcaa`{zyxqvYtsVTjinQOkjMhJ`_dGEa`C^@VUZ=;W:8T75Q42N1/KJ-H*@?D'%A$"!!6;:{8x0/4us10/po,+*)"'h%$#dbxw__tyxwZYtsrqpiRPPOjihgfe^cFa`C^]\[Z=;WPOT75QP3N0FEJ-+**?DC&$@98=~|:{y7xv4us1rp.-n+k#"'hf$ecbbw|{^\xqpuXVUUjonmPOjihgfe^cFDDC^]\[ZYXWPU8SR53IH00EJIH+*EDCBA@?>7<}:9876v.3210p(o&+$)('~%f#"c~}|^^sxwZXtmlqTRnQONNchgJeG]\aDB^]@[=SRW:877LQP31MFEJ-+G*(D'%A$">!};|zyy0543ts*q.-nl$#ii~%$#dc~}v_]]\wvunsVqpSnmlNNchgJHd]\a`_BA\[ZSX;998SRQPOHM0KJ-+A@((=BA@#"=<;:927x54u210pp',+lj(!~%$#dc~}|{zyr[vuXVlkSShmlkNMhgfedcbaZC^]\[Z<RWVUT6L5JONMFKDI,**)>C&A@#!76;|z8yw54u2r*).om+lj(ig%fd"ca}`^z][wZXtsrUTinQOONibKfedGE[Z_B@\?=Y<:99NSR5P2HGL/-IH+F(>=B%#?>!<|438yw5vt2sq/pnmm$)('hg${dbba|{ty\wvYtsrqpSQmfeMMbgfeHGbaZ_B]\[>YX:VU86RKJO20L/-I,*FE(&B;:?"~<;|z8105vt21r/o'&+lj(ig%fd"ca}`^zyx[ZutslUSSRmlkjchKfedGE[ZBBW\[Z=<WVUTSL5332MLKJIHAF)DCB%@?!=~|:{y7xv4us10qo-&%*ki'&g$dzy~a_{^\x[YuXVrUSonmPOjihgfe^cFa`C^]\>>SXW:U7MLQPO21LKJIHGF?(&&%@?>=<;:927x543tr*).om+lj(ig%$e"bxw|_]y\ZvYWsVTpSQmPNjMKgfeHGba`_^]\[TY<WVUTS5KPONM/E.CHGF?D=B%@?"=<;:9zx6/.3tr0/pn,%$)jh&ge#db~}`{]srwZXtWUqpoRQfOMMLg`eHcbECYX]@>Z=;W:8T75Q4211FKJ-H*@?D'%A$">!}||387xv4-,1rp.-,ml)"'h%$e"!a}|_z\rqvYWsrUpRhglOMihKIe^]bEC_B@\?=Y<:V97S64P3100EJIH+*ED=&$$#>=<5:{876wu-,1rp.-n+k#"'hf$ec!~a_{tsx[YuXVrUSoRPlOMiLJfIGFF[`_^A@[ZYRW:UTS6QPONM0.JCBG*(DC&A#98=~|:{y7xv4us1rp.om+lj(ig%fd"!~a`{zyxqZXXWrqponglOjiLgfeGG\a`C^@VUZ=;WV9T6LKP31ML/J,BAF)'&&;@?"=}549zx6wu3tr0qo-nl*ki'hf$#"cb}|{zyrwZutsVqpRnQOkjMhJ`_dGEa`C^@VUZ=;W:8T75Q42N1/K.,H+)EDC&%@?>=<;4{yyx543210/(-n+*k('&%$ec!xw|_]yx[YunmrUSoRPlOMihKfH^]bEC_B@\[Z=<WVUTSRQJO2ML/-CBG*(D'%A$">!};|zyy054u2r*).om+lj(igff{"!b`|uty\ZvutWVqponmlkjcLgfedcE[`_^]?U>SXWPUTMR5332GL/JI,GF(DC&A#98=~|:9z7w/.3tr0/pn,%$)jh&ge#db~a_{^\x[YuXVUUjonmPOdiLJJId]Fa`_B]\>ZY<:VONS64P31M0.--BGF)D&<;@#!=~|:{y7xv4us1rpoo&+*)ji&}fddc~}v{^yxwZutVUUjonQlNdchKIHH]baDB^WV[><XW:8TMLQ42NM0.JCBG*(D'%A$">!};|z8yw543ts0/(-n+*k('&ff{"!b}_uty\ZvuXsUkjoRPlkNiKa`eHFEEZ_^A\>TSX;9U86R53O20L/-I,*F)'CBA$#>=<5|zzy6543,1r/.-n+*)ii~%$e"bxw|_]yx[vXnmrUSRRglkNiKa`eHFbECBBW\[>Y;QPU86R53O20L/-I,*F)'&&;@?>!~;:9816w43t10/.-nl*#"'hf$#db~wv{^\x[YuXVrqToQgfkNLhKIedcFE`_^]\U><<;VUTSRQJO2ML/-CBG*(D'%A$">!};|zyy054u2r*).om+lj(igff{"!b`|uty\ZvutWVqponmlejMhgJedFbaD_AWV[><XW:U7MLQ42NM0.JCBG*(D'%A$">!};|z8yw5vtss*/.-nm*)('&%${dbba|{zyxwvunsVqpoRPfejMKgfIdF\[`CA]\?Z<RQV97S64P31M0.J-+G*(D'%A$"!!6;:9zy6543210/(-n+*)('g}$#"!aw`uzyxqvotWrqTonPlkNiKa`eHFbEC_^A\>TSX;9U86R53O20L/-I,*F)'CBA$#8!<;|z21ww.321rq.-&mkkj'&%|#d!~}`{zy[[putWUqjinQOkNLhgJeG]\aDB^A?[><X;9U86R53O20L/-,,AFED'&A@?8=~;:{y105vt2sq/.o,l$#(ig%fd"ca}`^z][wZXtWUqTRnmlONihgf_HFFE`_^]\UZ=XWV97MLQ42N1/KJ-+G@?D'%$$9>=~;{327xvuu,10qo-&%*ki'hf$ec!b`|_]y\ZvutWVqponmfkNihgfIdcbDDYAAV[ZY<;VUTSRQPOH1LKJIH*@EDCB$:#8=<;4927xvvu,1r/.-,m*)i'hf$ec!~a|^tsx[YuXVrqToQgfkNLhKIeHFbEC_B@\?=Y<:VUT76KP3NMLK.IH*FE(C%;:?"~<}{98yw5.-2sq/pn,mk)jh&ge#db~a_{zy\[voXsrqpSnmlNNcKK`edcFE`_^W@>>=XWVUNS6QPON1/EDI,*F)'&&;@?"=}549zxww.32s0p(',mk)jh&ge#db~a_{^\x[YXXmrqpSRmlkjchKfedcFa`B^A?>>SXW:8TMLQ42N1/K.,H+)E(&B%#?"~<;:{z76543,sqqp-,+*)(!&g$#d!~}|{^\xqpuXVrqTRngfkNLhKIeHFbaD_AWV[><X;988MRQ42NGFKJI,+FEDCBA:?"~~}:9876543,1r/.-n+*j(igff{"!b}_uty\ZvYWsrUpRhglOMiLJfeHcE[Z_B@\?=Y<:V97S64PON10KJIHGFED=B%@?>=<|49876v.u,10).-&+l)('h%$d"ca}|_]yrqvYWsrUpRhglOMihKIe^]bEC_B@\?=Y<:V97S6433HMLK.-B+))(C<A$?>=~;:987xv4-,1rp.omll#('h%e{z!b`|_]yx[vXnmrUSonQlNdchKIeHFbEC_B@??TYXW:9TMR5PO2ML.JI,*F?>C&$@#!=~|:{y7xv4us1rp.om+ljii~%$#dc~}v_]]\wvunsVqponQlkMiLJfeHcE[Z_B@\?=YX;9UNMR53O20L/-I,*F)'C&$@?>!~;:927xvvu210/.',m*)('h%$d"ca``uzy\ZvonsVTSShmlOjLbafIGcFD`CA]@>Z=;W:8T75QPO21LKJIHAF)''&A@?>=<;49z76w432rr).-n+k#"'hf$#d!awv{^\x[YutWrTjinQONNchgJeG]\aDBAAV[Z=X:POT75Q42NM0K-CBG*(''<A@?"!<;:9876/4u210/.n&+*)(h~g|#"!x}v{^yxwvYtsUqTRnQOkjMKg`_dGEaDB^A?[><X;9U86R5322GLKJ-,AF)DC&A@">!};|z8ywvv-21rp.'&+lj('hf${z!b`|_]y\ZvYWsVTSShmlkNMhg`eHFFE`_^]V[>YXWV9TS5Q42N1/..CHG*E'=<A$">!};|z8yw5vt2sq/pn,+*kj'&%${"caa`{zyxwvotWrqTonPlOMiLJfIGcFD`_B]?UTY<:VU8S5KJO20L/-I,*F)'C&$##8=<}:z216wu321rq.-,+*)"'hffe"!~}|{zyrwZutWrqponQOkdchKIeHFbEC_^A\>TSX;988MRQ42NGFK.,H+)E(&B%#?"~<;:{z76543210).o,+*)(h~%$#"bxav{zyrwpuXsrUponmlOMibafIGcFD`CA]\?Z<RQV97S6433HML/J,BAF)'CBA$#>7<}{{z765.3t10q.-m+lj('h%e{z!b`|{^y[qpuXVrUSRRglkNiKa`eHFEEZ_^A?[TSX;9U86R53O20L/-IHG*)DCB;@#>=~;:z8yw5vt2sq/pn,mk)(ig%|{"ca}`^z][wZXtWUTTinmlONihgfe^cFa`C^]?[><;;PUT7R4JIN1/K.,H+)E(&B%#?"~<}{9zx654ut10/.-,+$)j'&%$#cy~}|{]s\qputsrkpSQQPejMhgJedcEEZ_^A?[TSX;988MRQ42NGFK.,HG*E'=<A$">!};|z87x5u-,1rp.om+lj(ig%$#dcx}`^^]xwpuXsrUpoQmlOjLbafIGcbE`BXW\?=Y<:V97S64P31M0.J-+G*(DCB%$?>7<}{{z7654-2s0/.-n+*j('h%e{z!b`__tyx[vXnmrUSoRPlOMiLJfIGcFD`CA]@>==RWVU87RQPOHM0KJIH+FE'C&$##8=<}{9216wu3tr0qo-nl*ki'hf$ec!b`|_]yxwZYtsrqpohmPkjMKa`eHFbaDB^WV[><XW:8TMLQ42N1/K.,++@ED'B$:9>!}||387xv4-,1rpoo&+*ki'~}$#"cb}|{zyxwpYWWVqponmlkjchKfeHcbaCCX]\?Z<RQVUT76QPONMLKJCH+FEDCB$:?>=<|4{2765.3,1rppo&m*)(ig}|#db~a_{^\xwZuWmlqTRnQOkNLKK`edcFEZCAA@[TY<WVU8SR4P31ML/-IBAF)'&&;@?"~<549zx65vt2+*/pnmm$)(i&f|{"ca}`^z][wZXtWUqpoRQlejMKKJed]Fa`_B]\[ZY<:VONS64P31M0.--BGF)D&<;@#!=<}:z216wu32s0p(',mk)jh&ge#dbaav{zy\[vunWUUTonmfkNihgJedFbEC_B@\?=<<QVU86RKJO20LK.,HA@E(&BA$?!76;|z8yw5vt2sq/pn,+*kj'&%|#dbba|{zyr[vutWrqpRRglkNiKa`eHFbEC_^A\>TSX;9U8655JON1L.DCH+)E(&B%#?"~<}{9zxww.321rq.-,+$kiih%$#"!x}`{zy\wvXtsVTpihmPNjiLgI_^cFD`CA]@>Z=;::OTS64PIHM0.J-+G*(D'%A@#>~65:{yxx/432sr/.-,+$)jhhg$#"!~}v_zyx[vutVVkpoRmOediLJfeHcE[Z_B@\?=Y<:V9766KPO2M/EDI,*F)'C&$@#!=<}{921654ut10/.-,%ljji&%$#"!~w|_zyx[vuWsrUSohglOMiLJfIGcFD`CA]@>Z=;W:8T7544INML/.IHGFEDC<A$?>=~|438yw54u2r*).om+lj('h%e{z!b`|_]\\qvuXVrkjoRPlOMiLJfIGcFDCCX]\[>=XWVUTSRQJ3NMLKJ,BGFED&<%:?>=6;49zxxw.3t10/p-,l*)jh&}|#db~a_{z][wpotWUqTRQQfkjMhJ`_dGEaDB^A?[><X;9UTS65JO2MLK.IH*F)'&&;@?"~<549zxww.32s0p(',mk)jh&geddy~}`^zsrwZXtWUqTRnQOkNLhgfIHc\ECCB]\UZ=XWV9TS5Q42N1/KJ-H*@?D'%A$">=~;{327xvuu,10qo-&%kk"'&%fe"!x}`{zy\wvXtWUqpSnPfejMKgJHdGEDDY^]@[=SRW:8T75Q42N1/..CHGF)(CBA:#!!~;:9816w432s0/o-,m*j"!&ge#db~a_{^\x[YuXVrUSoRPlOMLLafedGFa`_^W\?ZYX;VU7S64P3100EJI,*F?>C&$@#!=~|{{276wu3,+0qo-nl*ki'hf$ec!~}`_zyxwvoXVVUponmlkdiLgfeHF\[`CA]@>Z=;WV9T6LKP3100EJI,G)?>C&$@#!=~|:{y7xv4us10/po,+*)('~%f#"!b`vuz][wvYtVlkpSQmPNjMKgfIGc\[`CA]@>Z=;W:8T75Q4211FKJI,+FEDCBA@9"~~}:9876543,1r/.-n+*)ii~%$ec!xw|_]yx[vXnmrUSRRglkNiKa`eHFbaD_AWV[><X;9U86R53O20L/-I,*FED'&A@?>=<;:38y65432r*/.-,l$k"'&}$#z!b}|{^yxwYYnsrUpRhglOMiLJfIGcbE`BXW\?=Y<:V97S64P31M0.J-+**?DCB%$9"~~}:38y654u21q/.om+$#(ig%fd"ca}`^z][wZXtWUqTRnQONNchgfIHc\aD_^]@[Z<X;988MRQ42NGFK.,++@ED'%A:9>!};|z87x5u-,1rp.om+lj(igff{"!~a`{zs\ZZYtsrkpSnmlOjihJJ_dcFD`YX]@>ZY<:VONS6433HML/J,BAF)'&&;@?"=}549zx6wu3tr0qo-nl*ki'hfeez!~}`_zyxqvYtsrUpoQPPejiLgI_^cFD`_B]?UTY<:V9766KPO2M/EDI,*))>CB%@"87<}{9zx6wu3tr0/p-m%$)('hg$#"!xa__^yxwvunsVqpoRmlNjiLgI_^cFDCCX]\?=YRQV9766KPO20LEDI,*FE(&B;:?"~<}{9zx6wu3trqq(-,mk)"!&%$ed!~}|{ty\wvuXsrTpSQmlOjLbafIGcbE`BXW\?=YX;V8NMR5322GLK.I+A@E(&B%#?"~<}{98yw5.-210qp-,+*)(!hffe"!~}|{zsx[vutWrqSonQlNdchKIeHFbEC_B@\?=Y<:V97S64P3100EJIH+*EDCBA@?8=~;:9z76v4us1rp.-nl*#"'hf$ec!b`|{^\xqpuXVUUjonQOkdchKIeHFbEC_^A\>TSX;9U8655JONM0/JIHGFEDC<%@?>=<|49876v.u,10/(-&+ljji~%f#"!b}|^]]rwvYtVlkpSQmPNjMKgfIdF\[`CA@@UZY<W9ONS64P31M0.--BGFE('<A$?>=~;:9yy054us1*).om+lj('hf${z!b`|_]\\qvuXVrkjoRPlOMiLJfIGcFD`CA@@UZYX;:UN7554ONGL/JIH+FE'C&$@?"=}549zxww.32sq/(',mk)jh&ge#db~a_{^\[[putsVUpohmPkjiLgfHdcFaCYX]@>Z=;WV97SLKP3100EJI,G)?>C&$@#!=~|:{y7xv4us1rp.-,ml)('~geed!~}|uz]xwZutsrqTRngfkNLhgJHd]\aDB^A?[><XW:U7MLQ42N1/KJI,+FEDC<A$?>!}549zx6wu3tr0qo-nlkk"'&g$dzy~a_{^\x[YXXmrqTRngfkNLhgfIHcba`_XA??>YXWVUTMR5PON1LK-I,*F)'C&$@?"=}549zx65vt2+*/pn,mk)(i&f|{"ca}`^z][wZXtWUTTinmlONihgfed]bE`_B]\[==RWV9T6LKPON10KJIHGFE>'%%$?>=<;:9816w432s0/o-,mk)"!&ge#db~a_{z][wpotWUqTRnQOkNLhKIeHFba`CB]\[ZYXWVOT7RQPON0FKJIH*@)>CBA:?8=~;:{87654us1*).om+*ki'~}$ec!b`|_]yx[vXnmrUSoRPlkjMLaJHHGb[`C^]@>TSX;9U86R53O20L/-,,AFE(C%;:?"~<}{9zxww.32sq/(',mk)('hg${"caa`{zs\wvuXsrTSShmlOjLbafIGcFD`CA]\?Z<RQV97S64P31M0.J-+G*(''<A@?"!<;4{yyx543,1r/.o,+*jj!&%f#cyx}|{^]xwvotWrqpSnmOkNLhKIHH]baD_AWV[><;;PUT75QJIN1/K.,H+)E(&B%#?"~<;:{z7654-trrq.-,+*#(i&%f#"!~}`^zsrwZXtsVTpihmPNjMKgJHdcFaCYX]@>Z=;WVU87RQPONGL/JI,*@?D'%A$">!};|z8ywvv-21r/o'&+lj(ig%fdccx}|_]yrqvYWsrqTSnmlkjibKIIHcba`_^]V[>YXW:UT6R53O20LK.,HA@E(&%%:?>!<|438yw5vt2sq/pn,mk)jhgg|#"!ba|{zyxwvotWrqTonmOOdihKfH^]ba`CB]\[ZYXWVO8SRQPO1GLKJI+A*?DC<A@9>!}}|38y654u210pp',+l)i!~%fd"!b}_uty\ZvYWsVTpSQmPNjMKgJHdGEaDBAAV[ZY<;PU8SRQP3NM/KJ-H*@?D'%A$">!};|z8yw5vt2sq/pnmm$)('hg$#"yb``_zyxwpuXsrqpSnmOkjMKg`_dGEaDBAAV[Z=;WPOT7544INM0K-CBG*(D'%A$">!};|z8yw5vtss*/.-nm*)('~%f#"!~a|{]yx[vXnmrUSoRPlkNLha`eHFbEC_B@\?=Y<:V97S64PON10KJIHG@)DCBA$?>=}}4zz1654ut10/.-,+$kiih%$#"!~}|uz]xwvuXVlkpSQmPNMMbgfIdF\[`CA@@UZY<W9ONS64P31M0.J-+G*(D'%A$"!!6;:9zy6543210/(-n+*)('g}$#"!aw`uzyxqvotWrqpoRmlNjMKJJ_dcFD`YX]@>Z=;W:8T75Q42N1/K.,HGF)(=&$$#>7<}:9z76543tr0)(-nl*)jh&}|#db~a_{^\xwZuWmlqTRnQOkjiLKf_dGbaDBXW\?=Y<:V97S64P3100EJI,G)?>C&$@#!=~|{{276wu3,+0qo-,+lk('~geed!~}v{^yx[vutVVkSShmlkNMhgf_dGbaD_^]??T<<QVUT76QPONG0..-HGFED=B%@?>!<;:98yw5.-2sq/.om+$#(ig%$e"bxw|_]y\ZvuXVrkjoRPlOMiLJfIGcFD`CA]\[>=XWVUTMR5332MLKJIHA*(('BA@?>=<5:{876wu-,rr).-,ml)('&%$#z!b``_zyxwvutslUponQlkMiLJfeHcE[Z_B@\?=<<QVU8S5KJO20L/-I,*F)'C&$@#!~~5:98yx543210/.'n+*)('g}$#"!aw`uzyxqvotWUUTinQlkNihgII^cbE`BXW\[Z=<QV9776QJ3NML/-CBG*(''<A@#>~65:{y7xv4us1rp.om+lj(ig%fd"ca``uzyx[ZunWUUTonglOjiLgfedcFD`YX]@>ZY<:VONS64P31M0.JI,G)?>C&$@#!=<;|{8705v32sq)(-nl*ki'hf$ec!b`__tyx[vXnmrUSoRPlOMLLafeHFb[Z_B@\[Z=<WVUN7554ONMLEJ-HGF)DCBA@#!=65:{y76wu3,+0qo-,m*j"!&ge#db~}`^zsrwZXtWUqTRnQOkNLhKIedcFE`_^]V[><<;VUTSRK4ON1LKJ,HG*)DCBA@9"~~}:98765.3t10/pn&%kk"'&%fe"!~}|{ty\wvuXsrTpSQmPNjiLgI_^cFD`_B]?UTY<:VU86RKJO20L/-I,*F)'C&$##8=<;|{8765432+rppo,+*)('&%|#d!~a|{z\\qvuXsUkjonmPOjihgfedc\aD_^]\[=SXWVU7M6KPINMLEJ-++*?(CBA$?>~<}{9zx6wu32s0p(',mk)jh&ge#"c~`vuz][wZXtWUqTRnmPkMcbgJHGG\a`_BAV?==<WPU8SR5PONML/-IBAF)'CB%#?87<}{9zx6wu32s0p(',mk)jh&%$ed!x}`{z][qpuXVrUSoRPlOMiLJII^cbE`BXW\?=Y<:V9766KPO20LEDI,*FED'&A@9"~~}:9816w432sq)(-nl*)jh&}|#db~a_{^\x[YuXVrUSoRPlOMiLJfedGFa`_X]@[Z=XWV88MRQ4O1GFKJI,+FEDC<%##"=<;:927x543tr*).om+lj(ig%fd"!b`|uty\ZvYWsVTpSQmPNjMKgfeHGba`_^W\?ZYX;9ONS64P31ML/J,BAF)'C&$@#!=~|:{y7xv4us1rp.-,ml)('&%${dbba|{zyxwvotWrqTonmlkNLha`HH]ba`CB]\[ZYXWPU8SRQ4ON0//DIH+F(>=B%#?"~<}{98y6v.-2sq/pn,+lj(!~%fd"ca}`^z][wZXtsrUTonmlkjihaJedcbaCY^]\[=S<QVUTMRKP3110EJ-HG*EDC%%:?>!<|43876wv-2sqqp-&m*)(ig}|#db~}`{]srwZXtWUqTRnQOkjMhJ`_dGEaDB^A?[><XW:U7MLQPO21LE.,,+FE>C&A@#>=<;:{y70/4us10qo-&%*ki'hf$ec!~a|^tsx[YuXVrqpSRmlejMhgJH^]bEC_B@\?=Y<:V9766KPO2M/EDI,*F)'C&$##8=<}{9216wu321rq.-,%ljji&%$#z!b}|{^yxwvuXVrkjoRPlkNLha`eHFbaD_AWV[><X;9UT75QJIN1/K.,H+)E(&B%#?"~<;:{z7654-2sqqp-,+*)"iggf#"!~}|uz]xwvYWmlTTinmlONihgfed]bE`_^A\[=<<QVU8S5KJO20L/-I,*F)'C&$@?"=}549zx65v3s+*/pn,+l)i!~%fd"!~a`{zyxwvunWUUTonmlkjihafIdcFa`_AAV[Z=X:POTSR54ONMLKJIHAF)DCBA@"8=<;:z2y0543,1*/pnnm$k('&g$#c!b`|_]y\ZvYWsrUpRhglOMihKfH^]bEC_B@\?=Y<:VU8S5KJO20//DIHG*)>'%%$?8=~;:{87654us1*).om+*ki'~}$ec!b`|_]yx[vXnmrUSoRPlkjMLg`eHcbECYX]@>Z=;W:8T75Q4211FKJ-H*@?D'%A$">!}||387xv4-,1rp.-,ml)(!hffe"!~w|_zyx[vutsrUSohglOMihKfH^]bEC_B@\?=<<QVU86RKJO20L/-I,*F)'C&$@#!=<;|{876/4u210q.-m+*k(h~}$ec!b`|{^y[qpuXVrUSonQOkdchKIeHFbEC_B@\?=<<QVUT76QPONG0..-HGFED=B%@?"=<;{{276w4t,+0/.on+*)('~%f#"!b}|^]]rwvYWslkpSQmPNjMKgJHdcFaCYX]@>Z=;W:8T75QP31MFEJIH+*EDCBA@9"~~}:987654-2s0/.o,+*jj!&%f#cyx}`^]]rwvYtVlkpSQmPNjMKgfIdF\[`CA@@UZY<W9ONS64P31M0.J-+**?DCB%$?>=<;:927x543t10p.om+lj(igff{"!b`|uty\ZYYnsrUSohglOMiLJfIGcFD`CA]\[>=XWVUTSRQJ3NMLKJ,BGFED&<%:?>7<;49zxxw.3t10q.-,ll#ii~%$#dcx}`{zy\wvXtWUqTRnQOkNLhKIeHFbECBBW\[><XQPU86R53O20LK.I+A@E(&BA$?!76;|z876wv3,sqqp-,%*k('&g$#c!b`__tyx[vXnmrUSRRglkNLha`eHFEEZ_^A?[TSX;988MRQ4O1GFK.,H+)E(&B%#?"~<;:{z76/4u21rp.-,+*kj'&%|eccb}|{zsx[vutWUkjRRglkjMLgfed]bE`_B]\[ZY<:VONS64PO20LEDI,*F)'C&$@?"=}549zx6wutt+0/pn,%$)('hg$#"!~w`^^]xwvutslqTonQOejihgJIdcba`_X]@[Z=;QP88MRQP32MLKJIHG@)''&A@?>=<;:38y654u210pp',+lj(!~%fd"ca}|_z\rqvYWVVkpoRmOediLJfIGFF[`_B@\UTY<:V97S64P31M0.--BGFE('BA@?>=<;49z76543s+0/.-m%l#('&}${"c~}`^tsx[YutWrTjinQOkNLKK`edGbDZY^A?[><X;9U86R53O20L/-IHG*)>'%%$?8=~;:9z76v43t1q)(-nl*)j'g}|#db~a_{z]xZpotWUTTinmPkMcbgJHdGEa`C^@VUZYX;:UNS6QP3NMLKJ-+G@?D'%A@#!=65:{y7xv4us10q.n&%*ki'hf$#"cb}|u^\\[vutmrUpoRPfejMKgJHdGEaDB^A?>>SXW:U7MLQ42N1/K.,++@ED'%A:9>!};:9zy654-2s0/.o,+*)(ig%|{"ca}|_]yrqvYWsrUpRhglOMiLJfeHFb[Z_B@\?=Y<:V97S64P31MLK.-HGFE>'BA$">=<;:{z76543,1r/.-nl$#ii~%$#dc~}|{zyr[YYXsrqponmfkNihgJedFbEC_^A?[TSX;9UT7R4JIN1/..CHG*E'=<A$">!};|z8yw5vt2sq/pn,+*kj'&%$#"!x}`{z]xwvXXmrqToQgfkjiLKfedcba`_XA\[ZYX:PUTSR4J3HMLKDIBG*(('<A$?>=~;:z87x5u-,1rp.om+*k(h~}$ec!~a|^tsx[YuXVrUSonQlNdchgfIH]bE`_B]\[ZY<:VONS64PO20LEDI,*F)'C&$@?"=}549zx6wu321rq.'nllk('~%f#"cawv{^\x[YuXVrUSoRPOOdihKfH^]bEC_B@\?=<<QVU86RKJO20LKJ-,GF?D'BA@#>=<;:{y70/4us10qo-&%*ki'&g$dzy~a_{^\xwZXtmlqTRnQOkNLhKIeHFbEC_^]@?ZYXQ:UT75QPONM0/JIHG@E(CBA$"87}}4987xw43210)pnnm*)('&%|#d!~a|{]\\qvuXVrkjoRPlOMiLJfeHcE[Z_B@\?=<<QVU86RKJONM0/JIHGFE>C&$$#>=<;:981x54us+0/.-nm*)('&%${dbba|{zyxwvunsVqpSQgfNNchgfIHcba`_^]\UZ=XWVUT6LQPON0F/DIHAFE>C&A@?"=<|{{276w4t,+0qo-nlkk"'&g$dzy~a_{z]xZpotWUqpSnPfejMKgJHdGEaDB^]\?>S<::9TMR5PO20FEJ-+GF)D&<;@#!=~|{{276w4t,+0qo-nl*ki'hf$ec!b`|_]yxwZYtmrUSSRmleNihgJedFbEC_^A?[TSX;9UT7R4JIN1/K.,H+)E(&B%#?"~<;|9y10vv-210qp-,%ljji&%${"c~}`{zyxwZXtmlqTRnmPNjcbgJHdGEaDB^]@[=SRW:8T75QPO21LKJCH+FE(&<;@#!=~|:{y7xv4usrr).-n+k#"'hf$ec!b`__tyx[YunmrUSonmPOjihg`IGGFa`_^]V[>YXW:UTSRQ42NGFK.,HG*(D=<A$">=~;{327xv4us10qo-&%*ki'hf$ec!b`|_]y\ZvutWVqponmfkNLLKfedcbaZCAA@[ZYXWVUNS6QPO20FE--BGFE('BA@?>=<5:{87x54tss*/.om+$#(ig%fd"ca}|_z\rqvYWsVTSShmlOMibafedGFa`_^]\[ZS<WVUTS5KPONM/E.CHGF?D=B%##"7<}:987x54t21r/o'&+lj(ig%$e"bxw|_]yxwZYnsVqpSQgfNNchgfIHc\ECCB]\UZ=XWV9TS5Q42N1/K.,HG*E'=<A$">=~;{327xv4us1rp.om+*)ji&%|#d!~a_uty\ZvuXsUkjoRPlOMLLafeHcE[Z_B@\?=Y<:V97S64P31M0.JIH+*EDC<%##"=<;:38y654u21q/pn,mk)(i&f|{"ca}|_z\rqvYWsVTpSQmPNjMKgfIdF\[CCX]\[>=XWVUNS6QPON1LK-I,*FE(&B;:?"~<}{9zx6wu3tr0qo-nlkk"'&%fe"!~}|{zs\ZZYtsrqponmfkNihgfIdcba`CA]VUZ=;W:877LQP31MFEJ-+**?DC&A#98=~|:{y7xv4us1rp.om+ljii~%$#dc~}|{zyxwpuXsrqpoQglkjiKaJ_dcb[`Y^A\[ZY<WV8TS6Q3IHM0.J-+GF)'C<;@#!=~|:{y7xv4us1rp.om+*)ji~g$#"!b}|{]]rZZotsrUTongPNNMhgf_dGba`_B@VUZ=;W:877LQP3N0FEJ-+**?DC&A#98=~|:{y7xv4us1rp.om+ljii~%$#dc~}|uz]xwvuXsrTpSQPPejiLJf_^cFD`CA]@>Z=;W:8T75Q42NML/.IHGF?(&&%@?>=<5:{87x54321rp.'&+lj('hf${z!b`|_]y\ZvuXsUkjoRPlOMihgJIdcba`Y^A\[><RQV97S64P31M0.J-+**?DC&A#98=~|:{y7xvuu,10qo-&%*ki'&%fe"!~}|{t][[ZutsrqpohmPkjMhgfHH]baD_AWV[ZY<;VUTSRQPIN1//.IHGFEDCB;$?>=~;:987xv4-,rr).-,ml)('&%$#"yb}|{zy[qvutsUkTinglkjchKIIH]bE`_B]\[ZY<:VON66KPON10EJ-HGF)DC%$$9>=~|:327xv43t1q)(-nl*ki'&ge#zy~a_{^\x[YuXVrUSoRPlkjMLg`IGGFa`Y^A\[>YXW9UT76QPIN1LKJ-+A@((=BA@#"=<;4{yyx5432+0q.-,m*)i'hf$ec!~a|^tsx[YutWrTjinQOkjMKg`_dGEaDB^A?[><X;988MRQP32MLKJCH+FE(CBA##8=<}:z21654ut10/.-&mkkj'&%$#"y~a|{z]xwYuXVrqTRngfkNLhKIHH]baDB^WV[><X;9UT7R4JIN1/K.,H+)E(&B%#?>=~}:98765.3t10q.-,+*ki'~}$ec!~a_{tsx[YuXVrUSonQlNdchKIeHFba`CB]\[ZYXWP9776QPONMLKJCH+FE(&<;@#!=~|:{y7xv4usrr).-n+k#"'hf$ec!b`__tyx[YunmrUSonmPOjihgfedc\aD_^]\[=SXWVU7M6KPONGLEJ-HGF)DC%A$">=~;{327xv4us1rp.om+lj(ig%fd"ca``uzyx[ZoXVVUpinQlkNihgIedGFaZ_B]\[><RQ99NSRQ43NMF/--,GFE>C&A@?"=<|{{276w4t,+0qo-nl*ki'&g$dzy~a_{^\xwZXtmlqTRnQOkNLhKIeHFba`CB]\[TY<WV9TSR44INM0K-CBGFE('BA@?8!}}|98765.3t10/p-,l*)jh&}|#db~a_{^\[[putWUqjinQOkNLhgJeG]\aDB^A?[><X;9UT7R4JIN1/..CHGF)(CBA@?8=~;:{87654us1*).om+*ki'~}$ec!b`|_]yx[vXnmrUSoRPlkjMLgfedcb[DBBA\[ZYXWVOT7RQ42HGL/-I,*F)'C&$@#!~~5:9z7w/.3tr0qo-nlkk"'&ge#zy~a_{zy\[vutsrqpinQlkNihJfIGFF[`_B@\UTY<:VU8S5KJO20LK.I+A@E(&B%#?"~<}{9zx6wu321rq.-,+*)('~g$#"!~`v{zyxZpYnsrqjohmPkjMKa`HH]ba`CB]V?==<WVOT7RQ42HGL/-I,*))>CB%@"87<}{98y6v.-2sq/.om+$#(ig%fd"ca}`^z][wZXWWlqpoRQlkdiLgfeHcbD`CA]@>Z=;::OTS6Q3IHM0.JI,G)?>C&$@#!=~|:{y76w4t,+0/.on+*)"i&%fd"!~}|_t]xwvutslqTonmPkjLKK`edGbDZY^A?>>SXW:U7MLQ42NM0K-CBG*(DC&A#98=~|{{2765v-2s0/.-n+*)ii~ff{"!~a`u^\\[votWrqpoRmlNMMbgfIGc\[`CA]\?Z<RQV97S64P31M0.J-+G*(D'%A$">!}||3876wv3,1r/.-,m*)i'&g$dzy~a_{^\xwZXtmlqTRnQOkNLhKIeHFbEC_B@\[Z=<WVO8SRQP3NML..C++@EDC&%@?>=6}{{z76543,1r/.-,mk#"'hf$ecbbw|{^y[qpuXVUUjonQlNdchKIeHFbEC_B@\?=Y<:V9766KPON10KJIHG@E(CBA@#>=};|zyy054us1*).om+lj(ig%fd"ca}`^z][wvuXWrqponmfOjiLJfedcbEZC^]\[ZYRW:UTS6QP2N1/KJ-H*@?D'%$$9>=~|:327xv4us10qo-&%*ki'hf$ec!b`|_]y\ZvutWlqTonmlOjihJJ_GG\a`_BAV?==<WPU8SRQP3NM/..CHG*(D=<A$">=~;{327xv4us1rp.om+lj(ig%fd"ca}`^]]rwvuXWrkpSnmlkNihJfeHcE[Z_B@\?=YX;9UNMR53O20L/-I,*F)'C&$@#!=<;|{870w4321r/.-mm$jj!&%$ed!~}|u^\\[vutsrkpSnmlkNLbafIGcFDCCX]\?Z<RQV9766KPO2M/EDI,*F)'C&$@#!=~|:{y7xvuu,10/po,+*)(!&g$#"!b}|^z][ZZotsVTpihmPNjMKgJHdGEaDB^A?[><XWV98SRQPONG0KJ-+GFEDC&;$?>=<;:38y654u21qpp',+lj(!~%fdccx}|_z\rqvYWsVTpSQmPNjMKgJHdGEaDB^]@[=SRW:877LQPO2GL/JIHG*EDC%%:""7<;:{z1xvvu2+0q.-,+l)(hgg|#"ca}vuz][wvYtVlkpSQmPNjMKgJHdGEaDB^A?[><X;988MRQP32MFK.IHGF)DC%A@#>~65:{y7xv43tr0)(-nl*ki'hf$ec!b`|_]y\ZvutWVqpiRmlOMihgfeH]Fa`_^]\UZ=;W:UNSRQP3HM0KJIH+FE'CB%@"87<}{9zxww.32s0p(',mk)jh&ge#db~a_{^\x[YXXmrqpSRgPNNchKIIH]bE`_^]\?ZYX::O77LQPO21FK.IHG*(DCBA@#8!<;:98705v321r/.n,+l)i!~%fdccx}|_]yrqvYWsrUpRhglOMiLJfIGcFD`CA]\?Z<RQ99NSRQ4I2MLKJIH+dd'&s_@?"![|k9EUC54tPPq)(Ln%I)"h3g1B@y~>O;M\[87o#WE2pSh.?,=iu:s&Gc\"~~XjzUgfwd:ss7L533!1}KhIH+@d>P<$$?![6}X9yUCBvQ,1=Mo',I*6"iDVfA@.?`<_M\r8IHXV31So/.lkjvLt`H%F#!DC1|?>gSXuPb'6p4n2mGFEi-yTFcD=%_#"8J<}{Fyx05SRPPa/L-,lH)F43fCAc!aaOu;:xZpH533TCBQzlOMvKgfe$]"D!C^j/>-w+u)O'6%$J\mM}E{,fx@E'=<_$po!6lkjz7wvAR,1a/.^&l$#Yig}|d/yx}=NM:9w%u5m3D0|.@-ewcKgsI7G#n`BA0/.yxeWtb'6pK43lkkEW-,Gdcb&&r_pK7~5|W2UgTR-sba/_^Jl$6F!hV1TAcQP<;;9977uWmEDS0.gfxdv;gsHH6\!`B|0i.xYvvPU7&_5]2ll}ihgHfeRQC&A#^!!}|Y9iVCSuQQPN<L^JJHGFF&V$AcyQw_{t\\J6H5sU1}Bhg?+*L(aJ%dGF!32|j{zT<w*P8'S%oJm[0k.i,g*e(c&a$_"]~[|YzWxUvStQrOpM:JJljFF&V1{@RQ

Try it online!

Krzysztof Szewczyk

Posted 2019-05-20T23:29:56.310

Reputation: 3 819

1

Runic Enchantments, 35 bytes

iiil2="Hi "$5*?S$' $", "$" Runic!"@

Try it online!

Spaces only need to be escaped if you want to use an adjective or noun-phrase as your <I'm!>. Runic splits input on spaces and newlines and as the challenge specified input as either an <adj> or <noun> as single word tokens, I used this feature to avoid parsing and splitting input with code.

Draco18s no longer trusts SE

Posted 2019-05-20T23:29:56.310

Reputation: 3 053

Nice one! Runic is a new language to me. – connectyourcharger – 2019-10-29T20:22:58.150

@connectyourcharger Its my own esolang. I did some interesting things with it (such as utilizing unicode combining characters to perform different behavior), though I want to rebuild the language spec from the ground up, as there's a few failure points that I didn't anticipate. – Draco18s no longer trusts SE – 2019-10-29T20:24:48.517

1

Wren, 37 bytes

Fn.new{|x|"Hi%(x[3..-1]), I'm Wren!"}

Try it online!

Explanation

Fn.new{|x|                          } // New anonymous function
          "Hi                         // The hi section
             %(x[3..-1])              // THe input sliced, without the "I'm"
                        , I'm Wren!"  // THe third part, the remaining of the string

user85052

Posted 2019-05-20T23:29:56.310

Reputation:

1

naz, 122 bytes

2a2x1v7a8m1o3d4m9a1o3d3s1o1x1f5r3x1v2e1o1f0x1x2f0a0x1f0m9a2a4m1o9s3s1o2m9a1o2d3a1o3m8s1o3d4s1o3m9a5a1o9s4s1o9a9a7a1o3d7s1o

Uses a lot of arithmetic instructions to set the register to each of the character values in the dad-joke format.

Works for any input file terminated with the control character STX (U+0002).

Explanation (with 0x instructions removed)

2a2x1v           # Set variable 1 equal to 2
7a8m1o           # Output "H"
3d4m9a1o         # Output "i"
3d3s1o           # Output a space
1x1f5r3x1v2e1o1f # Function 1
                 # Read the 5th byte of input, then remove it from the input
                 # This has the effect of skipping over the self-descriptor's "I'm "
                 # Jump to function 2 if the value of the byte is equal to variable 1
                 # Otherwise, output the byte and jump back to the start of function 1
1x2f0a           # Function 2
                 # Add 0 to the register
1f               # Call function 1
0m9a2a4m1o       # Output ","
9s3s1o           # Output a space
2m9a1o           # Output "I"
2d3a1o           # Output an apostrophe (')
3m8s1o           # Output "m"
3d4s1o           # Output a space
3m9a5a1o         # Output "n"
9s4s1o           # Output "a"
9a9a7a1o         # Output "z"
3d7s1o           # Output "!"

sporeball

Posted 2019-05-20T23:29:56.310

Reputation: 461

0

AutoHotkey, 43 bytes

s := "I'm tired"
MsgBox % "Hi"SubStr(s,4)", I'm AutoHotkey!"

Not sure what's considered an output in AutoHotkey and I guess input string is not counted, so in that case the second line is 43 bytes.

stackzebra

Posted 2019-05-20T23:29:56.310

Reputation: 101

Welcome to the site. Do you really need spaces around the operators? – Post Rock Garf Hunter – 2019-05-21T12:11:45.453

Welcome to PPCG. Note, though, that we don't allow input to be assigned to a pre-defined variable. – Shaggy – 2019-05-21T12:12:39.310

0

Dart, 40 39 bytes

f(s)=>"Hi${s.substring(3)}, I'm Dart!";

Try it online!

Elcan

Posted 2019-05-20T23:29:56.310

Reputation: 913

Use substring(3) to allow you to remove the space before it and save a byte. – Value Ink – 2019-05-22T18:39:51.777

0

AutoIt, 45

Msgbox(0,0,"Hi "&$cmdLine[2]&", I'm AutoIt")

Grabs the second word from the command line and puts it in a popup. (Must be compiled to exe)

seadoggie01

Posted 2019-05-20T23:29:56.310

Reputation: 181

What happens if there's more than two words, such as with the test case for I'm a programmer? I don't have the language installed. – Value Ink – 2019-05-22T18:41:02.143

0

TeX, 48 43 bytes

Yes I could save a byte by writing TeX instead of \TeX, but it seems a shame.

\def\s[#1]#2#3#4{}\def~[#1]{Hi\s[]#1, I'm \TeX!}

Update: saved 3 5 bytes thanks to fixed pattern matching.

\def\s[]I'm{}\def~[#1]{Hi\s[]#1, I'm \TeX!}

Test file

\def\s[]I'm{}\def~[#1]{Hi\s[]#1, I'm \TeX!}
~[I'm amazing]
~[I'm hungry]
~[I'm tired]
~[I'm fat]
~[I'm a programmer]
~[I'm a question-writer]
~[I'm a Stack-Overflow-er]
\bye

Output: Hi amazing, I'm TeX! Hi hungry, I'm TeX! Hi tired, I'm TeX! Hi fat, I'm TeX! Hi a programmer, I'm TeX! Hi a question-writer, I'm TeX! Hi a Stack-Overflow-er, I'm TeX!

Try it online!

John Gowers

Posted 2019-05-20T23:29:56.310

Reputation: 463

0

Gema, 20 19 characters

<G>*=Hi*, $1 Gema\!

Sample run:

bash-4.4$ echo -n "I'm amazing" | gema '<G>*=Hi*, $1 Gema\!'
Hi amazing, I'm Gema!

bash-4.4$ echo -n "I'm a programmer" | gema '<G>*=Hi*, $1 Gema\!'
Hi a programmer, I'm Gema!

Try it online!

manatwork

Posted 2019-05-20T23:29:56.310

Reputation: 17 865

0

Rexx (Regina), 35 bytes

say"Hi"substr(arg(1),4)", I'm Rexx"

Try it online!

theblitz

Posted 2019-05-20T23:29:56.310

Reputation: 1 201

0

Bean, 30 bytes

00000000: 56d8 8100 d3d0 80a0 5d20 8081 253c 5881  VØ..ÓÐ. ] ..%<X.
00000010: 01c8 69ac a0c9 a7ed a0c2 e5e1 ee21       .Èi¬ É§í Âåáî!

Original JavaScript:

`Hi${a.slice(3)}, I'm Bean!`

The program takes the first line of raw input implicitly in a, removing the first three characters, and outputs the template above using that string.

Demo


Test Suite

00000000: 53d0 80d3 d080 a078 2080 8840 a05d 56d8  SÐ.ÓÐ. x ..@ ]VØ
00000010: 8100 d3d0 80a0 5d20 8081 253c 5881 0120  ..ÓÐ. ] ..%<X.. 
00000020: 807b 2381 02c8 69ac a0c9 a7ed a0c2 e5e1  .{#..Èi¬ É§í Âåá
00000030: ee21 0a                                  î!.

Original JavaScript:

_.map(a=>`Hi${a.slice(3)}, I'm Bean!`).join('\n')

The test suite takes all the lines of raw input implicitly in _, applies the first program to each line using map(), then outputs each result per line.

Demo

Patrick Roberts

Posted 2019-05-20T23:29:56.310

Reputation: 2 475

0

아희 (Aheui), 319 bytes

밦밚따밬다발빠받밠따따빠따따밟밢밙다다다분
뭏떠벓벑떠떠벐벌벋떠떠벉더너벅번뻐떠뻐떠벊
맣@섹뵗솬밯삭밧타뿌싿삳빠맣박밯빠싸주마붗
반밚따따두쪼@썽선처손@@@오섣멓서차소빠
성멓뻐섣멓@@@@@@희@먛@셔멓섣멓멓멓

Try it online!

Prints 아희(official Korean name of the language) instead of Aheui, so the code is quite long.

LegenDUST

Posted 2019-05-20T23:29:56.310

Reputation: 799

0

Assembly (gcc, x64, Linux), 315 bytes

h:.int 26952
s:.int 32
g:.asciz ", I'm GNU Assembler!\n"
.globl main
main:
mov %rdi, %r13
mov %rsi, %r14
lea h, %rdi
mov $0, %rax
call printf
mov $2, %r15
l:
lea s, %rdi
mov $0, %rax
call printf
mov (%r14, %r15, 8), %rdi
mov $0, %rax
call printf
inc %r15
cmp %r15, %r13
jg l
lea g, %rdi
mov $0, %rax
call printf
ret

Try it online!

Ungolfed:

.section .bss

.section .data

hi:
.asciz  "Hi"

space:
.asciz  " "

imgnuasm:
.asciz  ", I'm GNU Assembler!\n"

badArgumentCount:
.asciz  "Requires at least two arguments\n"


.section .text
.globl main
main:

cmpq $3, %rdi # must have at least two arguments
jl .error

movq %rdi, %r13 # save argc
movq %rsi, %r14 # save argv

leaq hi, %rdi
movq $0, %rax   #%rax holds how many xmm regs to be used in x86-64
call printf

movq $2, %r15 # because (%r14, %r15(==0), 8) is the program path and (%r14, %r15(==1), 8) is "I'm"

.loopbegin:

  leaq space, %rdi
  movq $0, %rax
  call printf

  movq (%r14, %r15, 8), %rdi #(%r14, %r15, 8)
  movq $0, %rax
  call printf

  incq %r15
  cmp %r15, %r13
  jg .loopbegin


  leaq imgnuasm, %rdi
  movq $0, %rax
  call printf

  jmp .done

.error:
  leaq badArgumentCount, %rdi
  movq $0, %rax #%rax holds how many xmm regs to be used in x86-64
  call printf

.done:
  movq $0, %rax # return 0 (success)
  ret

r3dapple

Posted 2019-05-20T23:29:56.310

Reputation: 11

0

k, 21 bytes

,[;", I'm k!"]"Hi",3_

Henry Henrinson

Posted 2019-05-20T23:29:56.310

Reputation: 509

0

C# .NET, 94 bytes

class P{static void Main(string[]a){System.Console.Write($"Hi {a[0].Substring(4)}, I'm C#");}}

Try Online

canttalkjustcode

Posted 2019-05-20T23:29:56.310

Reputation: 131

0

Clojure - 36 Bytes

#(str"Hi "(subs %4)", I'm Clojure!")

Trivial solution is trivial, probably has room for improvement

nihilazo

Posted 2019-05-20T23:29:56.310

Reputation: 477