petit script ruby qui transforme du texte en ascii art fonctionne avec toute la table ascii (pas utf-8) Usage: ruby ascii_art.rb <texte> OU ruby ascii_art (dans ce cas, le script utilise l'entrée standart)

形式
Plain text
投稿日時
2020-11-15 02:13
公開期間
無期限
  1. #!/usr/bin/env ruby
  2. def ascii_table()
  3. ctm_ascii = {}
  4. chars = [
  5. ' !"#$%&\'',
  6. '()*+,-./',
  7. '01234567',
  8. '89:;<=>?',
  9. '@ABCDEFG',
  10. 'HIJKLMNO',
  11. 'PQRSTUVW',
  12. 'XYZ[\\]^_',
  13. '`abcdefg',
  14. 'hijklmno',
  15. 'pqrstuvw',
  16. 'xyz{|}~'
  17. ].map(&:chars).flatten(1)
  18. asciis = [
  19. [['░░', '█', '█░█', '▄█▄█▄', '▄▀█▀', '█▀░▄▀', '▄▀▀▄░', '█'],
  20. ['░░', '▀', '░░░', '▄█▄█▄', '░█▀▄', '░▄▀░▄', '▄▀█░▄', '░'],
  21. ['░░', '▀', '░░░', '░▀░▀░', '▀▀▀░', '▀░░▀▀', '▀▄▄▀▄', '░']],
  22. [['▄▀', '▀▄', '▀▄▀', '░▄░', '░░', '░░░', '░', '░░█'],
  23. ['█░', '░█', '▀░▀', '▀█▀', '░▄', '▀▀▀', '░', '░█░'],
  24. ['░▀', '▀░', '░░░', '░░░', '▀░', '░░░', '▀', '▀░░']],
  25. [['▄▀█▄', '▄█░', '▄▀▀▄', '▄▀▀▄', '█░░█', '█▀▀', '▄▀▀░', '▀▀█'],
  26. ['██░█', '░█░', '░▄▀░', '▄░▀▄', '░▀▀█', '▀▀▄', '█▀▀▄', '░█░'],
  27. ['░▀▀░', '▀▀▀', '▀▀▀▀', '░▀▀░', '░░░▀', '▀▀▀', '░▀▀░', '░▀░']],
  28. [['▄▀▀▄', '▄▀▀▄', '░', '░▄', '░▄▀', '░░░', '▀▄░', '▀▀▄'],
  29. ['▄▀▀▄', '░▀▀█', '▀', '░▄', '▀▄░', '▀▀▀', '░▄▀', '░▀░'],
  30. ['░▀▀░', '░▀▀░', '▀', '▀░', '░░▀', '▀▀▀', '▀░░', '░▀░']],
  31. [['█▀▀▀█', '▄▀▀▄', '█▀▀▄', '▄▀▀▀', '█▀▀▄', '█▀▀▀', '█▀▀▀', '▄▀▀▀'],
  32. ['█░█▀█', '█▀▀█', '█▀▀▄', '█░░░', '█░░█', '█▀▀░', '█▀▀░', '█░▀█'],
  33. ['▀▀▀▀▀', '▀░░▀', '▀▀▀▀', '░▀▀▀', '▀▀▀▀', '▀▀▀▀', '▀░░░', '░▀▀▀']],
  34. [['█░░█', '▀█▀', '▀▀█▀', '█░▄▀', '█░░░', '█▄░▄█', '█▄░░█', '▄▀▀▄'],
  35. ['█▀▀█', '░█░', '▄░█░', '█▀▄░', '█░░░', '█░▀░█', '█░▀▄█', '█░░█'],
  36. ['▀░░▀', '▀▀▀', '▀▀▀░', '▀░░▀', '▀▀▀▀', '▀░░░▀', '▀░░░▀', '░▀▀░']],
  37. [['█▀▀█', '█▀▀█', '█▀▀█', '▄▀▀▀', '▀▀█▀▀', '█░░█', '█░░░█', '█░░░█'],
  38. ['█▀▀▀', '█░▄▀', '█▀▀▄', '░▀▀▄', '░░█░░', '█░░█', '▀▄░▄▀', '█▄▀▄█'],
  39. ['▀░░░', '▀▀░▀', '▀░░▀', '▀▀▀░', '░░▀░░', '▀▀▀▀', '░░▀░░', '▀░░░▀']],
  40. [['█░░█', '█▄░▄█', '▀▀▀█', '█▀', '█░░', '▀█', '▄▀▄', '░░░░'],
  41. ['▄▀▀▄', '░▀█▀░', '▄▀▀░', '█░', '░█░', '░█', '░░░', '░░░░'],
  42. ['▀░░▀', '░░▀░░', '▀▀▀▀', '▀▀', '░░▀', '▀▀', '░░░', '▀▀▀▀']],
  43. [['▀▄', '▄▀▀▄', '█▀▀▄', '▄▀▀▀', '█▀▀▄', '█▀▀▀', '█▀▀▀', '▄▀▀▀'],
  44. ['░░', '█▀▀█', '█▀▀▄', '█░░░', '█░░█', '█▀▀░', '█▀▀░', '█░▀█'],
  45. ['░░', '▀░░▀', '▀▀▀▀', '░▀▀▀', '▀▀▀▀', '▀▀▀▀', '▀░░░', '░▀▀▀']],
  46. [['█░░█', '▀█▀', '▀▀█▀', '█░▄▀', '█░░░', '█▄░▄█', '█▄░░█', '▄▀▀▄'],
  47. ['█▀▀█', '░█░', '▄░█░', '█▀▄░', '█░░░', '█░▀░█', '█░▀▄█', '█░░█'],
  48. ['▀░░▀', '▀▀▀', '▀▀▀░', '▀░░▀', '▀▀▀▀', '▀░░░▀', '▀░░░▀', '░▀▀░']],
  49. [['█▀▀█', '█▀▀█', '█▀▀█', '▄▀▀▀', '▀▀█▀▀', '█░░█', '█░░░█', '█░░░█'],
  50. ['█▀▀▀', '█░▄▀', '█▀▀▄', '░▀▀▄', '░░█░░', '█░░█', '▀▄░▄▀', '█▄▀▄█'],
  51. ['▀░░░', '▀▀░▀', '▀░░▀', '▀▀▀░', '░░▀░░', '▀▀▀▀', '░░▀░░', '▀░░░▀']],
  52. [['█░░█', '█▄░▄█', '▀▀▀█', '░█▀', '█', '▀█░', '░░░░'],
  53. ['▄▀▀▄', '░▀█▀░', '▄▀▀░', '▀▄░', '█', '░▄▀', '▄▀▄▀'],
  54. ['▀░░▀', '░░▀░░', '▀▀▀▀', '░▀▀', '▀', '▀▀░', '░░░░']]
  55. ].map(&:transpose).flatten(1)
  56. chars.zip(asciis).each do |char, ascii|
  57. ctm_ascii[char] = ascii
  58. end
  59. return ctm_ascii
  60. end
  61. def get_line_length(str, ctm_ascii)
  62. line_length = str.length > 0 ? 3 : 0
  63. str.chars.each do |char|
  64. next if char > '~' || char.ord < 0
  65. char_size = ctm_ascii[char][0].size == 0 ? 4 : ctm_ascii[char][0].size
  66. line_length += 1 + char_size
  67. end
  68. return line_length
  69. end
  70. def draw_line(str, ctm_ascii)
  71. blank = ['████',
  72. '████',
  73. '▀▀▀▀']
  74. 3.times do |line|
  75. print "░░"
  76. str.chars do |char|
  77. print ctm_ascii[char] ? ctm_ascii[char][line] == '' ? blank[line] : ctm_ascii[char][line] : "░░░░"
  78. print "░"
  79. end
  80. puts "░"
  81. end
  82. end
  83. def main(str)
  84. ctm_ascii = ascii_table()
  85. lines = str.split("\n")
  86. lines.each_with_index do |line, i|
  87. puts "░" * [get_line_length(line, ctm_ascii), get_line_length(lines[i == 0 ? i : i - 1], ctm_ascii)].max
  88. draw_line(line, ctm_ascii)
  89. end
  90. puts "░" * get_line_length(lines[-1], ctm_ascii)
  91. end
  92. main(ARGV.size > 0 ? ARGV[0] : $stdin.read)
ダウンロード 印刷用表示

このコピペの URL

JavaScript での埋め込み

iframe での埋め込み

元のテキスト