Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Perl Golf
Search
ynonperek
April 09, 2012
Programming
4
1.6k
Perl Golf
An introduction to golfind
ynonperek
April 09, 2012
Tweet
Share
More Decks by ynonperek
See All by ynonperek
QtRuby for Qt Developers
ynonperek
0
180
Qt Hybrid Apps
ynonperek
1
180
QtRuby In Action
ynonperek
1
120
Cool CPAN Modules
ynonperek
2
580
Advanced Perl Moose
ynonperek
4
2.5k
Ruby Desktop Apps with Qt
ynonperek
1
510
git
ynonperek
3
760
Concurrency In Qt Applications
ynonperek
1
230
Moose Design Patterns
ynonperek
4
380
Other Decks in Programming
See All in Programming
AppDeveloperCon 2024 EU: Building polyglot developer experiences in 2024
salaboy
0
370
htmx is fun!
codehex
2
190
document.write再考
brn
5
2.5k
LPIXEL×CADDi_kaerururu
kaerururu
3
300
WinUI 3デモ - "CommunityToolkit.Mvvm"NuGetパッケージ編
andrewkeepcoding
0
130
PHPでOfficeファイルを取り扱う! PHP Officeライブラリを プロダクトに組み込んだ話
hirobe1999
0
830
ONE WEDGE_Company_Information
1wedge
0
160
phpunit/php-code-coverageって何をしてるんだ #phperkaigi
o0h
PRO
2
210
プロンプトエンジニアリング入門
tomokusaba
2
960
設計の知識と技能で駆動するソフトウェア開発
masuda220
PRO
18
9.9k
せっかくモデル図描くのなら、嬉しいことが多い方がいいよね!
kuboaki
1
1.2k
PHP で読む楽しいコアダンプ
sji
0
240
Featured
See All Featured
Designing the Hi-DPI Web
ddemaree
275
33k
Typedesign – Prime Four
hannesfritz
36
2k
Building Better People: How to give real-time feedback that sticks.
wjessup
350
18k
Documentation Writing (for coders)
carmenintech
59
3.8k
Infographics Made Easy
chrislema
237
18k
The Invisible Customer
myddelton
114
12k
Fashionably flexible responsive web design (full day workshop)
malarkey
397
65k
Build The Right Thing And Hit Your Dates
maggiecrowley
23
1.9k
Writing Fast Ruby
sferik
619
59k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
319
20k
How to train your dragon (web standard)
notwaldorf
71
5.1k
The Mythical Team-Month
searls
214
42k
Transcript
Let’s Golf Thursday, May 3, 12
About Me • Ynon Perek • http://ynonperek.com • http://speakerdeck.com/u/ ynonperek
Thursday, May 3, 12
The Game A Competition to find the shortest — fewest
keystrokes perl code to solve a given problem Thursday, May 3, 12
The Rules • Count keystrokes (newlines matter) • No modules
• No external tools Thursday, May 3, 12
Why Golf ? Thursday, May 3, 12
Example: Head use strict; use warnings; use v5.14; my $counter
= 0; while (<>) { $counter += 1; print; last if $counter > 10; } Thursday, May 3, 12
We Can Do Better while (<>) { print; last if
$. > 10; } Thursday, May 3, 12
Yet a golfer would • Remember perl opts: -pe •
Remember range operator Thursday, May 3, 12
Yet a golfer would #!/usr/bin/perl -pe last if $. >
10 Thursday, May 3, 12
Yet a golfer would perl -pe '11..exit' Thursday, May 3,
12
And a true golfer... perl -pe '11..&' Thursday, May 3,
12
Some More Tricks • y///c Abigail’s length horror • $_
x= Larry’s boolean • }{ Abigail’s END for -pe • $\ Van-der Pijll print Thursday, May 3, 12
Challenge • Use previous tricks to print: • characters count
• words count • line count Thursday, May 3, 12
Challenge # Characters count perl -lpe '$\+=y///c}{' # Words count
perl -lpe '$\+=split}{' # Lines count perl -pe '$\=$.}{' Thursday, May 3, 12
Example: tail • Tail is harder, because we need to
remember previous lines • Can use an array Thursday, May 3, 12
Example: tail # tail using an array perl -e '@a=<>;print
@a[-10..-1]' Thursday, May 3, 12
Example: tail # Removing the array perl -e 'print ((<>)[-10..-1])'
Thursday, May 3, 12
Example: tail # Removing the array perl -e 'print ((<>)[-10..-1])'
Surprisingly, A true hacker can do better Thursday, May 3, 12
Example: tail # Recall the ~ perl -e 'print+(<>)[~9..-1]' Surprisingly,
A true hacker can do better Thursday, May 3, 12
Some More Tricks • $= Holds only int values. $==10/3
is the same as int(10/3) • $- Holds only positive values Thursday, May 3, 12
Example: $- perl -pe '$-=eval or&' 10+20 20+3 30-10 40-50
-5 1 4 5 Thursday, May 3, 12
Golf Classics • Find all anagrams in a word list.
• An anagram is two words made up of the same letters • Example: underflow - wonderful Thursday, May 3, 12
Anagrams #!/usr/bin/perl sub normalized { my ($word) = @_; my
@letters = split //, $word; return join '', sort @letters; } while (<>) { chomp; my $letters = normalized( $_ ); $words{ $letters } ||= []; push $words{ $letters }, $_; } print "@$_\n" for grep { @$_ > 1} values %words; Thursday, May 3, 12
Anagrams • Remove the sub • Prefer text over array-refs
• Prefer switches over code • Use short variable names Thursday, May 3, 12
Anagrams #!/usr/bin/perl -ln $w{ join '', sort split // }
.= "$_ "; }{ print for grep / ./, values %w; Thursday, May 3, 12
Anagrams • No need to join hash keys • Can
use regexp instead of split • Can use regexp instead of grep • Can use %h instead of values %h Thursday, May 3, 12
Anagrams #!/usr/bin/perl -ln $w{ 1, sort/./g } .= "$_ ";
}{/ ./&&print for %w; Thursday, May 3, 12
Golf Classic sub b{[@b=(abs||No,bottle."s"x!!++$_,of,beer),on,the,wall]} print "@{+b},\n@b,\nTake one down, pass it
around,\n@{+b}.\n" for-pop||-99..-1 99 bottles of beer on the wall, 99 bottles of beer, Take one down, pass it around, 98 bottles of beer on the wall. Thursday, May 3, 12
Non-perl Golf • http://vimgolf.com/ • http://codegolf.com/ Thursday, May 3, 12
What’s Next • Go to http:// terje2.frox25.no- ip.org/ • Download
the book Thursday, May 3, 12